Imported Upstream version 3.10.0
authorStefano Zacchiroli <zack@debian.org>
Wed, 13 Jun 2007 12:34:29 +0000 (12:34 +0000)
committerStefano Zacchiroli <zack@debian.org>
Wed, 13 Jun 2007 12:34:29 +0000 (12:34 +0000)
144 files changed:
Makefile
Makefile.nt
VERSION
_tags
asmcomp/power/emit.mlp
boot/myocamlbuild.boot
boot/ocamlc
boot/ocamldep
boot/ocamllex
build/boot-c-parts-windows.sh
build/boot-c-parts.sh
build/boot.sh
build/buildbot
build/camlp4-bootstrap.sh
build/camlp4-byte-only.sh
build/camlp4-native-only.sh
build/camlp4-targets.sh
build/distclean.sh
build/fastworld.sh
build/install.sh
build/mkconfig.sh
build/mkmyocamlbuild_config.sh
build/mkruntimedef.sh
build/myocamlbuild.sh
build/ocamlbuild-byte-only.sh
build/ocamlbuild-native-only.sh
build/otherlibs-targets.sh
build/partial-boot.sh
build/partial-install.sh
build/targets.sh
build/world.all.sh
build/world.byte.sh
build/world.native.sh
build/world.sh
byterun/config.h
byterun/globroots.c
byterun/globroots.h
camlp4/Camlp4/Camlp4Ast.partial.ml
camlp4/Camlp4/ErrorHandler.ml
camlp4/Camlp4/OCamlInitSyntax.ml
camlp4/Camlp4/PreCast.ml
camlp4/Camlp4/PreCast.mli
camlp4/Camlp4/Printers/DumpCamlp4Ast.ml
camlp4/Camlp4/Printers/DumpCamlp4Ast.mli
camlp4/Camlp4/Printers/DumpOCamlAst.ml
camlp4/Camlp4/Printers/DumpOCamlAst.mli
camlp4/Camlp4/Printers/Null.mli
camlp4/Camlp4/Printers/OCaml.ml
camlp4/Camlp4/Printers/OCaml.mli
camlp4/Camlp4/Printers/OCamlr.ml
camlp4/Camlp4/Printers/OCamlr.mli
camlp4/Camlp4/Register.ml
camlp4/Camlp4/Register.mli
camlp4/Camlp4/Sig.ml
camlp4/Camlp4/Struct.mlpack
camlp4/Camlp4/Struct/Camlp4Ast.mlast
camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml
camlp4/Camlp4/Struct/CleanAst.ml
camlp4/Camlp4/Struct/CommentFilter.mli
camlp4/Camlp4/Struct/DynAst.ml [new file with mode: 0644]
camlp4/Camlp4/Struct/EmptyPrinter.ml
camlp4/Camlp4/Struct/EmptyPrinter.mli
camlp4/Camlp4/Struct/FreeVars.ml
camlp4/Camlp4/Struct/Grammar/Context.ml
camlp4/Camlp4/Struct/Grammar/Parser.mli [new file with mode: 0644]
camlp4/Camlp4/Struct/Grammar/Print.ml
camlp4/Camlp4/Struct/Lexer.mll
camlp4/Camlp4/Struct/Quotation.ml
camlp4/Camlp4/Struct/Token.ml
camlp4/Camlp4/Struct/Warning.ml [deleted file]
camlp4/Camlp4Bin.ml
camlp4/Camlp4Filters/Camlp4FoldGenerator.ml
camlp4/Camlp4Filters/Camlp4LocationStripper.ml
camlp4/Camlp4Filters/Camlp4MapGenerator.ml
camlp4/Camlp4Filters/Camlp4Tracer.ml
camlp4/Camlp4Filters/Camlp4TrashRemover.ml
camlp4/Camlp4Parsers/Camlp4GrammarParser.ml
camlp4/Camlp4Parsers/Camlp4MacroParser.ml
camlp4/Camlp4Parsers/Camlp4OCamlOriginalQuotationExpander.ml
camlp4/Camlp4Parsers/Camlp4OCamlParser.ml
camlp4/Camlp4Parsers/Camlp4OCamlReloadedParser.ml [new file with mode: 0644]
camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml
camlp4/Camlp4Parsers/Camlp4OCamlRevisedParserParser.ml
camlp4/Camlp4Parsers/Camlp4OCamlRevisedQuotationExpander.ml
camlp4/Camlp4Parsers/Camlp4QuotationCommon.ml
camlp4/Camlp4Top/Rprint.ml
camlp4/Camlp4Top/Top.ml
camlp4/Camlp4_config.ml
camlp4/Camlp4_config.mli
camlp4/boot/Camlp4.ml
camlp4/boot/Camlp4.ml4
camlp4/boot/Camlp4Ast.ml
camlp4/boot/camlp4boot.ml
camlp4/boot/camlp4boot.ml4
camlp4/camlp4fulllib.mllib [new file with mode: 0644]
camlp4/examples/_tags [new file with mode: 0644]
camlp4/examples/apply_operator.ml [new file with mode: 0644]
camlp4/examples/apply_operator_test.ml [new file with mode: 0644]
camlp4/examples/lambda_quot.ml [new file with mode: 0644]
camlp4/examples/lambda_test.ml [new file with mode: 0644]
camlp4/examples/macros.ml [new file with mode: 0644]
camlp4/examples/parse_files.ml [new file with mode: 0644]
camlp4/examples/test_macros.ml [new file with mode: 0644]
camlp4/examples/test_type_quotation.ml [new file with mode: 0644]
camlp4/examples/type_quotation.ml [new file with mode: 0644]
config/Makefile.msvc
configure
man/ocaml.m
myocamlbuild.ml
ocamlbuild/ChangeLog
ocamlbuild/Makefile
ocamlbuild/command.ml
ocamlbuild/command.mli
ocamlbuild/examples/example_with_C/_tags [new file with mode: 0644]
ocamlbuild/examples/example_with_C/fib.ml [new file with mode: 0644]
ocamlbuild/examples/example_with_C/fibwrap.c [new file with mode: 0644]
ocamlbuild/examples/example_with_C/main.c [new file with mode: 0644]
ocamlbuild/examples/example_with_C/myocamlbuild.ml [new file with mode: 0644]
ocamlbuild/examples/example_with_C/x.ml [new file with mode: 0644]
ocamlbuild/main.ml
ocamlbuild/my_std.ml
ocamlbuild/my_unix.ml
ocamlbuild/ocaml_compiler.ml
ocamlbuild/ocaml_specific.ml
ocamlbuild/ocaml_tools.ml
ocamlbuild/ocaml_utils.ml
ocamlbuild/ocamldep.ml
ocamlbuild/ocamldep.mli
ocamlbuild/options.ml
ocamlbuild/pathname.ml
ocamlbuild/rule.ml
ocamlbuild/rule.mli
ocamlbuild/signatures.mli
otherlibs/labltk/support/Makefile
otherlibs/labltk/support/tkthread.ml
otherlibs/labltk/support/tkthread.mli
parsing/printast.ml
stdlib/scanf.mli
typing/oprint.ml
typing/typecore.ml
typing/typedecl.ml
typing/typemod.ml
typing/typetexp.ml
win32caml/inria.h

index e9b3014490ae23de9f8eecdf9a5ee7abea52e281..3f627404d884140796ed386f3d54fb97c249ef49 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@
 #                                                                       #
 #########################################################################
 
-# $Id: Makefile,v 1.207.4.1 2007/03/05 09:18:22 pouillar Exp $
+# $Id: Makefile,v 1.207.4.4 2007/04/16 16:01:59 pouillar Exp $
 
 # The main Makefile
 
@@ -145,7 +145,7 @@ coreboot:
        $(MAKE) promote-cross
 # Rebuild ocamlc and ocamllex (run on byterun/ocamlrun)
        $(MAKE) partialclean
-       $(MAKE) ocamlc ocamllex
+       $(MAKE) ocamlc ocamllex ocamltools
 # Rebuild the library (using byterun/ocamlrun ./ocamlc)
        $(MAKE) library-cross
 # Promote the new compiler and the new runtime
@@ -189,7 +189,7 @@ backup:
        mkdir boot/Saved
        mv boot/Saved.prev boot/Saved/Saved.prev
        cp boot/ocamlrun$(EXE) boot/Saved
-       mv boot/ocamlc boot/ocamllex boot/ocamlyacc$(EXE) boot/Saved
+       mv boot/ocamlc boot/ocamllex boot/ocamlyacc$(EXE) boot/ocamldep boot/Saved
        cd boot; cp $(LIBFILES) Saved
 
 # Promote the newly compiled system to the rank of cross compiler
@@ -198,6 +198,7 @@ promote-cross:
        cp ocamlc boot/ocamlc
        cp lex/ocamllex boot/ocamllex
        cp yacc/ocamlyacc$(EXE) boot/ocamlyacc$(EXE)
+       cp tools/ocamldep boot/ocamldep
        cd stdlib; cp $(LIBFILES) ../boot
 
 # Promote the newly compiled system to the rank of bootstrap compiler
@@ -213,7 +214,7 @@ restore:
 
 # Check if fixpoint reached
 compare:
-       @if cmp boot/ocamlc ocamlc && cmp boot/ocamllex lex/ocamllex; \
+       @if cmp boot/ocamlc ocamlc && cmp boot/ocamllex lex/ocamllex && cmp boot/ocamldep tools/ocamldep; \
        then echo "Fixpoint reached, bootstrap succeeded."; \
         else echo "Fixpoint not reached, try one more bootstrapping cycle."; \
        fi
@@ -261,7 +262,7 @@ install: FORCE
        if test -f debugger/ocamldebug; then (cd debugger; $(MAKE) install); \
           else :; fi
        cp config/Makefile $(LIBDIR)/Makefile.config
-       ./build/partial-install.sh
+       BINDIR=$(BINDIR) LIBDIR=$(LIBDIR) PREFIX=$(PREFIX) ./build/partial-install.sh
 
 # Installation of the native-code compiler
 installopt:
index 91e9ed8eee2ae4fb485fa4f8898e62144099b0c9..869077723898bcb1848e55959120d76d4fc4e04b 100644 (file)
@@ -10,7 +10,7 @@
 #                                                                       #
 #########################################################################
 
-# $Id: Makefile.nt,v 1.102.4.1 2007/03/05 09:18:22 pouillar Exp $
+# $Id: Makefile.nt,v 1.102.4.3 2007/04/16 16:01:59 pouillar Exp $
 
 # The main Makefile
 
@@ -131,7 +131,7 @@ bootstrap:
        $(MAKEREC) promote-cross
 # Rebuild ocamlc and ocamllex (run on byterun/ocamlrun)
        $(MAKEREC) partialclean
-       $(MAKEREC) ocamlc ocamllex
+       $(MAKEREC) ocamlc ocamllex ocamltools
 # Rebuild the library (using byterun/ocamlrun ./ocamlc)
        $(MAKEREC) library-cross
 # Promote the new compiler and the new runtime
@@ -166,7 +166,7 @@ backup:
        mkdir boot/Saved
        mv boot/Saved.prev boot/Saved/Saved.prev
        cp boot/ocamlrun.exe boot/Saved/ocamlrun.exe
-       cd boot ; mv ocamlc ocamllex ocamlyacc.exe Saved
+       cd boot ; mv ocamlc ocamllex ocamldep ocamlyacc.exe Saved
        cd boot ; cp $(LIBFILES) Saved
 
 # Promote the newly compiled system to the rank of cross compiler
@@ -175,6 +175,7 @@ promote-cross:
        cp ocamlc boot/ocamlc
        cp lex/ocamllex boot/ocamllex
        cp yacc/ocamlyacc.exe boot/ocamlyacc.exe
+       cp tools/ocamldep boot/ocamldep
        cd stdlib ; cp $(LIBFILES) ../boot
 
 # Promote the newly compiled system to the rank of bootstrap compiler
@@ -192,6 +193,7 @@ restore:
 compare:
        - cmp -i 4096 boot/ocamlc ocamlc
        - cmp -i 4096 boot/ocamllex lex/ocamllex
+       - cmp -i 4096 boot/ocamldep tools/ocamldep
 
 # Remove old bootstrap compilers
 cleanboot:
diff --git a/VERSION b/VERSION
index 7f01271297ca296f9d0661fb6e08512f8a48736a..f0b88bc2e23f1f6726a29dc3f483322a83235ce9 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
-3.10.0+beta
+3.10.0
 
 # The version string is the first line of this file.
 # It must be in the format described in stdlib/sys.mli
 
-# $Id: VERSION,v 1.2.2.1 2007/03/05 15:45:05 xleroy Exp $
+# $Id: VERSION,v 1.2.2.4 2007/05/13 15:13:25 xleroy Exp $
diff --git a/_tags b/_tags
index 1ab6035fb222a5dad7ee57f9abc371d7fb56bd4a..6dd67f0e10c20f745167af5827d594620c593fa0 100644 (file)
--- a/_tags
+++ b/_tags
@@ -23,6 +23,7 @@ true: use_stdlib
 
 "toplevel/topstart.byte": linkall
 
+<ocamldoc/**>: -debug
 <ocamldoc/*.ml>: ocamldoc_sources
 <ocamldoc/*.ml*>: include_unix, include_str, include_dynlink
 "ocamldoc/odoc.byte": use_unix, use_str, use_dynlink
@@ -36,6 +37,7 @@ true: use_stdlib
 <camlp4/Camlp4Printers/**.ml>: include_unix
 "camlp4/Camlp4/Struct/DynLoader.ml": include_dynlink
 <camlp4/Camlp4Top/**>: include_toplevel
+<camlp4/camlp4{,boot,o,r,of,rf,oof,orf}.byte>: -debug
 
 <ocamlbuild/*>: -warn_Alez, include_unix
 
index da8b67a0f4705091c25e7650ade97108887ee865..d1d397ec1dbf281b3a81c9b0cd9d0f07e00588de 100644 (file)
@@ -10,7 +10,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: emit.mlp,v 1.23 2007/01/29 12:10:50 xleroy Exp $ *)
+(* $Id: emit.mlp,v 1.23.4.1 2007/05/10 16:41:12 xleroy Exp $ *)
 
 (* Emission of PowerPC assembly code *)
 
@@ -312,12 +312,6 @@ let tailrec_entry_point = ref 0
 let defined_functions = ref StringSet.empty
 (* Label of glue code for calling the GC *)
 let call_gc_label = ref 0
-(* Label of jump table *)
-let lbl_jumptbl = ref 0
-(* List of all labels in jumptable (reverse order) *)
-let jumptbl_entries = ref []
-(* Number of jumptable entries *)
-let num_jumptbl_entries = ref 0
 
 (* Fixup conditional branches that exceed hardware allowed range *)
 
@@ -746,19 +740,20 @@ let rec emit_instr i dslot =
         | Some lbl -> `        bgt     {emit_label lbl}\n`
         end
     | Lswitch jumptbl ->
-        if !lbl_jumptbl = 0 then lbl_jumptbl := new_label();
-        `      addis   {emit_gpr 11}, 0, {emit_upper emit_label !lbl_jumptbl}\n`;
-        `      addi    {emit_gpr 11}, {emit_gpr 11}, {emit_lower emit_label !lbl_jumptbl}\n`;
-        `      addi    {emit_gpr 0}, {emit_reg i.arg.(0)}, {emit_int !num_jumptbl_entries}\n`;
-        `      {emit_string slgi}      {emit_gpr 0}, {emit_gpr 0}, 2\n`;
+        let lbl = new_label() in
+        `      addis   {emit_gpr 11}, 0, {emit_upper emit_label lbl}\n`;
+        `      addi    {emit_gpr 11}, {emit_gpr 11}, {emit_lower emit_label lbl}\n`;
+        `      {emit_string slgi}      {emit_gpr 0}, {emit_reg i.arg.(0)}, 2\n`;
         `      {emit_string lwa}x      {emit_gpr 0}, {emit_gpr 11}, {emit_gpr 0}\n`;
         `      add     {emit_gpr 0}, {emit_gpr 11}, {emit_gpr 0}\n`;
         `      mtctr   {emit_gpr 0}\n`;
         `      bctr\n`;
+        emit_string rodata_space;
+        `{emit_label lbl}:`;
         for i = 0 to Array.length jumptbl - 1 do
-          jumptbl_entries := jumptbl.(i) :: !jumptbl_entries;
-          incr num_jumptbl_entries
-        done
+          `    .long   {emit_label jumptbl.(i)} - {emit_label lbl}\n`
+        done;
+        emit_string code_space
     | Lsetuptrap lbl ->
         `      bl      {emit_label lbl}\n`
     | Lpushtrap ->
@@ -926,9 +921,6 @@ let data l =
 let begin_assembly() =
   defined_functions := StringSet.empty;
   external_functions := StringSet.empty;
-  num_jumptbl_entries := 0;
-  jumptbl_entries := [];
-  lbl_jumptbl := 0;
   (* Emit the beginning of the segments *)
   let lbl_begin = Compilenv.make_symbol (Some "data_begin") in
   emit_string data_space;
@@ -940,15 +932,6 @@ let begin_assembly() =
   `{emit_symbol lbl_begin}:\n`
 
 let end_assembly() =
-  (* Emit the jump table *)
-  if !num_jumptbl_entries > 0 then begin
-    emit_string code_space;
-    `{emit_label !lbl_jumptbl}:\n`;
-    List.iter
-      (fun lbl -> `    .long   {emit_label lbl} - {emit_label !lbl_jumptbl}\n`)
-      (List.rev !jumptbl_entries);
-    jumptbl_entries := []
-  end;
   if pic_externals then
     (* Emit the pointers to external functions *)
     StringSet.iter emit_external !external_functions;
index a0aae97d580f755393271e172cf3fb280e038ee0..3187433c9466bb17f1000eeeae1ca41232793dc0 100755 (executable)
Binary files a/boot/myocamlbuild.boot and b/boot/myocamlbuild.boot differ
index 74dd44822d5196bac96e139aea5531e40ac7beb3..bccf3072ed31fcba969db108c34c82027b617623 100755 (executable)
Binary files a/boot/ocamlc and b/boot/ocamlc differ
index ef85504aa860ebcf64cc288cbe1e0d03e9879e4f..85d7bddff36c140355c0de8c0382363b5f290e7f 100755 (executable)
Binary files a/boot/ocamldep and b/boot/ocamldep differ
index 57dfd4a2050dc09468b7877084ca65af7e11cf5f..ab895f363fdde8e1df2d7533cc25d7a7eaeb7e39 100755 (executable)
Binary files a/boot/ocamllex and b/boot/ocamllex differ
index c8c06d42594c066b3eec05987339917843b39cb1..fb9120fee6eb25bc8abdb71de83b2e089a6a7dc7 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: boot-c-parts-windows.sh,v 1.2.4.3 2007/03/12 11:58:48 pouillar Exp $
 cd `dirname $0`/..
 set -ex
 
index 921f595a53630adc09f8d7dcc0678dfe0fc83954..eacb448834210a1a030a14bfb29d4503a1fb633a 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: boot-c-parts.sh,v 1.1.4.3 2007/03/12 11:58:48 pouillar Exp $
 cd `dirname $0`/..
 set -ex
 
index 97509646d46dcd2d264faa478fb3e849d2965282..ffbfc3363ada159e6ac99494bb0c369425539393 100755 (executable)
@@ -1,12 +1,23 @@
 #!/bin/sh
+# $Id: boot.sh,v 1.1.4.3 2007/05/14 13:59:36 pouillar Exp $
 cd `dirname $0`/..
 set -ex
-./boot/ocamlrun boot/myocamlbuild.boot boot/stdlib.cma boot/std_exit.cmo
-boot/ocamlrun boot/myocamlbuild.boot -log _boot_log1 \
+TAGLINE='true: -use_stdlib'
+./boot/ocamlrun boot/myocamlbuild.boot \
+  -tag-line "$TAG_LINE" \
+  boot/stdlib.cma boot/std_exit.cmo
+
+boot/ocamlrun boot/myocamlbuild.boot \
+  -tag-line "$TAG_LINE" -log _boot_log1 \
   ocamlbuild/ocamlbuildlightlib.cma ocamlbuild/ocamlbuildlight.byte
+
 rm -f _build/myocamlbuild
+
 boot/ocamlrun boot/myocamlbuild.boot \
   -just-plugin -install-lib-dir _build/ocamlbuild -byte-plugin
+
 cp _build/myocamlbuild boot/myocamlbuild
-./boot/ocamlrun boot/myocamlbuild $@ -log _boot_log2 \
-  boot/camlheader ocamlc
+
+./boot/ocamlrun boot/myocamlbuild \
+  -tag-line "$TAG_LINE" \
+  $@ -log _boot_log2 boot/camlheader ocamlc
index af9b99d7f3fc9dd987705dbde0ec9a9109cf5f1a..c755852fe66ea381d148c8933c94b17b13c91a2b 100755 (executable)
@@ -104,4 +104,6 @@ case "$mode" in
     ;;
 esac
 
+(cat _build/not_installed || bad) 2>&1 | log not_installed
+
 finish
index e1458475ee5aa27b460424d53c5ecae7b2208a50..f931f14af412db3b659d4dd3f780806eea92ed8d 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: camlp4-bootstrap.sh,v 1.2.2.2 2007/03/26 12:55:33 pouillar Exp $
 set -e
 cd `dirname $0`/..
 
@@ -25,4 +26,9 @@ $OCAMLBUILD $TMPTARGETS $TARGETS
 for t in $TARGETS; do
   echo promote $t
   cp _build/$t camlp4/boot/`basename $t`
+  if cmp _build/$t camlp4/boot/`basename $t`.old; then
+    echo fixpoint for $t
+  else
+    echo $t is different, you should rebootstrap it by cleaning, building and call this script
+  fi
 done
index ce30731871f791c689e3d07a0db5d19f1ced61cc..220e51bf95f82963493dcc0b26364991c1500a78 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: camlp4-byte-only.sh,v 1.2.4.3 2007/03/12 11:58:48 pouillar Exp $
 set -e
 OCAMLBUILD_PARTIAL="true"
 export OCAMLBUILD_PARTIAL
index b0865b3b5b285e328e3d81ebbc4acd43efcadc3c..e3d49e9bf9d191ae5cdc9c148e19c8d69940d802 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: camlp4-native-only.sh,v 1.2.4.4 2007/03/12 11:58:48 pouillar Exp $
 set -e
 OCAMLBUILD_PARTIAL="true"
 export OCAMLBUILD_PARTIAL
index 32b55db64bab62094550448ac2506c1367aa293d..53edde4a42f9d1199a938288cf2b1ebb15c84a8c 100644 (file)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: camlp4-targets.sh,v 1.1.4.2 2007/03/12 11:58:48 pouillar Exp $
 CAMLP4_COMMON="\
   camlp4/Camlp4/Camlp4Ast.partial.ml \
   camlp4/boot/camlp4boot.byte"
@@ -7,13 +8,15 @@ CAMLP4_BYTE="$CAMLP4_COMMON \
   camlp4/Camlp4Top.cmo \
   camlp4/camlp4prof.byte$EXE \
   camlp4/mkcamlp4.byte$EXE \
-  camlp4/camlp4.byte$EXE"
+  camlp4/camlp4.byte$EXE \
+  camlp4/camlp4fulllib.cma"
 CAMLP4_NATIVE="$CAMLP4_COMMON \
   camlp4/Camlp4.cmx \
   camlp4/Camlp4Top.cmx \
   camlp4/camlp4prof.native$EXE \
   camlp4/mkcamlp4.native$EXE \
-  camlp4/camlp4.native$EXE"
+  camlp4/camlp4.native$EXE \
+  camlp4/camlp4fulllib.cmxa"
 
 for i in camlp4boot camlp4r camlp4rf camlp4o camlp4of camlp4oof camlp4orf; do
   CAMLP4_BYTE="$CAMLP4_BYTE camlp4/$i.byte$EXE camlp4/$i.cma"
index 302005c175df81fe19334226c664ecb662e8e0ef..5f3551a2a2f581df92b2a0246cc3d29435ca9c63 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: distclean.sh,v 1.4.2.5 2007/03/12 11:58:48 pouillar Exp $
 cd `dirname $0`/..
 set -ex
 (cd byterun && make clean) || :
index 1aae8f6f016f2b3d1c9ae9b2d899a908e785e1a1..7d1d7bd38b5f5b471bd4f3bb230d6bebb5541669 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: fastworld.sh,v 1.2.4.2 2007/03/12 11:58:48 pouillar Exp $
 cd `dirname $0`
 set -e
 ./mkconfig.sh
index 286e462ea63de13083b1b1aa5420ee1a3c45b610..13c4913b8e6b057168b0a9405f3831ac552b8ee0 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: install.sh,v 1.6.2.12 2007/04/05 08:12:39 pouillar Exp $
 set -e
 
 cd `dirname $0`/..
@@ -8,9 +9,11 @@ cd `dirname $0`/..
 not_installed=$PWD/_build/not_installed
 
 rm -f "$not_installed"
+touch "$not_installed"
 
 wontinstall() {
   echo "$1" >> "$not_installed"
+  echo "  don't install $1"
 }
 
 installbin() {
@@ -44,7 +47,9 @@ installlib() {
     dest="$2/`basename $1`"
     echo "  install library $dest"
     cp -f "$1" "$2"
-    ranlib "$dest"
+    if [ "$RANLIB" != "" ]; then
+      "$RANLIB" "$dest"
+    fi
   else
     wontinstall "$1"
   fi
@@ -88,15 +93,14 @@ mkdir -p $LIBDIR/threads
 mkdir -p $LIBDIR/labltk
 mkdir -p $LIBDIR/ocamlbuild
 mkdir -p $LIBDIR/ocamldoc
+mkdir -p $LIBDIR/ocamldoc/custom
 mkdir -p $STUBLIBDIR
 mkdir -p $MANDIR/man1
 mkdir -p $MANDIR/man3
 mkdir -p $MANDIR/man$MANEXT
 
 echo "Installing core libraries..."
-installlibdir byterun/libcamlrun.$A byterun/libcamlrunp.$A \
-              asmrun/libasmrun.$A asmrun/libasmrunp.$A \
-              asmrun/libasmrunp.$A asmrun/libasmrunpp.$A \
+installlibdir byterun/libcamlrun.$A asmrun/libasmrun.$A asmrun/libasmrunp.$A \
               $LIBDIR
 
 PUBLIC_INCLUDES="\
@@ -110,15 +114,21 @@ for i in $PUBLIC_INCLUDES; do
 done
 cd ..
 
-installdir otherlibs/win32unix/unixsupport.h otherlibs/unix/unixsupport.h \
+WIN32=""
+if [ "x$EXE" = "x.exe" ]; then
+  installbin win32caml/ocamlwin.exe $PREFIX/OCamlWin.exe
+  installdir byterun/ocamlrun.dll $BINDIR
+  WIN32=win32
+fi
+
+installdir otherlibs/"$WIN32"unix/unixsupport.h \
+           otherlibs/bigarray/bigarray.h \
            $LIBDIR/caml
 
-installdir byterun/ocamlrun.dll yacc/ocamlyacc byterun/ocamlrun $BINDIR
+installdir yacc/ocamlyacc byterun/ocamlrun $BINDIR
 
 installdir byterun/ld.conf $LIBDIR
 
-installbin win32caml/ocamlwin.exe $PREFIX/OCamlWin.exe
-
 cd _build
 
 echo "Installing the toplevel and compilers..."
@@ -133,7 +143,7 @@ set=set # coloration workaround
 echo "Installing the standard library..."
 installdir \
   stdlib/stdlib.cma \
-  stdlib/stdlib.cmxa stdlib/stdlibp.cmxa \
+  stdlib/stdlib.cmxa stdlib/stdlib.p.cmxa \
   stdlib/camlheader \
   stdlib/camlheader_ur \
   stdlib/std_exit.cm[io] \
@@ -180,54 +190,54 @@ installdir \
   stdlib/sys.cmi stdlib/sys.mli \
   stdlib/weak.cmi stdlib/weak.mli \
   stdlib/$set.cmi stdlib/$set.mli \
- stdlib/arg.cmx stdlib/argp.cmx stdlib/arg.$O stdlib/argp.$O \
- stdlib/array.cmx stdlib/arrayp.cmx stdlib/array.$O stdlib/arrayp.$O \
- stdlib/arrayLabels.cmx stdlib/arrayLabelsp.cmx stdlib/arrayLabels.$O stdlib/arrayLabelsp.$O \
- stdlib/buffer.cmx stdlib/bufferp.cmx stdlib/buffer.$O stdlib/bufferp.$O \
- stdlib/callback.cmx stdlib/callbackp.cmx stdlib/callback.$O stdlib/callbackp.$O \
- stdlib/camlinternalMod.cmx stdlib/camlinternalModp.cmx stdlib/camlinternalMod.$O stdlib/camlinternalModp.$O \
- stdlib/camlinternalOO.cmx stdlib/camlinternalOOp.cmx stdlib/camlinternalOO.$O stdlib/camlinternalOOp.$O \
- stdlib/char.cmx stdlib/charp.cmx stdlib/char.$O stdlib/charp.$O \
- stdlib/complex.cmx stdlib/complexp.cmx stdlib/complex.$O stdlib/complexp.$O \
- stdlib/digest.cmx stdlib/digestp.cmx stdlib/digest.$O stdlib/digestp.$O \
- stdlib/filename.cmx stdlib/filenamep.cmx stdlib/filename.$O stdlib/filenamep.$O \
- stdlib/format.cmx stdlib/formatp.cmx stdlib/format.$O stdlib/formatp.$O \
- stdlib/gc.cmx stdlib/gcp.cmx stdlib/gc.$O stdlib/gcp.$O \
- stdlib/genlex.cmx stdlib/genlexp.cmx stdlib/genlex.$O stdlib/genlexp.$O \
- stdlib/hashtbl.cmx stdlib/hashtblp.cmx stdlib/hashtbl.$O stdlib/hashtblp.$O \
- stdlib/int32.cmx stdlib/int32p.cmx stdlib/int32.$O stdlib/int32p.$O \
- stdlib/int64.cmx stdlib/int64p.cmx stdlib/int64.$O stdlib/int64p.$O \
- stdlib/lazy.cmx stdlib/lazyp.cmx stdlib/lazy.$O stdlib/lazyp.$O \
- stdlib/lexing.cmx stdlib/lexingp.cmx stdlib/lexing.$O stdlib/lexingp.$O \
- stdlib/list.cmx stdlib/listp.cmx stdlib/list.$O stdlib/listp.$O \
- stdlib/listLabels.cmx stdlib/listLabelsp.cmx stdlib/listLabels.$O stdlib/listLabelsp.$O \
- stdlib/map.cmx stdlib/mapp.cmx stdlib/map.$O stdlib/mapp.$O \
- stdlib/marshal.cmx stdlib/marshalp.cmx stdlib/marshal.$O stdlib/marshalp.$O \
- stdlib/moreLabels.cmx stdlib/moreLabelsp.cmx stdlib/moreLabels.$O stdlib/moreLabelsp.$O \
- stdlib/nativeint.cmx stdlib/nativeintp.cmx stdlib/nativeint.$O stdlib/nativeintp.$O \
- stdlib/obj.cmx stdlib/objp.cmx stdlib/obj.$O stdlib/objp.$O \
- stdlib/oo.cmx stdlib/oop.cmx stdlib/oo.$O stdlib/oop.$O \
- stdlib/parsing.cmx stdlib/parsingp.cmx stdlib/parsing.$O stdlib/parsingp.$O \
- stdlib/pervasives.cmx stdlib/pervasivesp.cmx stdlib/pervasives.$O stdlib/pervasivesp.$O \
- stdlib/printexc.cmx stdlib/printexcp.cmx stdlib/printexc.$O stdlib/printexcp.$O \
- stdlib/printf.cmx stdlib/printfp.cmx stdlib/printf.$O stdlib/printfp.$O \
- stdlib/queue.cmx stdlib/queuep.cmx stdlib/queue.$O stdlib/queuep.$O \
- stdlib/random.cmx stdlib/randomp.cmx stdlib/random.$O stdlib/randomp.$O \
- stdlib/scanf.cmx stdlib/scanfp.cmx stdlib/scanf.$O stdlib/scanfp.$O \
- stdlib/sort.cmx stdlib/sortp.cmx stdlib/sort.$O stdlib/sortp.$O \
- stdlib/stack.cmx stdlib/stackp.cmx stdlib/stack.$O stdlib/stackp.$O \
- stdlib/stdLabels.cmx stdlib/stdLabelsp.cmx stdlib/stdLabels.$O stdlib/stdLabelsp.$O \
- stdlib/std_exit.cmx stdlib/std_exitp.cmx stdlib/std_exit.$O stdlib/std_exitp.$O \
- stdlib/stream.cmx stdlib/streamp.cmx stdlib/stream.$O stdlib/streamp.$O \
- stdlib/string.cmx stdlib/stringp.cmx stdlib/string.$O stdlib/stringp.$O \
- stdlib/stringLabels.cmx stdlib/stringLabelsp.cmx stdlib/stringLabels.$O stdlib/stringLabelsp.$O \
- stdlib/sys.cmx stdlib/sysp.cmx stdlib/sys.$O stdlib/sysp.$O \
- stdlib/weak.cmx stdlib/weakp.cmx stdlib/weak.$O stdlib/weakp.$O \
- stdlib/$set.cmx stdlib/$setp.cmx stdlib/$set.$O stdlib/$setp.$O \
+ stdlib/arg.cmx stdlib/arg.p.cmx stdlib/arg.$O stdlib/arg.p.$O \
+ stdlib/array.cmx stdlib/array.p.cmx stdlib/array.$O stdlib/array.p.$O \
+ stdlib/arrayLabels.cmx stdlib/arrayLabels.p.cmx stdlib/arrayLabels.$O stdlib/arrayLabels.p.$O \
+ stdlib/buffer.cmx stdlib/buffer.p.cmx stdlib/buffer.$O stdlib/buffer.p.$O \
+ stdlib/callback.cmx stdlib/callback.p.cmx stdlib/callback.$O stdlib/callback.p.$O \
+ stdlib/camlinternalMod.cmx stdlib/camlinternalMod.p.cmx stdlib/camlinternalMod.$O stdlib/camlinternalMod.p.$O \
+ stdlib/camlinternalOO.cmx stdlib/camlinternalOO.p.cmx stdlib/camlinternalOO.$O stdlib/camlinternalOO.p.$O \
+ stdlib/char.cmx stdlib/char.p.cmx stdlib/char.$O stdlib/char.p.$O \
+ stdlib/complex.cmx stdlib/complex.p.cmx stdlib/complex.$O stdlib/complex.p.$O \
+ stdlib/digest.cmx stdlib/digest.p.cmx stdlib/digest.$O stdlib/digest.p.$O \
+ stdlib/filename.cmx stdlib/filename.p.cmx stdlib/filename.$O stdlib/filename.p.$O \
+ stdlib/format.cmx stdlib/format.p.cmx stdlib/format.$O stdlib/format.p.$O \
+ stdlib/gc.cmx stdlib/gc.p.cmx stdlib/gc.$O stdlib/gc.p.$O \
+ stdlib/genlex.cmx stdlib/genlex.p.cmx stdlib/genlex.$O stdlib/genlex.p.$O \
+ stdlib/hashtbl.cmx stdlib/hashtbl.p.cmx stdlib/hashtbl.$O stdlib/hashtbl.p.$O \
+ stdlib/int32.cmx stdlib/int32.p.cmx stdlib/int32.$O stdlib/int32.p.$O \
+ stdlib/int64.cmx stdlib/int64.p.cmx stdlib/int64.$O stdlib/int64.p.$O \
+ stdlib/lazy.cmx stdlib/lazy.p.cmx stdlib/lazy.$O stdlib/lazy.p.$O \
+ stdlib/lexing.cmx stdlib/lexing.p.cmx stdlib/lexing.$O stdlib/lexing.p.$O \
+ stdlib/list.cmx stdlib/list.p.cmx stdlib/list.$O stdlib/list.p.$O \
+ stdlib/listLabels.cmx stdlib/listLabels.p.cmx stdlib/listLabels.$O stdlib/listLabels.p.$O \
+ stdlib/map.cmx stdlib/map.p.cmx stdlib/map.$O stdlib/map.p.$O \
+ stdlib/marshal.cmx stdlib/marshal.p.cmx stdlib/marshal.$O stdlib/marshal.p.$O \
+ stdlib/moreLabels.cmx stdlib/moreLabels.p.cmx stdlib/moreLabels.$O stdlib/moreLabels.p.$O \
+ stdlib/nativeint.cmx stdlib/nativeint.p.cmx stdlib/nativeint.$O stdlib/nativeint.p.$O \
+ stdlib/obj.cmx stdlib/obj.p.cmx stdlib/obj.$O stdlib/obj.p.$O \
+ stdlib/oo.cmx stdlib/oo.p.cmx stdlib/oo.$O stdlib/oo.p.$O \
+ stdlib/parsing.cmx stdlib/parsing.p.cmx stdlib/parsing.$O stdlib/parsing.p.$O \
+ stdlib/pervasives.cmx stdlib/pervasives.p.cmx stdlib/pervasives.$O stdlib/pervasives.p.$O \
+ stdlib/printexc.cmx stdlib/printexc.p.cmx stdlib/printexc.$O stdlib/printexc.p.$O \
+ stdlib/printf.cmx stdlib/printf.p.cmx stdlib/printf.$O stdlib/printf.p.$O \
+ stdlib/queue.cmx stdlib/queue.p.cmx stdlib/queue.$O stdlib/queue.p.$O \
+ stdlib/random.cmx stdlib/random.p.cmx stdlib/random.$O stdlib/random.p.$O \
+ stdlib/scanf.cmx stdlib/scanf.p.cmx stdlib/scanf.$O stdlib/scanf.p.$O \
+ stdlib/sort.cmx stdlib/sort.p.cmx stdlib/sort.$O stdlib/sort.p.$O \
+ stdlib/stack.cmx stdlib/stack.p.cmx stdlib/stack.$O stdlib/stack.p.$O \
+ stdlib/stdLabels.cmx stdlib/stdLabels.p.cmx stdlib/stdLabels.$O stdlib/stdLabels.p.$O \
+ stdlib/std_exit.cmx stdlib/std_exit.p.cmx stdlib/std_exit.$O stdlib/std_exit.p.$O \
+ stdlib/stream.cmx stdlib/stream.p.cmx stdlib/stream.$O stdlib/stream.p.$O \
+ stdlib/string.cmx stdlib/string.p.cmx stdlib/string.$O stdlib/string.p.$O \
+ stdlib/stringLabels.cmx stdlib/stringLabels.p.cmx stdlib/stringLabels.$O stdlib/stringLabels.p.$O \
+ stdlib/sys.cmx stdlib/sys.p.cmx stdlib/sys.$O stdlib/sys.p.$O \
+ stdlib/weak.cmx stdlib/weak.p.cmx stdlib/weak.$O stdlib/weak.p.$O \
+ stdlib/$set.cmx stdlib/$set.p.cmx stdlib/$set.$O stdlib/$set.p.$O \
   $LIBDIR
 
 installlibdir \
-  stdlib/stdlib.$A stdlib/stdlibp.$A \
+  stdlib/stdlib.$A stdlib/stdlib.p.$A \
   $LIBDIR
 
 echo "Installing ocamllex, ocamldebug..."
@@ -257,18 +267,16 @@ installdir \
   otherlibs/bigarray/bigarray.cma \
   otherlibs/dbm/dbm.cma \
   otherlibs/dynlink/dynlink.cma \
-  otherlibs/graph/graphics.cma otherlibs/win32/graph/graphics.cma \
+  otherlibs/"$WIN32"graph/graphics.cma \
   otherlibs/num/nums.cma \
   otherlibs/str/str.cma \
-  otherlibs/unix/unix.cma otherlibs/win32unix/unix.cma \
-  otherlibs/bigarray/bigarray.cmxa otherlibs/bigarray/bigarray.p.cmxa \
-  otherlibs/dbm/dbm.cmxa otherlibs/dbm/dbm.p.cmxa \
-  otherlibs/graph/graphics.cmxa otherlibs/graph/graphics.p.cmxa \
-  otherlibs/win32/graph/graphics.cmxa otherlibs/win32graph/graphics.p.cmxa \
-  otherlibs/num/nums.cmxa otherlibs/num/nums.p.cmxa \
-  otherlibs/str/str.cmxa otherlibs/str/str.p.cmxa \
-  otherlibs/unix/unix.cmxa otherlibs/unix/unix.p.cmxa \
-  otherlibs/win32unix/unix.cmxa otherlibs/win32unix/unix.p.cmxa \
+  otherlibs/"$WIN32"unix/unix.cma \
+  otherlibs/bigarray/bigarray.cmxa \
+  otherlibs/dbm/dbm.cmxa \
+  otherlibs/"$WIN32"graph/graphics.cmxa \
+  otherlibs/num/nums.cmxa \
+  otherlibs/str/str.cmxa \
+  otherlibs/"$WIN32"unix/unix.cmxa \
   toplevel/toplevellib.cma \
   otherlibs/systhreads/thread.mli \
   otherlibs/systhreads/mutex.mli \
@@ -327,7 +335,6 @@ installdir \
 installdir \
   otherlibs/systhreads/threads.cma \
   otherlibs/systhreads/threads.cmxa \
-  otherlibs/systhreads/threads.p.cmxa \
   otherlibs/systhreads/thread.cmi \
   otherlibs/systhreads/mutex.cmi \
   otherlibs/systhreads/condition.cmi \
@@ -338,13 +345,11 @@ installdir \
 installdir \
   otherlibs/bigarray/dllbigarray$EXT_DLL \
   otherlibs/dbm/dllmldbm$EXT_DLL \
-  otherlibs/graph/dllgraphics$EXT_DLL \
-  otherlibs/win32graph/dllgraphics$EXT_DLL \
+  otherlibs/"$WIN32"graph/dllgraphics$EXT_DLL \
   otherlibs/num/dllnums$EXT_DLL \
   otherlibs/str/dllstr$EXT_DLL \
   otherlibs/systhreads/dllthreads$EXT_DLL \
-  otherlibs/unix/dllunix$EXT_DLL \
-  otherlibs/win32unix/dllunix$EXT_DLL \
+  otherlibs/"$WIN32"unix/dllunix$EXT_DLL \
   otherlibs/threads/dllvmthreads$EXT_DLL \
   otherlibs/labltk/support/dlllabltk$EXT_DLL \
   otherlibs/labltk/tkanim/dlltkanim$EXT_DLL \
@@ -380,24 +385,14 @@ installlibdir \
   $LIBDIR/labltk
 
 installlibdir \
-  otherlibs/bigarray/libbigarray.$A otherlibs/bigarray/libbigarray.p.$A \
-  otherlibs/dbm/libmldbm.$A otherlibs/dbm/libmldbm.p.$A \
-  otherlibs/graph/libgraphics.$A \
-  otherlibs/graph/libgraphics.p.$A \
-  otherlibs/win32graph/libgraphics.$A \
-  otherlibs/win32graph/libgraphics.p.$A \
+  otherlibs/bigarray/libbigarray.$A \
+  otherlibs/dbm/libmldbm.$A \
+  otherlibs/"$WIN32"graph/libgraphics.$A \
   otherlibs/num/libnums.$A \
-  otherlibs/num/libnums.p.$A \
   otherlibs/str/libstr.$A \
-  otherlibs/str/libstr.p.$A \
   otherlibs/systhreads/libthreads.$A \
-  otherlibs/systhreads/libthreads.p.$A \
   otherlibs/systhreads/libthreadsnat.$A \
-  otherlibs/systhreads/libthreadsnat.p.$A \
-  otherlibs/unix/libunix.$A \
-  otherlibs/unix/libunix.p.$A \
-  otherlibs/win32unix/libunix.$A \
-  otherlibs/win32unix/libunix.p.$A \
+  otherlibs/"$WIN32"unix/libunix.$A \
   $LIBDIR
 
 echo "Installing object files and interfaces..."
@@ -409,7 +404,6 @@ installdir \
   toplevel/topmain.cmi \
   typing/outcometree.cmi \
   otherlibs/graph/graphicsX11.cmi \
-  otherlibs/win32graph/graphicsX11.cmi \
   otherlibs/dynlink/dynlink.cmi \
   otherlibs/num/arith_status.cmi \
   otherlibs/num/big_int.cmi \
@@ -418,103 +412,50 @@ installdir \
   otherlibs/num/ratio.cmi \
   otherlibs/bigarray/bigarray.cmi \
   otherlibs/dbm/dbm.cmi \
-  otherlibs/graph/graphics.cmi \
-  otherlibs/win32graph/graphics.cmi \
+  otherlibs/"$WIN32"graph/graphics.cmi \
   otherlibs/str/str.cmi \
-  otherlibs/unix/unix.cmi \
-  otherlibs/win32unix/unix.cmi \
-  otherlibs/unix/unixLabels.cmi \
-  otherlibs/win32unix/unixLabels.cmi \
+  otherlibs/"$WIN32"unix/unix.cmi \
+  otherlibs/"$WIN32"unix/unixLabels.cmi \
   otherlibs/num/arith_flags.cmx \
   otherlibs/num/arith_flags.$O \
-  otherlibs/num/arith_flags.p.cmx \
-  otherlibs/num/arith_flags.p.$O \
   otherlibs/num/int_misc.cmx \
-  otherlibs/num/int_misc.p.$O \
-  otherlibs/num/int_misc.cmx \
-  otherlibs/num/int_misc.p.$O \
-  otherlibs/num/arith_status.cmx \
-  otherlibs/num/arith_status.p.$O \
+  otherlibs/num/int_misc.$O \
   otherlibs/num/arith_status.cmx \
-  otherlibs/num/arith_status.p.$O \
-  otherlibs/num/big_int.cmx \
-  otherlibs/num/big_int.p.$O \
+  otherlibs/num/arith_status.$O \
   otherlibs/num/big_int.cmx \
-  otherlibs/num/big_int.p.$O \
+  otherlibs/num/big_int.$O \
   otherlibs/num/nat.cmx \
-  otherlibs/num/nat.p.$O \
-  otherlibs/num/nat.cmx \
-  otherlibs/num/nat.p.$O \
-  otherlibs/num/num.cmx \
-  otherlibs/num/num.p.$O \
+  otherlibs/num/nat.$O \
   otherlibs/num/num.cmx \
-  otherlibs/num/num.p.$O \
-  otherlibs/num/ratio.cmx \
-  otherlibs/num/ratio.p.$O \
+  otherlibs/num/num.$O \
   otherlibs/num/ratio.cmx \
-  otherlibs/num/ratio.p.$O \
+  otherlibs/num/ratio.$O \
   otherlibs/bigarray/bigarray.cmx \
-  otherlibs/bigarray/bigarray.p.$O \
-  otherlibs/bigarray/bigarray.cmx \
-  otherlibs/bigarray/bigarray.p.$O \
-  otherlibs/dbm/dbm.cmx \
-  otherlibs/dbm/dbm.p.$O \
+  otherlibs/bigarray/bigarray.$O \
   otherlibs/dbm/dbm.cmx \
-  otherlibs/dbm/dbm.p.$O \
-  otherlibs/graph/graphics.cmx \
-  otherlibs/graph/graphics.$O \
-  otherlibs/graph/graphics.p.cmx \
-  otherlibs/graph/graphics.p.$O \
-  otherlibs/win32graph/graphics.cmx \
-  otherlibs/win32graph/graphics.$O \
-  otherlibs/win32graph/graphics.p.cmx \
-  otherlibs/win32graph/graphics.p.$O \
-  otherlibs/str/str.cmx \
-  otherlibs/str/str.p.$O \
+  otherlibs/dbm/dbm.$O \
+  otherlibs/"$WIN32"graph/graphics.cmx \
+  otherlibs/"$WIN32"graph/graphics.$O \
   otherlibs/str/str.cmx \
-  otherlibs/str/str.p.$O \
-  otherlibs/unix/unix.cmx \
-  otherlibs/unix/unix.$O \
-  otherlibs/unix/unix.p.cmx \
-  otherlibs/unix/unix.p.$O \
-  otherlibs/win32unix/unix.cmx \
-  otherlibs/win32unix/unix.$O \
-  otherlibs/win32unix/unix.p.cmx \
-  otherlibs/win32unix/unix.p.$O \
-  otherlibs/unix/unixLabels.cmx \
-  otherlibs/unix/unixLabels.$O \
-  otherlibs/unix/unixLabels.p.cmx \
-  otherlibs/unix/unixLabels.p.$O \
-  otherlibs/win32unix/unixLabels.cmx \
-  otherlibs/win32unix/unixLabels.$O \
-  otherlibs/win32unix/unixLabels.p.cmx \
-  otherlibs/win32unix/unixLabels.p.$O \
+  otherlibs/str/str.$O \
+  otherlibs/"$WIN32"unix/unix.cmx \
+  otherlibs/"$WIN32"unix/unix.$O \
+  otherlibs/"$WIN32"unix/unixLabels.cmx \
+  otherlibs/"$WIN32"unix/unixLabels.$O \
   $LIBDIR
 
 installlibdir \
   otherlibs/bigarray/bigarray.$A \
-  otherlibs/bigarray/bigarray.p.$A \
   otherlibs/dbm/dbm.$A \
-  otherlibs/dbm/dbm.p.$A \
-  otherlibs/graph/graphics.$A \
-  otherlibs/graph/graphics.p.$A \
-  otherlibs/win32graph/graphics.$A \
-  otherlibs/win32graph/graphics.p.$A \
+  otherlibs/"$WIN32"graph/graphics.$A \
   otherlibs/num/nums.$A \
-  otherlibs/num/nums.p.$A \
   otherlibs/str/str.$A \
-  otherlibs/str/str.p.$A \
-  otherlibs/unix/unix.$A \
-  otherlibs/unix/unix.p.$A \
-  otherlibs/win32unix/unix.$A \
-  otherlibs/win32unix/unix.p.$A \
+  otherlibs/"$WIN32"unix/unix.$A \
   stdlib/stdlib.$A \
-  stdlib/stdlib.p.$A \
   $LIBDIR
 
 installlibdir \
   otherlibs/systhreads/threads.$A \
-  otherlibs/systhreads/threads.p.$A \
   $LIBDIR/threads
 
 echo "Installing manuals..."
@@ -527,7 +468,7 @@ installbin ocamldoc/ocamldoc.opt$EXE $BINDIR/ocamldoc.opt$EXE
 installdir \
   ../ocamldoc/ocamldoc.hva \
   ocamldoc/*.cmi \
-  ocamldoc/odoc_info.mli ocamldoc/odoc_infor.cm[ia] ocamldoc/odoc_info.cmxa \
+  ocamldoc/odoc_info.mli ocamldoc/odoc_info.cm[ia] ocamldoc/odoc_info.cmxa \
   ocamldoc/odoc_info.$A \
   $LIBDIR/ocamldoc
 
@@ -561,16 +502,17 @@ for dir in Camlp4Parsers Camlp4Printers Camlp4Filters Camlp4Top; do
   installdir     \
     $dir/*.cm*   \
     $dir/*.$O    \
-    $dir/*.p.$O  \
     $CAMLP4DIR/$dir
 done
 installdir \
   camlp4lib.cma camlp4lib.cmxa Camlp4.cmi \
+  camlp4fulllib.cma camlp4fulllib.cmxa \
   camlp4o.cma camlp4of.cma camlp4oof.cma \
   camlp4orf.cma camlp4r.cma camlp4rf.cma \
-  Camlp4Bin.cm[iox] Camlp4Bin.$O Camlp4Bin.p.$O Camlp4Top.cm[io] \
+  Camlp4Bin.cm[iox] Camlp4Bin.$O Camlp4Top.cm[io] \
+  Camlp4_config.cmi camlp4prof.cm[iox] camlp4prof.$O \
   $CAMLP4DIR
-installlibdir camlp4lib.$A camlp4lib.p.$A $CAMLP4DIR
+installlibdir camlp4lib.$A camlp4fulllib.$A $CAMLP4DIR
 cd ..
 
 echo "Installing ocamlbuild..."
@@ -580,19 +522,17 @@ installbin ocamlbuild/ocamlbuild.native$EXE $BINDIR/ocamlbuild.native$EXE
 installbestbin ocamlbuild/ocamlbuild.native$EXE ocamlbuild/ocamlbuild.byte$EXE $BINDIR/ocamlbuild$EXE
 
 installlibdir \
-  ocamlbuild/ocamlbuildlib.$A ocamlbuild/ocamlbuildlib.p.$A \
+  ocamlbuild/ocamlbuildlib.$A \
   $LIBDIR/ocamlbuild
 
 installdir \
-  ocamlbuild/ocamlbuildlib.cmxa ocamlbuild/ocamlbuildlib.p.cmxa \
+  ocamlbuild/ocamlbuildlib.cmxa \
   ocamlbuild/ocamlbuildlib.cma \
   ocamlbuild/ocamlbuild_plugin.cmi \
   ocamlbuild/ocamlbuild_pack.cmi \
   ocamlbuild/ocamlbuild.cmo \
   ocamlbuild/ocamlbuild.cmx \
   ocamlbuild/ocamlbuild.$O \
-  ocamlbuild/ocamlbuild.p.cmx \
-  ocamlbuild/ocamlbuild.p.$O \
   $LIBDIR/ocamlbuild
 
 installdir \
index 7d786d8a4f021df51a787bba303f24be71a30d12..00730de95e0df462fee2b0a707fe4cd6396f7f3f 100755 (executable)
@@ -1,8 +1,11 @@
 #!/bin/sh
+# $Id: mkconfig.sh,v 1.1.4.4 2007/05/14 12:01:32 xleroy Exp $
 
 cd `dirname $0`/..
 
-sed -e 's/\$(\([^)]*\))/${\1}/g' \
-    -e 's/^\([^=]*\)=\([^"]*\)$/\1="\2"/' \
-    -e 's/^\(.*\$([0-9]).*\)$/# \1/' \
+sed -e 's/^\(.*\$([0-9]).*\)$/# \1/' \
+    -e 's/\$(\([^)]*\))/${\1}/g' \
+    -e 's/^\([^#=]*\)=\([^"]*\)$/if [ "x$\1" = "x" ]; then \1="\2"; fi/' \
     config/Makefile > config/config.sh
+
+
index 0b8137f23938a800db3b6ccefa41ce58767a0b9a..1156c83ce6f6419f48c3fa2869725ec89b4cc73b 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: mkmyocamlbuild_config.sh,v 1.5.2.1 2007/03/12 11:58:48 pouillar Exp $
 
 cd `dirname $0`/..
 
index 0324d786257ad49d8da6c2a85dd212883973181a..3023dcbf6c3ecb25ec42c7fbdb88a1ecd4798a58 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: mkruntimedef.sh,v 1.1.2.2 2007/03/12 11:58:48 pouillar Exp $
 echo 'let builtin_exceptions = [|'; \
 sed -n -e 's|.*/\* \("[A-Za-z_]*"\) \*/$|  \1;|p' byterun/fail.h | \
 sed -e '$s/;$//'; \
index 2721d1b2cff4e38a1d46c45f516bbe36fd2d2c7e..d8ba77282ee07f77c911b0301ee3de8ad2dadcf5 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: myocamlbuild.sh,v 1.2.2.4 2007/03/12 11:58:48 pouillar Exp $
 cd `dirname $0`/..
 set -xe
 if [ ! -x _build/ocamlbuild/ocamlbuildlight.byte ]; then
index a389342b882b9ffe539669b881ec8f6fe1130d90..3e7a5bf9b844602263c00401a1d1cd6748163e3b 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: ocamlbuild-byte-only.sh,v 1.2.4.3 2007/03/12 11:58:48 pouillar Exp $
 set -e
 OCAMLBUILD_PARTIAL="true"
 export OCAMLBUILD_PARTIAL
index 0a1709589e4864ede86909c9987dae7d0e5a6bdf..17c0509f3bd46a4325c28f4365813fdae8c83eca 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: ocamlbuild-native-only.sh,v 1.2.4.4 2007/03/12 11:58:48 pouillar Exp $
 set -e
 OCAMLBUILD_PARTIAL="true"
 export OCAMLBUILD_PARTIAL
index b71eb4b0f4fdb9d7775d81fc8e43401d6dadb2d8..c2dc801ab5844e72989fed0d4cda5929deb61126 100644 (file)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: otherlibs-targets.sh,v 1.2.4.1 2007/03/12 11:58:48 pouillar Exp $
 OTHERLIBS_BYTE=""
 OTHERLIBS_NATIVE=""
 OTHERLIBS_UNIX_NATIVE=""
index 9600b523bfdc95d9f49e45336ca8f19d49b16768..639284a2ac85939baedf645507f987e19d4b666c 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: partial-boot.sh,v 1.2.4.8 2007/03/12 11:58:48 pouillar Exp $
 set -ex
 cd `dirname $0`/..
 OCAMLBUILD_PARTIAL="true"
index acd87281f92afd391d25fa8a0869adb13bd7bc44..03eddbb2e4ba5c8fda48c4194e90752b838a30b3 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: partial-install.sh,v 1.5.2.9 2007/04/05 08:12:39 pouillar Exp $
 
 ######################################
 ######### Copied from build/install.sh
@@ -13,9 +14,11 @@ cd `dirname $0`/..
 not_installed=$PWD/_build/not_installed
 
 rm -f "$not_installed"
+touch "$not_installed"
 
 wontinstall() {
   echo "$1" >> "$not_installed"
+  echo "  don't install $1"
 }
 
 installbin() {
@@ -49,7 +52,9 @@ installlib() {
     dest="$2/`basename $1`"
     echo "  install library $dest"
     cp -f "$1" "$2"
-    ranlib "$dest"
+    if [ "$RANLIB" != "" ]; then
+      "$RANLIB" "$dest"
+    fi
   else
     wontinstall "$1"
   fi
@@ -121,43 +126,39 @@ for dir in Camlp4Parsers Camlp4Printers Camlp4Filters Camlp4Top; do
   installdir     \
     $dir/*.cm*   \
     $dir/*.$O    \
-    $dir/*.p.$O  \
     $CAMLP4DIR/$dir
 done
 installdir \
   camlp4lib.cma camlp4lib.cmxa Camlp4.cmi \
-  camlp4o.cma \
-  camlp4of.cma \
-  camlp4oof.cma \
-  camlp4orf.cma \
-  camlp4r.cma \
-  camlp4rf.cma \
-  Camlp4Bin.cm[iox] Camlp4Bin.$O Camlp4Bin.p.$O Camlp4Top.cm[io] \
+  camlp4fulllib.cma camlp4fulllib.cmxa \
+  camlp4o.cma camlp4of.cma camlp4oof.cma \
+  camlp4orf.cma camlp4r.cma camlp4rf.cma \
+  Camlp4Bin.cm[iox] Camlp4Bin.$O Camlp4Top.cm[io] \
+  Camlp4_config.cmi camlp4prof.cm[iox] camlp4prof.$O \
   $CAMLP4DIR
-installlibdir camlp4lib.$A camlp4lib.p.$A $CAMLP4DIR
+installlibdir camlp4lib.$A camlp4fulllib.$A $CAMLP4DIR
 cd ..
 
 echo "Installing ocamlbuild..."
-
-installbin ocamlbuild/ocamlbuild.byte$EXE $BINDIR/ocamlbuild.byte$EXE
-installbin ocamlbuild/ocamlbuild.native$EXE $BINDIR/ocamlbuild.native$EXE
-installbestbin ocamlbuild/ocamlbuild.native$EXE ocamlbuild/ocamlbuild.byte$EXE $BINDIR/ocamlbuild$EXE
+cd ocamlbuild
+installbin ocamlbuild.byte$EXE $BINDIR/ocamlbuild.byte$EXE
+installbin ocamlbuild.native$EXE $BINDIR/ocamlbuild.native$EXE
+installbestbin ocamlbuild.native$EXE ocamlbuild.byte$EXE $BINDIR/ocamlbuild$EXE
 
 installlibdir \
-  ocamlbuild/ocamlbuildlib.$A ocamlbuild/ocamlbuildlib.p.$A \
+  ocamlbuildlib.$A \
   $LIBDIR/ocamlbuild
 
 installdir \
-  ocamlbuild/ocamlbuildlib.cmxa ocamlbuild/ocamlbuildlibp.cmxa\
-  ocamlbuild/ocamlbuildlib.cma \
-  ocamlbuild/ocamlbuild_plugin.cmi \
-  ocamlbuild/ocamlbuild_pack.cmi \
-  ocamlbuild/ocamlbuild.cmo \
-  ocamlbuild/ocamlbuild.cmx \
-  ocamlbuild/ocamlbuild.$O \
-  ocamlbuild/ocamlbuild.p.cmx \
-  ocamlbuild/ocamlbuild.p.$O \
+  ocamlbuildlib.cmxa \
+  ocamlbuildlib.cma \
+  ocamlbuild_plugin.cmi \
+  ocamlbuild_pack.cmi \
+  ocamlbuild.cmo \
+  ocamlbuild.cmx \
+  ocamlbuild.$O \
   $LIBDIR/ocamlbuild
+cd ..
 
 installdir \
   ../ocamlbuild/man/ocamlbuild.1 \
index a6ac528a994b8e2e40549782215af0380a61a4ea..1ef9f33a4576efeed01728d0f40d750b025efe56 100644 (file)
@@ -1,3 +1,4 @@
+# $Id: targets.sh,v 1.2.4.6 2007/03/12 11:58:48 pouillar Exp $
 . config/config.sh
 . build/otherlibs-targets.sh
 . build/camlp4-targets.sh
index b84bf8a166757e1dc517d4da0ce9f5f179fa381d..632e06b069c7da9b9c3d8e26dd6996b163cf1d5a 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: world.all.sh,v 1.2.4.1 2007/03/12 11:58:48 pouillar Exp $
 set -e
 cd `dirname $0`/..
 . build/targets.sh
index 56b3de5f057c4922e8730e83455e1943650888a5..61258e0277e7e88762b53235b4759b782b025752 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: world.byte.sh,v 1.2.4.1 2007/03/12 11:58:48 pouillar Exp $
 set -e
 cd `dirname $0`/..
 . build/targets.sh
index 88f7403380f5dc8888a30691aaad533a574f7d81..31e2a0a7b094bff5e3d2be29b63c7cdcfefd0b1a 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: world.native.sh,v 1.2.4.1 2007/03/12 11:58:48 pouillar Exp $
 set -e
 cd `dirname $0`/..
 . build/targets.sh
index bb0c813c93a5b761d8b02340e14353c274e0bdce..4f959ec2c09f72421690584565f606f6f2ef911d 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+# $Id: world.sh,v 1.2.4.1 2007/03/12 11:58:48 pouillar Exp $
 cd `dirname $0`
 set -ex
 ./mkconfig.sh
index a2a5087b8c486b0f3d09dc954c28bac40883bd72..53801d9c8dea1ef8473183df90dbe152e6788d55 100644 (file)
@@ -11,7 +11,7 @@
 /*                                                                     */
 /***********************************************************************/
 
-/* $Id: config.h,v 1.40 2006/09/19 12:40:29 xleroy Exp $ */
+/* $Id: config.h,v 1.40.6.1 2007/05/10 09:57:29 xleroy Exp $ */
 
 #ifndef CAML_CONFIG_H
 #define CAML_CONFIG_H
@@ -85,7 +85,7 @@ typedef struct { uint32 l, h; } uint64, int64;
    float is at byte offset [a], the next lsb at [b], ..., and the
    most significant byte at [h]. */
 
-#if defined(__arm__)
+#if defined(__arm__) && !defined(__ARM_EABI__)
 #define ARCH_FLOAT_ENDIANNESS 0x45670123
 #elif defined(ARCH_BIG_ENDIAN)
 #define ARCH_FLOAT_ENDIANNESS 0x76543210
index e7a88b3cf50390323cd8eb5e01ecd089f92583e4..d2f0666b08592e94f2c7b8fad00a9979dc1794e4 100644 (file)
@@ -11,7 +11,7 @@
 /*                                                                     */
 /***********************************************************************/
 
-/* $Id: globroots.c,v 1.8 2005/09/22 14:21:50 xleroy Exp $ */
+/* $Id: globroots.c,v 1.8.10.1 2007/03/26 18:01:20 doligez Exp $ */
 
 /* Registration of global memory roots */
 
@@ -28,7 +28,7 @@
    1 with probability 3/16, 2 with probability 3/64, etc.
    We use a simple linear congruential PRNG (see Knuth vol 2) instead
    of random(), because we need exactly 32 bits of pseudo-random data
-   (i.e. 2 * (MAX_LEVEL + 1)).  Moreover, the congruential PRNG 
+   (i.e. 2 * (NUM_LEVELS - 1)).  Moreover, the congruential PRNG
    is faster and guaranteed to be deterministic (to reproduce bugs). */
 
 static uint32 random_seed = 0;
@@ -45,7 +45,7 @@ static int random_level(void)
      "less random" than the most significant bits with a modulus of 2^m,
      so consume most significant bits first */
   while ((r & 0xC0000000U) == 0xC0000000U) { level++; r = r << 2; }
-  Assert(level <= MAX_LEVEL);
+  Assert(level < NUM_LEVELS);
   return level;
 }
 
@@ -57,10 +57,10 @@ struct global_root_list caml_global_roots = { NULL, { NULL, }, 0 };
 
 CAMLexport void caml_register_global_root(value *r)
 {
-  struct global_root * update[MAX_LEVEL];
+  struct global_root * update[NUM_LEVELS];
   struct global_root * e, * f;
   int i, new_level;
-  
+
   Assert (((intnat) r & 3) == 0);  /* compact.c demands this (for now) */
 
   /* Init "cursor" to list head */
@@ -97,7 +97,7 @@ CAMLexport void caml_register_global_root(value *r)
 
 CAMLexport void caml_remove_global_root(value *r)
 {
-  struct global_root * update[MAX_LEVEL];
+  struct global_root * update[NUM_LEVELS];
   struct global_root * e, * f;
   int i;
 
index b9b12d8e5e887907921a4c2d4c957e11b639f180..f7e6cc1807d77c3d4004144747639a73c60abb57 100644 (file)
@@ -11,7 +11,7 @@
 /*                                                                     */
 /***********************************************************************/
 
-/* $Id: globroots.h,v 1.3 2003/12/15 18:10:47 doligez Exp $ */
+/* $Id: globroots.h,v 1.3.20.1 2007/03/26 18:01:20 doligez Exp $ */
 
 /* Registration of global memory roots */
 
@@ -27,11 +27,11 @@ struct global_root {
   struct global_root * forward[1]; /* variable-length array */
 };
 
-#define MAX_LEVEL 15
+#define NUM_LEVELS 17
 
 struct global_root_list {
   value * root;                 /* dummy value for layout compatibility */
-  struct global_root * forward[MAX_LEVEL]; /* forward chaining */
+  struct global_root * forward[NUM_LEVELS]; /* forward chaining */
   int level;                    /* max used level */
 };
 
index d9356c8e37fbe0d6e2676facae4ba7d422b99e27..7a9023761678e86e4bec8ddb0b13410798277eb2 100644 (file)
@@ -84,7 +84,7 @@
     | PaOrp of Loc.t and patt and patt (* p | p *)
     | PaRng of Loc.t and patt and patt (* p .. p *)
     | PaRec of Loc.t and patt (* { p } *)
-    | PaEq  of Loc.t and patt and patt (* p = p *)
+    | PaEq  of Loc.t and ident and patt (* i = p *)
     | PaStr of Loc.t and string (* s *)
     | PaTup of Loc.t and patt (* ( p ) *)
     | PaTyc of Loc.t and patt and ctyp (* (p : t) *)
       (* ?s or ?s:e *)
     | ExOlb of Loc.t and string and expr
       (* {< b >} *)
-    | ExOvr of Loc.t and binding
+    | ExOvr of Loc.t and rec_binding
       (* { b } or { (e) with b } *)
-    | ExRec of Loc.t and binding and expr
+    | ExRec of Loc.t and rec_binding and expr
       (* do { e } *)
     | ExSeq of Loc.t and expr
       (* e#s *)
       (* while e do { e } *)
     | ExWhi of Loc.t and expr and expr ]
   and module_type =
+    [ MtNil of Loc.t
       (* i *) (* A.B.C *)
-    [ MtId  of Loc.t and ident
+    | MtId  of Loc.t and ident
       (* functor (s : mt) -> mt *)
     | MtFun of Loc.t and string and module_type and module_type
       (* 's *)
     [ BiNil of Loc.t
       (* b and b *) (* let a = 42 and c = 43 *)
     | BiAnd of Loc.t and binding and binding
-      (* b ; b *)
-    | BiSem of Loc.t and binding and binding
       (* p = e *) (* let patt = expr *)
     | BiEq  of Loc.t and patt and expr
     | BiAnt of Loc.t and string (* $s$ *) ]
+  and rec_binding =
+    [ RbNil of Loc.t
+      (* b ; b *)
+    | RbSem of Loc.t and rec_binding and rec_binding
+      (* i = e *)
+    | RbEq  of Loc.t and ident and expr
+    | RbAnt of Loc.t and string (* $s$ *) ]
   and module_binding =
     [ MbNil of Loc.t
       (* mb and mb *) (* module rec (s : mt) = me and (s : mt) = me *)
     | McArr of Loc.t and patt and expr and expr
     | McAnt of Loc.t and string (* $s$ *) ]
   and module_expr =
+    [ MeNil of Loc.t
       (* i *)
-    [ MeId  of Loc.t and ident
+    | MeId  of Loc.t and ident
       (* me me *)
     | MeApp of Loc.t and module_expr and module_expr
       (* functor (s : mt) -> me *)
index 7c68bd4fc2e6721081e852c0855833ad7b80eaf4..231efed90402425445e550757fef6626181c8b21 100644 (file)
@@ -113,10 +113,10 @@ value default_handler ppf x = do {
     (Obj.obj (Obj.field (Obj.field x 0) 0) : string);
   if Obj.size x > 1 then do {
     pp_print_string ppf " (";
-    for i = 1 to Obj.size x - 1 do {
+    for i = 1 to Obj.size x - 1 do
       if i > 1 then pp_print_string ppf ", " else ();
       ObjTools.print ppf (Obj.field x i);
-    };
+    done;
     pp_print_char ppf ')'
   }
   else ();
index b28c40e05bc531072ee54600cc18e7347b17c355..218623599e6997c0f6ce4ee86812ed361d07f6cd 100644 (file)
  * - Nicolas Pouillard: initial version
  *)
 
-module Make (Warning : Sig.Warning)
-            (Ast     : Sig.Camlp4Ast with module Loc = Warning.Loc)
-            (Gram    : Sig.Grammar.Static with module Loc = Warning.Loc
+module Make (Ast     : Sig.Camlp4Ast)
+            (Gram    : Sig.Grammar.Static with module Loc = Ast.Loc
                                             with type Token.t = Sig.camlp4_token)
             (Quotation : Sig.Quotation with module Ast = Sig.Camlp4AstToAst Ast)
-: Sig.Camlp4Syntax with module Loc   = Ast.Loc
-                      and module Ast   = Ast
-                      and module Token = Gram.Token
-                      and module Gram  = Gram
-                      and module AntiquotSyntax.Ast = Sig.Camlp4AstToAst Ast
-                      and module Quotation = Quotation
+: Sig.Camlp4Syntax with module Loc = Ast.Loc
+                    and module Ast = Ast
+                    and module Token = Gram.Token
+                    and module Gram = Gram
+                    and module AntiquotSyntax.Ast = Sig.Camlp4AstToAst Ast
+                    and module Quotation = Quotation
 = struct
 
-  module Warning = Warning;
   module Loc     = Ast.Loc;
   module Ast     = Ast;
   module Gram    = Gram;
   module Token   = Gram.Token;
   open Sig;
 
+  (* Warnings *)
+  type warning = Loc.t -> string -> unit;
+  value default_warning loc txt = Format.eprintf "<W> %a: %s@." Loc.print loc txt;
+  value current_warning = ref default_warning;
+  value print_warning loc txt = current_warning.val loc txt;
+
   value a_CHAR = Gram.Entry.mk "a_CHAR";
   value a_FLOAT = Gram.Entry.mk "a_FLOAT";
   value a_INT = Gram.Entry.mk "a_INT";
@@ -43,7 +47,6 @@ module Make (Warning : Sig.Warning)
   value a_INT64 = Gram.Entry.mk "a_INT64";
   value a_LABEL = Gram.Entry.mk "a_LABEL";
   value a_LIDENT = Gram.Entry.mk "a_LIDENT";
-  value a_LIDENT_or_operator = Gram.Entry.mk "a_LIDENT_or_operator";
   value a_NATIVEINT = Gram.Entry.mk "a_NATIVEINT";
   value a_OPTLABEL = Gram.Entry.mk "a_OPTLABEL";
   value a_STRING = Gram.Entry.mk "a_STRING";
@@ -90,7 +93,6 @@ module Make (Warning : Sig.Warning)
   value eq_expr = Gram.Entry.mk "eq_expr";
   value expr = Gram.Entry.mk "expr";
   value expr_eoi = Gram.Entry.mk "expr_eoi";
-  value field = Gram.Entry.mk "field";
   value field_expr = Gram.Entry.mk "field_expr";
   value fun_binding = Gram.Entry.mk "fun_binding";
   value fun_def = Gram.Entry.mk "fun_def";
@@ -141,16 +143,15 @@ module Make (Warning : Sig.Warning)
   value patt_eoi = Gram.Entry.mk "patt_eoi";
   value patt_tcon = Gram.Entry.mk "patt_tcon";
   value phrase = Gram.Entry.mk "phrase";
-  value pipe_ctyp = Gram.Entry.mk "pipe_ctyp";
   value poly_type = Gram.Entry.mk "poly_type";
   value row_field = Gram.Entry.mk "row_field";
-  value sem_ctyp = Gram.Entry.mk "sem_ctyp";
   value sem_expr = Gram.Entry.mk "sem_expr";
   value sem_expr_for_list = Gram.Entry.mk "sem_expr_for_list";
   value sem_patt = Gram.Entry.mk "sem_patt";
   value sem_patt_for_list = Gram.Entry.mk "sem_patt_for_list";
   value semi = Gram.Entry.mk "semi";
   value sequence = Gram.Entry.mk "sequence";
+  value do_sequence = Gram.Entry.mk "do_sequence";
   value sig_item = Gram.Entry.mk "sig_item";
   value sig_items = Gram.Entry.mk "sig_items";
   value star_ctyp = Gram.Entry.mk "star_ctyp";
@@ -184,10 +185,16 @@ module Make (Warning : Sig.Warning)
   value class_expr_quot = Gram.Entry.mk "quotation of class expression";
   value with_constr_quot = Gram.Entry.mk "quotation of with constraint";
   value binding_quot = Gram.Entry.mk "quotation of binding";
+  value rec_binding_quot = Gram.Entry.mk "quotation of record binding";
   value match_case_quot = Gram.Entry.mk "quotation of match_case (try/match/function case)";
   value module_binding_quot = Gram.Entry.mk "quotation of module rec binding";
   value ident_quot = Gram.Entry.mk "quotation of identifier";
-
+  value prefixop = Gram.Entry.mk "prefix operator (start with '!', '?', '~')";
+  value infixop0 = Gram.Entry.mk "infix operator (level 0) (comparison operators, and some others)";
+  value infixop1 = Gram.Entry.mk "infix operator (level 1) (start with '^', '@')";
+  value infixop2 = Gram.Entry.mk "infix operator (level 2) (start with '+', '-')";
+  value infixop3 = Gram.Entry.mk "infix operator (level 3) (start with '*', '/', '%')";
+  value infixop4 = Gram.Entry.mk "infix operator (level 4) (start with \"**\") (right assoc)";
 
   EXTEND Gram
     top_phrase:
@@ -215,31 +222,30 @@ module Make (Warning : Sig.Warning)
 
   module Quotation = Quotation;
 
-  module Parser = struct
-    module Ast = Ast;
-    value wrap directive_handler pa init_loc cs =
-      let rec loop loc =
-        let (pl, stopped_at_directive) = pa loc cs in
-        match stopped_at_directive with
-        [ Some new_loc ->
-          let pl =
-            match List.rev pl with
-            [ [] -> assert False
-            | [x :: xs] ->
-                match directive_handler x with
-                [ None -> xs
-                | Some x -> [x :: xs] ] ]
-          in (List.rev pl) @ (loop new_loc)
-        | None -> pl ]
-      in loop init_loc;
-    value parse_implem ?(directive_handler = fun _ -> None) _loc cs =
-      let l = wrap directive_handler (Gram.parse implem) _loc cs in
-      <:str_item< $list:l$ >>;
-    value parse_interf ?(directive_handler = fun _ -> None) _loc cs =
-      let l = wrap directive_handler (Gram.parse interf) _loc cs in
-      <:sig_item< $list:l$ >>;
-  end;
+  value wrap directive_handler pa init_loc cs =
+    let rec loop loc =
+      let (pl, stopped_at_directive) = pa loc cs in
+      match stopped_at_directive with
+      [ Some new_loc ->
+        let pl =
+          match List.rev pl with
+          [ [] -> assert False
+          | [x :: xs] ->
+              match directive_handler x with
+              [ None -> xs
+              | Some x -> [x :: xs] ] ]
+        in (List.rev pl) @ (loop new_loc)
+      | None -> pl ]
+    in loop init_loc;
+
+  value parse_implem ?(directive_handler = fun _ -> None) _loc cs =
+    let l = wrap directive_handler (Gram.parse implem) _loc cs in
+    <:str_item< $list:l$ >>;
 
-  module Printer = Struct.EmptyPrinter.Make Ast;
+  value parse_interf ?(directive_handler = fun _ -> None) _loc cs =
+    let l = wrap directive_handler (Gram.parse interf) _loc cs in
+    <:sig_item< $list:l$ >>;
 
+  value print_interf ?input_file:(_) ?output_file:(_) _ = failwith "No interface printer";
+  value print_implem ?input_file:(_) ?output_file:(_) _ = failwith "No implementation printer";
 end;
index ebb52e14c0b2a330230c7c58ef2e35f81db7e15e..69f494e2d1be0f90aa42f5f0934454ecd5de1336 100644 (file)
@@ -19,7 +19,7 @@
 
 module Id = struct
   value name = "Camlp4.PreCast";
-  value version = "$Id: PreCast.ml,v 1.4 2007/02/07 10:09:21 ertai Exp $";
+  value version = "$Id: PreCast.ml,v 1.4.4.1 2007/03/30 15:50:12 pouillar Exp $";
 end;
 
 type camlp4_token = Sig.camlp4_token ==
@@ -46,14 +46,13 @@ type camlp4_token = Sig.camlp4_token ==
   | EOI ];
 
 module Loc = Struct.Loc;
-module Warning = Struct.Warning.Make Loc;
 module Ast = Struct.Camlp4Ast.Make Loc;
 module Token = Struct.Token.Make Loc;
 module Lexer = Struct.Lexer.Make Token;
 module Gram = Struct.Grammar.Static.Make Lexer;
 module DynLoader = Struct.DynLoader;
 module Quotation = Struct.Quotation.Make Ast;
-module MakeSyntax (U : sig end) = OCamlInitSyntax.Make Warning Ast Gram Quotation;
+module MakeSyntax (U : sig end) = OCamlInitSyntax.Make Ast Gram Quotation;
 module Syntax = MakeSyntax (struct end);
 module AstFilters = Struct.AstFilters.Make Ast;
 module MakeGram = Struct.Grammar.Static.Make;
index fd64e6d1977abc627ddfa6af5d995a4b5ed1534b..1c6eb2e989b1ef382a84f145214dfda36e9b7f81 100644 (file)
@@ -42,7 +42,6 @@ type camlp4_token = Sig.camlp4_token ==
 
 module Id         : Sig.Id;
 module Loc        : Sig.Loc;
-module Warning    : Sig.Warning with module Loc = Loc;
 module Ast        : Sig.Camlp4Ast with module Loc = Loc;
 module Token      : Sig.Token
                       with module Loc = Loc
@@ -58,19 +57,17 @@ module DynLoader  : Sig.DynLoader;
 module AstFilters : Sig.AstFilters with module Ast = Ast;
 module Syntax     : Sig.Camlp4Syntax
                       with module Loc     = Loc
-                       and module Warning = Warning
                        and module Token   = Token
                        and module Ast     = Ast
                        and module Gram    = Gram
                        and module Quotation = Quotation;
 
 module Printers : sig
-  module OCaml         : Sig.Printer with module Ast = Sig.Camlp4AstToAst Ast;
-  module OCamlr        : Sig.Printer with module Ast = Sig.Camlp4AstToAst Ast;
-  (* module OCamlrr       : Sig.Printer with module Ast = Sig.Camlp4AstToAst Ast; *)
-  module DumpOCamlAst  : Sig.Printer with module Ast = Sig.Camlp4AstToAst Ast;
-  module DumpCamlp4Ast : Sig.Printer with module Ast = Sig.Camlp4AstToAst Ast;
-  module Null          : Sig.Printer with module Ast = Sig.Camlp4AstToAst Ast;
+  module OCaml         : (Sig.Printer Ast).S;
+  module OCamlr        : (Sig.Printer Ast).S;
+  module DumpOCamlAst  : (Sig.Printer Ast).S;
+  module DumpCamlp4Ast : (Sig.Printer Ast).S;
+  module Null          : (Sig.Printer Ast).S;
 end;
 
 module MakeGram (Lexer : Sig.Lexer with module Loc = Loc)
index 8fcd6ab0724fc5b648004c5c97f69cb886809e5f..629f8e05bacf256b92ea732eeedd78c2d16ab3ab 100644 (file)
 
 module Id = struct
   value name = "Camlp4Printers.DumpCamlp4Ast";
-  value version = "$Id: DumpCamlp4Ast.ml,v 1.5 2007/02/07 10:09:21 ertai Exp $";
+  value version = "$Id: DumpCamlp4Ast.ml,v 1.5.4.1 2007/03/30 15:50:12 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Syntax)
-: Sig.Printer with module Ast = Syntax.Ast
+: (Sig.Printer Syntax.Ast).S
 = struct
   include Syntax;
 
index 0af1fa1a72678f753cb755fcfeac7092f572522d..d35642ab4111a7c0bec2dd42da7ed0e6532001c4 100644 (file)
@@ -18,5 +18,4 @@
 
 module Id : Sig.Id;
 
-module Make (Syntax : Sig.Syntax) : Sig.Printer
-  with module Ast = Syntax.Ast;
+module Make (Syntax : Sig.Syntax) : (Sig.Printer Syntax.Ast).S;
index 52ec2d761f6bfdd30b6758bd7a3c0121f26576b2..e32cb77e1ec80ebe66b20de6ff54978c8f8f6f10 100644 (file)
 
 module Id : Sig.Id = struct
   value name = "Camlp4Printers.DumpOCamlAst";
-  value version = "$Id: DumpOCamlAst.ml,v 1.5 2007/02/07 10:09:21 ertai Exp $";
+  value version = "$Id: DumpOCamlAst.ml,v 1.5.4.1 2007/03/30 15:50:12 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Camlp4Syntax)
-: Sig.Printer with module Ast = Syntax.Ast
+: (Sig.Printer Syntax.Ast).S
 = struct
   include Syntax;
   module Ast2pt = Struct.Camlp4Ast2OCamlAst.Make Ast;
index b97898b19afde4b5ba88788fb06470260ff5114a..3233557d0607e256db327d453c3e12cb3976f309 100644 (file)
@@ -18,5 +18,4 @@
 
 module Id : Sig.Id;
 
-module Make (Syntax : Sig.Camlp4Syntax) : Sig.Printer
-  with module Ast = Syntax.Ast;
+module Make (Syntax : Sig.Camlp4Syntax) : (Sig.Printer Syntax.Ast).S;
index 562c2c02fc35946c7bc87da17f12c01d6ce869c0..d77151177b4896ac5a4519b71e911b53c1bd34d2 100644 (file)
@@ -19,4 +19,4 @@
 
 module Id : Sig.Id;
 
-module Make (Syntax : Sig.Syntax) : Sig.Printer with module Ast = Syntax.Ast;
+module Make (Syntax : Sig.Syntax) : (Sig.Printer Syntax.Ast).S;
index 08507539bd2300d26297bc3365b57ec537cb8162..6b3721297d0fad8e3d5d9cc0b2f18b41b89d7ff1 100644 (file)
@@ -20,7 +20,7 @@ open Format;
 
 module Id = struct
   value name = "Camlp4.Printers.OCaml";
-  value version = "$Id: OCaml.ml,v 1.21 2007/02/26 16:32:46 ertai Exp $";
+  value version = "$Id: OCaml.ml,v 1.21.2.9 2007/05/12 22:44:55 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Camlp4Syntax) = struct
@@ -66,13 +66,12 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
   module StringSet = Set.Make String;
 
   value is_infix =
-    let infixes =
+    let first_chars = ['='; '<'; '>'; '|'; '&'; '$'; '@'; '^'; '+'; '-'; '*'; '/'; '%'; '\\']
+    and infixes =
       List.fold_right StringSet.add
-(*         "**."; "=.";  "<>.";  "<.";  ">."; "<=."; ">=."; "~-"; "~-." *)
-        ["=="; "!="; "+"; "-"; "+."; "-."; "*"; "*."; "/"; "/."; "**";
-          "="; "<>"; "<"; ">"; "<="; ">="; "^"; "^^"; "@"; "&&"; "||";
-         "asr"; "land"; "lor"; "lsl"; "lsr"; "lxor"; "mod"; "or" ] StringSet.empty
-    in fun s -> StringSet.mem s infixes;
+        ["asr"; "land"; "lor"; "lsl"; "lsr"; "lxor"; "mod"; "or"] StringSet.empty
+    in fun s -> (StringSet.mem s infixes
+                 || (s <> "" && List.mem s.[0] first_chars));
 
   value is_keyword =
     let keywords =
@@ -251,7 +250,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     method match_case f =
       fun
       [ <:match_case@_loc<>> ->
-          pp f "@[<2>_@ ->@ %a@]" o#raise_match_failure _loc
+          pp f "@[<2>@ _ ->@ %a@]" o#raise_match_failure _loc
       | a -> o#match_case_aux f a ];
 
     method match_case_aux f =
@@ -283,20 +282,18 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
                 (list o#simple_patt "@ ") [p::pl] o#ctyp t o#expr e
           | _ -> pp f "%a @[<0>%a=@]@ %a" o#simple_patt
                     p (list' o#simple_patt "" "@ ") pl o#expr e ]
-      | <:binding< $_$ ; $_$ >> -> assert False
       | <:binding< $anti:s$ >> -> o#anti f s ];
 
     method record_binding f bi =
-      let () = o#node f bi Ast.loc_of_binding in
+      let () = o#node f bi Ast.loc_of_rec_binding in
       match bi with
-      [ <:binding<>> -> ()
-      | <:binding< $p$ = $e$ >> ->
-          pp f "@ @[<2>%a =@ %a@];" o#simple_patt p o#expr e
-      | <:binding< $b1$ ; $b2$ >> ->
+      [ <:rec_binding<>> -> ()
+      | <:rec_binding< $i$ = $e$ >> ->
+          pp f "@ @[<2>%a =@ %a@];" o#var_ident i o#expr e
+      | <:rec_binding< $b1$ ; $b2$ >> ->
           do { o#under_semi#record_binding f b1;
                o#under_semi#record_binding f b2 }
-      | <:binding< $_$ and $_$ >> -> assert False
-      | <:binding< $anti:s$ >> -> o#anti f s ];
+      | <:rec_binding< $anti:s$ >> -> o#anti f s ];
 
     method object_dup f =
       list (fun f (s, e) -> pp f "@[<2>%a =@ %a@]" o#var s o#expr e) ";@ " f;
@@ -421,18 +418,18 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
         pp f "@[<2>-.@,%a@]" o#expr x
     | <:expr< [$_$ :: $_$] >> -> o#expr_list_cons False f e
     | <:expr@_loc< $lid:n$ $x$ $y$ >> when is_infix n ->
-        pp f "@[<2>%a@ %s@ %a@]" o#dot_expr x n o#dot_expr y
+        pp f "@[<2>%a@ %s@ %a@]" o#apply_expr x n o#apply_expr y
     | <:expr< $x$ $y$ >> ->
         let (a, al) = get_expr_args x [y] in
         if (not curry_constr) && Ast.is_expr_constructor a then
           match al with
           [ [ <:expr< ($tup:_$) >> ] ->
-              pp f "@[<2>%a@ (%a)@]" o#dot_expr x o#expr y
-          | [_] -> pp f "@[<2>%a@ %a@]" o#dot_expr x o#dot_expr y
+              pp f "@[<2>%a@ (%a)@]" o#apply_expr x o#expr y
+          | [_] -> pp f "@[<2>%a@ %a@]" o#apply_expr x o#apply_expr y
           | al ->
-              pp f "@[<2>%a@ (%a)@]" o#dot_expr a
+              pp f "@[<2>%a@ (%a)@]" o#apply_expr a
                  (list o#under_pipe#expr ",@ ") al ]
-        else pp f "@[<2>%a@]" (list o#dot_expr "@ ") [a::al]
+        else pp f "@[<2>%a@]" (list o#apply_expr "@ ") [a::al]
     | <:expr< $e1$.val := $e2$ >> ->
         pp f "@[<2>%a :=@ %a@]" o#expr e1 o#expr e2
     | <:expr< $e1$ := $e2$ >> ->
@@ -462,9 +459,15 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
         pp f "@[<0>@[<hv2>try@ %a@]@ @[<0>with%a@]@]"
           o#expr e o#match_case a
     | <:expr< assert False >> -> pp f "@[<2>assert@ false@]"
-    | <:expr< assert $e$ >> -> pp f "@[<2>assert@ %a@]" o#expr e
+    | <:expr< assert $e$ >> -> pp f "@[<2>assert@ %a@]" o#dot_expr e
     | <:expr< let module $s$ = $me$ in $e$ >> ->
           pp f "@[<2>let module %a =@ %a@]@ @[<2>in@ %a@]" o#var s o#module_expr me o#expr e
+    | e -> o#apply_expr f e ];
+
+    method apply_expr f e =
+    let () = o#node f e Ast.loc_of_expr in
+    match e with
+    [ <:expr< new $i$ >> -> pp f "@[<2>new@ %a@]" o#ident i
     | e -> o#dot_expr f e ];
 
     method dot_expr f e =
@@ -508,9 +511,9 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     | <:expr< $chr:s$ >> -> pp f "'%s'" (ocaml_char s)
     | <:expr< $id:i$ >> -> o#var_ident f i
     | <:expr< { $b$ } >> ->
-        pp f "@[<hv0>@[<hv2>{%a@]@ }@]" o#record_binding b
+        pp f "@[<hv0>@[<hv2>{%a@]@ }@]" o#record_binding b
     | <:expr< { ($e$) with $b$ } >> ->
-        pp f "@[<hv0>@[<hv2>{@ (%a)@ with%a@]@ }@]"
+        pp f "@[<hv0>@[<hv2>{@ (%a)@ with%a@]@ }@]"
           o#expr e o#record_binding b
     | <:expr< $str:s$ >> -> pp f "\"%s\"" s
     | <:expr< while $e1$ do { $e2$ } >> ->
@@ -521,7 +524,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     | <:expr< ? $s$ : $e$ >> -> pp f "@[<2>?%s:@ %a@]" s o#dot_expr e
     | <:expr< ` $lid:s$ >> -> pp f "`%a" o#var s
     | <:expr< {< $b$ >} >> ->
-        pp f "@[<hv0>@[<hv2>{<%a@]@ >}@]" o#record_binding b
+        pp f "@[<hv0>@[<hv2>{<%a@]@ >}@]" o#record_binding b
     | <:expr< object $cst$ end >> ->
         pp f "@[<hv0>@[<hv2>object@ %a@]@ end@]" o#class_str_item cst
     | <:expr< object ($p$ : $t$) $cst$ end >> ->
@@ -530,7 +533,6 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     | <:expr< object ($p$) $cst$ end >> ->
         pp f "@[<hv0>@[<hv2>object @[<2>(%a)@]@ %a@]@ end@]"
           o#patt p o#class_str_item cst
-    | <:expr< new $i$ >> -> pp f "@[<2>new@ %a@]" o#ident i
     | <:expr< $e1$, $e2$ >> ->
         pp f "%a,@ %a" o#simple_expr e1 o#simple_expr e2
     | <:expr< $e1$; $e2$ >> ->
@@ -543,9 +545,8 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       <:expr< if $_$ then $_$ else $_$ >> |
       <:expr< let $rec:_$ $_$ in $_$ >> |
       <:expr< let module $_$ = $_$ in $_$ >> |
-      (* Note: `new' is treated differently in pa_o and in pa_r,
-        and should not occur at this level *)
-      <:expr< assert $_$ >> | <:expr< assert False >> | <:expr< lazy $_$ >> ->
+      <:expr< assert $_$ >> | <:expr< assert False >> |
+      <:expr< lazy $_$ >> | <:expr< new $_$ >> ->
         pp f "(%a)" o#reset#expr e ];
 
     method direction_flag f b =
@@ -557,7 +558,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     method patt f p =
     let () = o#node f p Ast.loc_of_patt in match p with
     [ <:patt< ( $p1$ as $p2$ ) >> -> pp f "@[<1>(%a@ as@ %a)@]" o#patt p1 o#patt p2
-    | <:patt< $p1$ = $p2$ >> -> pp f "@[<2>%a =@ %a@]" o#patt p1 o#patt p2
+    | <:patt< $i$ = $p$ >> -> pp f "@[<2>%a =@ %a@]" o#var_ident i o#patt p
     | <:patt< $p1$; $p2$ >> -> pp f "%a;@ %a" o#patt p1 o#patt p2
     | p -> o#patt1 f p ];
 
@@ -643,7 +644,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     | <:ctyp< ? $s$ : $t$ >> -> pp f "@[<2>?%s:@ %a@]" s o#simple_ctyp t
     | <:ctyp< < > >> -> pp f "< >"
     | <:ctyp< < .. > >> -> pp f "< .. >"
-    | <:ctyp< < $t$ .. > >> -> pp f "@[<0>@[<2><@ %a@ ..@]@ >@]" o#ctyp t
+    | <:ctyp< < $t$ .. > >> -> pp f "@[<0>@[<2><@ %a;@ ..@]@ >@]" o#ctyp t
     | <:ctyp< < $t$ > >> -> pp f "@[<0>@[<2><@ %a@]@ >@]" o#ctyp t
     | <:ctyp< '$s$ >> -> pp f "'%a" o#var s
     | <:ctyp< { $t$ } >> -> pp f "@[<2>{@ %a@]@ }" o#ctyp t
@@ -684,9 +685,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     | Ast.TyDcl _ tn tp te cl -> do {
         pp f "@[<2>%a%a@]" o#type_params tp o#var tn;
         match te with
-        [ <:ctyp< '$s$ >>
-            when not (List.exists (fun [ <:ctyp< '$s'$ >> -> s = s'
-                                       | _ -> False ]) tp) -> ()
+        [ <:ctyp<>> -> ()
         | _ -> pp f " =@ %a" o#ctyp te ];
         if cl <> [] then pp f "@ %a" (list o#constrain "@ ") cl else ();
       }
@@ -738,6 +737,8 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       | <:sig_item< module $s$ : $mt$ >> ->
           pp f "@[<2>module %a :@ %a%s@]"
             o#var s o#module_type mt semisep
+      | <:sig_item< module type $s$ = $ <:module_type<>> $ >> ->
+          pp f "@[<2>module type %a%s@]" o#var s semisep
       | <:sig_item< module type $s$ = $mt$ >> ->
           pp f "@[<2>module type %a =@ %a%s@]"
             o#var s o#module_type mt semisep
@@ -817,7 +818,8 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     method module_type f mt =
     let () = o#node f mt Ast.loc_of_module_type in
     match mt with
-    [ <:module_type< $id:i$ >> -> o#ident f i
+    [ <:module_type<>> -> assert False
+    | <:module_type< $id:i$ >> -> o#ident f i
     | <:module_type< $anti:s$ >> -> o#anti f s
     | <:module_type< functor ( $s$ : $mt1$ ) -> $mt2$ >> ->
           pp f "@[<2>functor@ @[<1>(%a :@ %a)@]@ ->@ %a@]"
@@ -843,7 +845,8 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     method module_expr f me =
     let () = o#node f me Ast.loc_of_module_expr in
     match me with
-    [ <:module_expr< $id:i$ >> -> o#ident f i
+    [ <:module_expr<>> -> assert False
+    | <:module_expr< $id:i$ >> -> o#ident f i
     | <:module_expr< $anti:s$ >> -> o#anti f s
     | <:module_expr< $me1$ $me2$ >> ->
           pp f "@[<2>%a@,(%a)@]" o#module_expr me1 o#module_expr me2
@@ -866,12 +869,10 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
           pp f "@[<2>%a@]" o#ident i
     | <:class_expr< $id:i$ [ $t$ ] >> ->
           pp f "@[<2>@[<1>[%a]@]@ %a@]" o#class_params t o#ident i
-    (* | <:class_expr< virtual $id:i$ >> -> *)
-    | Ast.CeCon _ Ast.BTrue i <:ctyp<>> ->
-          pp f "@[<2>virtual@ %a@]" o#ident i
-    | Ast.CeCon _ Ast.BTrue i t ->
-    (* | <:class_expr< virtual $id:i$ [ $t$ ] >> -> *)
-          pp f "@[<2>virtual@ @[<1>[%a]@]@ %a@]" o#class_params t o#ident i
+    | <:class_expr< virtual $lid:i$ >> ->
+          pp f "@[<2>virtual@ %a@]" o#var i
+    | <:class_expr< virtual $lid:i$ [ $t$ ] >> ->
+          pp f "@[<2>virtual@ @[<1>[%a]@]@ %a@]" o#class_params t o#var i
     | <:class_expr< fun $p$ -> $ce$ >> ->
           pp f "@[<2>fun@ %a@ ->@ %a@]" o#patt p o#class_expr ce
     | <:class_expr< let $rec:r$ $bi$ in $ce$ >> ->
@@ -901,12 +902,10 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
           pp f "@[<2>%a@]" o#ident i
     | <:class_type< $id:i$ [ $t$ ] >> ->
           pp f "@[<2>[@,%a@]@,]@ %a" o#class_params t o#ident i
-    (* | <:class_type< virtual $id:i$ >> -> *)
-    | Ast.CtCon _ Ast.BTrue i <:ctyp<>> ->
-          pp f "@[<2>virtual@ %a@]" o#ident i
-    (* | <:class_type< virtual $id:i$ [ $t$ ] >> -> *)
-    | Ast.CtCon _ Ast.BTrue i t ->
-          pp f "@[<2>virtual@ [@,%a@]@,]@ %a" o#class_params t o#ident i
+    | <:class_type< virtual $lid:i$ >> ->
+          pp f "@[<2>virtual@ %a@]" o#var i
+    | <:class_type< virtual $lid:i$ [ $t$ ] >> ->
+          pp f "@[<2>virtual@ [@,%a@]@,]@ %a" o#class_params t o#var i
     | <:class_type< [ $t$ ] -> $ct$ >> ->
           pp f "@[<2>%a@ ->@ %a@]" o#simple_ctyp t o#class_type ct
     | <:class_type< object $csg$ end >> ->
@@ -1017,7 +1016,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
 end;
 
 module MakeMore (Syntax : Sig.Camlp4Syntax)
-: Sig.Printer with module Ast = Syntax.Ast
+: (Sig.Printer Syntax.Ast).S
 = struct
 
   include Make Syntax;
index ba930cf9a724c71bafe0df3389d1e27dd947b6cb..a856529d82e2e9c02e40ea1fb702f593c5f935b4 100644 (file)
@@ -22,7 +22,6 @@ module Make (Syntax : Sig.Camlp4Syntax) : sig
   open Format;
   include Sig.Camlp4Syntax
            with module Loc     = Syntax.Loc
-            and module Warning = Syntax.Warning
             and module Token   = Syntax.Token
             and module Ast     = Syntax.Ast
             and module Gram    = Syntax.Gram;
@@ -83,6 +82,7 @@ module Make (Syntax : Sig.Camlp4Syntax) : sig
     method ctyp1 : formatter -> Ast.ctyp -> unit;
     method constructor_type : formatter -> Ast.ctyp -> unit;
     method dot_expr : formatter -> Ast.expr -> unit;
+    method apply_expr : formatter -> Ast.expr -> unit;
     method expr : formatter -> Ast.expr -> unit;
     method expr_list : formatter -> list Ast.expr -> unit;
     method expr_list_cons : bool -> formatter -> Ast.expr -> unit;
@@ -94,7 +94,7 @@ module Make (Syntax : Sig.Camlp4Syntax) : sig
     method ident : formatter -> Ast.ident -> unit;
     method intlike : formatter -> string -> unit;
     method binding : formatter -> Ast.binding -> unit;
-    method record_binding : formatter -> Ast.binding -> unit;
+    method record_binding : formatter -> Ast.rec_binding -> unit;
     method match_case : formatter -> Ast.match_case -> unit;
     method match_case_aux : formatter -> Ast.match_case -> unit;
     method mk_expr_list : Ast.expr -> (list Ast.expr * option Ast.expr);
@@ -156,13 +156,6 @@ module Make (Syntax : Sig.Camlp4Syntax) : sig
 
   value print :
     option string -> (printer -> formatter -> 'a -> unit) -> 'a -> unit;
-
-  value print_interf :
-    ?input_file: string -> ?output_file: string -> Ast.sig_item -> unit;
-
-  value print_implem :
-    ?input_file: string -> ?output_file: string -> Ast.str_item -> unit;
 end;
 
-module MakeMore (Syntax : Sig.Camlp4Syntax)
-: Sig.Printer with module Ast = Syntax.Ast;
+module MakeMore (Syntax : Sig.Camlp4Syntax) : (Sig.Printer Syntax.Ast).S;
index cf2df59844869e34a5cfb6a9ee8196f09fa7ec54..cd2638e56fdc72dd91ea18dd373520fb573e5493 100644 (file)
@@ -20,7 +20,7 @@ open Format;
 
 module Id = struct
   value name = "Camlp4.Printers.OCamlr";
-  value version = "$Id: OCamlr.ml,v 1.17 2007/02/07 10:09:21 ertai Exp $";
+  value version = "$Id: OCamlr.ml,v 1.17.4.4 2007/05/10 22:43:18 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Camlp4Syntax) = struct
@@ -33,6 +33,12 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
 
   value pp = fprintf;
 
+  value is_keyword =
+    let keywords = ["where"]
+    and not_keywords = ["false"; "function"; "true"; "val"]
+    in fun s -> not (List.mem s not_keywords)
+             && (is_keyword s || List.mem s keywords);
+
   class printer ?curry_constr:(init_curry_constr = True) ?(comments = True) () =
   object (o)
     inherit PP_o.printer ~curry_constr:init_curry_constr ~comments () as super;
@@ -83,9 +89,9 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       | v ->
           match lex_string v with
           [ (LIDENT s | UIDENT s | ESCAPED_IDENT s) when is_keyword s ->
-               pp f "\\%s" s
+              pp f "%s__" s
           | SYMBOL s ->
-              pp f "\\%s" s
+              pp f "( %s )" s
           | LIDENT s | UIDENT s | ESCAPED_IDENT s ->
               pp_print_string f s
           | tok -> failwith (sprintf
@@ -165,30 +171,13 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     [ <:expr< $e$.val >> -> pp f "@[<2>%a.@,val@]" o#simple_expr e
     | e -> super#dot_expr f e ];
 
-    method simple_expr f e =
-    let () = o#node f e Ast.loc_of_expr in
-    match e with
-    [ <:expr< for $s$ = $e1$ to $e2$ do { $e3$ } >> ->
-        pp f "@[<hv0>@[<hv2>@[<2>for %a@ =@ %a@ to@ %a@ do {@]@ %a@]@ }@]"
-          o#var s o#expr e1 o#expr e2 o#seq e3
-    | <:expr< for $s$ = $e1$ downto $e2$ do { $e3$ } >> ->
-        pp f "@[<hv0>@[<hv2>@[<2>for %a@ =@ %a@ downto@ %a@ do {@]@ %a@]@ }@]"
-          o#var s o#expr e1 o#expr e2 o#seq e3
-    | <:expr< while $e1$ do { $e2$ } >> ->
-        pp f "@[<2>while@ %a@ do {@ %a@ }@]" o#expr e1 o#seq e2
-    | <:expr< do { $e$ } >> ->
-        pp f "@[<hv0>@[<hv2>do {@ %a@]@ }@]" o#seq e
-    | e -> super#simple_expr f e ];
-
     method ctyp f t =
     let () = o#node f t Ast.loc_of_ctyp in
     match t with
     [ Ast.TyDcl _ tn tp te cl -> do {
         pp f "@[<2>%a%a@]" o#var tn o#type_params tp;
         match te with
-        [ <:ctyp< '$s$ >>
-            when not (List.exists (fun [ <:ctyp< '$s'$ >> -> s = s'
-                                       | _ -> False ]) tp) -> ()
+        [ <:ctyp<>> -> ()
         | _ -> pp f " =@ %a" o#ctyp te ];
         if cl <> [] then pp f "@ %a" (list o#constrain "@ ") cl else ();
       }
@@ -249,12 +238,10 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
           pp f "@[<2>%a@]" o#ident i
     | <:class_type< $id:i$ [ $t$ ] >> ->
           pp f "@[<2>%a [@,%a@]@,]" o#ident i o#class_params t
-    (* | <:class_type< virtual $id:i$ >> -> *)
-    | Ast.CtCon _ Ast.BTrue i <:ctyp<>> ->
-          pp f "@[<2>virtual@ %a@]" o#ident i
-    (* | <:class_type< virtual $id:i$ [ $t$ ] >> -> *)
-    | Ast.CtCon _ Ast.BTrue i t ->
-          pp f "@[<2>virtual@ %a@ [@,%a@]@,]" o#ident i o#class_params t
+    | <:class_type< virtual $lid:i$ >> ->
+          pp f "@[<2>virtual@ %a@]" o#var i
+    | <:class_type< virtual $lid:i$ [ $t$ ] >> ->
+          pp f "@[<2>virtual@ %a@ [@,%a@]@,]" o#var i o#class_params t
     | ct -> super#class_type f ct ];
 
     method class_expr f ce =
@@ -264,12 +251,10 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
           pp f "@[<2>%a@]" o#ident i
     | <:class_expr< $id:i$ [ $t$ ] >> ->
           pp f "@[<2>%a@ @[<1>[%a]@]@]" o#ident i o#class_params t
-    (* | <:class_expr< virtual $id:i$ >> -> *)
-    | Ast.CeCon _ Ast.BTrue i <:ctyp<>> ->
-          pp f "@[<2>virtual@ %a@]" o#ident i
-    | Ast.CeCon _ Ast.BTrue i t ->
-    (* | <:class_expr< virtual $id:i$ [ $t$ ] >> -> *)
-          pp f "@[<2>virtual@ %a@ @[<1>[%a]@]@]" o#ident i o#ctyp t
+    | <:class_expr< virtual $lid:i$ >> ->
+          pp f "@[<2>virtual@ %a@]" o#var i
+    | <:class_expr< virtual $lid:i$ [ $t$ ] >> ->
+          pp f "@[<2>virtual@ %a@ @[<1>[%a]@]@]" o#var i o#ctyp t
     | ce -> super#class_expr f ce ];
   end;
 
@@ -281,7 +266,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
 end;
 
 module MakeMore (Syntax : Sig.Camlp4Syntax)
-: Sig.Printer with module Ast = Syntax.Ast
+: (Sig.Printer Syntax.Ast).S
 = struct
 
   include Make Syntax;
index c09bf6eb5ceec0f40b1d2e167e8cf27768b7c156..f1db176a54adade844588f47d73355c27f35218d 100644 (file)
@@ -22,7 +22,6 @@ module Make (Syntax : Sig.Camlp4Syntax) : sig
   open Format;
   include Sig.Camlp4Syntax
            with module Loc     = Syntax.Loc
-            and module Warning = Syntax.Warning
             and module Token   = Syntax.Token
             and module Ast     = Syntax.Ast
             and module Gram    = Syntax.Gram;
@@ -43,13 +42,6 @@ module Make (Syntax : Sig.Camlp4Syntax) : sig
 
   value print :
     option string -> (printer -> formatter -> 'a -> unit) -> 'a -> unit;
-
-  value print_interf :
-    ?input_file: string -> ?output_file: string -> Ast.sig_item -> unit;
-
-  value print_implem :
-    ?input_file: string -> ?output_file: string -> Ast.str_item -> unit;
 end;
 
-module MakeMore (Syntax : Sig.Camlp4Syntax)
-: Sig.Printer with module Ast = Syntax.Ast;
+module MakeMore (Syntax : Sig.Camlp4Syntax) : (Sig.Printer Syntax.Ast).S;
index e491f4c17368da5f809b0976231c6e3c828459ac..6044b0d97ec519e368216b78dbd94df680cdac30 100644 (file)
@@ -34,13 +34,18 @@ value str_item_printer = ref (fun ?input_file:(_) ?output_file:(_) _ -> failwith
 
 value callbacks = Queue.create ();
 
+value loaded_modules = ref [];
+
 value iter_and_take_callbacks f =
   let rec loop () = loop (f (Queue.take callbacks)) in
   try loop () with [ Queue.Empty -> () ];
 
 value declare_dyn_module m f =
-  (* let () = Format.eprintf "declare_dyn_module: %s@." m in *)
-  Queue.add (m, f) callbacks;
+  begin
+    (* let () = Format.eprintf "declare_dyn_module: %s@." m in *)
+    loaded_modules.val := [ m :: loaded_modules.val ];
+    Queue.add (m, f) callbacks;
+  end;
 
 value register_str_item_parser f = str_item_parser.val := f;
 value register_sig_item_parser f = sig_item_parser.val := f;
@@ -72,7 +77,7 @@ end;
 
 module Printer
   (Id : Sig.Id) (Maker : functor (Syn : Sig.Syntax)
-                                -> Sig.Printer with module Ast = Syn.Ast) =
+                                -> (Sig.Printer Syn.Ast).S) =
 struct
   declare_dyn_module Id.name (fun _ ->
     let module M = Maker Syntax in
@@ -81,7 +86,7 @@ end;
 
 module OCamlPrinter
   (Id : Sig.Id) (Maker : functor (Syn : Sig.Camlp4Syntax)
-                                -> Sig.Printer with module Ast = Syn.Ast) =
+                                -> (Sig.Printer Syn.Ast).S) =
 struct
   declare_dyn_module Id.name (fun _ ->
     let module M = Maker Syntax in
@@ -89,7 +94,7 @@ struct
 end;
 
 module OCamlPreCastPrinter
-  (Id : Sig.Id) (P : Sig.Printer with module Ast = PreCast.Ast) =
+  (Id : Sig.Id) (P : (Sig.Printer PreCast.Ast).S) =
 struct
   declare_dyn_module Id.name (fun _ ->
     register_printer P.print_implem P.print_interf);
@@ -97,7 +102,7 @@ end;
 
 module Parser
   (Id : Sig.Id) (Maker : functor (Ast : Sig.Ast)
-                                -> Sig.Parser with module Ast = Ast) =
+                                -> (Sig.Parser Ast).S) =
 struct
   declare_dyn_module Id.name (fun _ ->
     let module M = Maker PreCast.Ast in
@@ -106,7 +111,7 @@ end;
 
 module OCamlParser
   (Id : Sig.Id) (Maker : functor (Ast : Sig.Camlp4Ast)
-                                -> Sig.Parser with module Ast = Ast) =
+                                -> (Sig.Parser Ast).S) =
 struct
   declare_dyn_module Id.name (fun _ ->
     let module M = Maker PreCast.Ast in
@@ -114,7 +119,7 @@ struct
 end;
 
 module OCamlPreCastParser
-  (Id : Sig.Id) (P : Sig.Parser with module Ast = PreCast.Ast) =
+  (Id : Sig.Id) (P : (Sig.Parser PreCast.Ast).S) =
 struct
   declare_dyn_module Id.name (fun _ ->
     register_parser P.parse_implem P.parse_interf);
@@ -126,10 +131,8 @@ struct
   declare_dyn_module Id.name (fun _ -> let module M = Maker AstFilters in ());
 end;
 
-let module M = Syntax.Parser in do {
-  sig_item_parser.val := M.parse_interf;
-  str_item_parser.val := M.parse_implem;
-};
+sig_item_parser.val := Syntax.parse_interf;
+str_item_parser.val := Syntax.parse_implem;
 
 module CurrentParser = struct
   module Ast = Ast;
index 337ca55d2a3f03b2a6aad1e63a3bee1626757c27..df1180ffdd4b7d890e077014b76a5b0deb01a22e 100644 (file)
@@ -42,13 +42,13 @@ value register_sig_item_parser : parser_fun PreCast.Ast.sig_item -> unit;
 value register_parser : parser_fun PreCast.Ast.str_item -> parser_fun PreCast.Ast.sig_item -> unit;
 
 module Parser
-  (Id : Sig.Id) (Maker : functor (Ast : Sig.Ast) -> Sig.Parser with module Ast = Ast) : sig end;
+  (Id : Sig.Id) (Maker : functor (Ast : Sig.Ast) -> (Sig.Parser Ast).S) : sig end;
 
 module OCamlParser
-  (Id : Sig.Id) (Maker : functor (Ast : Sig.Camlp4Ast) -> Sig.Parser with module Ast = Ast) : sig end;
+  (Id : Sig.Id) (Maker : functor (Ast : Sig.Camlp4Ast) -> (Sig.Parser Ast).S) : sig end;
 
 module OCamlPreCastParser
-  (Id : Sig.Id) (Parser : Sig.Parser with module Ast = PreCast.Ast) : sig end;
+  (Id : Sig.Id) (Parser : (Sig.Parser PreCast.Ast).S) : sig end;
 
 (** {6 Registering Printers} *)
 
@@ -61,16 +61,16 @@ value register_printer : printer_fun PreCast.Ast.str_item -> printer_fun PreCast
 
 module Printer
   (Id : Sig.Id)
-  (Maker : functor (Syn : Sig.Syntax) -> Sig.Printer with module Ast = Syn.Ast) :
+  (Maker : functor (Syn : Sig.Syntax) -> (Sig.Printer Syn.Ast).S) :
     sig end;
 
 module OCamlPrinter
   (Id : Sig.Id)
-  (Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Printer with module Ast = Syn.Ast) :
+  (Maker : functor (Syn : Sig.Camlp4Syntax) -> (Sig.Printer Syn.Ast).S) :
     sig end;
 
 module OCamlPreCastPrinter
-  (Id : Sig.Id) (Printer : Sig.Printer with module Ast = PreCast.Ast) :
+  (Id : Sig.Id) (Printer : (Sig.Printer PreCast.Ast).S) :
     sig end;
 
 (** {6 Registering Filters} *)
@@ -80,9 +80,10 @@ module AstFilter
 
 value declare_dyn_module : string -> (unit -> unit) -> unit;
 value iter_and_take_callbacks : ((string * (unit -> unit)) -> unit) -> unit;
+value loaded_modules : ref (list string);
 
-module CurrentParser : Sig.Parser with module Ast = PreCast.Ast;
-module CurrentPrinter : Sig.Printer with module Ast = PreCast.Ast;
+module CurrentParser : (Sig.Parser PreCast.Ast).S;
+module CurrentPrinter : (Sig.Printer PreCast.Ast).S;
 
 value enable_ocaml_printer : unit -> unit;
 value enable_ocamlr_printer : unit -> unit;
index a3f80057d0ec130ba4b6517cadd7838242e2c5e5..989ca93b00e7c933325adc7ce980cd95564a59e6 100644 (file)
  *)
 
 module type Type = sig
-  type t = 'abstract;
+  type t;
 end;
 
 (** Signature for errors modules, an Error modules can be registred with
     the {!ErrorHandler.Register} functor in order to be well printed. *)
 module type Error = sig
-  type t = 'abstract;
+  type t;
   exception E of t;
   value to_string : t -> string;
   value print : Format.formatter -> t -> unit;
@@ -37,14 +37,14 @@ module type Id = sig
   (** The name of the extension, typically the module name. *)
   value name    : string;
 
-  (** The version of the extension, typically $Id: Sig.ml,v 1.2 2007/02/26 16:32:46 ertai Exp $ with a versionning system. *)
+  (** The version of the extension, typically $Id: Sig.ml,v 1.2.2.10 2007/05/10 22:43:18 pouillar Exp $ with a versionning system. *)
   value version : string;
 
 end;
 
 module type Loc = sig
 
-  type t = 'a;
+  type t;
 
   (** Return a start location for the given file name.
       This location starts at the begining of the file. *)
@@ -174,12 +174,13 @@ module type Loc = sig
 
 end;
 
-module type Warning = sig
-  module Loc : Loc;
-  type t = Loc.t -> string -> unit;
-  value default : t;
-  value current : ref t;
-  value print   : t;
+module Warning (Loc : Loc) = struct
+  module type S = sig
+    type warning = Loc.t -> string -> unit;
+    value default_warning : warning;
+    value current_warning : ref warning;
+    value print_warning   : warning;
+  end;
 end;
 
 (** Base class for map traversal, it includes some builtin types. *)
@@ -214,25 +215,26 @@ module type Ast = sig
 
   module Loc : Loc;
 
-  type meta_bool = 'abstract;
-  type meta_option 'a = 'abstract;
-  type meta_list 'a = 'abstract;
-  type ctyp = 'abstract;
-  type patt = 'abstract;
-  type expr = 'abstract;
-  type module_type = 'abstract;
-  type sig_item = 'abstract;
-  type with_constr = 'abstract;
-  type module_expr = 'abstract;
-  type str_item = 'abstract;
-  type class_type = 'abstract;
-  type class_sig_item = 'abstract;
-  type class_expr = 'abstract;
-  type class_str_item = 'abstract;
-  type match_case = 'abstract;
-  type ident = 'abstract;
-  type binding = 'abstract;
-  type module_binding = 'abstract;
+  type meta_bool;
+  type meta_option 'a;
+  type meta_list 'a;
+  type ctyp;
+  type patt;
+  type expr;
+  type module_type;
+  type sig_item;
+  type with_constr;
+  type module_expr;
+  type str_item;
+  type class_type;
+  type class_sig_item;
+  type class_expr;
+  type class_str_item;
+  type match_case;
+  type ident;
+  type binding;
+  type rec_binding;
+  type module_binding;
 
   value loc_of_ctyp : ctyp -> Loc.t;
   value loc_of_patt : patt -> Loc.t;
@@ -247,6 +249,7 @@ module type Ast = sig
   value loc_of_class_str_item : class_str_item -> Loc.t;
   value loc_of_with_constr : with_constr -> Loc.t;
   value loc_of_binding : binding -> Loc.t;
+  value loc_of_rec_binding : rec_binding -> Loc.t;
   value loc_of_module_binding : module_binding -> Loc.t;
   value loc_of_match_case : match_case -> Loc.t;
   value loc_of_ident : ident -> Loc.t;
@@ -287,6 +290,7 @@ module type Ast = sig
     method class_str_item : class_str_item -> class_str_item;
     method with_constr : with_constr -> with_constr;
     method binding : binding -> binding;
+    method rec_binding : rec_binding -> rec_binding;
     method module_binding : module_binding -> module_binding;
     method match_case : match_case -> match_case;
     method ident : ident -> ident;
@@ -318,6 +322,7 @@ module type Ast = sig
     method class_str_item : class_str_item -> 'self_type;
     method with_constr : with_constr -> 'self_type;
     method binding : binding -> 'self_type;
+    method rec_binding : rec_binding -> 'self_type;
     method module_binding : module_binding -> 'self_type;
     method match_case : match_case -> 'self_type;
     method ident : ident -> 'self_type;
@@ -345,7 +350,31 @@ end;
     It provides:
       - Types for all kinds of structure.
       - Map: A base class for map traversals.
-      - Map classes and functions for common kinds. *)
+      - Map classes and functions for common kinds.
+
+    (* Core language *)
+    ctyp               (* Representaion of types                                     *)
+    patt               (* The type of patterns                                       *)
+    expr               (* The type of expressions                                    *)
+    match_case         (* The type of cases for match/function/try constructions     *)
+    ident              (* The type of identifiers (including path like Foo(X).Bar.y) *)
+    binding            (* The type of let bindings                                   *)
+    rec_binding        (* The type of record definitions                             *)
+
+    (* Modules *)
+    module_type        (* The type of module types                                   *)
+    sig_item           (* The type of signature items                                *)
+    str_item           (* The type of structure items                                *)
+    module_expr        (* The type of module expressions                             *)
+    module_binding     (* The type of recursive module definitions                   *)
+    with_constr        (* The type of `with' constraints                             *)
+
+    (* Classes *)
+    class_type         (* The type of class types                                    *)
+    class_sig_item     (* The type of class signature items                          *)
+    class_expr         (* The type of class expressions                              *)
+    class_str_item     (* The type of class structure items                          *)
+ *)
 module type Camlp4Ast = sig
 
   module Loc : Loc;
@@ -365,6 +394,7 @@ module type Camlp4Ast = sig
   value loc_of_class_str_item : class_str_item -> Loc.t;
   value loc_of_with_constr : with_constr -> Loc.t;
   value loc_of_binding : binding -> Loc.t;
+  value loc_of_rec_binding : rec_binding -> Loc.t;
   value loc_of_module_binding : module_binding -> Loc.t;
   value loc_of_match_case : match_case -> Loc.t;
   value loc_of_ident : ident -> Loc.t;
@@ -401,6 +431,7 @@ module type Camlp4Ast = sig
         value meta_bool : Loc.t -> bool -> expr;
         value meta_list : (Loc.t -> 'a -> expr) -> Loc.t -> list 'a -> expr;
         value meta_binding : Loc.t -> binding -> expr;
+        value meta_rec_binding : Loc.t -> rec_binding -> expr;
         value meta_class_expr : Loc.t -> class_expr -> expr;
         value meta_class_sig_item : Loc.t -> class_sig_item -> expr;
         value meta_class_str_item : Loc.t -> class_str_item -> expr;
@@ -425,6 +456,7 @@ module type Camlp4Ast = sig
         value meta_bool : Loc.t -> bool -> patt;
         value meta_list : (Loc.t -> 'a -> patt) -> Loc.t -> list 'a -> patt;
         value meta_binding : Loc.t -> binding -> patt;
+        value meta_rec_binding : Loc.t -> rec_binding -> patt;
         value meta_class_expr : Loc.t -> class_expr -> patt;
         value meta_class_sig_item : Loc.t -> class_sig_item -> patt;
         value meta_class_str_item : Loc.t -> class_str_item -> patt;
@@ -465,6 +497,7 @@ module type Camlp4Ast = sig
     method class_str_item : class_str_item -> class_str_item;
     method with_constr : with_constr -> with_constr;
     method binding : binding -> binding;
+    method rec_binding : rec_binding -> rec_binding;
     method module_binding : module_binding -> module_binding;
     method match_case : match_case -> match_case;
     method ident : ident -> ident;
@@ -497,38 +530,33 @@ module type Camlp4Ast = sig
     method class_str_item : class_str_item -> 'self_type;
     method with_constr : with_constr -> 'self_type;
     method binding : binding -> 'self_type;
+    method rec_binding : rec_binding -> 'self_type;
     method module_binding : module_binding -> 'self_type;
     method match_case : match_case -> 'self_type;
     method ident : ident -> 'self_type;
   end;
 
-  (** See {!Ast.remove_antiquots}. *)
-  (* class remove_antiquots : object inherit map; end; *)
-
-  class c_expr : [expr -> expr] -> object inherit map; end;
-  class c_patt : [patt -> patt] -> object inherit map; end;
-  class c_ctyp : [ctyp -> ctyp] -> object inherit map; end;
-  class c_str_item : [str_item -> str_item] -> object inherit map; end;
-  class c_sig_item : [sig_item -> sig_item] -> object inherit map; end;
-  class c_loc : [Loc.t -> Loc.t] -> object inherit map; end;
-  
-  value map_expr : (expr -> expr) -> expr -> expr;
-  value map_patt : (patt -> patt) -> patt -> patt;
-  value map_ctyp : (ctyp -> ctyp) -> ctyp -> ctyp;
-  value map_str_item : (str_item -> str_item) -> str_item -> str_item;
-  value map_sig_item : (sig_item -> sig_item) -> sig_item -> sig_item;
-  value map_loc : (Loc.t -> Loc.t) -> Loc.t -> Loc.t;
+  value map_expr : (expr -> expr) -> map;
+  value map_patt : (patt -> patt) -> map;
+  value map_ctyp : (ctyp -> ctyp) -> map;
+  value map_str_item : (str_item -> str_item) -> map;
+  value map_sig_item : (sig_item -> sig_item) -> map;
+  value map_loc : (Loc.t -> Loc.t) -> map;
 
   value ident_of_expr : expr -> ident;
+  value ident_of_patt : patt -> ident;
   value ident_of_ctyp : ctyp -> ident;
 
   value biAnd_of_list : list binding -> binding;
-  value biSem_of_list : list binding -> binding;
+  value rbSem_of_list : list rec_binding -> rec_binding;
   value paSem_of_list : list patt -> patt;
   value paCom_of_list : list patt -> patt;
   value tyOr_of_list : list ctyp -> ctyp;
   value tyAnd_of_list : list ctyp -> ctyp;
+  value tyAmp_of_list : list ctyp -> ctyp;
   value tySem_of_list : list ctyp -> ctyp;
+  value tyCom_of_list : list ctyp -> ctyp;
+  value tySta_of_list : list ctyp -> ctyp;
   value stSem_of_list : list str_item -> str_item;
   value sgSem_of_list : list sig_item -> sig_item;
   value crSem_of_list : list class_str_item -> class_str_item;
@@ -546,6 +574,7 @@ module type Camlp4Ast = sig
 
   value list_of_ctyp : ctyp -> list ctyp -> list ctyp;
   value list_of_binding : binding -> list binding -> list binding;
+  value list_of_rec_binding : rec_binding -> list rec_binding -> list rec_binding;
   value list_of_with_constr : with_constr -> list with_constr -> list with_constr;
   value list_of_patt : patt -> list patt -> list patt;
   value list_of_expr : expr -> list expr -> list expr;
@@ -602,6 +631,7 @@ module Camlp4AstToAst (M : Camlp4Ast) : Ast
    and type class_expr = M.class_expr
    and type class_str_item = M.class_str_item
    and type binding = M.binding
+   and type rec_binding = M.rec_binding
    and type module_binding = M.module_binding
    and type match_case = M.match_case
    and type ident = M.ident
@@ -635,6 +665,41 @@ module type AstFilters = sig
 
 end;
 
+(** Ast as one single type *)
+
+module type DynAst = sig
+  module Ast : Ast;
+  type tag 'a;
+
+  value ctyp_tag : tag Ast.ctyp;
+  value patt_tag : tag Ast.patt;
+  value expr_tag : tag Ast.expr;
+  value module_type_tag : tag Ast.module_type;
+  value sig_item_tag : tag Ast.sig_item;
+  value with_constr_tag : tag Ast.with_constr;
+  value module_expr_tag : tag Ast.module_expr;
+  value str_item_tag : tag Ast.str_item;
+  value class_type_tag : tag Ast.class_type;
+  value class_sig_item_tag : tag Ast.class_sig_item;
+  value class_expr_tag : tag Ast.class_expr;
+  value class_str_item_tag : tag Ast.class_str_item;
+  value match_case_tag : tag Ast.match_case;
+  value ident_tag : tag Ast.ident;
+  value binding_tag : tag Ast.binding;
+  value rec_binding_tag : tag Ast.rec_binding;
+  value module_binding_tag : tag Ast.module_binding;
+
+  value string_of_tag : tag 'a -> string;
+
+  module Pack (X : sig type t 'a; end) : sig
+    type pack;
+    value pack : tag 'a -> X.t 'a -> pack;
+    value unpack : tag 'a -> pack -> X.t 'a;
+    value print_tag : Format.formatter -> pack -> unit;
+  end;
+end;
+
+
 (** Quotation operations. *)
 
 type quotation =
@@ -645,45 +710,32 @@ type quotation =
 
 module type Quotation = sig
   module Ast : Ast;
+  module DynAst : DynAst with module Ast = Ast;
   open Ast;
 
   (** The Loc.t is the initial location. The option string is the optional name
       for the location variable. The string is the quotation contents. *)
   type expand_fun 'a = Loc.t -> option string -> string -> 'a;
 
-  (** The type for quotation expanders kind:
-  -      [ExStr exp] for an expander [exp] returning a string which
-          can be parsed to create a syntax tree. Its boolean parameter
-          tells whether the quotation is in position of an expression
-          (True) or in position of a pattern (False). Quotations expanders
-          created with this way may work for some particular language syntax,
-          and not for another one (e.g. may work when used with Revised
-          syntax and not when used with Ocaml syntax, and conversely).
-  -      [ExAst (expr_exp, patt_exp)] for expanders returning directly
-          syntax trees, therefore not necessiting to be parsed afterwards.
-          The function [expr_exp] is called when the quotation is in
-          position of an expression, and [patt_exp] when the quotation is
-          in position of a pattern. Quotation expanders created with this
-          way are independant from the language syntax. *)
-  type expander =
-    [ ExStr of bool -> expand_fun string
-    | ExAst of (expand_fun Ast.expr) and (expand_fun Ast.patt) ];
-
   (** [add name exp] adds the quotation [name] associated with the
       expander [exp]. *)
-  value add : string -> expander -> unit;
+  value add : string -> DynAst.tag 'a -> expand_fun 'a -> unit;
 
   (** [find name] returns the expander of the given quotation name. *)
-  value find : string -> expander;
+  value find : string -> DynAst.tag 'a -> expand_fun 'a;
 
   (** [default] holds the default quotation name. *)
   value default : ref string;
 
+  (** [parse_quotation_result parse_function loc position_tag quotation quotation_result]
+      It's a parser wrapper, this function handles the error reporting for you. *)
+  value parse_quotation_result :
+    (Loc.t -> string -> 'a) -> Loc.t -> quotation -> string -> string -> 'a;
+
   (** function translating quotation names; default = identity *)
   value translate : ref (string -> string);
 
-  value expand_expr : (Loc.t -> string -> Ast.expr) -> Loc.t -> quotation -> Ast.expr;
-  value expand_patt : (Loc.t -> string -> Ast.patt) -> Loc.t -> quotation -> Ast.patt;
+  value expand : Loc.t -> quotation -> DynAst.tag 'a -> 'a;
 
   (** [dump_file] optionally tells Camlp4 to dump the
       result of an expander if this result is syntactically incorrect.
@@ -701,7 +753,7 @@ module type Token = sig
 
   module Loc : Loc;
 
-  type t = 'abstract;
+  type t;
 
   value to_string : t -> string;
   
@@ -718,7 +770,7 @@ module type Token = sig
     (** The type for this filter chain.
         A basic implementation just store the [is_keyword] function given
         by [mk] and use it in the [filter] function. *)
-    type t = 'abstract;
+    type t;
 
     (** The given predicate function returns true if the given string
         is a keyword. This function can be used in filters to translate
@@ -802,7 +854,7 @@ type camlp4_token =
 module type Camlp4Token = Token with type t = camlp4_token;
 
 module type DynLoader = sig
-  type t = 'abstract;
+  type t;
   exception Error of string and string;
 
   (** [mk ?ocaml_stdlib ?camlp4_stdlib]
@@ -831,7 +883,7 @@ module Grammar = struct
   (** Internal signature for sematantic actions of grammars,
       not for the casual user. These functions are unsafe. *)
   module type Action = sig
-    type  t     = 'abstract;
+    type  t    ;
 
     value mk    : 'a ->  t;
     value get   :  t -> 'a;
@@ -857,9 +909,9 @@ module Grammar = struct
     module Action : Action;
     module Token  : Token with module Loc = Loc;
 
-    type gram = 'abstract;
-    type internal_entry = 'abstract;
-    type tree = 'abstract;
+    type gram;
+    type internal_entry;
+    type tree;
 
     type token_pattern = ((Token.t -> bool) * string);
 
@@ -907,7 +959,7 @@ module Grammar = struct
     module Entry : sig
       (** The abstract type of grammar entries. The type parameter is the type
           of the semantic actions that are associated with this entry. *)
-      type t 'a = 'abstract;
+      type t 'a;
   
       (** Make a new entry from the given name. *)
       value mk : gram -> string -> t 'a;
@@ -937,7 +989,7 @@ module Grammar = struct
     (** [get_filter g] Get the {!Token.Filter} associated to the [g]. *)
     value get_filter : gram -> Token.Filter.t;
 
-    type not_filtered 'a = 'abstract;
+    type not_filtered 'a;
 
     (** This function is called by the EXTEND ... END syntax. *)
     value extend      : Entry.t 'a -> extend_statment -> unit;
@@ -988,7 +1040,7 @@ module Grammar = struct
     module Entry : sig
       (** The abstract type of grammar entries. The type parameter is the type
           of the semantic actions that are associated with this entry. *)
-      type t 'a = 'abstract;
+      type t 'a;
 
       (** Make a new entry from the given name. *)
       value mk : string -> t 'a;
@@ -1018,7 +1070,7 @@ module Grammar = struct
     (** Get the {!Token.Filter} associated to the grammar module. *)
     value get_filter : unit -> Token.Filter.t;
 
-    type not_filtered 'a = 'abstract;
+    type not_filtered 'a;
 
     (** This function is called by the EXTEND ... END syntax. *)
     value extend      : Entry.t 'a -> extend_statment -> unit;
@@ -1075,37 +1127,35 @@ end;
 
 
 (** {6 Parser} *)
-module type Parser = sig
-
-  module Ast : Ast;
-  open Ast;
-
-  (** Called when parsing an implementation (ml file) to build the syntax
-      tree; the returned list contains the phrases (structure items) as a
-      single "declare" node (a list of structure items);   if  the parser
-      encounter a directive it stops (since the directive may change  the
-      syntax), the given [directive_handler] function  evaluates  it  and
-      the parsing starts again. *)
-  value parse_implem : ?directive_handler:(str_item -> option str_item) ->
-                       Loc.t -> Stream.t char -> Ast.str_item;
-
-  (** Same as {!parse_implem} but for interface (mli file). *)
-  value parse_interf : ?directive_handler:(sig_item -> option sig_item) ->
-                       Loc.t -> Stream.t char -> Ast.sig_item;
-
+module Parser (Ast : Ast) = struct
+  module type S = sig
+
+    (** Called when parsing an implementation (ml file) to build the syntax
+        tree; the returned list contains the phrases (structure items) as a
+        single "declare" node (a list of structure items);   if  the parser
+        encounter a directive it stops (since the directive may change  the
+        syntax), the given [directive_handler] function  evaluates  it  and
+        the parsing starts again. *)
+    value parse_implem : ?directive_handler:(Ast.str_item -> option Ast.str_item) ->
+                        Ast.Loc.t -> Stream.t char -> Ast.str_item;
+
+    (** Same as {!parse_implem} but for interface (mli file). *)
+    value parse_interf : ?directive_handler:(Ast.sig_item -> option Ast.sig_item) ->
+                        Ast.Loc.t -> Stream.t char -> Ast.sig_item;
+  end;
 end;
 
 (** {6 Printer} *)
 
-module type Printer = sig
-
-  module Ast : Ast;
+module Printer (Ast : Ast) = struct
+  module type S = sig
 
-  value print_interf : ?input_file:string -> ?output_file:string ->
-                       Ast.sig_item -> unit;
-  value print_implem : ?input_file:string -> ?output_file:string ->
-                       Ast.str_item -> unit;
+    value print_interf : ?input_file:string -> ?output_file:string ->
+                        Ast.sig_item -> unit;
+    value print_implem : ?input_file:string -> ?output_file:string ->
+                        Ast.str_item -> unit;
 
+  end;
 end;
 
 (** A syntax module is a sort of constistent bunch of modules and values.
@@ -1114,15 +1164,16 @@ end;
    There is also the main grammar entries. *)
 module type Syntax = sig
   module Loc            : Loc;
-  module Warning        : Warning with module Loc = Loc;
   module Ast            : Ast with module Loc = Loc;
   module Token          : Token with module Loc = Loc;
   module Gram           : Grammar.Static with module Loc = Loc and module Token = Token;
   module AntiquotSyntax : AntiquotSyntax with module Ast = Ast;
                           (* Gram is not constrained here for flexibility *)
   module Quotation      : Quotation with module Ast = Ast;
-  module Parser         : Parser with module Ast = Ast;
-  module Printer        : Printer with module Ast = Ast;
+
+  include (Warning Loc).S;
+  include (Parser  Ast).S;
+  include (Printer Ast).S;
 end;
 
 (** A syntax module is a sort of constistent bunch of modules and values.
@@ -1131,7 +1182,6 @@ end;
     There is also the main grammar entries. *)
 module type Camlp4Syntax = sig
   module Loc            : Loc;
-  module Warning        : Warning with module Loc = Loc;
 
   module Ast            : Camlp4Ast with module Loc = Loc;
   module Token          : Camlp4Token with module Loc = Loc;
@@ -1140,8 +1190,10 @@ module type Camlp4Syntax = sig
   module AntiquotSyntax : AntiquotSyntax with module Ast = Camlp4AstToAst Ast;
                           (* Gram is not constrained here for flexibility *)
   module Quotation      : Quotation with module Ast = Camlp4AstToAst Ast;
-  module Parser         : Parser with module Ast = Camlp4AstToAst Ast;
-  module Printer        : Printer with module Ast = Camlp4AstToAst Ast;
+
+  include (Warning Loc).S;
+  include (Parser  Ast).S;
+  include (Printer Ast).S;
 
   value interf : Gram.Entry.t (list Ast.sig_item * option Loc.t);
   value implem : Gram.Entry.t (list Ast.str_item * option Loc.t);
@@ -1154,7 +1206,6 @@ module type Camlp4Syntax = sig
   value a_INT64 : Gram.Entry.t string;
   value a_LABEL : Gram.Entry.t string;
   value a_LIDENT : Gram.Entry.t string;
-  value a_LIDENT_or_operator : Gram.Entry.t string;
   value a_NATIVEINT : Gram.Entry.t string;
   value a_OPTLABEL : Gram.Entry.t string;
   value a_STRING : Gram.Entry.t string;
@@ -1167,6 +1218,7 @@ module type Camlp4Syntax = sig
   value match_case_quot : Gram.Entry.t Ast.match_case;
   value binding : Gram.Entry.t Ast.binding;
   value binding_quot : Gram.Entry.t Ast.binding;
+  value rec_binding_quot : Gram.Entry.t Ast.rec_binding;
   value class_declaration : Gram.Entry.t Ast.class_expr;
   value class_description : Gram.Entry.t Ast.class_type;
   value class_expr : Gram.Entry.t Ast.class_expr;
@@ -1208,8 +1260,7 @@ module type Camlp4Syntax = sig
   value expr : Gram.Entry.t Ast.expr;
   value expr_eoi : Gram.Entry.t Ast.expr;
   value expr_quot : Gram.Entry.t Ast.expr;
-  value field : Gram.Entry.t Ast.ctyp;
-  value field_expr : Gram.Entry.t Ast.binding;
+  value field_expr : Gram.Entry.t Ast.rec_binding;
   value fun_binding : Gram.Entry.t Ast.expr;
   value fun_def : Gram.Entry.t Ast.expr;
   value ident : Gram.Entry.t Ast.ident;
@@ -1218,7 +1269,7 @@ module type Camlp4Syntax = sig
   value ipatt_tcon : Gram.Entry.t Ast.patt;
   value label : Gram.Entry.t string;
   value label_declaration : Gram.Entry.t Ast.ctyp;
-  value label_expr : Gram.Entry.t Ast.binding;
+  value label_expr : Gram.Entry.t Ast.rec_binding;
   value label_ipatt : Gram.Entry.t Ast.patt;
   value label_longident : Gram.Entry.t Ast.ident;
   value label_patt : Gram.Entry.t Ast.patt;
@@ -1243,7 +1294,7 @@ module type Camlp4Syntax = sig
   value opt_class_self_type : Gram.Entry.t Ast.ctyp;
   value opt_comma_ctyp : Gram.Entry.t Ast.ctyp;
   value opt_dot_dot : Gram.Entry.t Ast.meta_bool;
-  value opt_eq_ctyp : Gram.Entry.t (list Ast.ctyp -> Ast.ctyp);
+  value opt_eq_ctyp : Gram.Entry.t Ast.ctyp;
   value opt_expr : Gram.Entry.t Ast.expr;
   value opt_meth_list : Gram.Entry.t Ast.ctyp;
   value opt_mutable : Gram.Entry.t Ast.meta_bool;
@@ -1258,16 +1309,15 @@ module type Camlp4Syntax = sig
   value patt_quot : Gram.Entry.t Ast.patt;
   value patt_tcon : Gram.Entry.t Ast.patt;
   value phrase : Gram.Entry.t Ast.str_item;
-  value pipe_ctyp : Gram.Entry.t Ast.ctyp;
   value poly_type : Gram.Entry.t Ast.ctyp;
   value row_field : Gram.Entry.t Ast.ctyp;
-  value sem_ctyp : Gram.Entry.t Ast.ctyp;
   value sem_expr : Gram.Entry.t Ast.expr;
   value sem_expr_for_list : Gram.Entry.t (Ast.expr -> Ast.expr);
   value sem_patt : Gram.Entry.t Ast.patt;
   value sem_patt_for_list : Gram.Entry.t (Ast.patt -> Ast.patt);
   value semi : Gram.Entry.t unit;
   value sequence : Gram.Entry.t Ast.expr;
+  value do_sequence : Gram.Entry.t Ast.expr;
   value sig_item : Gram.Entry.t Ast.sig_item;
   value sig_item_quot : Gram.Entry.t Ast.sig_item;
   value sig_items : Gram.Entry.t Ast.sig_item;
@@ -1289,11 +1339,16 @@ module type Camlp4Syntax = sig
   value value_val : Gram.Entry.t unit;
   value with_constr : Gram.Entry.t Ast.with_constr;
   value with_constr_quot : Gram.Entry.t Ast.with_constr;
+  value prefixop : Gram.Entry.t Ast.expr;
+  value infixop0 : Gram.Entry.t Ast.expr;
+  value infixop1 : Gram.Entry.t Ast.expr;
+  value infixop2 : Gram.Entry.t Ast.expr;
+  value infixop3 : Gram.Entry.t Ast.expr;
+  value infixop4 : Gram.Entry.t Ast.expr;
 end;
 
 module type SyntaxExtension = functor (Syn : Syntax)
                     -> (Syntax with module Loc            = Syn.Loc
-                                and module Warning        = Syn.Warning
                                 and module Ast            = Syn.Ast
                                 and module Token          = Syn.Token
                                 and module Gram           = Syn.Gram
index bd8c40a1ecb7a3a53f463c9fb2888750f8338993..a939fe77bade57e670af476c9d2ce6c744b3389c 100644 (file)
@@ -11,5 +11,5 @@ Lexer
 Loc
 Quotation
 Token
-Warning
 Grammar
+DynAst
index 95bccdb5ccacd02716733070036c6f4d4a5881d7..b7a8b4ff665ea4cdf9beb127022bd85152b19cf7 100644 (file)
@@ -45,93 +45,11 @@ module Make (Loc : Sig.Loc)
   external loc_of_class_str_item : class_str_item -> Loc.t = "%field0";
   external loc_of_with_constr : with_constr -> Loc.t = "%field0";
   external loc_of_binding : binding -> Loc.t = "%field0";
+  external loc_of_rec_binding : rec_binding -> Loc.t = "%field0";
   external loc_of_module_binding : module_binding -> Loc.t = "%field0";
   external loc_of_match_case : match_case -> Loc.t = "%field0";
   external loc_of_ident : ident -> Loc.t = "%field0";
 
-  module Meta = struct
-
-    module type META_LOC = sig
-      (** The first location is where to put the returned pattern.
-          Generally it's _loc to match with <:patt< ... >> quotations.
-          The second location is the one to treat. *)
-      value meta_loc_patt : Loc.t -> Loc.t -> Ast.patt;
-      (** The first location is where to put the returned expression.
-          Generally it's _loc to match with <:expr< ... >> quotations.
-          The second location is the one to treat. *)
-      value meta_loc_expr : Loc.t -> Loc.t -> Ast.expr;
-    end;
-
-    module MetaLoc = struct
-      value meta_loc_patt _loc location =
-        let (a, b, c, d, e, f, g, h) = Loc.to_tuple location in
-        <:patt< Loc.of_tuple
-                  ($`str:a$, $`int:b$, $`int:c$, $`int:d$,
-                  $`int:e$, $`int:f$, $`int:g$,
-                  $if h then <:patt< True >> else <:patt< False >> $) >>;
-      value meta_loc_expr _loc location =
-        let (a, b, c, d, e, f, g, h) = Loc.to_tuple location in
-        <:expr< Loc.of_tuple
-                  ($`str:a$, $`int:b$, $`int:c$, $`int:d$,
-                  $`int:e$, $`int:f$, $`int:g$,
-                  $if h then <:expr< True >> else <:expr< False >> $) >>;
-    end;
-
-    module MetaGhostLoc = struct
-      value meta_loc_patt _loc _ = <:patt< Loc.ghost >>;
-      value meta_loc_expr _loc _ = <:expr< Loc.ghost >>;
-    end;
-
-    module MetaLocVar = struct
-      value meta_loc_patt _loc _ = <:patt< $lid:Loc.name.val$ >>;
-      value meta_loc_expr _loc _ = <:expr< $lid:Loc.name.val$ >>;
-    end;
-
-    module Make (MetaLoc : META_LOC) = struct
-      open MetaLoc;
-
-      value meta_acc_Loc_t = meta_loc_expr;
-      module Expr = Camlp4Filters.MetaGeneratorExpr Ast;
-      value meta_acc_Loc_t = meta_loc_patt;
-      module Patt = Camlp4Filters.MetaGeneratorPatt Ast;
-    end;
-
-  end;
-
-  class map = Camlp4Filters.GenerateMap.generated;
-
-  class fold = Camlp4Filters.GenerateFold.generated;
-
-  class c_expr f = object
-    inherit map as super;
-    method expr x = f (super#expr x);
-  end;
-  class c_patt f = object
-    inherit map as super;
-    method patt x = f (super#patt x);
-  end;
-  class c_ctyp f = object
-    inherit map as super;
-    method ctyp x = f (super#ctyp x);
-  end;
-  class c_str_item f = object
-    inherit map as super;
-    method str_item x = f (super#str_item x);
-  end;
-  class c_sig_item f = object
-    inherit map as super;
-    method sig_item x = f (super#sig_item x);
-  end;
-  class c_loc f = object
-    inherit map as super;
-    method _Loc_t x = f (super#_Loc_t x);
-  end;
-  value map_patt f ast = (new c_patt f)#patt ast;
-  value map_loc f ast = (new c_loc f)#_Loc_t ast;
-  value map_sig_item f ast = (new c_sig_item f)#sig_item ast;
-  value map_str_item f ast = (new c_str_item f)#str_item ast;
-  value map_ctyp f ast = (new c_ctyp f)#ctyp ast;
-  value map_expr f ast = (new c_expr f)#expr ast;
   value ghost = Loc.ghost;
 
   value rec is_module_longident =
@@ -142,6 +60,47 @@ module Make (Loc : Sig.Loc)
     | <:ident< $uid:_$ >> -> True
     | _ -> False ];
 
+  value ident_of_expr =
+    let error () =
+      invalid_arg "ident_of_expr: this expression is not an identifier" in
+    let rec self =
+      fun
+      [ <:expr@_loc< $e1$ $e2$ >> -> <:ident< $self e1$ $self e2$ >>
+      | <:expr@_loc< $e1$.$e2$ >> -> <:ident< $self e1$.$self e2$ >>
+      | <:expr< $lid:_$ >> -> error ()
+      | <:expr< $id:i$ >> -> if is_module_longident i then i else error ()
+      | _ -> error () ] in
+    fun
+    [ <:expr< $id:i$ >> -> i
+    | <:expr< $_$ $_$ >> -> error ()
+    | t -> self t ];
+
+  value ident_of_ctyp =
+    let error () =
+      invalid_arg "ident_of_ctyp: this type is not an identifier" in
+    let rec self =
+      fun
+      [ <:ctyp@_loc< $t1$ $t2$ >> -> <:ident< $self t1$ $self t2$ >>
+      | <:ctyp< $lid:_$ >> -> error ()
+      | <:ctyp< $id:i$ >> -> if is_module_longident i then i else error ()
+      | _ -> error () ] in
+    fun
+    [ <:ctyp< $id:i$ >> -> i
+    | t -> self t ];
+
+  value ident_of_patt =
+    let error () =
+      invalid_arg "ident_of_patt: this pattern is not an identifier" in
+    let rec self =
+      fun
+      [ <:patt@_loc< $p1$ $p2$ >> -> <:ident< $self p1$ $self p2$ >>
+      | <:patt< $lid:_$ >> -> error ()
+      | <:patt< $id:i$ >> -> if is_module_longident i then i else error ()
+      | _ -> error () ] in
+    fun
+    [ <:patt< $id:i$ >> -> i
+    | p -> self p ];
+
   value rec is_irrefut_patt =
     fun
     [ <:patt< $lid:_$ >> -> True
@@ -181,34 +140,6 @@ module Make (Loc : Sig.Loc)
     | <:expr< `$_$ >> -> True
     | _ -> False ];
 
-  value ident_of_expr =
-    let error () =
-      invalid_arg "ident_of_expr: this expression is not an identifier" in
-    let rec self =
-      fun
-      [ <:expr@_loc< $e1$ $e2$ >> -> <:ident< $self e1$ $self e2$ >>
-      | <:expr@_loc< $e1$.$e2$ >> -> <:ident< $self e1$.$self e2$ >>
-      | <:expr< $lid:_$ >> -> error ()
-      | <:expr< $id:i$ >> -> if is_module_longident i then i else error ()
-      | <:expr< $_$ >> -> error () ] in
-    fun
-    [ <:expr< $id:i$ >> -> i
-    | <:expr< $_$ $_$ >> -> error ()
-    | t -> self t ];
-
-  value ident_of_ctyp =
-    let error () =
-      invalid_arg "ident_of_ctyp: this type is not an identifier" in
-    let rec self =
-      fun
-      [ <:ctyp@_loc< $t1$ $t2$ >> -> <:ident< $self t1$ $self t2$ >>
-      | <:ctyp< $lid:_$ >> -> error ()
-      | <:ctyp< $id:i$ >> -> if is_module_longident i then i else error ()
-      | <:ctyp< $_$ >> -> error () ] in
-    fun
-    [ <:ctyp< $id:i$ >> -> i
-    | t -> self t ];
-
   value rec tyOr_of_list =
     fun
     [ [] -> <:ctyp@ghost<>>
@@ -230,6 +161,27 @@ module Make (Loc : Sig.Loc)
     | [t::ts] ->
         let _loc = loc_of_ctyp t in <:ctyp< $t$ ; $tySem_of_list ts$ >> ];
 
+  value rec tyCom_of_list =
+    fun
+    [ [] -> <:ctyp@ghost<>>
+    | [t] -> t
+    | [t::ts] ->
+        let _loc = loc_of_ctyp t in <:ctyp< $t$, $tyCom_of_list ts$ >> ];
+
+  value rec tyAmp_of_list =
+    fun
+    [ [] -> <:ctyp@ghost<>>
+    | [t] -> t
+    | [t::ts] ->
+        let _loc = loc_of_ctyp t in <:ctyp< $t$ & $tyAmp_of_list ts$ >> ];
+
+  value rec tySta_of_list =
+    fun
+    [ [] -> <:ctyp@ghost<>>
+    | [t] -> t
+    | [t::ts] ->
+        let _loc = loc_of_ctyp t in <:ctyp< $t$ * $tySta_of_list ts$ >> ];
+
   value rec stSem_of_list =
     fun
     [ [] -> <:str_item@ghost<>>
@@ -251,6 +203,14 @@ module Make (Loc : Sig.Loc)
     | [b::bs] ->
         let _loc = loc_of_binding b in <:binding< $b$ and $biAnd_of_list bs$ >> ];
 
+  value rec rbSem_of_list =
+    fun
+    [ [] -> <:rec_binding@ghost<>>
+    | [b] -> b
+    | [b::bs] ->
+        let _loc = loc_of_rec_binding b in
+        <:rec_binding< $b$; $rbSem_of_list bs$ >> ];
+
   value rec wcAnd_of_list =
     fun
     [ [] -> <:with_constr@ghost<>>
@@ -347,14 +307,6 @@ module Make (Loc : Sig.Loc)
         let _loc = loc_of_patt x in
         <:patt< $x$, $paCom_of_list xs$ >> ];
 
-  value rec biSem_of_list =
-    fun
-    [ [] -> <:binding@ghost<>>
-    | [x] -> x
-    | [x::xs] ->
-        let _loc = loc_of_binding x in
-        <:binding< $x$; $biSem_of_list xs$ >> ];
-
   value rec exSem_of_list =
     fun
     [ [] -> <:expr@ghost<>>
@@ -390,15 +342,20 @@ module Make (Loc : Sig.Loc)
     fun
     [ <:binding< $b1$ and $b2$ >> -> pel_of_binding b1 @ pel_of_binding b2
     | <:binding< $p$ = $e$ >> -> [(p, e)]
-    | <:binding< $b1$ ; $b2$ >> -> pel_of_binding b1 @ pel_of_binding b2
     | _ -> assert False ];
 
   value rec list_of_binding x acc =
     match x with
-    [ <:binding< $b1$ and $b2$ >> | <:binding< $b1$; $b2$ >> ->
+    [ <:binding< $b1$ and $b2$ >> ->
          list_of_binding b1 (list_of_binding b2 acc)
     | t -> [t :: acc] ];
 
+  value rec list_of_rec_binding x acc =
+    match x with
+    [ <:rec_binding< $b1$; $b2$ >> ->
+         list_of_rec_binding b1 (list_of_rec_binding b2 acc)
+    | t -> [t :: acc] ];
+
   value rec list_of_with_constr x acc =
     match x with
     [ <:with_constr< $w1$ and $w2$ >> ->
@@ -493,6 +450,83 @@ module Make (Loc : Sig.Loc)
         list_of_module_binding x (list_of_module_binding y acc)
     | x -> [x :: acc] ];
 
+  module Meta = struct
+
+    module type META_LOC = sig
+      (** The first location is where to put the returned pattern.
+          Generally it's _loc to match with <:patt< ... >> quotations.
+          The second location is the one to treat. *)
+      value meta_loc_patt : Loc.t -> Loc.t -> Ast.patt;
+      (** The first location is where to put the returned expression.
+          Generally it's _loc to match with <:expr< ... >> quotations.
+          The second location is the one to treat. *)
+      value meta_loc_expr : Loc.t -> Loc.t -> Ast.expr;
+    end;
+
+    module MetaLoc = struct
+      value meta_loc_patt _loc location =
+        let (a, b, c, d, e, f, g, h) = Loc.to_tuple location in
+        <:patt< Loc.of_tuple
+                  ($`str:a$, $`int:b$, $`int:c$, $`int:d$,
+                  $`int:e$, $`int:f$, $`int:g$,
+                  $if h then <:patt< True >> else <:patt< False >> $) >>;
+      value meta_loc_expr _loc location =
+        let (a, b, c, d, e, f, g, h) = Loc.to_tuple location in
+        <:expr< Loc.of_tuple
+                  ($`str:a$, $`int:b$, $`int:c$, $`int:d$,
+                  $`int:e$, $`int:f$, $`int:g$,
+                  $if h then <:expr< True >> else <:expr< False >> $) >>;
+    end;
+
+    module MetaGhostLoc = struct
+      value meta_loc_patt _loc _ = <:patt< Loc.ghost >>;
+      value meta_loc_expr _loc _ = <:expr< Loc.ghost >>;
+    end;
+
+    module MetaLocVar = struct
+      value meta_loc_patt _loc _ = <:patt< $lid:Loc.name.val$ >>;
+      value meta_loc_expr _loc _ = <:expr< $lid:Loc.name.val$ >>;
+    end;
+
+    module Make (MetaLoc : META_LOC) = struct
+      open MetaLoc;
+
+      value meta_acc_Loc_t = meta_loc_expr;
+      module Expr = Camlp4Filters.MetaGeneratorExpr Ast;
+      value meta_acc_Loc_t = meta_loc_patt;
+      module Patt = Camlp4Filters.MetaGeneratorPatt Ast;
+    end;
+
+  end;
+
+  class map = Camlp4Filters.GenerateMap.generated;
+
+  class fold = Camlp4Filters.GenerateFold.generated;
+
+  value map_expr f = object
+    inherit map as super;
+    method expr x = f (super#expr x);
+  end;
+  value map_patt f = object
+    inherit map as super;
+    method patt x = f (super#patt x);
+  end;
+  value map_ctyp f = object
+    inherit map as super;
+    method ctyp x = f (super#ctyp x);
+  end;
+  value map_str_item f = object
+    inherit map as super;
+    method str_item x = f (super#str_item x);
+  end;
+  value map_sig_item f = object
+    inherit map as super;
+    method sig_item x = f (super#sig_item x);
+  end;
+  value map_loc f = object
+    inherit map as super;
+    method _Loc_t x = f (super#_Loc_t x);
+  end;
 end;
 
 module Camlp4Trash = struct
index 9957bebace954c3e9a1e8805f8749f24d14a62d6..fd2c38a7bd898b28b0b4de0fbea2c84acdc2200f 100644 (file)
@@ -18,7 +18,7 @@
  * - Nicolas Pouillard: refactoring
  *)
 
-(* $Id: Camlp4Ast2OCamlAst.ml,v 1.15 2007/02/26 16:32:46 ertai Exp $ *)
+(* $Id: Camlp4Ast2OCamlAst.ml,v 1.15.2.4 2007/05/10 13:31:20 pouillar Exp $ *)
 
 module Make (Ast : Sig.Camlp4Ast) = struct
   open Format;
@@ -42,6 +42,18 @@ module Make (Ast : Sig.Camlp4Ast) = struct
     with [ Failure _ as exn -> Loc.raise loc exn ]
   ;
 
+  value remove_underscores s =
+    let l = String.length s in
+    let rec remove src dst =
+      if src >= l then
+        if dst >= l then s else String.sub s 0 dst
+      else
+        match s.[src] with
+        [ '_' -> remove (src + 1) dst
+        |  c  -> do { s.[dst] := c; remove (src + 1) (dst + 1) } ]
+    in remove 0 0
+  ;
+
   value mkloc = Loc.to_ocaml_location;
   value mkghloc loc = Loc.to_ocaml_location (Loc.ghostify loc);
 
@@ -288,14 +300,14 @@ module Make (Ast : Sig.Camlp4Ast) = struct
     | _ -> assert False (*FIXME*) ];
   value rec type_decl tl cl loc m pflag =
     fun
-    [ TyMan _ t1 t2 ->
+    [ <:ctyp< $t1$ == $t2$ >> ->
         type_decl tl cl loc (Some (ctyp t1)) pflag t2
-    | TyPrv _ t ->
+    | <:ctyp< private $t$ >> ->
         type_decl tl cl loc m True t
-    | TyRec _ t ->
+    | <:ctyp< { $t$ } >> ->
         mktype loc tl cl
           (Ptype_record (List.map mktrecord (list_of_ctyp t [])) (mkprivate' pflag)) m
-    | TySum _ t ->
+    | <:ctyp< [ $t$ ] >> ->
         mktype loc tl cl
           (Ptype_variant (List.map mkvariant (list_of_ctyp t [])) (mkprivate' pflag)) m
     | t ->
@@ -303,7 +315,7 @@ module Make (Ast : Sig.Camlp4Ast) = struct
           error loc "only one manifest type allowed by definition" else
         let m =
           match t with
-          [ TyQuo _ s -> if List.mem_assoc s tl then Some (ctyp t) else None
+          [ <:ctyp<>> -> None
           | _ -> Some (ctyp t) ]
         in
         let k = if pflag then Ptype_private else Ptype_abstract in
@@ -465,7 +477,7 @@ module Make (Ast : Sig.Camlp4Ast) = struct
         let nati = try Nativeint.of_string s with [
           Failure _ -> error loc "Integer literal exceeds the range of representable integers of type nativeint"
         ] in mkpat loc (Ppat_constant (Const_nativeint nati))
-    | PaFlo loc s -> mkpat loc (Ppat_constant (Const_float s))
+    | PaFlo loc s -> mkpat loc (Ppat_constant (Const_float (remove_underscores s)))
     | PaLab loc _ _ -> error loc "labeled pattern not allowed here"
     | PaOlb loc _ _ | PaOlbi loc _ _ _ -> error loc "labeled pattern not allowed here"
     | PaOrp loc p1 p2 -> mkpat loc (Ppat_or (patt p1) (patt p2))
@@ -491,7 +503,7 @@ module Make (Ast : Sig.Camlp4Ast) = struct
         error (loc_of_patt p) "invalid pattern" ]
   and mklabpat =
     fun
-    [ <:patt< $id:i$ = $p$ >> -> (ident ~conv_lid:conv_lab i, patt p)
+    [ <:patt< $i$ = $p$ >> -> (ident ~conv_lid:conv_lab i, patt p)
     | p -> error (loc_of_patt p) "invalid pattern" ];
 
   value rec expr_fa al =
@@ -622,7 +634,7 @@ module Make (Ast : Sig.Camlp4Ast) = struct
           [ <:ctyp<>> -> None
           | t -> Some (ctyp t) ] in
         mkexp loc (Pexp_constraint (expr e) t1 (Some (ctyp t2)))
-    | ExFlo loc s -> mkexp loc (Pexp_constant (Const_float s))
+    | ExFlo loc s -> mkexp loc (Pexp_constant (Const_float (remove_underscores s)))
     | ExFor loc i e1 e2 df el ->
         let e3 = ExSeq loc el in
         let df = if mb2b df then Upto else Downto in
@@ -677,7 +689,7 @@ module Make (Ast : Sig.Camlp4Ast) = struct
     | ExOvr loc iel -> mkexp loc (Pexp_override (mkideexp iel []))
     | ExRec loc lel eo ->
         match lel with
-        [ <:binding<>> -> error loc "empty record"
+        [ <:rec_binding<>> -> error loc "empty record"
         | _ ->
           let eo =
             match eo with
@@ -736,7 +748,7 @@ module Make (Ast : Sig.Camlp4Ast) = struct
     | e -> ("", expr e) ]
   and binding x acc =
     match x with
-    [ <:binding< $x$ and $y$ >> | <:binding< $x$; $y$ >> ->
+    [ <:binding< $x$ and $y$ >> ->
          binding x (binding y acc)
     | <:binding< $p$ = $e$ >> -> [(patt p, expr e) :: acc]
     | <:binding<>> -> acc
@@ -754,15 +766,15 @@ module Make (Ast : Sig.Camlp4Ast) = struct
     | w -> mkexp (loc_of_expr w) (Pexp_when (expr w) (expr e)) ]
   and mklabexp x acc =
     match x with
-    [ <:binding< $x$ and $y$ >> | <:binding< $x$; $y$ >> ->
+    [ <:rec_binding< $x$; $y$ >> ->
          mklabexp x (mklabexp y acc)
-    | <:binding< $id:i$ = $e$ >> -> [(ident ~conv_lid:conv_lab i, expr e) :: acc]
+    | <:rec_binding< $i$ = $e$ >> -> [(ident ~conv_lid:conv_lab i, expr e) :: acc]
     | _ -> assert False ]
   and mkideexp x acc =
     match x with
-    [ <:binding< $x$ and $y$ >> | <:binding< $x$; $y$ >> ->
+    [ <:rec_binding< $x$; $y$ >> ->
          mkideexp x (mkideexp y acc)
-    | <:binding< $lid:s$ = $e$ >> -> [(s, expr e) :: acc]
+    | <:rec_binding< $lid:s$ = $e$ >> -> [(s, expr e) :: acc]
     | _ -> assert False ]
   and mktype_decl x acc =
     match x with
@@ -780,13 +792,14 @@ module Make (Ast : Sig.Camlp4Ast) = struct
     | _ -> assert False ]
   and module_type =
     fun
-    [ MtId loc i -> mkmty loc (Pmty_ident (long_uident i))
-    | MtFun loc n nt mt ->
+    [ <:module_type@loc<>> -> error loc "abstract/nil module type not allowed here"
+    | <:module_type@loc< $id:i$ >> -> mkmty loc (Pmty_ident (long_uident i))
+    | <:module_type@loc< functor ($n$ : $nt$) -> $mt$ >> ->
         mkmty loc (Pmty_functor n (module_type nt) (module_type mt))
-    | MtQuo loc _ -> error loc "abstract module type not allowed here"
-    | MtSig loc sl ->
+    | <:module_type@loc< '$_$ >> -> error loc "module type variable not allowed here"
+    | <:module_type@loc< sig $sl$ end >> ->
         mkmty loc (Pmty_signature (sig_item sl []))
-    | MtWit loc mt wc ->
+    | <:module_type@loc< $mt$ with $wc$ >> ->
         mkmty loc (Pmty_with (module_type mt) (mkwithc wc []))
     | <:module_type< $anti:_$ >> -> assert False ]
   and sig_item s l =
@@ -839,14 +852,15 @@ module Make (Ast : Sig.Camlp4Ast) = struct
     | _ -> assert False ]
   and module_expr =
     fun
-    [ MeId loc i -> mkmod loc (Pmod_ident (long_uident i))
-    | MeApp loc me1 me2 ->
+    [ <:module_expr@loc<>> -> error loc "nil module expression"
+    | <:module_expr@loc< $id:i$ >> -> mkmod loc (Pmod_ident (long_uident i))
+    | <:module_expr@loc< $me1$ $me2$ >> ->
         mkmod loc (Pmod_apply (module_expr me1) (module_expr me2))
-    | MeFun loc n mt me ->
+    | <:module_expr@loc< functor ($n$ : $mt$) -> $me$ >> ->
         mkmod loc (Pmod_functor n (module_type mt) (module_expr me))
-    | MeStr loc sl ->
+    | <:module_expr@loc< struct $sl$ end >> ->
         mkmod loc (Pmod_structure (str_item sl []))
-    | MeTyc loc me mt ->
+    | <:module_expr@loc< ($me$ : $mt$) >> ->
         mkmod loc (Pmod_constraint (module_expr me) (module_type mt))
     | <:module_expr@loc< $anti:_$ >> -> error loc "antiquotation in module_expr" ]
   and str_item s l =
index 0374ae28208fa311f97a7e69f502239b2f8a1bee..bd1cac2fad6ab84d7a8498cdc04f8fa1f41269cf 100644 (file)
@@ -30,7 +30,7 @@ module Make (Ast : Sig.Camlp4Ast) = struct
 
     method expr = fun
     [ <:expr< let $rec:_$ $ <:binding<>> $ in $e$ >> |
-      <:expr< { ($e$) with $ <:binding<>> $ } >> |
+      <:expr< { ($e$) with $ <:rec_binding<>> $ } >> |
       <:expr< $ <:expr<>> $, $e$ >> |
       <:expr< $e$, $ <:expr<>> $ >> |
       <:expr< $ <:expr<>> $; $e$ >> |
@@ -54,11 +54,14 @@ module Make (Ast : Sig.Camlp4Ast) = struct
 
     method binding = fun
     [ <:binding< $ <:binding<>> $ and $bi$ >> |
-      <:binding< $bi$ and $ <:binding<>> $ >> |
-      <:binding< $ <:binding<>> $ ; $bi$ >> |
-      <:binding< $bi$ ; $ <:binding<>> $ >> -> self#binding bi
+      <:binding< $bi$ and $ <:binding<>> $ >> -> self#binding bi
     | bi -> super#binding bi ];
 
+    method rec_binding = fun
+    [ <:rec_binding< $ <:rec_binding<>> $ ; $bi$ >> |
+      <:rec_binding< $bi$ ; $ <:rec_binding<>> $ >> -> self#rec_binding bi
+    | bi -> super#rec_binding bi ];
+
     method module_binding = fun
     [ <:module_binding< $ <:module_binding<>> $ and $mb$ >> |
       <:module_binding< $mb$ and $ <:module_binding<>> $ >> ->
index c1789c6c38a5a18a0557cf87b630b601dbaf7a20..79ece6a4c755a13b50ffdd09a2f4c06e3dfd59c0 100644 (file)
@@ -19,7 +19,7 @@
 module Make (Token : Sig.Camlp4Token) : sig
   open Token;
 
-  type t = 'abstract;
+  type t;
 
   value mk : unit -> t;
 
diff --git a/camlp4/Camlp4/Struct/DynAst.ml b/camlp4/Camlp4/Struct/DynAst.ml
new file mode 100644 (file)
index 0000000..2161e1c
--- /dev/null
@@ -0,0 +1,91 @@
+(* camlp4r *)
+(****************************************************************************)
+(*                                                                          *)
+(*                              Objective Caml                              *)
+(*                                                                          *)
+(*                            INRIA Rocquencourt                            *)
+(*                                                                          *)
+(*  Copyright  2007  Institut  National  de  Recherche en Informatique et   *)
+(*  en Automatique.  All rights reserved.  This file is distributed under   *)
+(*  the terms of the GNU Library General Public License, with the special   *)
+(*  exception on linking described in LICENSE at the top of the Objective   *)
+(*  Caml source tree.                                                       *)
+(*                                                                          *)
+(****************************************************************************)
+
+(* Authors:
+ * - Nicolas Pouillard: initial version
+ *)
+
+module Make (Ast : Sig.Ast) : Sig.DynAst with module Ast = Ast = struct
+  module Ast = Ast;
+  type tag 'a =
+    [ Tag_ctyp
+    | Tag_patt
+    | Tag_expr
+    | Tag_module_type
+    | Tag_sig_item
+    | Tag_with_constr
+    | Tag_module_expr
+    | Tag_str_item
+    | Tag_class_type
+    | Tag_class_sig_item
+    | Tag_class_expr
+    | Tag_class_str_item
+    | Tag_match_case
+    | Tag_ident
+    | Tag_binding
+    | Tag_rec_binding
+    | Tag_module_binding ];
+
+  value string_of_tag =
+    fun
+    [ Tag_ctyp -> "ctyp"
+    | Tag_patt -> "patt"
+    | Tag_expr -> "expr"
+    | Tag_module_type -> "module_type"
+    | Tag_sig_item -> "sig_item"
+    | Tag_with_constr -> "with_constr"
+    | Tag_module_expr -> "module_expr"
+    | Tag_str_item -> "str_item"
+    | Tag_class_type -> "class_type"
+    | Tag_class_sig_item -> "class_sig_item"
+    | Tag_class_expr -> "class_expr"
+    | Tag_class_str_item -> "class_str_item"
+    | Tag_match_case -> "match_case"
+    | Tag_ident -> "ident"
+    | Tag_binding -> "binding"
+    | Tag_rec_binding -> "rec_binding"
+    | Tag_module_binding -> "module_binding" ];
+
+  value ctyp_tag = Tag_ctyp;
+  value patt_tag = Tag_patt;
+  value expr_tag = Tag_expr;
+  value module_type_tag = Tag_module_type;
+  value sig_item_tag = Tag_sig_item;
+  value with_constr_tag = Tag_with_constr;
+  value module_expr_tag = Tag_module_expr;
+  value str_item_tag = Tag_str_item;
+  value class_type_tag = Tag_class_type;
+  value class_sig_item_tag = Tag_class_sig_item;
+  value class_expr_tag = Tag_class_expr;
+  value class_str_item_tag = Tag_class_str_item;
+  value match_case_tag = Tag_match_case;
+  value ident_tag = Tag_ident;
+  value binding_tag = Tag_binding;
+  value rec_binding_tag = Tag_rec_binding;
+  value module_binding_tag = Tag_module_binding;
+
+  type dyn;
+  external dyn_tag : tag 'a -> tag dyn = "%identity";
+
+  module Pack(X : sig type t 'a; end) = struct
+    (* These Obj.* hacks should be avoided with GADTs *)
+    type pack = (tag dyn * Obj.t);
+    exception Pack_error;
+    value pack tag v = (dyn_tag tag, Obj.repr v);
+    value unpack (tag : tag 'a) (tag', obj) =
+      if dyn_tag tag = tag' then (Obj.obj obj : X.t 'a) else raise Pack_error;
+    value print_tag f (tag, _) = Format.pp_print_string f (string_of_tag tag);
+  end;
+end;
index 2cde4dde71d2e62301e3d756a6f958989fef6dc4..5886809b6b2907c06aaee1c883ecb4631dc62eb4 100644 (file)
@@ -17,8 +17,6 @@
  *)
 
 module Make (Ast : Sig.Ast) = struct
-  module Ast = Ast;
-  
   value print_interf ?input_file:(_) ?output_file:(_) _ = failwith "No interface printer";
   value print_implem ?input_file:(_) ?output_file:(_) _ = failwith "No implementation printer";
 end;
index 186d930157846c11e9cd329a6028f493a5229c77..f8bf907ae565a8ebc49b118c8be8a4e06d67a3af 100644 (file)
@@ -16,4 +16,4 @@
  * - Nicolas Pouillard: initial version
  *)
 
-module Make (Ast : Sig.Ast) : Sig.Printer with module Ast = Ast;
+module Make (Ast : Sig.Ast) : (Sig.Printer Ast).S;
index ffeae02faa0bf5a1c962bf2264d4b58a611ecc36..78c33ef4011985914770bdd8e8d0aa0adc0b5b59 100644 (file)
@@ -23,13 +23,13 @@ module Make (Ast : Sig.Camlp4Ast) = struct
 
   value rec fold_binding_vars f bi acc =
     match bi with
-    [ <:binding< $bi1$ and $bi2$ >> | <:binding< $bi1$; $bi2$ >> ->
+    [ <:binding< $bi1$ and $bi2$ >> ->
         fold_binding_vars f bi1 (fold_binding_vars f bi2 acc)
     | <:binding< $lid:i$ = $_$ >> -> f i acc
     | _ -> assert False ];
 
   class c_fold_pattern_vars ['accu] f init =
-    object (o)
+    object
       inherit Ast.fold as super;
       value acc = init;
       method acc : 'accu = acc;
@@ -37,7 +37,6 @@ module Make (Ast : Sig.Camlp4Ast) = struct
         fun
         [ <:patt< $lid:s$ >> | <:patt< ~ $s$ >> | <:patt< ? $s$ >> ->
               {< acc = f s acc >}
-        | <:patt< $lid:_$ = $p$ >> -> o#patt p
         | p -> super#patt p ];
     end;
 
index fbd24134dfab2fb2b029f76aad9e1219104f2394..75d731c66419c5abbed1e9f6d440d563cbdf1856 100644 (file)
@@ -20,7 +20,7 @@
 module type S = sig
   module Token : Sig.Token;
   open Token;
-  type t = 'abstract;
+  type t;
   value call_with_ctx : Stream.t (Token.t * Loc.t) -> (t -> 'a) -> 'a;
   value loc_bp : t -> Loc.t;
   value loc_ep : t -> Loc.t;
@@ -68,8 +68,8 @@ module Make (Token : Sig.Token) : S with module Token = Token = struct
     loop list n;
 
   value njunk c n =
-    do { for i = 1 to n do { Stream.junk c.strm };
-        set_loc c };
+    (for i = 1 to n do Stream.junk c.strm done;
+     set_loc c);
 
   value streams = ref [];
   value mk strm =
diff --git a/camlp4/Camlp4/Struct/Grammar/Parser.mli b/camlp4/Camlp4/Struct/Grammar/Parser.mli
new file mode 100644 (file)
index 0000000..df0340e
--- /dev/null
@@ -0,0 +1,70 @@
+(* camlp4r *)
+(****************************************************************************)
+(*                                                                          *)
+(*                              Objective Caml                              *)
+(*                                                                          *)
+(*                            INRIA Rocquencourt                            *)
+(*                                                                          *)
+(*  Copyright  2007   Institut National de Recherche  en  Informatique et   *)
+(*  en Automatique.  All rights reserved.  This file is distributed under   *)
+(*  the terms of the GNU Library General Public License, with the special   *)
+(*  exception on linking described in LICENSE at the top of the Objective   *)
+(*  Caml source tree.                                                       *)
+(*                                                                          *)
+(****************************************************************************)
+
+(* $Id: Parser.mli,v 1.1.2.1 2007/03/22 21:46:09 pouillar Exp $ *)
+
+(* Authors:
+ * - Daniel de Rauglaudre: initial version
+ * - Nicolas Pouillard: refactoring
+ *)
+
+module Make (Structure : Structure.S) : sig
+  open Structure;
+  open Context;
+  value add_loc :
+    Context.t -> Loc.t -> (Context.t -> 'a -> 'b) -> 'a -> ('b * Loc.t);
+  value level_number : internal_entry -> string -> int;
+  value strict_parsing : ref bool;
+  value strict_parsing_warning : ref bool;
+  value top_symb :
+    internal_entry -> symbol -> symbol;
+  value top_tree :
+    internal_entry -> tree -> tree;
+  value entry_of_symb :
+    internal_entry -> symbol -> internal_entry;
+  value continue :
+    internal_entry -> Loc.t -> Action.t -> symbol -> Context.t -> tree ->
+    (Stream.t (Token.t * Loc.t) -> Action.t) -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value skip_if_empty :
+    Context.t -> Loc.t -> ('a -> 'b) -> 'a -> Action.t;
+  value do_recover :
+    (internal_entry -> 'a -> 'b -> tree -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t) -> internal_entry ->
+    'a -> 'b -> Loc.t -> Action.t -> symbol -> Context.t -> tree -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value recover :
+    (internal_entry -> 'a -> 'b -> tree -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t) -> internal_entry ->
+    'a -> 'b -> Loc.t -> Action.t -> symbol -> Context.t -> tree -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value parser_of_tree :
+    internal_entry -> int -> int -> tree -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value parser_cont :
+    (Context.t -> Stream.t (Token.t * Loc.t) -> Action.t) -> internal_entry -> int -> int -> symbol -> tree ->
+    Context.t -> Loc.t -> Action.t -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value parser_of_token_list :
+    (Context.t -> Loc.t -> Action.t -> Stream.t (Token.t * Loc.t) -> Action.t) -> list symbol -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value parser_of_symbol :
+    internal_entry -> int -> symbol -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value parse_top_symb' :
+    internal_entry -> symbol -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value parse_top_symb :
+    internal_entry -> symbol -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value start_parser_of_levels :
+    internal_entry -> int -> list level -> int -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value start_parser_of_entry :
+    internal_entry -> int -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value continue_parser_of_levels :
+    internal_entry -> int -> list level -> Context.t -> int -> Loc.t -> 'a -> Stream.t (Token.t * Loc.t) -> Action.t;
+  value continue_parser_of_entry :
+    internal_entry -> int -> Loc.t -> Action.t -> Context.t -> Stream.t (Token.t * Loc.t) -> Action.t;
+end;
+
index dadf4aed214b7b4058acaeee57929af8aaef0edf..f5a9723029897bb0b10f1a6ecb30c373f68037e1 100644 (file)
@@ -27,7 +27,7 @@ module Make (Structure : Structure.S) = struct
     [ DeadEnd -> []
     | LocAct _ _ -> [[]]
     | Node {node = n; brother = b; son = s} ->
-        List.map (fun l -> [n :: l]) (flatten_tree s) @ flatten_tree b ];
+        [ [n :: l] | l <- flatten_tree s ] @ flatten_tree b ];
 
   value rec print_symbol ppf =
     fun
@@ -101,7 +101,7 @@ module Make (Structure : Structure.S) = struct
       List.fold_left
         (fun sep lev ->
           let rules =
-            List.map (fun t -> [Sself :: t]) (flatten_tree lev.lsuffix) @
+            [ [Sself :: t] | t <- flatten_tree lev.lsuffix ] @
               flatten_tree lev.lprefix
           in
           do {
index 0a471b3fce5cb634a79387ff4ce6475cccea95fd..3844ff56be118757ebcda7d4107c536d90f1e6a2 100644 (file)
@@ -18,7 +18,7 @@
  *)
 
 
-(* $Id: Lexer.mll,v 1.6 2007/02/07 10:09:21 ertai Exp $ *)
+(* $Id: Lexer.mll,v 1.6.4.7 2007/05/10 22:43:18 pouillar Exp $ *)
 
 (* The lexer definition *)
 
@@ -110,15 +110,16 @@ module Make (Token : Sig.Camlp4Token)
   (* To store some context information:
   *   loc       : position of the beginning of a string, quotation and comment
   *   in_comment: are we in a comment?
-  *   quotations: shall we lex quotation? (antiquotations are lexed if
-  *               quotations are).
+  *   quotations: shall we lex quotation?
   *               If quotations is false it's a SYMBOL token.
+  *   antiquots : shall we lex antiquotations.
   *)
 
   type context =
   { loc        : Loc.t    ;
     in_comment : bool     ;
     quotations : bool     ;
+    antiquots  : bool     ;
     lexbuf     : lexbuf   ;
     buffer     : Buffer.t }
 
@@ -126,6 +127,7 @@ module Make (Token : Sig.Camlp4Token)
   { loc        = Loc.ghost ;
     in_comment = false     ;
     quotations = true      ;
+    antiquots  = false     ;
     lexbuf     = lb        ;
     buffer     = Buffer.create 256 }
 
@@ -139,6 +141,7 @@ module Make (Token : Sig.Camlp4Token)
 
   let loc c = Loc.merge c.loc (Loc.of_lexbuf c.lexbuf)
   let quotations c = c.quotations
+  let antiquots c = c.antiquots
   let is_in_comment c = c.in_comment
   let in_comment c = { (c) with in_comment = true }
   let set_start_p c = c.lexbuf.lex_start_p <- Loc.start_pos c.loc
@@ -146,7 +149,8 @@ module Make (Token : Sig.Camlp4Token)
     let p = c.lexbuf.lex_start_p in
     c.lexbuf.lex_start_p <- { (p) with pos_cnum = p.pos_cnum + shift }
 
-  let with_curr_loc f c = f { (c) with loc = Loc.of_lexbuf c.lexbuf } c.lexbuf
+  let update_loc c = { (c) with loc = Loc.of_lexbuf c.lexbuf }
+  let with_curr_loc f c = f (update_loc c) c.lexbuf
   let parse_nested f c =
     with_curr_loc f c;
     set_start_p c;
@@ -155,7 +159,7 @@ module Make (Token : Sig.Camlp4Token)
   let store_parse f c = store c ; f c c.lexbuf
   let parse f c = f c c.lexbuf
   let mk_quotation quotation c name loc shift =
-    let s = parse_nested quotation c in
+    let s = parse_nested quotation (update_loc c) in
     let contents = String.sub s 0 (String.length s - 2) in
     QUOTATION { q_name     = name     ;
                 q_loc      = loc      ;
@@ -193,8 +197,10 @@ module Make (Token : Sig.Camlp4Token)
   let identchar =
     ['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9']
   let ident = (lowercase|uppercase) identchar*
-  let symbolchar =
-    ['$' '!' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '|' '~']
+  let locname = ident
+  let not_star_symbolchar =
+    ['$' '!' '%' '&' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '|' '~' '\\']
+  let symbolchar = '*' | not_star_symbolchar
   let hexa_char = ['0'-'9' 'A'-'F' 'a'-'f']
   let decimal_literal =
     ['0'-'9'] ['0'-'9' '_']*
@@ -211,6 +217,43 @@ module Make (Token : Sig.Camlp4Token)
     ('.' ['0'-'9' '_']* )?
     (['e' 'E'] ['+' '-']? ['0'-'9'] ['0'-'9' '_']*)?
 
+  (* Delimitors are extended (from 3.09) in a conservative way *)
+
+  (* These chars that can't start an expression or a pattern: *)
+  let safe_delimchars = ['%' '&' '.' '/' '@' '^']
+
+  (* These symbols are unsafe since "[<", "[|", etc. exsist. *)
+  let delimchars = safe_delimchars | ['|' '<' '>' ':' '=']
+
+  let left_delims  = ['(' '[' '{']
+  let right_delims = [')' ']' '}']
+
+  let left_delimitor =
+    (* At least a safe_delimchars *)
+    left_delims (delimchars|left_delims)* safe_delimchars (delimchars|left_delims)*
+
+  (* A '(' or a new super '(' without "(<" *)
+  | '(' (['|' ':'] delimchars*)?
+  (* Old brackets, no new brackets starting with "[|" or "[:" *)
+  | '[' ['|' ':']?
+  (* Old "[<","{<" and new ones *)
+  | ['[' '{'] delimchars* '<'
+  (* Old brace and new ones *)
+  | '{' (['|' ':'] delimchars*)?
+
+  let right_delimitor =
+    (* At least a safe_delimchars *)
+    (delimchars|right_delims)* safe_delimchars (delimchars|right_delims)* right_delims
+  (* A ')' or a new super ')' without ">)" *)
+  | (delimchars* ['|' ':'])? ')'
+  (* Old brackets, no new brackets ending with "|]" or ":]" *)
+  | ['|' ':']? ']'
+  (* Old ">]",">}" and new ones *)
+  | '>' delimchars* [']' '}']
+  (* Old brace and new ones *)
+  | (delimchars* ['|' ':'])? '}'
+
+
   rule token c = parse
     | newline                            { update_loc c None 1 false 0; NEWLINE }
     | blank + as x                                                   { BLANKS x }
@@ -272,16 +315,24 @@ module Make (Token : Sig.Camlp4Token)
           [^ '\010' '\013'] * newline
       { let inum = int_of_string num
         in update_loc c name inum true 0; LINE_DIRECTIVE(inum, name)            }
-    | ( "#"  | "`"  | "'"  | "("  | ")"  | ","  | "."  | ".." | ":"  | "::"
-      | ":=" | ":>" | ":]" | ";"  | ";;" | "["  | "[|" | "[<" | "[:"
-      | "]"  | "{"  | "{<" | "|]" | ">]" | "}"  | ">}" | "_" ) as x  { SYMBOL x }
-
-    | '$' { if quotations c
+    | '(' (not_star_symbolchar as op) ')'
+                                             { ESCAPED_IDENT (String.make 1 op) }
+    | '(' (not_star_symbolchar symbolchar* not_star_symbolchar as op) ')'
+                                                             { ESCAPED_IDENT op }
+    | '(' (not_star_symbolchar symbolchar* as op) blank+ ')'
+                                                             { ESCAPED_IDENT op }
+    | '(' blank+ (symbolchar* not_star_symbolchar as op) ')'
+                                                             { ESCAPED_IDENT op }
+    | '(' blank+ (symbolchar+ as op) blank+ ')'
+                                                             { ESCAPED_IDENT op }
+    | ( "#"  | "`"  | "'"  | ","  | "."  | ".." | ":"  | "::"
+      | ":=" | ":>" | ";"  | ";;" | "_"
+      | left_delimitor | right_delimitor ) as x  { SYMBOL x }
+    | '$' { if antiquots c
             then with_curr_loc dollar (shift 1 c)
             else parse (symbolchar_star "$") c }
-    | ['~' '?' '!' '=' '<' '>' '|' '&' '@' '^' '+' '-' '*' '/' '%'] symbolchar *
+    | ['~' '?' '!' '=' '<' '>' '|' '&' '@' '^' '+' '-' '*' '/' '%' '\\'] symbolchar *
                                                                 as x { SYMBOL x }
-    | '\\' ((symbolchar | identchar)+ as x)                   { ESCAPED_IDENT x }
     | eof
       { let pos = lexbuf.lex_curr_p in
         lexbuf.lex_curr_p <- { pos with pos_bol  = pos.pos_bol  + 1 ;
@@ -292,7 +343,7 @@ module Make (Token : Sig.Camlp4Token)
       "(*"
         { store c; with_curr_loc comment c; parse comment c                     }
     | "*)"                                                            { store c }
-    | '<' (':' ident)? ('@' ident)? '<'
+    | '<' (':' ident)? ('@' locname)? '<'
         { store c;
           if quotations c then with_curr_loc quotation c; parse comment c       }
     | ident                                             { store_parse comment c }
@@ -350,13 +401,13 @@ module Make (Token : Sig.Camlp4Token)
   and maybe_quotation_colon c = parse
     | (ident as name) '<'
       { mk_quotation quotation c name "" (3 + String.length name)               }
-    | (ident as name) '@' (ident as loc) '<'
+    | (ident as name) '@' (locname as loc) '<'
       { mk_quotation quotation c name loc
                      (4 + String.length loc + String.length name)               }
     | symbolchar* as tok                                   { SYMBOL("<:" ^ tok) }
 
   and quotation c = parse
-    | '<' (':' ident)? ('@' ident)? '<'      {                          store c ;
+    | '<' (':' ident)? ('@' locname)? '<'    {                          store c ;
                                                       with_curr_loc quotation c ;
                                                               parse quotation c }
     | ">>"                                                            { store c }
@@ -367,19 +418,16 @@ module Make (Token : Sig.Camlp4Token)
 
   and dollar c = parse
     | '$'                                     { set_start_p c; ANTIQUOT("", "") }
-    (* Removed because it breaks escapings like: <:expr< $str: "\n"$ >>
-     * | '\\' _                     { istore_char c 1; parse (antiquot "") c } *)
     | ('`'? (identchar*|'.'+) as name) ':'
       { with_curr_loc (antiquot name) (shift (1 + String.length name) c)        }
     | _                                           { store_parse (antiquot "") c }
 
   and antiquot name c = parse
     | '$'                      { set_start_p c; ANTIQUOT(name, buff_contents c) }
-    (* Idem: | '\\' _             { istore_char c 1; parse (antiquot name) c } *)
     | eof                                   { err Unterminated_antiquot (loc c) }
     | newline
       { update_loc c None 1 false 0; store_parse (antiquot name) c              }
-    | '<' (':' ident)? ('@' ident)? '<'
+    | '<' (':' ident)? ('@' locname)? '<'
       { store c; with_curr_loc quotation c; parse (antiquot name) c             }
     | _                                         { store_parse (antiquot name) c }
 
@@ -408,6 +456,7 @@ module Make (Token : Sig.Camlp4Token)
   let from_lexbuf ?(quotations = true) lb =
     let c = { (default_context lb) with
               loc        = Loc.of_lexbuf lb;
+              antiquots  = !Camlp4_config.antiquotations;
               quotations = quotations      }
     in from_context c
 
index ea461a98ffc26edc50cb0d8c1b222aca51f07ccb..d150b951e67226684ccab4efb9c57db9a954b899 100644 (file)
  * - Nicolas Pouillard: refactoring
  *)
 
-
-(* $Id: Quotation.ml,v 1.4 2007/02/07 10:09:21 ertai Exp $ *)
+(* $Id: Quotation.ml,v 1.4.4.1 2007/03/29 14:31:04 pouillar Exp $ *)
 
 module Make (Ast : Sig.Ast)
 : Sig.Quotation with module Ast = Ast
 = struct
   module Ast = Ast;
+  module DynAst = DynAst.Make Ast;
   module Loc = Ast.Loc;
   open Format;
   open Sig;
 
   type expand_fun 'a = Loc.t -> option string -> string -> 'a;
 
-  type expander =
-    [ ExStr of bool -> expand_fun string
-    | ExAst of (expand_fun Ast.expr) and (expand_fun Ast.patt) ];
+  module Exp_key = DynAst.Pack(struct
+    type t 'a = unit;
+  end);
+
+  module Exp_fun = DynAst.Pack(struct
+    type t 'a = expand_fun 'a;
+  end);
 
-  value expanders_table = ref [];
+  value expanders_table =
+    (ref [] : ref (list ((string * Exp_key.pack) * Exp_fun.pack)));
 
   value default = ref "";
   value translate = ref (fun x -> x);
@@ -45,9 +50,13 @@ module Make (Ast : Sig.Ast)
     [ "" -> default.val
     | name -> name ];
 
-  value find name = List.assoc (expander_name name) expanders_table.val;
+  value find name tag =
+    let key = (expander_name name, Exp_key.pack tag ()) in
+    Exp_fun.unpack tag (List.assoc key expanders_table.val);
 
-  value add name f = expanders_table.val := [(name, f) :: expanders_table.val];
+  value add name tag f =
+    let elt = ((name, Exp_key.pack tag ()), Exp_fun.pack tag f) in
+    expanders_table.val := [elt :: expanders_table.val];
 
   value dump_file = ref None;
 
@@ -57,18 +66,21 @@ module Make (Ast : Sig.Ast)
       | Expanding
       | ParsingResult of Loc.t and string
       | Locating ];
-    type t = (string * error * exn);
+    type t = (string * string * error * exn);
     exception E of t;
 
-    value print ppf (name, ctx, exn) =
+    value print ppf (name, position, ctx, exn) =
       let name = if name = "" then default.val else name in
-      let pp x = fprintf ppf "@?@[<2>While %s %S:" x name in
+      let pp x = fprintf ppf "@?@[<2>While %s %S in a position of %S:" x name position in
       let () =
         match ctx with
         [ Finding -> do {
             pp "finding quotation";
-            fprintf ppf " available quotations are:\n@[<2>";
-            List.iter (fun (s,_) -> fprintf ppf "%s@ " s) expanders_table.val;
+            fprintf ppf "@ @[<hv2>Available quotations are:@\n";
+            List.iter begin fun ((s,t),_) ->
+              fprintf ppf "@[<2>%s@ (in@ a@ position@ of %a)@]@ "
+                s Exp_key.print_tag t
+            end expanders_table.val;
             fprintf ppf "@]"
           } 
         | Expanding -> pp "expanding quotation"
@@ -105,56 +117,46 @@ module Make (Ast : Sig.Ast)
   let module M = ErrorHandler.Register Error in ();
   open Error;
 
-  value expand_quotation loc expander quot =
+  value expand_quotation loc expander pos_tag quot =
     debug quot "expand_quotation: name: %s, str: %S@." quot.q_name quot.q_contents in
     let loc_name_opt = if quot.q_loc = "" then None else Some quot.q_loc in
     try expander loc loc_name_opt quot.q_contents with
     [ Loc.Exc_located _ (Error.E _) as exc ->
         raise exc
     | Loc.Exc_located iloc exc ->
-        let exc1 = Error.E (quot.q_name, Expanding, exc) in
+        let exc1 = Error.E (quot.q_name, pos_tag, Expanding, exc) in
         raise (Loc.Exc_located iloc exc1)
     | exc ->
-        let exc1 = Error.E (quot.q_name, Expanding, exc) in
+        let exc1 = Error.E (quot.q_name, pos_tag, Expanding, exc) in
         raise (Loc.Exc_located loc exc1) ];
 
-  value parse_quotation_result parse loc quot str =
+  value parse_quotation_result parse loc quot pos_tag str =
     try parse loc str with
-    [ Loc.Exc_located iloc (Error.E (n, Expanding, exc)) ->
+    [ Loc.Exc_located iloc (Error.E (n, pos_tag, Expanding, exc)) ->
         let ctx = ParsingResult iloc quot.q_contents in
-        let exc1 = Error.E (n, ctx, exc) in
+        let exc1 = Error.E (n, pos_tag, ctx, exc) in
         raise (Loc.Exc_located iloc exc1)
     | Loc.Exc_located iloc (Error.E _ as exc) ->
         raise (Loc.Exc_located iloc exc)
     | Loc.Exc_located iloc exc ->
         let ctx = ParsingResult iloc quot.q_contents in
-        let exc1 = Error.E (quot.q_name, ctx, exc) in
+        let exc1 = Error.E (quot.q_name, pos_tag, ctx, exc) in
         raise (Loc.Exc_located iloc exc1) ];
 
-  value handle_quotation loc proj in_expr parse quotation =
+  value expand loc quotation tag =
+    let pos_tag = DynAst.string_of_tag tag in
     let name = quotation.q_name in
     debug quot "handle_quotation: name: %s, str: %S@." name quotation.q_contents in
     let expander =
-      try find name
+      try find name tag
       with
       [ Loc.Exc_located _ (Error.E _) as exc -> raise exc
       | Loc.Exc_located qloc exc ->
-          raise (Loc.Exc_located qloc (Error.E (name, Finding, exc)))
+          raise (Loc.Exc_located qloc (Error.E (name, pos_tag, Finding, exc)))
       | exc ->
-          raise (Loc.Exc_located loc (Error.E (name, Finding, exc))) ]
+          raise (Loc.Exc_located loc (Error.E (name, pos_tag, Finding, exc))) ]
     in
     let loc = Loc.join (Loc.move `start quotation.q_shift loc) in
-    match expander with
-    [ ExStr f ->
-        let new_str = expand_quotation loc (f in_expr) quotation in
-        parse_quotation_result parse loc quotation new_str
-    | ExAst fe fp ->
-        expand_quotation loc (proj (fe, fp)) quotation ];
-
-  value expand_expr parse loc x =
-    handle_quotation loc fst True parse x;
-
-  value expand_patt parse loc x =
-    handle_quotation loc snd False parse x;
+    expand_quotation loc expander pos_tag quotation;
 
 end;
index 7037888a193fd8d59865a6df8fc0bd743e1fd680..4dbdacacbd8a27670efe4ba1e22fe9676efd1a67 100644 (file)
@@ -66,7 +66,7 @@ module Make (Loc : Sig.Loc)
       INT64 _ s | NATIVEINT _ s | FLOAT _ s | CHAR _ s | STRING _ s |
       LABEL s | OPTLABEL s | COMMENT s | BLANKS s | ESCAPED_IDENT s -> s
     | tok ->
-        invalid_arg ("Cannot extract a string from this token: "^
+        invalid_arg ("Cannot extract a string from this token: "^
                      to_string tok) ];
 
   module Error = struct
diff --git a/camlp4/Camlp4/Struct/Warning.ml b/camlp4/Camlp4/Struct/Warning.ml
deleted file mode 100644 (file)
index dbb0400..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-(****************************************************************************)
-(*                                                                          *)
-(*                              Objective Caml                              *)
-(*                                                                          *)
-(*                            INRIA Rocquencourt                            *)
-(*                                                                          *)
-(*  Copyright  2006   Institut National de Recherche  en  Informatique et   *)
-(*  en Automatique.  All rights reserved.  This file is distributed under   *)
-(*  the terms of the GNU Library General Public License, with the special   *)
-(*  exception on linking described in LICENSE at the top of the Objective   *)
-(*  Caml source tree.                                                       *)
-(*                                                                          *)
-(****************************************************************************)
-
-(* Authors:
- * - Daniel de Rauglaudre: initial version
- * - Nicolas Pouillard: refactoring
- *)
-module Make (Loc : Sig.Loc) : Sig.Warning with module Loc = Loc = struct
-  module Loc = Loc;
-  open Format;
-  type t = Loc.t -> string -> unit;
-  value default loc txt = eprintf "<W> %a: %s@." Loc.print loc txt;
-  value current = ref default;
-  value print loc txt = current.val loc txt;
-end;
index 12fb0e2edbddaaa0300eabc93f173bcaf05b6659..a31c62ad4ffca8f865bd706976a29f7f5359d7ae 100644 (file)
@@ -18,7 +18,7 @@
  * - Nicolas Pouillard: refactoring
  *)
 
-(* $Id: Camlp4Bin.ml,v 1.14 2007/02/27 15:48:22 pouillar Exp $ *)
+(* $Id: Camlp4Bin.ml,v 1.14.2.3 2007/03/30 15:50:12 pouillar Exp $ *)
 
 open Camlp4;
 open PreCast.Syntax;
@@ -28,7 +28,7 @@ module CleanAst = Camlp4.Struct.CleanAst.Make Ast;
 module SSet = Set.Make String;
 
 value pa_r  = "Camlp4OCamlRevisedParser";
-(* value pa_rr = "Camlp4OCamlrrParser"; *)
+value pa_rr = "Camlp4OCamlReloadedParser";
 value pa_o  = "Camlp4OCamlParser";
 value pa_rp = "Camlp4OCamlRevisedParserParser";
 value pa_op = "Camlp4OCamlParserParser";
@@ -40,6 +40,8 @@ value pa_rq = "Camlp4OCamlRevisedQuotationExpander";
 value pa_oq = "Camlp4OCamlOriginalQuotationExpander";
 value pa_l  = "Camlp4ListComprehension";
 
+open Register;
+
 value dyn_loader = ref (fun []);
 value rcall_callback = ref (fun () -> ());
 value loaded_modules = ref SSet.empty;
@@ -53,23 +55,24 @@ value rewrite_and_load n x =
     add_to_loaded_modules name;
     DynLoader.load dyn_loader name
   } in
-  let load = List.iter (fun n ->
-    if SSet.mem n loaded_modules.val then ()
-    else do {
+  let load = List.iter begin fun n ->
+    if SSet.mem n loaded_modules.val || List.mem n Register.loaded_modules.val then ()
+    else begin
       add_to_loaded_modules n;
       DynLoader.load dyn_loader (n ^ ".cmo");
-    }) in
+    end
+  end in
   do {
     match (n, String.lowercase x) with
     [ ("Parsers"|"", "pa_r.cmo"      | "r"  | "ocamlr" | "ocamlrevised" | "camlp4ocamlrevisedparser.cmo") -> load [pa_r]
-    (* | ("Parsers"|"", "rr"  | "OCamlrr") -> load [pa_r; pa_rr] *)
+    | ("Parsers"|"", "rr" | "reloaded" | "ocamlreloaded" | "camlp4ocamlreloadedparser.cmo") -> load [pa_rr]
     | ("Parsers"|"", "pa_o.cmo"      | "o"  | "ocaml" | "camlp4ocamlparser.cmo") -> load [pa_r; pa_o]
     | ("Parsers"|"", "pa_rp.cmo"     | "rp" | "rparser" | "camlp4ocamlrevisedparserparser.cmo") -> load [pa_r; pa_o; pa_rp]
     | ("Parsers"|"", "pa_op.cmo"     | "op" | "parser" | "camlp4ocamlparserparser.cmo") -> load [pa_r; pa_o; pa_rp; pa_op]
-    | ("Parsers"|"", "pa_extend.cmo" | "pa_extend_m.cmo" | "g" | "grammar" | "camlp4grammarparser.cmo") -> load [pa_r; pa_g]
-    | ("Parsers"|"", "pa_macro.cmo"  | "m"  | "macro" | "camlp4macroparser.cmo") -> load [pa_r; pa_m]
-    | ("Parsers"|"", "q" | "camlp4quotationexpander.cmo") -> load [pa_r; pa_qb; pa_q]
-    | ("Parsers"|"", "q_MLast.cmo" | "rq" | "camlp4ocamlrevisedquotationexpander.cmo") -> load [pa_r; pa_qb; pa_rq]
+    | ("Parsers"|"", "pa_extend.cmo" | "pa_extend_m.cmo" | "g" | "grammar" | "camlp4grammarparser.cmo") -> load [pa_g]
+    | ("Parsers"|"", "pa_macro.cmo"  | "m"  | "macro" | "camlp4macroparser.cmo") -> load [pa_m]
+    | ("Parsers"|"", "q" | "camlp4quotationexpander.cmo") -> load [pa_qb; pa_q]
+    | ("Parsers"|"", "q_mlast.cmo" | "rq" | "camlp4ocamlrevisedquotationexpander.cmo") -> load [pa_qb; pa_rq]
     | ("Parsers"|"", "oq" | "camlp4ocamloriginalquotationexpander.cmo") -> load [pa_r; pa_o; pa_qb; pa_oq]
     | ("Parsers"|"", "rf") -> load [pa_r; pa_rp; pa_qb; pa_q; pa_g; pa_l; pa_m]
     | ("Parsers"|"", "of") -> load [pa_r; pa_o; pa_rp; pa_op; pa_qb; pa_rq; pa_g; pa_l; pa_m]
@@ -85,8 +88,6 @@ value rewrite_and_load n x =
     | ("Filters"|"", "tracer" | "camlp4tracer.cmo") -> load ["Camlp4Tracer"]
     | ("Printers"|"", "pr_r.cmo" | "r" | "ocamlr" | "camlp4ocamlrevisedprinter.cmo") ->
         Register.enable_ocamlr_printer ()
-    (* | ("Printers"|"", "rr" | "OCamlrr" | "Camlp4Printers/OCamlrr.cmo") -> *)
-        (* Register.enable_ocamlrr_printer () *)
     | ("Printers"|"", "pr_o.cmo" | "o" | "ocaml" | "camlp4ocamlprinter.cmo") ->
         Register.enable_ocaml_printer ()
     | ("Printers"|"", "pr_dump.cmo" | "p" | "dumpocaml" | "camlp4ocamlastdumper.cmo") ->
@@ -116,7 +117,7 @@ value rec parse_file dyn_loader name pa getdir =
     | None -> None ]) in
   let loc = Loc.mk name
   in do {
-    Warning.current.val := print_warning;
+    current_warning.val := print_warning;
     let ic = if name = "-" then stdin else open_in_bin name in
     let cs = Stream.of_channel ic in
     let clear () = if name = "-" then () else close_in ic in
@@ -146,8 +147,6 @@ value gimd =
   [ <:str_item@loc< # $n$ $str:s$ >> -> Some (loc, n, s)
   | _ -> None ];
 
-open Register;
-
 value process_intf dyn_loader name =
   process dyn_loader name CurrentParser.parse_interf CurrentPrinter.print_interf
           (new CleanAst.clean_ast)#sig_item
index 573e42f5f870b6839c6987353c46c173bc78083f..6819b9d11ca38efc4e1894ad8b0f4179c6aaebb5 100644 (file)
@@ -22,7 +22,7 @@ open Camlp4;
 
 module Id = struct
   value name    = "Camlp4FoldGenerator";
-  value version = "$Id: Camlp4FoldGenerator.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4FoldGenerator.ml,v 1.1.4.4 2007/05/01 07:24:06 pouillar Exp $";
 end;
 
 module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
@@ -191,6 +191,16 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
          <:match_case< $uid:s$ -> o >>
     | _ -> assert False ]
 
+  and match_case_of_poly_sum_type =
+    fun
+    [ <:ctyp< $t1$ | $t2$ >> ->
+         <:match_case< $match_case_of_poly_sum_type t1$ | $match_case_of_poly_sum_type t2$ >>
+    | <:ctyp< `$i$ of $t$ >> ->
+         <:match_case< `$i$ x -> $expr_of_ty ~obj:<:expr< o >> (Some <:expr< x >>) t$ >>
+    | <:ctyp< `$i$ >> ->
+         <:match_case< `$i$ -> o >>
+    | _ -> assert False ]
+
   and record_patt_of_type =
     fun
     [ <:ctyp< $lid:s$ : $_$ >> ->
@@ -202,19 +212,30 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
   and record_binding_of_type =
     fun
     [ <:ctyp< $lid:s$ : mutable $t$ >> | <:ctyp< $lid:s$ : $t$ >> ->
-         <:binding< $lid:s$ = $expr_of_ty (Some <:expr< $lid:xs s$ >>) t$ >>
+         <:rec_binding< $lid:s$ = $expr_of_ty (Some <:expr< $lid:xs s$ >>) t$ >>
     | <:ctyp< $t1$ ; $t2$ >> ->
-         <:binding< $record_binding_of_type t1$; $record_binding_of_type t2$ >>
+         <:rec_binding< $record_binding_of_type t1$; $record_binding_of_type t2$ >>
     | _ -> assert False ]
 
-  and fun_of_ctyp =
+  and fun_of_ctyp tyid =
     fun
     [ <:ctyp< [ $t$ ] >> ->
         <:expr< fun [ $match_case_of_sum_type t$ ] >>
     | <:ctyp< { $t$ } >> ->
         <:expr< fun { $record_patt_of_type t$ } -> { $record_binding_of_type t$ } >>
     | <:ctyp< ( $tup:t$ ) >> -> mk_tuple expr_of_ty t
-    | _ -> <:expr< fun _ -> o >> ]
+    | <:ctyp< $_$ $_$ >> | <:ctyp< $_$ -> $_$ >> | <:ctyp< '$_$ >> as t ->
+        expr_of_ty None t
+    | <:ctyp< $lid:i$ >> when i = tyid -> <:expr< fun _ -> o >>
+    | <:ctyp< $id:i$ >> as t ->
+        let id1 = "_" ^ lid_of_ident "_" i in
+        if id1 = tyid then <:expr< fun _ -> o >>
+        else expr_of_ty None t
+    | <:ctyp< [ = $t$ ] >> | <:ctyp< [ < $t$ ] >> | <:ctyp< private [ < $t$ ] >> ->
+        <:expr< fun [ $match_case_of_poly_sum_type t$ ] >>
+    | <:ctyp< [ > $t$ ] >> | <:ctyp< private [ > $t$ ] >> ->
+        <:expr< fun [ $match_case_of_poly_sum_type t$ | x -> x ] >>
+    | _ -> assert False ]
 
   and string_of_type_param t =
     match t with
@@ -227,7 +248,7 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
       [ [] -> acc
       | [ x :: xs ] -> lambda <:expr< fun $lid:"_f_" ^ x$ -> $acc$ >> xs ] in
     let params' = List.map string_of_type_param params in
-    let funs = lambda (fun_of_ctyp ctyp) params' in
+    let funs = lambda (fun_of_ctyp id1 ctyp) params' in
     let ty = method_type_of_type_decl type_decl in
     <:class_str_item< method $lid:id1$ : $ty$ = $funs$ >>
 
@@ -289,20 +310,20 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
     StringMap.fold class_sig_item_of_type_decl tyMap <:class_sig_item<>>
 
   and inject_structure_drop_trash generated =
-    Ast.map_str_item
+    (Ast.map_str_item
       (fun
        [ <:str_item@_loc< class $lid:c$ = Camlp4Filters.GenerateFold.generated >> ->
             (* FIXME <:str_item< class $lid:c$ = object (o) $builtins$; $generated$ end >> *)
             let x = <:class_str_item< $builtins$; $generated$ >> in
             <:str_item< class $lid:c$ = object (o : 'self_type) $x$ end >>
-       | s -> s ])
+       | s -> s ]))#str_item
   
   and inject_signature generated =
-    Ast.map_sig_item
+    (Ast.map_sig_item
       (fun
        [ <:sig_item@_loc< class $lid:c$ : Camlp4Filters.GenerateFold.generated >> ->
             <:sig_item< class $lid:c$ : object $generated$ end >>
-       | s -> s ])
+       | s -> s ]))#sig_item
 
   and process_str_item str_item =
     let tyMap = collect_types_in_str_item str_item in
index 7c7ce7729daca419e33ac48e106808e72e41b73e..820ff8893829f80ea2139150f51408209370903f 100644 (file)
@@ -22,14 +22,14 @@ open Camlp4;
 
 module Id = struct
   value name    = "Camlp4LocationStripper";
-  value version = "$Id: Camlp4LocationStripper.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4LocationStripper.ml,v 1.1.4.1 2007/03/10 16:58:39 pouillar Exp $";
 end;
 
 module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
   open AstFilters;
   open Ast;
 
-  register_str_item_filter (new Ast.c_loc (fun _ -> Loc.ghost))#str_item;
+  register_str_item_filter (Ast.map_loc (fun _ -> Loc.ghost))#str_item;
 
 end;
 
index 0c391dd6d3ba7a4e9387b302a0c1ec9d989de5ca..4dd9b5d772b7ad36d602e72d85a166d62c11fad4 100644 (file)
@@ -22,7 +22,7 @@ open Camlp4;
 
 module Id = struct
   value name    = "Camlp4MapGenerator";
-  value version = "$Id: Camlp4MapGenerator.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4MapGenerator.ml,v 1.1.4.4 2007/05/01 07:24:06 pouillar Exp $";
 end;
 
 module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
@@ -196,6 +196,16 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
          <:match_case< $uid:s$ -> $uid:s$ >>
     | _ -> assert False ]
 
+  and match_case_of_poly_sum_type =
+    fun
+    [ <:ctyp< $t1$ | $t2$ >> ->
+         <:match_case< $match_case_of_poly_sum_type t1$ | $match_case_of_poly_sum_type t2$ >>
+    | <:ctyp< `$i$ of $t$ >> ->
+         <:match_case< `$i$ x -> `$i$ $expr_of_ty (Some <:expr< x >>) t$ >>
+    | <:ctyp< `$i$ >> ->
+         <:match_case< `$i$ -> `$i$ >>
+    | _ -> assert False ]
+
   and record_patt_of_type =
     fun
     [ <:ctyp< $lid:s$ : $_$ >> ->
@@ -207,19 +217,30 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
   and record_binding_of_type =
     fun
     [ <:ctyp< $lid:s$ : mutable $t$ >> | <:ctyp< $lid:s$ : $t$ >> ->
-         <:binding< $lid:s$ = $expr_of_ty (Some <:expr< $lid:xs s$ >>) t$ >>
+         <:rec_binding< $lid:s$ = $expr_of_ty (Some <:expr< $lid:xs s$ >>) t$ >>
     | <:ctyp< $t1$ ; $t2$ >> ->
-         <:binding< $record_binding_of_type t1$; $record_binding_of_type t2$ >>
+         <:rec_binding< $record_binding_of_type t1$; $record_binding_of_type t2$ >>
     | _ -> assert False ]
 
-  and fun_of_ctyp =
+  and fun_of_ctyp tyid =
     fun
     [ <:ctyp< [ $t$ ] >> ->
         <:expr< fun [ $match_case_of_sum_type t$ ] >>
     | <:ctyp< { $t$ } >> ->
         <:expr< fun { $record_patt_of_type t$ } -> { $record_binding_of_type t$ } >>
     | <:ctyp< ( $tup:t$ ) >> -> mk_tuple expr_of_ty t
-    | _ -> <:expr< fun x -> x >> ]
+    | <:ctyp< $_$ $_$ >> | <:ctyp< $_$ -> $_$ >> | <:ctyp< '$_$ >> as t ->
+        expr_of_ty None t
+    | <:ctyp< $lid:i$ >> when i = tyid -> <:expr< fun x -> x >>
+    | <:ctyp< $id:i$ >> as t ->
+        let id1 = "_" ^ lid_of_ident "_" i in
+        if id1 = tyid then <:expr< fun x -> x >>
+        else expr_of_ty None t
+    | <:ctyp< [ = $t$ ] >> | <:ctyp< [ < $t$ ] >> | <:ctyp< private [ < $t$ ] >> ->
+        <:expr< fun [ $match_case_of_poly_sum_type t$ ] >>
+    | <:ctyp< [ > $t$ ] >> | <:ctyp< private [ > $t$ ] >> ->
+        <:expr< fun [ $match_case_of_poly_sum_type t$ | x -> x ] >>
+    | _ -> assert False ]
 
   and string_of_type_param t =
     match t with
@@ -232,7 +253,7 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
       [ [] -> acc
       | [ x :: xs ] -> lambda <:expr< fun $lid:"_f_" ^ x$ -> $acc$ >> xs ] in
     let params' = List.map string_of_type_param params in
-    let funs = lambda (fun_of_ctyp ctyp) params' in
+    let funs = lambda (fun_of_ctyp id1 ctyp) params' in
     let ty = method_type_of_type_decl type_decl in
     <:class_str_item< method $lid:id1$ : $ty$ = $funs$ >>
 
@@ -294,20 +315,25 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
     StringMap.fold class_sig_item_of_type_decl tyMap <:class_sig_item<>>
 
   and inject_structure_drop_trash generated =
-    Ast.map_str_item
+    (Ast.map_str_item
       (fun
        [ <:str_item@_loc< class $lid:c$ = Camlp4Filters.GenerateMap.generated >> ->
+            let x = <:class_str_item< $builtins$; $generated$ >> in
+            <:str_item< class $lid:c$ = object (o) $x$ end >>
+       | <:str_item@_loc< class $lid:c$ = Camlp4Filters.Camlp4MapGenerator.generated >> ->
             (* FIXME <:str_item< class $lid:c$ = object (o) $builtins$; $generated$ end >> *)
             let x = <:class_str_item< $builtins$; $generated$ >> in
             <:str_item< class $lid:c$ = object (o) $x$ end >>
-       | s -> s ])
+       | s -> s ]))#str_item
   
   and inject_signature generated =
-    Ast.map_sig_item
+    (Ast.map_sig_item
       (fun
        [ <:sig_item@_loc< class $lid:c$ : Camlp4Filters.GenerateMap.generated >> ->
             <:sig_item< class $lid:c$ : object $generated$ end >>
-       | s -> s ])
+       | <:sig_item@_loc< class $lid:c$ : Camlp4Filters.Camlp4MapGenerator.generated >> ->
+            <:sig_item< class $lid:c$ : object $generated$ end >>
+       | s -> s ]))#sig_item
 
   and process_str_item str_item =
     let tyMap = collect_types_in_str_item str_item in
index 9a24b4c044f32da759fdf80456afad6bca8771a8..afb87b7cecb17477d4aae31d81939dac6ff567f1 100644 (file)
@@ -22,7 +22,7 @@ open Camlp4;
 
 module Id = struct
   value name    = "Camlp4Tracer";
-  value version = "$Id: Camlp4Tracer.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4Tracer.ml,v 1.1.4.1 2007/03/10 16:58:39 pouillar Exp $";
 end;
 
 module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
@@ -51,7 +51,7 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
     [ <:expr@_loc< fun [ $m$ ] >> -> <:expr< fun [ $map_match_case m$ ] >>
     | x -> x ];
 
-  register_str_item_filter (new Ast.c_expr map_expr)#str_item;
+  register_str_item_filter (Ast.map_expr map_expr)#str_item;
 
 end;
 
index 207143a862ca2c849d3696d787dad354eae6835a..e9cad22ba6a02a299475b49c5ed56effeca44d67 100644 (file)
@@ -22,7 +22,7 @@ open Camlp4;
 
 module Id = struct
   value name    = "Camlp4TrashRemover";
-  value version = "$Id: Camlp4TrashRemover.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4TrashRemover.ml,v 1.1.4.1 2007/03/10 16:58:39 pouillar Exp $";
 end;
 
 module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
@@ -30,7 +30,7 @@ module Make (AstFilters : Camlp4.Sig.AstFilters) = struct
   open Ast;
 
   register_str_item_filter
-    (new Ast.c_str_item
+    (Ast.map_str_item
       (fun
        [ <:str_item@_loc< module Camlp4Trash = $_$ >> ->
             <:str_item<>>
index f5382967890e4b299f6297cdf4577ca546106dc0..4ad5d252b8dcc6ff616e7d39a2d34ac85c3f6b34 100644 (file)
@@ -21,7 +21,7 @@ open Camlp4;                                        (* -*- camlp4r -*- *)
 
 module Id = struct
   value name = "Camlp4GrammarParser";
-  value version = "$Id: Camlp4GrammarParser.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4GrammarParser.ml,v 1.1.4.4 2007/04/20 14:57:28 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Camlp4Syntax) = struct
@@ -147,7 +147,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       Hashtbl.iter
         (fun s (r, e) ->
           if r.val = Unused then
-            Warning.print e.name.loc ("Unused local entry \"" ^ s ^ "\"")
+            print_warning e.name.loc ("Unused local entry \"" ^ s ^ "\"")
           else ())
         ht;
     }
@@ -309,7 +309,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
   value srules loc t rl tvar =
     List.map
       (fun r ->
-        let sl = List.map (fun s -> s.text) r.prod in
+        let sl = [ s.text | s <- r.prod ] in
         let ac = text_of_action loc r.prod t r.action tvar in
         (sl, ac))
       rl
@@ -600,7 +600,6 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       fun
       [ <:patt@_loc< $lid:_$ >> -> <:patt< _ >>
       | <:patt< ($p$ as $_$) >> -> self#patt p
-      | <:patt@_loc< $p1$ = $p2$ >> -> <:patt@_loc< $p1$ = $self#patt p2$ >>
       | p -> super#patt p ];
   end;
 
@@ -625,6 +624,8 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
            "LIST0 STRING becomes LIST0 [ x = STRING -> x ]"))
     | _ -> () ];
 
+  Camlp4_config.antiquotations.val := True;
+
   EXTEND Gram
     GLOBAL: expr symbol;
     expr: AFTER "top"
index 73d9a63b5b76fbaa644409ec5fa8c0e895469fe4..a18ad89d8652cdef864d1735c4a506a4141e05d8 100644 (file)
@@ -16,11 +16,13 @@ open Camlp4;                                             (* -*- camlp4r -*- *)
 (* Authors:
  * - Daniel de Rauglaudre: initial version
  * - Nicolas Pouillard: refactoring
+ * - Aleksey Nogin: extra features and bug fixes.
+ * - Christopher Conway: extra feature (-D<uident>=)
  *)
 
 module Id = struct
   value name = "Camlp4MacroParser";
-  value version = "$Id: Camlp4MacroParser.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4MacroParser.ml,v 1.1.4.5 2007/04/26 19:51:49 pouillar Exp $";
 end;
 
 (*
@@ -31,16 +33,22 @@ Added statements:
      DEFINE <uident>
      DEFINE <uident> = <expression>
      DEFINE <uident> (<parameters>) = <expression>
-     IFDEF <uident> THEN <structure_items> (END | ENDIF)
-     IFDEF <uident> THEN <structure_items> ELSE <structure_items> (END | ENDIF)
-     IFNDEF <uident> THEN <structure_items> (END | ENDIF)
-     IFNDEF <uident> THEN <structure_items> ELSE <structure_items> (END | ENDIF)
+     IFDEF <uident> THEN <structure_items> [ ELSE <structure_items> ] (END | ENDIF)
+     IFNDEF <uident> THEN <structure_items> [ ELSE <structure_items> ] (END | ENDIF)
+     INCLUDE <string>
+
+  At toplevel (signature item):
+
+     DEFINE <uident>
+     IFDEF <uident> THEN <signature_items> [ ELSE <signature_items> ] (END | ENDIF)
+     IFNDEF <uident> THEN <signature_items> [ ELSE <signature_items> ] (END | ENDIF)
      INCLUDE <string>
 
   In expressions:
 
-     IFDEF <uident> THEN <expression> ELSE <expression> (END | ENDIF)
-     IFNDEF <uident> THEN <expression> ELSE <expression> (END | ENDIF)
+     IFDEF <uident> THEN <expression> [ ELSE <expression> ] (END | ENDIF)
+     IFNDEF <uident> THEN <expression> [ ELSE <expression> ] (END | ENDIF)
+     DEFINE <lident> = <expression> IN <expression>
      __FILE__
      __LOCATION__
 
@@ -51,7 +59,7 @@ Added statements:
 
   As Camlp4 options:
 
-     -D<uident>                      define <uident>
+     -D<uident> or -D<uident>=expr   define <uident> with optional value <expr>
      -U<uident>                      undefine it
      -I<dir>                         add <dir> to the search path for INCLUDE'd files
 
@@ -60,7 +68,13 @@ Added statements:
   the macro cannot be used as a pattern, there is an error message if
   it is used in a pattern.
 
+  You can also define a local macro in an expression usigng the DEFINE ... IN form.
+  Note that local macros have lowercase names and can not take parameters.
 
+  If a macro is defined to = NOTHING, and then used as an argument to a function,
+  this will be equivalent to function taking one less argument. Similarly,
+  passing NOTHING as an argument to a macro is equivalent to "erasing" the
+  corresponding parameter from the macro body.
 
   The toplevel statement INCLUDE <string> can be used to include a
   file containing macro definitions and also any other toplevel items.
@@ -82,8 +96,8 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     [ SdStr of 'a
     | SdDef of string and option (list string * Ast.expr)
     | SdUnd of string
-    | SdITE of string and 'a and 'a
-    | SdInc of string ];
+    | SdITE of string and list (item_or_def 'a) and list (item_or_def 'a)
+    | SdLazy of Lazy.t 'a ];
 
   value rec list_remove x =
     fun
@@ -95,29 +109,16 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
 
   value is_defined i = List.mem_assoc i defined.val;
 
-  class reloc _loc = object
-    inherit Ast.map as super;
-    method _Loc_t _ = _loc;
-  end;
-
-  class subst _loc env = object
-    inherit reloc _loc as super;
-    method expr =
-      fun
-      [ <:expr< $lid:x$ >> | <:expr< $uid:x$ >> as e ->
-          try List.assoc x env with
-          [ Not_found -> e ]
-      | e -> super#expr e ];
-  end;
-
-  value bad_patt _loc = 
+  value bad_patt _loc =
     Loc.raise _loc
       (Failure
          "this macro cannot be used in a pattern (see its definition)");
+
   value substp _loc env =
     loop where rec loop =
       fun
       [ <:expr< $e1$ $e2$ >> -> <:patt< $loop e1$ $loop e2$ >>
+      | <:expr< >> -> <:patt< >>
       | <:expr< $lid:x$ >> ->
           try List.assoc x env with
           [ Not_found -> <:patt< $lid:x$ >> ]
@@ -130,12 +131,34 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       | <:expr< $x1$, $x2$ >> -> <:patt< $loop x1$, $loop x2$ >>
       | <:expr< { $bi$ } >> ->
           let rec substbi = fun
-            [ <:binding< $b1$; $b2$ >> -> <:patt< $substbi b1$; $substbi b2$ >>
-            | <:binding< $p$ = $e$ >> -> <:patt< $p$ = $loop e$ >>
+            [ <:rec_binding< $b1$; $b2$ >> -> <:patt< $substbi b1$; $substbi b2$ >>
+            | <:rec_binding< $i$ = $e$ >> -> <:patt< $i$ = $loop e$ >>
             | _ -> bad_patt _loc ]
           in <:patt< { $substbi bi$ } >>
       | _ -> bad_patt _loc ];
 
+  class reloc _loc = object
+    inherit Ast.map as super;
+    method _Loc_t _ = _loc;
+  end;
+
+  class subst _loc env = object
+    inherit reloc _loc as super;
+    method expr =
+      fun
+      [ <:expr< $lid:x$ >> | <:expr< $uid:x$ >> as e ->
+          try List.assoc x env with
+          [ Not_found -> super#expr e ]
+      | e -> super#expr e ];
+
+    method patt =
+      fun
+      [ <:patt< $lid:x$ >> | <:patt< $uid:x$ >> as p ->
+         try substp _loc [] (List.assoc x env) with
+         [ Not_found -> super#patt p ]
+      | p -> super#patt p ];
+  end;
+
   value incorrect_number loc l1 l2 =
     Loc.raise loc
       (Failure
@@ -211,6 +234,12 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     with
     [ Not_found -> () ];
 
+  value parse_def s =
+    match Gram.parse_string expr (Loc.mk "<command line>") s with
+    [ <:expr< $uid:n$ >> -> define None n
+    | <:expr< $uid:n$ = $e$ >> -> define (Some ([],e)) n
+    | _ -> invalid_arg s ];
+
   (* This is a list of directories to search for INCLUDE statements. *)
   value include_dirs = ref [];
 
@@ -234,27 +263,69 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       let st = Stream.of_channel ch in
         Gram.parse rule (Loc.mk file) st;
 
+  value rec execute_macro nil cons =
+    fun
+    [ SdStr i -> i
+    | SdDef x eo -> do { define eo x; nil }
+    | SdUnd x -> do { undef x; nil }
+    | SdITE i l1 l2 -> execute_macro_list nil cons (if is_defined i then l1 else l2)
+    | SdLazy l -> Lazy.force l ]
+
+  and execute_macro_list nil cons = fun
+  [ [] -> nil
+  | [hd::tl] -> (* The evaluation order is important here *)
+    let il1 = execute_macro nil cons hd in
+    let il2 = execute_macro_list nil cons tl in
+    cons il1 il2 ]
+  ;
+
   EXTEND Gram
     GLOBAL: expr patt str_item sig_item;
     str_item: FIRST
-      [ [ "DEFINE"; i = uident; def = opt_macro_value ->
-            do { define def i; <:str_item<>> }
-        | "UNDEF"; i = uident ->
-            do { undef i; <:str_item<>> }
-        | "IFDEF"; i = uident; "THEN"; st = str_items; _ = endif ->
-            if is_defined i then st else <:str_item<>>
-        | "IFDEF"; i = uident; "THEN"; st1 = str_items; "ELSE"; st2 = str_items; _ = endif ->
-            if is_defined i then st1 else st2
-        | "IFNDEF"; i = uident; "THEN"; st = str_items; _ = endif ->
-            if is_defined i then <:str_item<>> else st
-        | "IFNDEF"; i = uident; "THEN"; st1 = str_items; "ELSE"; st2 = str_items; _ = endif ->
-            if is_defined i then st2 else st1
-        | "INCLUDE"; fname = STRING ->
-            parse_include_file str_items fname ] ]
+      [ [ x = macro_def ->
+            execute_macro <:str_item<>> (fun a b -> <:str_item< $a$; $b$ >>) x ] ]
     ;
     sig_item: FIRST
-      [ [ "INCLUDE"; fname = STRING ->
-            parse_include_file sig_items fname ] ]
+      [ [ x = macro_def_sig ->
+            execute_macro <:sig_item<>> (fun a b -> <:sig_item< $a$; $b$ >>) x ] ]
+    ;
+    macro_def:
+      [ [ "DEFINE"; i = uident; def = opt_macro_value -> SdDef i def
+        | "UNDEF"; i = uident -> SdUnd i
+        | "IFDEF"; i = uident; "THEN"; st1 = smlist; st2 = else_macro_def ->
+            SdITE i st1 st2
+        | "IFNDEF"; i = uident; "THEN"; st2 = smlist; st1 = else_macro_def ->
+            SdITE i st1 st2
+        | "INCLUDE"; fname = STRING ->
+            SdLazy (lazy (parse_include_file str_items fname)) ] ]
+    ;
+    macro_def_sig:
+      [ [ "DEFINE"; i = uident -> SdDef i None
+        | "UNDEF"; i = uident -> SdUnd i
+        | "IFDEF"; i = uident; "THEN"; sg1 = sglist; sg2 = else_macro_def_sig ->
+            SdITE i sg1 sg2
+        | "IFNDEF"; i = uident; "THEN"; sg2 = sglist; sg1 = else_macro_def_sig ->
+            SdITE i sg1 sg2
+        | "INCLUDE"; fname = STRING ->
+            SdLazy (lazy (parse_include_file sig_items fname)) ] ]
+    ;
+    else_macro_def:
+      [ [ "ELSE"; st = smlist; endif -> st
+        | endif -> [] ] ]
+    ;
+    else_macro_def_sig:
+      [ [ "ELSE"; st = sglist; endif -> st
+        | endif -> [] ] ]
+    ;
+    else_expr:
+      [ [ "ELSE"; e = expr; endif -> e
+      | endif -> <:expr< () >> ] ]
+    ;
+    smlist:
+      [ [ sml = LIST1 [ d = macro_def; semi -> d | si = str_item; semi -> SdStr si ] -> sml ] ]
+    ;
+    sglist:
+      [ [ sgl = LIST1 [ d = macro_def_sig; semi -> d | si = sig_item; semi -> SdStr si ] -> sgl ] ]
     ;
     endif:
       [ [ "END" -> ()
@@ -266,10 +337,12 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
         | -> None ] ]
     ;
     expr: LEVEL "top"
-      [ [ "IFDEF"; i = uident; "THEN"; e1 = expr; "ELSE"; e2 = expr; _ = endif ->
+      [ [ "IFDEF"; i = uident; "THEN"; e1 = expr; e2 = else_expr ->
             if is_defined i then e1 else e2
-        | "IFNDEF"; i = uident; "THEN"; e1 = expr; "ELSE"; e2 = expr; _ = endif ->
-            if is_defined i then e2 else e1 ] ]
+        | "IFNDEF"; i = uident; "THEN"; e1 = expr; e2 = else_expr ->
+            if is_defined i then e2 else e1
+        | "DEFINE"; i = LIDENT; "="; def = expr; "IN"; body = expr ->
+            (new subst _loc [(i, def)])#expr body ] ]
     ;
     expr: LEVEL "simple"
       [ [ LIDENT "__FILE__" -> <:expr< $`str:Loc.file_name _loc$ >>
@@ -281,9 +354,9 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
                  $if h then <:expr< True >> else <:expr< False >> $) >> ] ]
     ;
     patt:
-      [ [ "IFDEF"; i = uident; "THEN"; p1 = patt; "ELSE"; p2 = patt; _ = endif ->
+      [ [ "IFDEF"; i = uident; "THEN"; p1 = patt; "ELSE"; p2 = patt; endif ->
             if is_defined i then p1 else p2
-        | "IFNDEF"; i = uident; "THEN"; p1 = patt; "ELSE"; p2 = patt; _ = endif ->
+        | "IFNDEF"; i = uident; "THEN"; p1 = patt; "ELSE"; p2 = patt; endif ->
             if is_defined i then p2 else p1 ] ]
     ;
     uident:
@@ -291,7 +364,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     ;
   END;
 
-  Options.add "-D" (Arg.String (define None))
+  Options.add "-D" (Arg.String parse_def)
     "<string> Define for IFDEF instruction.";
   Options.add "-U" (Arg.String undef)
     "<string> Undefine for IFDEF instruction.";
@@ -301,3 +374,18 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
 end;
 
 let module M = Register.OCamlSyntaxExtension Id Make in ();
+
+module MakeNothing (AstFilters : Camlp4.Sig.AstFilters) = struct
+ open AstFilters;
+ open Ast;
+
+ value remove_nothings =
+   fun
+   [ <:expr< $e$ NOTHING >> | <:expr< fun $ <:patt< NOTHING >> $ -> $e$ >> -> e
+   | e -> e];
+
+ register_str_item_filter (Ast.map_expr remove_nothings)#str_item;
+
+end;
+
+let module M = Camlp4.Register.AstFilter Id MakeNothing in ();
index b5b120ba0512a7d4591c03cfb440ab76005532c2..c033a22cb00c22e72e3dae1a4c0a4eb1fbfeaa20 100644 (file)
@@ -19,7 +19,7 @@ open Camlp4;                                             (* -*- camlp4r -*- *)
 
 open PreCast;
 let module Gram = MakeGram Lexer in
-let module M1 = OCamlInitSyntax.Make Warning Ast Gram Quotation in
+let module M1 = OCamlInitSyntax.Make Ast Gram Quotation in
 let module M2 = Camlp4OCamlRevisedParser.Make M1 in
 let module M3 = Camlp4OCamlParser.Make M2 in
 let module M3 = Camlp4QuotationCommon.Make M3 Syntax.AntiquotSyntax in ();
index 5c07876c211e143d9774eac19dcf9b48969dab4d..a3e4a4f598258adc3a114284a19863b447ee3677 100644 (file)
@@ -21,7 +21,7 @@ open Camlp4;                                        (* -*- camlp4r -*- *)
 
 module Id : Sig.Id = struct
   value name = "Camlp4OCamlParser";
-  value version = "$Id: Camlp4OCamlParser.ml,v 1.3.2.1 2007/03/03 09:21:36 pouillar Exp $";
+  value version = "$Id: Camlp4OCamlParser.ml,v 1.3.2.11 2007/05/10 22:43:18 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Camlp4Syntax) = struct
@@ -31,21 +31,6 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
   Camlp4_config.constructors_arity.val := False;
 
   (*FIXME remove this and use OCaml ones *)
-  value bigarray_get _loc arr arg =
-    let coords =
-      match arg with
-      [ <:expr< ($e1$, $e2$) >> | <:expr< $e1$, $e2$ >> ->
-          Ast.list_of_expr e1 (Ast.list_of_expr e2 [])
-      | _ -> [arg] ]
-    in
-    match coords with
-    [ [c1] -> <:expr< Bigarray.Array1.get $arr$ $c1$ >>
-    | [c1; c2] -> <:expr< Bigarray.Array2.get $arr$ $c1$ $c2$ >>
-    | [c1; c2; c3] -> <:expr< Bigarray.Array3.get $arr$ $c1$ $c2$ $c3$ >>
-    (* | coords -> <:expr< Bigarray.Genarray.get $arr$ [| $`list:coords$ |] >> ] *)
-    | coords ->
-       <:expr< Bigarray.Genarray.get $arr$ [| $Ast.exSem_of_list coords$ |] >> ];
-
   value bigarray_set _loc var newval =
     match var with
     [ <:expr< Bigarray.Array1.get $arr$ $c1$ >> ->
@@ -57,22 +42,6 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     | <:expr< Bigarray.Genarray.get $arr$ [| $coords$ |] >> ->
         Some <:expr< Bigarray.Genarray.set $arr$ [| $coords$ |] $newval$ >>
     | _ -> None ];
-  value mkumin _loc f arg =
-    match (f, arg) with
-    [ ("-", <:expr< $int:n$ >>) when int_of_string n > 0 ->
-        <:expr< $int:"-" ^ n$ >>
-    | ("-", <:expr< $int32:n$ >>) when (Int32.of_string n) > 0l ->
-        <:expr< $int32:"-" ^ n$ >>
-    | ("-", <:expr< $int64:n$ >>) when (Int64.of_string n) > 0L ->
-        <:expr< $int64:"-" ^ n$ >>
-    | ("-", <:expr< $nativeint:n$ >>) when (Nativeint.of_string n) > 0n ->
-        <:expr< $nativeint:"-" ^ n$ >>
-    | (_, <:expr< $flo:n$ >>) when float_of_string n > 0.0 ->
-        <:expr< $flo:"-" ^ n$ >>
-    | _ ->
-        let f = "~" ^ f in
-        <:expr< $lid:f$ $arg$ >> ]
-  ;
   value mk_anti ?(c = "") n s = "\\$"^n^c^":"^s;
   (*FIXME*)
 
@@ -90,11 +59,6 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
                     (Ast.loc_of_expr e2) in
         <:expr< do { $e1$; $e2$ } >> ];
 
-  value get_seq =
-    fun
-    [ <:expr< do { $e$ } >> -> e
-    | e -> e ];
-
   value is_operator =
     let ht = Hashtbl.create 73 in
     let ct = Hashtbl.create 73 in
@@ -110,97 +74,6 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     }
   ;
 
-  value operator_rparen =
-    Gram.Entry.of_parser "operator_rparen"
-      (fun strm ->
-        match Stream.npeek 2 strm with
-        [ [(KEYWORD s | SYMBOL s, _); (KEYWORD ")", _)] when is_operator s ->
-            do { Stream.junk strm; Stream.junk strm; s }
-        | _ -> raise Stream.Failure ])
-  ;
-
-  value symbolchar =
-    let list =
-      ['!'; '$'; '%'; '&'; '*'; '+'; '-'; '.'; '/'; ':'; '<'; '='; '>'; '?';
-      '@'; '^'; '|'; '~']
-    in
-    let rec loop s i =
-      if i == String.length s then True
-      else if List.mem s.[i] list then loop s (i + 1)
-      else False
-    in
-    loop
-  ;
-
-  value prefixop =
-    let list = ['!'; '?'; '~'] in
-    let excl = ["!="; "??"] in
-    Gram.Entry.of_parser "prefixop"
-      (parser
-        [: `(KEYWORD x | SYMBOL x, _loc)
-            when
-              not (List.mem x excl) && String.length x >= 2 &&
-              List.mem x.[0] list && symbolchar x 1 :] ->
-          <:expr< $lid:x$ >>)
-  ;
-
-  value infixop0 =
-    let list_ok = ["<"; ">"; "<="; ">="; "="; "<>"; "=="; "!="; "$"] in 
-    let list_first_char_ok = ['='; '<'; '>'; '|'; '&'; '$'; '!'] in
-    let excl = ["<-"; "||"; "&&"] in
-    Gram.Entry.of_parser "infixop0"
-      (parser
-        [: `(KEYWORD x | SYMBOL x, _loc)
-            when
-              (List.mem x list_ok) ||
-              (not (List.mem x excl) && String.length x >= 2 &&
-                List.mem x.[0] list_first_char_ok && symbolchar x 1) :] ->
-          <:expr< $lid:x$ >>)
-  ;
-
-  value infixop1 =
-    let list = ['@'; '^'] in
-    Gram.Entry.of_parser "infixop1"
-      (parser
-        [: `(KEYWORD x | SYMBOL x, _loc)
-            when
-              String.length x >= 1 && List.mem x.[0] list &&
-              symbolchar x 1 :] ->
-          <:expr< $lid:x$ >>)
-  ;
-
-  value infixop2 =
-    let list = ['+'; '-'] in
-    Gram.Entry.of_parser "infixop2"
-      (parser
-        [: `(KEYWORD x | SYMBOL x, _loc)
-            when
-              x <> "->" && String.length x >= 1 && List.mem x.[0] list &&
-              symbolchar x 1 :] ->
-          <:expr< $lid:x$ >>)
-  ;
-
-  value infixop3 =
-    let list = ['*'; '/'; '%'] in
-    Gram.Entry.of_parser "infixop3"
-      (parser
-        [: `(KEYWORD x | SYMBOL x, _loc)
-            when
-              String.length x >= 1 && List.mem x.[0] list &&
-              symbolchar x 1 :] ->
-          <:expr< $lid:x$ >>)
-  ;
-
-  value infixop4 =
-    Gram.Entry.of_parser "infixop4"
-      (parser
-        [: `(KEYWORD x | SYMBOL x, _loc)
-            when
-              String.length x >= 3 && x.[0] == '*' && x.[1] == '*' &&
-              symbolchar x 2 :] ->
-          <:expr< $lid:x$ >>)
-  ;
-
   value test_constr_decl =
     Gram.Entry.of_parser "test_constr_decl"
       (fun strm ->
@@ -325,19 +198,35 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
   DELETE_RULE Gram value_val: "value" END;
   DELETE_RULE Gram str_item: value_let; opt_rec; binding END;
   DELETE_RULE Gram module_type: "'"; a_ident END;
+  DELETE_RULE Gram module_type: SELF; SELF END;
+  DELETE_RULE Gram module_type: SELF; "."; SELF END;
   DELETE_RULE Gram label_expr: label_longident; fun_binding END;
+  DELETE_RULE Gram expr: "let"; opt_rec; binding; "in"; SELF END;
+  DELETE_RULE Gram expr: "let"; "module"; a_UIDENT; module_binding0; "in"; SELF END;
+  DELETE_RULE Gram expr: "fun"; "["; LIST0 match_case0 SEP "|"; "]" END;
+  DELETE_RULE Gram expr: "if"; SELF; "then"; SELF; "else"; SELF END;
+  DELETE_RULE Gram expr: "do"; do_sequence END;
+  DELETE_RULE Gram expr: SELF; SELF END;
+  DELETE_RULE Gram expr: "new"; class_longident END;
+  DELETE_RULE Gram expr: "["; sem_expr_for_list; "::"; expr; "]" END;
+  DELETE_RULE Gram expr: "{"; label_expr; "}" END;
+  DELETE_RULE Gram expr: "{"; "("; SELF; ")"; "with"; label_expr; "}" END;
+  DELETE_RULE Gram expr: "("; SELF; ","; comma_expr; ")" END;
+  DELETE_RULE Gram expr: SELF; ":="; SELF; dummy END;
+  DELETE_RULE Gram expr: "~"; a_LIDENT; ":"; SELF END;
+  DELETE_RULE Gram expr: "?"; a_LIDENT; ":"; SELF END;
+  (* Some other DELETE_RULE are after the grammar *)
 
   value clear = Gram.Entry.clear;
   clear ctyp;
-  clear expr;
   clear patt;
-  clear a_LIDENT_or_operator;
   clear a_UIDENT;
   clear type_longident_and_parameters;
   clear type_parameters;
   clear ipatt;
   clear labeled_ipatt;
   clear semi;
+  clear do_sequence;
   clear let_binding;
   clear type_kind;
   clear constructor_arg_list;
@@ -347,7 +236,6 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
   clear class_type_longident_and_param;
   clear class_type_plus;
   clear type_constraint;
-  clear comma_expr;
   clear comma_patt;
   clear sequence;
   clear sem_expr_for_list;
@@ -360,7 +248,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
   EXTEND Gram
     GLOBAL:
       a_CHAR a_FLOAT a_INT a_INT32 a_INT64 a_LABEL a_LIDENT
-      a_LIDENT_or_operator a_NATIVEINT a_OPTLABEL a_STRING a_UIDENT a_ident
+      a_NATIVEINT a_OPTLABEL a_STRING a_UIDENT a_ident
       amp_ctyp and_ctyp match_case match_case0 match_case_quot binding binding_quot
       class_declaration class_description class_expr class_expr_quot
       class_fun_binding class_fun_def class_info_for_class_expr
@@ -372,7 +260,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       comma_ctyp comma_expr comma_ipatt comma_patt comma_type_parameter
       constrain constructor_arg_list constructor_declaration
       constructor_declarations ctyp ctyp_quot cvalue_binding direction_flag
-      dummy eq_expr expr expr_eoi expr_quot field field_expr fun_binding
+      dummy eq_expr expr expr_eoi expr_quot field_expr fun_binding
       fun_def ident ident_quot implem interf ipatt ipatt_tcon label
       label_declaration label_expr label_ipatt label_longident label_patt
       labeled_ipatt let_binding meth_list module_binding module_binding0
@@ -383,15 +271,14 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       opt_comma_ctyp opt_dot_dot opt_eq_ctyp opt_expr
       opt_meth_list opt_mutable opt_polyt opt_private opt_rec
       opt_virtual opt_when_expr patt patt_as_patt_opt patt_eoi
-      patt_quot patt_tcon phrase pipe_ctyp poly_type row_field sem_ctyp
+      patt_quot patt_tcon phrase poly_type row_field
       sem_expr sem_expr_for_list sem_patt sem_patt_for_list semi sequence
       sig_item sig_item_quot sig_items star_ctyp str_item str_item_quot
       str_items top_phrase type_constraint type_declaration
       type_ident_and_parameters type_kind type_longident
       type_longident_and_parameters type_parameter type_parameters typevars
       use_file val_longident value_let value_val with_constr with_constr_quot
-
-      infixop0 infixop1 infixop2 infixop3 infixop4
+      infixop0 infixop1 infixop2 infixop3 infixop4 do_sequence
     ;
     sem_expr:
       [ [ e1 = expr LEVEL "top"; ";"; e2 = SELF -> <:expr< $e1$; $e2$ >>
@@ -401,6 +288,10 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     sequence:
       [ [ e = sem_expr -> e ] ]
     ;
+    do_sequence:
+      [ [ seq = sequence; "done" -> seq
+      ] ]
+    ;
     sem_expr_for_list:
       [ [ e = expr LEVEL "top"; ";"; el = SELF -> fun acc -> <:expr< [ $e$ :: $el acc$ ] >>
         | e = expr LEVEL "top"; ";" -> fun acc -> <:expr< [ $e$ :: $acc$ ] >>
@@ -419,39 +310,29 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
               <:str_item< let module $m$ = $mb$ in $e$ >>
       ] ]
     ;
-    expr:
+    expr: BEFORE "top"
       [ ";" RIGHTA
         [ e1 = SELF; ";"; e2 = SELF ->
             conc_seq e1 e2
-        | e1 = SELF; ";" -> e1 ]
-      | "top"
-        [ "let"; r = opt_rec; bi = binding; "in";
+        | e1 = SELF; ";" -> e1 ] ];
+    expr: LEVEL "top"
+      [ [ "let"; r = opt_rec; bi = binding; "in";
           x = expr LEVEL ";" ->
             <:expr< let $rec:r$ $bi$ in $x$ >>
         | "let"; "module"; m = a_UIDENT; mb = module_binding0; "in";
           e = expr LEVEL ";" ->
             <:expr< let module $m$ = $mb$ in $e$ >>
-        | "function"; OPT "|"; a = match_case ->
+        | "function"; a = match_case ->
             <:expr< fun [ $a$ ] >>
-        | "fun"; p = labeled_ipatt; e = fun_def ->
-            <:expr< fun $p$ -> $e$ >>
-        | "match"; e = SELF; "with"; OPT "|"; a = match_case ->
-            <:expr< match $e$ with [ $a$ ] >>
-        | "try"; e = SELF; "with"; OPT "|"; a = match_case ->
-            <:expr< try $e$ with [ $a$ ] >>
         | "if"; e1 = SELF; "then"; e2 = expr LEVEL "top";
           "else"; e3 = expr LEVEL "top" ->
             <:expr< if $e1$ then $e2$ else $e3$ >>
         | "if"; e1 = SELF; "then"; e2 = expr LEVEL "top" ->
             <:expr< if $e1$ then $e2$ else () >>
-        | "for"; i = a_LIDENT; "="; e1 = SELF; df = direction_flag; e2 = SELF;
-          "do"; el = SELF; "done" ->
-            <:expr< for $i$ = $e1$ $to:df$ $e2$ do { $get_seq el$ } >>
-        | "while"; e1 = SELF; "do"; e2 = SELF; "done" ->
-            <:expr< while $e1$ do { $get_seq e2$ } >>
-        | "object"; csp = opt_class_self_patt; cst = class_structure; "end" ->
-            <:expr< object ($csp$) $cst$ end >> ]
-      | [ e = SELF; ","; el = (*FIXME comma_expr*)LIST1 NEXT SEP "," ->
+      ] ];
+    expr: BEFORE "||"
+      [ ","
+        [ e = SELF; ","; el = (*FIXME comma_expr*)LIST1 NEXT SEP "," ->
             <:expr< ( $e$, $Ast.exCom_of_list el$ ) >> ]
       | ":=" NONA
         [ e1 = SELF; ":="; e2 = expr LEVEL "top" ->
@@ -459,105 +340,28 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
         | e1 = SELF; "<-"; e2 = expr LEVEL "top" ->
             match bigarray_set _loc e1 e2 with
             [ Some e -> e
-            | None -> <:expr< $e1$ := $e2$ >> ] ]
-      | "||" RIGHTA
-        [ e1 = SELF; op = infixop6; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
-      | "&&" RIGHTA
-        [ e1 = SELF; op = infixop5; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
-      | "<" LEFTA
-        [ e1 = SELF; op = infixop0; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
-      | "^" RIGHTA
-        [ e1 = SELF; op = infixop1; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
-      | RIGHTA
+            | None -> <:expr< $e1$ := $e2$ >> ]
+      ] ];
+    expr: AFTER "^"
+      [ "::" RIGHTA
         [ e1 = SELF; "::"; e2 = SELF -> <:expr< [$e1$ :: $e2$] >> ]
-      | "+" LEFTA
-        [ e1 = SELF; op = infixop2; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
-      | "*" LEFTA
-        [ e1 = SELF; "*"; e2 = SELF -> <:expr< $e1$ * $e2$ >>
-        | e1 = SELF; "/"; e2 = SELF -> <:expr< $e1$ / $e2$ >>
-        | e1 = SELF; "%"; e2 = SELF -> <:expr< $lid:"%"$ $e1$ $e2$ >>
-        | e1 = SELF; "land"; e2 = SELF -> <:expr< $e1$ land $e2$ >>
-        | e1 = SELF; "lor"; e2 = SELF -> <:expr< $e1$ lor $e2$ >>
-        | e1 = SELF; "lxor"; e2 = SELF -> <:expr< $e1$ lxor $e2$ >>
-        | e1 = SELF; "mod"; e2 = SELF -> <:expr< $e1$ mod $e2$ >>
-        | e1 = SELF; op = infixop3; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
-      | "**" RIGHTA
-        [ e1 = SELF; "**"; e2 = SELF -> <:expr< $e1$ ** $e2$ >>
-        | e1 = SELF; "asr"; e2 = SELF -> <:expr< $e1$ asr $e2$ >>
-        | e1 = SELF; "lsl"; e2 = SELF -> <:expr< $e1$ lsl $e2$ >>
-        | e1 = SELF; "lsr"; e2 = SELF -> <:expr< $e1$ lsr $e2$ >>
-        | e1 = SELF; op = infixop4; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
-      | "unary minus" NONA
-        [ "-"; e = SELF -> <:expr< $mkumin _loc "-" e$ >>
-        | "-."; e = SELF -> <:expr< $mkumin _loc "-." e$ >> ]
-      | "apply" LEFTA
-        [ e1 = SELF; e2 = SELF ->
+      ];
+    expr: LEVEL "apply" (* LEFTA *)
+      [ [ e1 = SELF; e2 = SELF ->
             match (is_expr_constr_call e1, e2) with
             [ (True, <:expr< ( $tup:e$ ) >>) ->
                 List.fold_left (fun e1 e2 -> <:expr< $e1$ $e2$ >>) e1
                                 (Ast.list_of_expr e [])
             | _ -> <:expr< $e1$ $e2$ >> ]
-        | "assert"; e = SELF ->
-            match e with
-            [ <:expr< False >> -> <:expr< assert False >>
-            | _ -> <:expr< assert $e$ >> ]
-        | "lazy"; e = SELF ->
-            <:expr< lazy $e$ >> ]
-      | "label"
-        [ i = LABEL; e = SELF -> <:expr< ~ $i$ : $e$ >> (* Here it's LABEL and not
-                                                          tilde_label since ~a:b
-                                                          is different than ~a : b *)
-        | "~"; i = a_LIDENT -> <:expr< ~ $i$ >>
-        | i = OPTLABEL; e = SELF -> <:expr< ? $i$ : $e$ >> (* Same remark for ?a:b *)
-        | "?"; i = a_LIDENT -> <:expr< ? $i$ >> ]
-      | "." LEFTA
-        [ e1 = SELF; "."; "("; e2 = SELF; ")" -> <:expr< $e1$ .( $e2$ ) >>
-        | e1 = SELF; "."; "["; e2 = SELF; "]" -> <:expr< $e1$ .[ $e2$ ] >>
-        | e1 = SELF; "."; "{"; e2 = SELF; "}" -> bigarray_get _loc e1 e2
-        | e1 = SELF; "."; e2 = SELF -> <:expr< $e1$ . $e2$ >>
-        | e = SELF; "#"; lab = label -> <:expr< $e$ # $lab$ >> ]
-      | "~-" NONA
-        [ "!"; e = SELF -> <:expr< $e$ . val>>
-        | "~-"; e = SELF -> <:expr< ~- $e$ >>
-        | "~-."; e = SELF -> <:expr< ~-. $e$ >>
-        | f = prefixop; e = SELF -> <:expr< $f$ $e$ >> ]
-      | "simple" LEFTA
-        [ `QUOTATION x -> Quotation.expand_expr (Gram.parse_string expr) _loc x
-        | `ANTIQUOT ("exp"|""|"anti" as n) s ->
-            <:expr< $anti:mk_anti ~c:"expr" n s$ >>
-        | `ANTIQUOT ("tup" as n) s ->
-            <:expr< ($tup: <:expr< $anti:mk_anti ~c:"expr" n s$ >>$) >>
-        | s = a_INT -> <:expr< $int:s$ >>
-        | s = a_INT32 -> <:expr< $int32:s$ >>
-        | s = a_INT64 -> <:expr< $int64:s$ >>
-        | s = a_NATIVEINT -> <:expr< $nativeint:s$ >>
-        | s = a_FLOAT -> <:expr< $flo:s$ >>
-        | s = a_STRING -> <:expr< $str:s$ >>
-        | c = a_CHAR -> <:expr< $chr:c$ >>
-        | i = val_longident -> <:expr< $id:i$ >>
-        | "false" -> <:expr< False >>
+      ] ];
+    expr: LEVEL "simple" (* LEFTA *)
+      [ [ "false" -> <:expr< False >>
         | "true" -> <:expr< True >>
-        | "["; "]" -> <:expr< [] >>
-        | "["; mk = sem_expr_for_list; "]" -> mk <:expr< [] >>
-        | "[|"; "|]" -> <:expr< [| |] >>
-        | "[|"; el = sem_expr; "|]" -> <:expr< [| $el$ |] >>
         | "{"; test_label_eq; lel = label_expr; "}" ->
             <:expr< { $lel$ } >>
         | "{"; e = expr LEVEL "."; "with"; lel = label_expr; "}" ->
             <:expr< { ($e$) with $lel$ } >>
-        | "{<"; ">}" -> <:expr< {< >} >>
-        | "{<"; fel = field_expr; ">}" -> <:expr< {< $fel$ >} >>
-        | "("; ")" -> <:expr< () >>
-        | "("; op = operator_rparen -> <:expr< $lid:op$ >>
-        | "("; e = SELF; ":"; t = ctyp; ")" -> <:expr< ($e$ : $t$) >>
-        | "("; e = SELF; ":"; t = ctyp; ":>"; t2 = ctyp; ")" ->
-            <:expr< ($e$ : $t$ :> $t2$) >>
-        | "("; e = SELF; ":>"; t = ctyp; ")" -> <:expr< ($e$ :> $t$) >>
-        | "("; e = SELF; ")" -> <:expr< $e$ >>
-        | "begin"; e = SELF; "end" -> <:expr< $e$ >>
-        | "begin"; "end" -> <:expr< () >>
         | "new"; i = class_longident -> <:expr< new $i$ >>
-        | "`"; s = a_ident -> <:expr< ` $s$ >>
       ] ]
     ;
     val_longident:
@@ -567,12 +371,10 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
         | i = a_LIDENT -> <:ident< $lid:i$ >>
         | `ANTIQUOT (""|"id"|"anti"|"list" as n) s; "."; i = SELF ->
             <:ident< $anti:mk_anti ~c:"ident" n s$.$i$ >>
-        | i = a_UIDENT; "."; "("; j = operator_rparen ->
-            <:ident< $uid:i$.$lid:j$ >>
         | i = a_UIDENT; "."; j = SELF -> <:ident< $uid:i$.$j$ >> ] ]
     ;
     match_case:
-      [ [ l = LIST1 match_case0 SEP "|" -> Ast.mcOr_of_list l ] ]
+      [ [ OPT "|"; l = LIST1 match_case0 SEP "|" -> Ast.mcOr_of_list l ] ]
     ;
     patt_constr:
       [ [ i = module_longident -> <:patt< $id:i$ >>
@@ -596,11 +398,14 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
                 List.fold_left (fun p1 p2 -> <:patt< $p1$ $p2$ >>) p1
                                 (Ast.list_of_patt p [])
             | _ -> <:patt< $p1$ $p2$ >> ]
+        | `ANTIQUOT (""|"pat"|"anti" as n) s ->
+            <:patt< $anti:mk_anti ~c:"patt" n s$ >>
         | p = patt_constr -> p ]
       | "simple"
         [ `ANTIQUOT (""|"pat"|"anti" as n) s ->
             <:patt< $anti:mk_anti ~c:"patt" n s$ >>
         | `ANTIQUOT ("tup" as n) s -> <:patt< ($tup:<:patt< $anti:mk_anti ~c:"patt" n s$ >>$) >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.patt_tag
         | i = ident -> <:patt< $id:i$ >>
         | s = a_INT -> <:patt< $int:s$ >>
         | s = a_INT32 -> <:patt< $int32:s$ >>
@@ -626,27 +431,18 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
         | "[|"; pl = sem_patt; "|]" -> <:patt< [| $pl$ |] >>
         | "{"; pl = label_patt; "}" -> <:patt< { $pl$ } >>
         | "("; ")" -> <:patt< () >>
-        | "("; op = operator_rparen -> <:patt< $lid:op$ >>
         | "("; p = patt; ":"; t = ctyp; ")" -> <:patt< ($p$ : $t$) >>
         | "("; p = patt; ")" -> <:patt< $p$ >>
         | "_" -> <:patt< _ >>
         | "`"; s = a_ident -> <:patt< ` $s$ >>
-        | "#"; i = type_longident -> <:patt< # $i$ >>
-        | `QUOTATION x ->
-            Quotation.expand_patt (Gram.parse_string patt) _loc x ] ]
-    ;
-    infixop5:
-      [ [ x = [ "&" | "&&" ] -> <:expr< $lid:x$ >> ] ]
-    ;
-    infixop6:
-      [ [ x = [ "or" | "||" ] -> <:expr< $lid:x$ >> ] ]
+        | "#"; i = type_longident -> <:patt< # $i$ >> ] ]
     ;
     (* comma_expr:
       [ [ e1 = SELF; ","; e2 = SELF -> <:expr< $e1$, $e2$ >>
         | e = expr LEVEL ":=" -> e ] ]
     ;                                                           *)
     let_binding:
-      [ [ test_just_a_lident_or_patt; s = a_LIDENT_or_operator; e = fun_binding ->
+      [ [ test_just_a_lident_or_patt; s = a_LIDENT; e = fun_binding ->
             <:binding< $lid:s$ = $e$ >>
         | p = patt; "="; e = expr ->
             <:binding< $p$ = $e$ >> ] ]
@@ -663,6 +459,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
         [ wc1 = SELF; "and"; wc2 = SELF -> <:with_constr< $wc1$ and $wc2$ >>
         | `ANTIQUOT (""|"with_constr"|"anti"|"list" as n) s ->
             <:with_constr< $anti:mk_anti ~c:"with_constr" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.with_constr_tag
         | "type"; `ANTIQUOT (""|"typ"|"anti" as n) s; "="; t = opt_private_ctyp ->
             <:with_constr< type $anti:mk_anti ~c:"ctyp" n s$ = $t$ >>
         | "type"; t1 = type_longident_and_parameters; "="; t2 = opt_private_ctyp ->
@@ -735,6 +532,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
             <:ctyp< ($tup:<:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>$) >>
         | `ANTIQUOT ("id" as n) s ->
             <:ctyp< $id:<:ident< $anti:mk_anti ~c:"ident" n s$ >>$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
         | "("; t = SELF; ","; mk = comma_ctyp_app; ")";
           i = ctyp LEVEL "ctyp2" ->
             mk <:ctyp< $i$ $t$ >>
@@ -759,7 +557,12 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       ] ]
     ;
     star_ctyp:
-      [ [ t1 = ctyp LEVEL "ctyp1"; "*"; t2 = SELF -> <:ctyp< $t1$ * $t2$ >>
+      [ [ `ANTIQUOT (""|"typ" as n) s ->
+            <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `ANTIQUOT ("list" as n) s ->
+            <:ctyp< $anti:mk_anti ~c:"ctyp*" n s$ >>
+        | t1 = ctyp LEVEL "ctyp1"; "*"; t2 = SELF ->
+            <:ctyp< $t1$ * $t2$ >>
         | t = ctyp LEVEL "ctyp1" -> t
       ] ]
     ;
@@ -804,6 +607,12 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
         | "{"; t = label_declaration; "}" ->
             <:ctyp< { $t$ } >> ] ]
     ;
+    module_longident_with_app: LEVEL "apply"
+      [ [ i = SELF; "("; j = SELF; ")" -> <:ident< $i$ $j$ >> ] ]
+    ;
+    type_longident: LEVEL "apply"
+      [ [ i = SELF; "("; j = SELF; ")" -> <:ident< $i$ $j$ >> ] ]
+    ;
     constructor_arg_list:
       [ [ t1 = SELF; "*"; t2 = SELF -> <:ctyp< $t1$ and $t2$ >>
         | t = ctyp LEVEL "ctyp1" -> t
@@ -815,15 +624,12 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     value_val:
       [ [ "val" -> () ] ]
     ;
-    a_LIDENT_or_operator:
-      [ [ x = a_LIDENT -> x
-        | "("; x = operator_rparen -> x ] ]
-    ;
     label_declaration:
       [ LEFTA
         [ t1 = SELF; ";"; t2 = SELF -> <:ctyp< $t1$; $t2$ >>
         | `ANTIQUOT (""|"typ" as n) s ->
             <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
         | s = a_LIDENT; ":"; t = poly_type ->  <:ctyp< $lid:s$ : $t$ >>
         | "mutable"; s = a_LIDENT; ":"; t = poly_type ->
             <:ctyp< $lid:s$ : mutable $t$ >>
@@ -866,8 +672,8 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       ] ]
     ;
     label_expr:
-      [ [ p = label_longident; "="; e = expr LEVEL "top" ->
-            <:binding< $id:p$ = $e$ >> ] ]
+      [ [ i = label_longident; "="; e = expr LEVEL "top" ->
+            <:rec_binding< $i$ = $e$ >> ] ]
     ;
     a_UIDENT:
       [ [ `ANTIQUOT (""|"uid" as n) s -> mk_anti n s
@@ -877,5 +683,9 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       ] ]
     ;
   END;
+
+  (* Some other DELETE_RULE are before the grammar *)
+  DELETE_RULE Gram module_longident_with_app: SELF; SELF END;
+  DELETE_RULE Gram type_longident: SELF; SELF END;
 end;
 let module M = Register.OCamlSyntaxExtension Id Make in ();
diff --git a/camlp4/Camlp4Parsers/Camlp4OCamlReloadedParser.ml b/camlp4/Camlp4Parsers/Camlp4OCamlReloadedParser.ml
new file mode 100644 (file)
index 0000000..3f2d7b7
--- /dev/null
@@ -0,0 +1,94 @@
+open Camlp4;                                             (* -*- camlp4r -*- *)
+(****************************************************************************)
+(*                                                                          *)
+(*                              Objective Caml                              *)
+(*                                                                          *)
+(*                            INRIA Rocquencourt                            *)
+(*                                                                          *)
+(*  Copyright  2007  Institut  National  de  Recherche en Informatique et   *)
+(*  en Automatique.  All rights reserved.  This file is distributed under   *)
+(*  the terms of the GNU Library General Public License, with the special   *)
+(*  exception on linking described in LICENSE at the top of the Objective   *)
+(*  Caml source tree.                                                       *)
+(*                                                                          *)
+(****************************************************************************)
+
+(* Authors:
+ * - Nicolas Pouillard: Original version
+ *)
+
+module Id = struct
+  value name = "Camlp4Reloaded";
+  value version = "$Id: Camlp4OCamlReloadedParser.ml,v 1.1.2.3 2007/04/05 18:06:36 pouillar Exp $";
+end;
+
+module Make (Syntax : Sig.Camlp4Syntax) = struct
+  open Sig;
+  include Syntax;
+
+  Gram.Entry.clear match_case;
+  Gram.Entry.clear semi;
+
+  value mkseq _loc =
+    fun
+    [ <:expr< $_$; $_$ >> as e -> <:expr< do { $e$ } >>
+    | e -> e ]
+  ;
+
+  DELETE_RULE Gram match_case0: patt_as_patt_opt; opt_when_expr; "->"; expr END;
+
+  value revised =
+    try
+      (DELETE_RULE Gram expr: "if"; SELF; "then"; SELF; "else"; SELF END; True)
+    with [ Not_found -> begin
+      DELETE_RULE Gram expr: "if"; SELF; "then"; expr LEVEL "top"; "else"; expr LEVEL "top" END;
+      DELETE_RULE Gram expr: "if"; SELF; "then"; expr LEVEL "top" END; False
+    end ];
+
+  if revised then begin
+    DELETE_RULE Gram expr: "fun"; "["; LIST0 match_case0 SEP "|"; "]" END;
+    EXTEND Gram
+      expr: LEVEL "top"
+      [ [ "function"; a = match_case -> <:expr< fun [ $a$ ] >> ] ];
+    END;
+    DELETE_RULE Gram value_let: "value" END;
+    DELETE_RULE Gram value_val: "value" END;
+  end else begin
+    DELETE_RULE Gram value_let: "let" END;
+    DELETE_RULE Gram value_val: "val" END;
+  end;
+
+  EXTEND Gram
+    GLOBAL: match_case match_case0 expr value_let value_val semi;
+
+    match_case:
+      [ [ OPT "|"; l = LIST1 match_case0 SEP "|"; "end" -> Ast.mcOr_of_list l
+        | "end" -> <:match_case<>> ] ]
+    ;
+
+    match_case0:
+      [ [ p = patt_as_patt_opt; w = opt_when_expr; "->"; e = sequence ->
+            <:match_case< $p$ when $w$ -> $mkseq _loc e$ >> ] ]
+    ;
+
+    expr: LEVEL "top"
+      [ [ "if"; e1 = sequence; "then"; e2 = sequence; "else"; e3 = sequence; "end" ->
+            <:expr< if $mkseq _loc e1$ then $mkseq _loc e2$ else $mkseq _loc e3$ >>
+        | "if"; e1 = sequence; "then"; e2 = sequence; "end" ->
+            <:expr< if $mkseq _loc e1$ then $mkseq _loc e2$ else () >> ] ]
+    ;
+
+    value_let:
+      [ [ "val" -> () ] ]
+    ;
+    value_val:
+      [ [ "val" -> () ] ]
+    ;
+    semi:
+      [ [ ";;" -> () | ";" -> () | -> () ] ]
+    ;
+  END;
+
+end;
+
+let module M = Register.OCamlSyntaxExtension Id Make in ();
index d5f550fd5b47d0eaa6f9724b82b63b497dd7eb78..8323760f9f7077009d8bdc389334f6b9b121a677 100644 (file)
@@ -20,7 +20,7 @@ open Camlp4;                                        (* -*- camlp4r -*- *)
 
 module Id = struct
   value name = "Camlp4RevisedParserParser";
-  value version = "$Id: Camlp4OCamlRevisedParser.ml,v 1.2.2.1 2007/03/03 09:21:36 pouillar Exp $";
+  value version = "$Id: Camlp4OCamlRevisedParser.ml,v 1.2.2.19 2007/05/12 22:48:16 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Camlp4Syntax) = struct
@@ -34,10 +34,14 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     do {
       Printf.eprintf "\
 New syntax:
+    (e1; e2; ... ; en) OR begin e1; e2; ... ; en end
+    while e do e1; e2; ... ; en done
+    for v = v1 to/downto v2 do e1; e2; ... ; en done
+Old syntax (still supported):
     do {e1; e2; ... ; en}
     while e do {e1; e2; ... ; en}
     for v = v1 to/downto v2 do {e1; e2; ... ; en}
-Old (no more supported) syntax:
+Very old (no more supported) syntax:
     do e1; e2; ... ; en-1; return en
     while e do e1; e2; ... ; en; done
     for v = v1 to/downto v2 do e1; e2; ... ; en; done
@@ -56,7 +60,6 @@ Old (no more supported) syntax:
   Gram.Entry.clear a_INT64;
   Gram.Entry.clear a_LABEL;
   Gram.Entry.clear a_LIDENT;
-  Gram.Entry.clear a_LIDENT_or_operator;
   Gram.Entry.clear a_NATIVEINT;
   Gram.Entry.clear a_OPTLABEL;
   Gram.Entry.clear a_STRING;
@@ -69,6 +72,7 @@ Old (no more supported) syntax:
   Gram.Entry.clear match_case_quot;
   Gram.Entry.clear binding;
   Gram.Entry.clear binding_quot;
+  Gram.Entry.clear rec_binding_quot;
   Gram.Entry.clear class_declaration;
   Gram.Entry.clear class_description;
   Gram.Entry.clear class_expr;
@@ -110,7 +114,6 @@ Old (no more supported) syntax:
   Gram.Entry.clear expr;
   Gram.Entry.clear expr_eoi;
   Gram.Entry.clear expr_quot;
-  Gram.Entry.clear field;
   Gram.Entry.clear field_expr;
   Gram.Entry.clear fun_binding;
   Gram.Entry.clear fun_def;
@@ -162,10 +165,8 @@ Old (no more supported) syntax:
   Gram.Entry.clear patt_quot;
   Gram.Entry.clear patt_tcon;
   Gram.Entry.clear phrase;
-  Gram.Entry.clear pipe_ctyp;
   Gram.Entry.clear poly_type;
   Gram.Entry.clear row_field;
-  Gram.Entry.clear sem_ctyp;
   Gram.Entry.clear sem_expr;
   Gram.Entry.clear sem_expr_for_list;
   Gram.Entry.clear sem_patt;
@@ -228,8 +229,8 @@ Old (no more supported) syntax:
   value mkassert _loc =
     fun
     [ <:expr< False >> ->
-        <:expr< assert False >> (* this case take care about
-                                  the special assert false node *)
+        <:expr< assert False >> (* this case takes care about
+                                   the special assert false node *)
     | e -> <:expr< assert $e$ >> ]
   ;
 
@@ -242,6 +243,24 @@ Old (no more supported) syntax:
     | e -> e ]
   ;
 
+  value mksequence' _loc =
+    fun
+    [ <:expr< $_$; $_$ >> as e -> <:expr< do { $e$ } >>
+    | e -> e ]
+  ;
+
+  value module_type_app mt1 mt2 =
+    match (mt1, mt2) with
+    [ (<:module_type@_loc< $id:i1$ >>, <:module_type< $id:i2$ >>) ->
+        <:module_type< $id:<:ident< $i1$ $i2$ >>$ >>
+    | _ -> raise Stream.Failure ];
+
+  value module_type_acc mt1 mt2 =
+    match (mt1, mt2) with
+    [ (<:module_type@_loc< $id:i1$ >>, <:module_type< $id:i2$ >>) ->
+        <:module_type< $id:<:ident< $i1$.$i2$ >>$ >>
+    | _ -> raise Stream.Failure ];
+
   value bigarray_get _loc arr arg =
     let coords =
       match arg with
@@ -253,7 +272,7 @@ Old (no more supported) syntax:
     [ [c1] -> <:expr< Bigarray.Array1.get $arr$ $c1$ >>
     | [c1; c2] -> <:expr< Bigarray.Array2.get $arr$ $c1$ $c2$ >>
     | [c1; c2; c3] -> <:expr< Bigarray.Array3.get $arr$ $c1$ $c2$ $c3$ >>
-    (* | coords -> <:expr< Bigarray.Genarray.get $arr$ [| $`list:coords$ |] >> ] *)
+    (* | coords -> <:expr< Bigarray.Genarray.get $arr$ [| $list:coords$ |] >> ] *)
     | coords ->
        <:expr< Bigarray.Genarray.get $arr$ [| $Ast.exSem_of_list coords$ |] >> ];
 
@@ -269,58 +288,114 @@ Old (no more supported) syntax:
         Some <:expr< Bigarray.Genarray.set $arr$ [| $coords$ |] $newval$ >>
     | _ -> None ];
 
-  value choose_tvar tpl =
-    let abs = "abstract" in
-    let rec find_alpha n =
-      let ns = if n = 0 then "" else string_of_int n in
-      let s' = abs ^ ns in
-      let rec mem =
-        fun
-        [ [ <:ctyp< '$s$ >> | <:ctyp< +'$s$ >> | <:ctyp< -'$s$ >> :: xs ] ->
-              (s = s') || mem xs
-        | [] -> False
-        | _ -> assert False ] in
-      if mem tpl then find_alpha (succ n)
-      else s'
-    in find_alpha 0;
+  value test_not_left_brace_nor_do =
+    Gram.Entry.of_parser "test_not_left_brace_nor_do"
+      (fun strm ->
+        match Stream.peek strm with
+        [ Some(KEYWORD "{" | KEYWORD "do", _) -> raise Stream.Failure
+        | _ -> () ]);
 
   value stopped_at _loc =
     Some (Loc.move_line 1 _loc) (* FIXME be more precise *);
 
-  (* value list1sep symb sep one cons =
-    let rec kont al =
-      parser
-      [ [: v = sep; a = symb; s :] -> kont (cons al (one a)) s
-      | [: :] -> al ]
+  value symbolchar =
+    let list =
+      ['$'; '!'; '%'; '&'; '*'; '+'; '-'; '.'; '/'; ':'; '<'; '='; '>'; '?';
+       '@'; '^'; '|'; '~'; '\\']
     in
-    parser [: a = symb; s :] -> kont (one a) s;
+    let rec loop s i =
+      if i == String.length s then True
+      else if List.mem s.[i] list then loop s (i + 1)
+      else False
+    in
+    loop
+  ;
+
+  let list = ['!'; '?'; '~'] in
+  let excl = ["!="; "??"] in
+  Gram.Entry.setup_parser prefixop
+    (parser
+      [: `(KEYWORD x | SYMBOL x, _loc)
+          when
+            not (List.mem x excl) && String.length x >= 2 &&
+            List.mem x.[0] list && symbolchar x 1 :] ->
+        <:expr< $lid:x$ >>)
+  ;
+
+  let list_ok = ["<"; ">"; "<="; ">="; "="; "<>"; "=="; "!="; "$"] in 
+  let list_first_char_ok = ['='; '<'; '>'; '|'; '&'; '$'; '!'] in
+  let excl = ["<-"; "||"; "&&"] in
+  Gram.Entry.setup_parser infixop0
+    (parser
+      [: `(KEYWORD x | SYMBOL x, _loc)
+          when
+            (List.mem x list_ok) ||
+            (not (List.mem x excl) && String.length x >= 2 &&
+              List.mem x.[0] list_first_char_ok && symbolchar x 1) :] ->
+        <:expr< $lid:x$ >>)
+  ;
+
+  let list = ['@'; '^'] in
+  Gram.Entry.setup_parser infixop1
+    (parser
+      [: `(KEYWORD x | SYMBOL x, _loc)
+          when
+            String.length x >= 1 && List.mem x.[0] list &&
+            symbolchar x 1 :] ->
+        <:expr< $lid:x$ >>)
+  ;
+
+  let list = ['+'; '-'] in
+  Gram.Entry.setup_parser infixop2
+    (parser
+      [: `(KEYWORD x | SYMBOL x, _loc)
+          when
+            x <> "->" && String.length x >= 1 && List.mem x.[0] list &&
+            symbolchar x 1 :] ->
+        <:expr< $lid:x$ >>)
+  ;
+
+  let list = ['*'; '/'; '%'; '\\'] in
+  Gram.Entry.setup_parser infixop3
+    (parser
+      [: `(KEYWORD x | SYMBOL x, _loc)
+          when
+            String.length x >= 1 && List.mem x.[0] list &&
+            (x.[0] <> '*' || String.length x < 2 || x.[1] <> '*') &&
+            symbolchar x 1 :] ->
+        <:expr< $lid:x$ >>)
+  ;
+
+  Gram.Entry.setup_parser infixop4
+    (parser
+      [: `(KEYWORD x | SYMBOL x, _loc)
+          when
+            String.length x >= 2 && x.[0] == '*' && x.[1] == '*' &&
+            symbolchar x 2 :] ->
+        <:expr< $lid:x$ >>)
+  ;
 
-  value sem_expr =
-    list1sep expr ";" (fun x -> x) (fun e1 e2 -> <:expr< $e1$; $e2$ >>)    *)
 
   (* transmit the context *)
-  Gram.Entry.setup_parser sem_expr
-   (let symb = Gram.parse_tokens_after_filter expr in
+  Gram.Entry.setup_parser sem_expr begin
+    let symb1 = Gram.parse_tokens_after_filter expr in
+    let symb =
+      parser
+      [ [: `(ANTIQUOT ("list" as n) s, _loc) :] -> <:expr< $anti:mk_anti ~c:"expr;" n s$ >>
+      | [: a = symb1 :] -> a ]
+    in
     let rec kont al =
       parser
       [ [: `(KEYWORD ";", _loc); a = symb; s :] -> kont <:expr< $al$; $a$ >> s
       | [: :] -> al ]
     in
-    parser [: a = symb; s :] -> kont a s);
-    (* sem_expr_for_list:
-      [ [ e = expr; ";"; el = SELF -> fun acc -> <:expr< [ $e$ :: $el acc$ ] >>
-        | e = expr -> fun acc -> <:expr< [ $e$ :: $acc$ ] >>
-      ] ]
-    ;
-    comma_expr:
-      [ [ e1 = SELF; ","; e2 = SELF -> <:expr< $e1$, $e2$ >>
-        | e = expr -> e ] ]
-    ;                                                                              *)
+    parser [: a = symb; s :] -> kont a s
+  end;
 
   EXTEND Gram
     GLOBAL:
-      a_CHAR a_FLOAT a_INT a_INT32 a_INT64 a_LABEL a_LIDENT
-      a_LIDENT_or_operator a_NATIVEINT a_OPTLABEL a_STRING a_UIDENT a_ident
+      a_CHAR a_FLOAT a_INT a_INT32 a_INT64 a_LABEL a_LIDENT rec_binding_quot
+      a_NATIVEINT a_OPTLABEL a_STRING a_UIDENT a_ident
       amp_ctyp and_ctyp match_case match_case0 match_case_quot binding binding_quot
       class_declaration class_description class_expr class_expr_quot
       class_fun_binding class_fun_def class_info_for_class_expr
@@ -332,7 +407,7 @@ Old (no more supported) syntax:
       comma_ctyp comma_expr comma_ipatt comma_patt comma_type_parameter
       constrain constructor_arg_list constructor_declaration
       constructor_declarations ctyp ctyp_quot cvalue_binding direction_flag
-      dummy eq_expr expr expr_eoi expr_quot field field_expr fun_binding
+      dummy eq_expr expr expr_eoi expr_quot field_expr fun_binding
       fun_def ident ident_quot implem interf ipatt ipatt_tcon label
       label_declaration label_expr label_ipatt label_longident label_patt
       labeled_ipatt let_binding meth_list module_binding module_binding0
@@ -342,13 +417,14 @@ Old (no more supported) syntax:
       opt_class_self_patt opt_class_self_type opt_comma_ctyp opt_dot_dot opt_eq_ctyp opt_expr
       opt_meth_list opt_mutable opt_polyt opt_private opt_rec
       opt_virtual opt_when_expr patt patt_as_patt_opt patt_eoi
-      patt_quot patt_tcon phrase pipe_ctyp poly_type row_field sem_ctyp
+      patt_quot patt_tcon phrase poly_type row_field
       sem_expr sem_expr_for_list sem_patt sem_patt_for_list semi sequence
       sig_item sig_item_quot sig_items star_ctyp str_item str_item_quot
       str_items top_phrase type_constraint type_declaration
       type_ident_and_parameters type_kind type_longident
       type_longident_and_parameters type_parameter type_parameters typevars
-      use_file val_longident value_let value_val with_constr with_constr_quot;
+      use_file val_longident value_let value_val with_constr with_constr_quot
+      infixop0 infixop1 infixop2 infixop3 infixop4 do_sequence;
     module_expr:
       [ [ "functor"; "("; i = a_UIDENT; ":"; t = module_type; ")"; "->";
           me = SELF ->
@@ -359,6 +435,7 @@ Old (no more supported) syntax:
       | "simple"
         [ `ANTIQUOT (""|"mexp"|"anti"|"list" as n) s ->
             <:module_expr< $anti:mk_anti ~c:"module_expr" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.module_expr_tag
         | i = module_longident -> <:module_expr< $id:i$ >>
         | "("; me = SELF; ":"; mt = module_type; ")" ->
             <:module_expr< ( $me$ : $mt$ ) >>
@@ -390,6 +467,7 @@ Old (no more supported) syntax:
             <:str_item< class type $ctd$ >>
         | `ANTIQUOT (""|"stri"|"anti"|"list" as n) s ->
             <:str_item< $anti:mk_anti ~c:"str_item" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.str_item_tag
         | e = expr -> <:str_item< $exp:e$ >> ] ]
     ;
     module_binding0:
@@ -410,6 +488,7 @@ Old (no more supported) syntax:
             <:module_binding< $anti:mk_anti ~c:"module_binding" n s$ >>
         | `ANTIQUOT ("" as n) m; ":"; mt = module_type; "="; me = module_expr ->
             <:module_binding< $mk_anti n m$ : $mt$ = $me$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.module_binding_tag
         | m = a_UIDENT; ":"; mt = module_type; "="; me = module_expr ->
             <:module_binding< $m$ : $mt$ = $me$ >> ] ]
     ;
@@ -418,11 +497,14 @@ Old (no more supported) syntax:
             <:module_type< functor ( $i$ : $t$ ) -> $mt$ >> ]
       | [ mt = SELF; "with"; wc = with_constr ->
             <:module_type< $mt$ with $wc$ >> ]
+      | [ mt1 = SELF; mt2 = SELF -> module_type_app mt1 mt2 ]
+      | [ mt1 = SELF; "."; mt2 = SELF -> module_type_acc mt1 mt2 ]
       | [ "sig"; sg = sig_items; "end" ->
             <:module_type< sig $sg$ end >> ]
       | "simple"
         [ `ANTIQUOT (""|"mtyp"|"anti"|"list" as n) s ->
             <:module_type< $anti:mk_anti ~c:"module_type" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.module_type_tag
         | i = module_longident_with_app -> <:module_type< $id:i$ >>
         | "'"; i = a_ident -> <:module_type< ' $i$ >>
         | "("; mt = SELF; ")" -> <:module_type< $mt$ >> ] ]
@@ -431,6 +513,7 @@ Old (no more supported) syntax:
       [ "top"
         [ `ANTIQUOT (""|"sigi"|"anti"|"list" as n) s ->
             <:sig_item< $anti:mk_anti ~c:"sig_item" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.sig_item_tag
         | "exception"; t = constructor_declaration ->
             <:sig_item< exception $t$ >>
         | "external"; i = a_LIDENT; ":"; t = ctyp; "="; sl = string_list ->
@@ -442,10 +525,12 @@ Old (no more supported) syntax:
             <:sig_item< module rec $mb$ >>
         | "module"; "type"; i = a_UIDENT; "="; mt = module_type ->
             <:sig_item< module type $i$ = $mt$ >>
+        | "module"; "type"; i = a_UIDENT ->
+            <:sig_item< module type $i$ >>
         | "open"; i = module_longident -> <:sig_item< open $i$ >>
         | "type"; t = type_declaration ->
             <:sig_item< type $t$ >>
-        | value_val; i = a_LIDENT_or_operator; ":"; t = ctyp ->
+        | value_val; i = a_LIDENT; ":"; t = ctyp ->
             <:sig_item< value $i$ : $t$ >>
         | "class"; cd = class_description ->
             <:sig_item< class $cd$ >>
@@ -463,6 +548,7 @@ Old (no more supported) syntax:
         [ m1 = SELF; "and"; m2 = SELF -> <:module_binding< $m1$ and $m2$ >>
         | `ANTIQUOT (""|"module_binding"|"anti"|"list" as n) s ->
             <:module_binding< $anti:mk_anti ~c:"module_binding" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.module_binding_tag
         | m = a_UIDENT; ":"; mt = module_type -> <:module_binding< $m$ : $mt$ >>
       ] ]
     ;
@@ -471,6 +557,7 @@ Old (no more supported) syntax:
         [ wc1 = SELF; "and"; wc2 = SELF -> <:with_constr< $wc1$ and $wc2$ >>
         | `ANTIQUOT (""|"with_constr"|"anti"|"list" as n) s ->
             <:with_constr< $anti:mk_anti ~c:"with_constr" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.with_constr_tag
         | "type"; `ANTIQUOT (""|"typ"|"anti" as n) s; "="; t = ctyp ->
             <:with_constr< type $anti:mk_anti ~c:"ctyp" n s$ = $t$ >>
         | "type"; t1 = type_longident_and_parameters; "="; t2 = ctyp ->
@@ -480,31 +567,26 @@ Old (no more supported) syntax:
     ;
     expr:
       [ "top" RIGHTA
-        [ "let"; r = opt_rec; bi = binding; "in";
-          x = SELF ->
+        [ "let"; r = opt_rec; bi = binding; "in"; x = SELF ->
             <:expr< let $rec:r$ $bi$ in $x$ >>
         | "let"; "module"; m = a_UIDENT; mb = module_binding0; "in"; e = SELF ->
             <:expr< let module $m$ = $mb$ in $e$ >>
-        | "fun"; "["; a = match_case; "]" ->
-            <:expr< fun [ $a$ ] >>
+        | "fun"; "["; a = LIST0 match_case0 SEP "|"; "]" ->
+            <:expr< fun [ $list:a$ ] >>
         | "fun"; p = labeled_ipatt; e = fun_def ->
             <:expr< fun $p$ -> $e$ >>
-        | "match"; e = SELF; "with"; "["; a = match_case; "]" ->
-            <:expr< match $e$ with [ $a$ ] >>
-        | "match"; e1 = SELF; "with"; p = ipatt; "->"; e2 = SELF ->
-            <:expr< match $e1$ with $p$ -> $e2$ >>
-        | "try"; e = SELF; "with"; "["; a = match_case; "]" ->
-            <:expr< try $e$ with [ $a$ ] >>
-        | "try"; e1 = SELF; "with"; p = ipatt; "->"; e2 = SELF ->
-            <:expr< try $e1$ with $p$ -> $e2$ >>
+        | "match"; e = sequence; "with"; a = match_case ->
+            <:expr< match $mksequence' _loc e$ with [ $a$ ] >>
+        | "try"; e = sequence; "with"; a = match_case ->
+            <:expr< try $mksequence' _loc e$ with [ $a$ ] >>
         | "if"; e1 = SELF; "then"; e2 = SELF; "else"; e3 = SELF ->
             <:expr< if $e1$ then $e2$ else $e3$ >>
-        | "do"; "{"; seq = sequence; "}" -> mksequence _loc seq
-        | "for"; i = a_LIDENT; "="; e1 = SELF; df = direction_flag; e2 = SELF;
-          "do"; "{"; seq = sequence; "}" ->
-            <:expr< for $i$ = $e1$ $to:df$ $e2$ do { $seq$ } >>
-        | "while"; e = SELF; "do"; "{"; seq = sequence; "}" ->
-            <:expr< while $e$ do { $seq$ } >>
+        | "do"; seq = do_sequence -> mksequence _loc seq
+        | "for"; i = a_LIDENT; "="; e1 = sequence; df = direction_flag;
+          e2 = sequence; "do"; seq = do_sequence ->
+            <:expr< for $i$ = $mksequence' _loc e1$ $to:df$ $mksequence' _loc e2$ do { $seq$ } >>
+        | "while"; e = sequence; "do"; seq = do_sequence ->
+            <:expr< while $mksequence' _loc e$ do { $seq$ } >>
         | "object"; csp = opt_class_self_patt; cst = class_structure; "end" ->
             <:expr< object ($csp$) $cst$ end >> ]
       | "where"
@@ -516,41 +598,26 @@ Old (no more supported) syntax:
             [ Some e -> e
             | None -> <:expr< $e1$ := $e2$ >> ] ]
       | "||" RIGHTA
-        [ e1 = SELF; "||"; e2 = SELF -> <:expr< $e1$ || $e2$ >> ]
+        [ e1 = SELF; op = infixop6; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
       | "&&" RIGHTA
-        [ e1 = SELF; "&&"; e2 = SELF -> <:expr< $e1$ && $e2$ >> ]
+        [ e1 = SELF; op = infixop5; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
       | "<" LEFTA
-        [ e1 = SELF; "<"; e2 = SELF -> <:expr< $e1$ < $e2$ >>
-        | e1 = SELF; ">"; e2 = SELF -> <:expr< $e1$ > $e2$ >>
-        | e1 = SELF; "<="; e2 = SELF -> <:expr< $e1$ <= $e2$ >>
-        | e1 = SELF; ">="; e2 = SELF -> <:expr< $e1$ >= $e2$ >>
-        | e1 = SELF; "="; e2 = SELF -> <:expr< $e1$ = $e2$ >>
-        | e1 = SELF; "<>"; e2 = SELF -> <:expr< $e1$ <> $e2$ >>
-        | e1 = SELF; "=="; e2 = SELF -> <:expr< $e1$ == $e2$ >>
-        | e1 = SELF; "!="; e2 = SELF -> <:expr< $e1$ != $e2$ >> ]
+        [ e1 = SELF; op = infixop0; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
       | "^" RIGHTA
-        [ e1 = SELF; "^"; e2 = SELF -> <:expr< $e1$ ^ $e2$ >>
-        | e1 = SELF; "^^"; e2 = SELF -> <:expr< $lid:"^^"$ $e1$ $e2$ >>
-        | e1 = SELF; "@"; e2 = SELF -> <:expr< $e1$ @ $e2$ >> ]
+        [ e1 = SELF; op = infixop1; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
       | "+" LEFTA
-        [ e1 = SELF; "+"; e2 = SELF -> <:expr< $e1$ + $e2$ >>
-        | e1 = SELF; "-"; e2 = SELF -> <:expr< $e1$ - $e2$ >>
-        | e1 = SELF; "+."; e2 = SELF -> <:expr< $e1$ +. $e2$ >>
-        | e1 = SELF; "-."; e2 = SELF -> <:expr< $e1$ -. $e2$ >> ]
+        [ e1 = SELF; op = infixop2; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
       | "*" LEFTA
-        [ e1 = SELF; "*"; e2 = SELF -> <:expr< $e1$ * $e2$ >>
-        | e1 = SELF; "/"; e2 = SELF -> <:expr< $e1$ / $e2$ >>
-        | e1 = SELF; "*."; e2 = SELF -> <:expr< $e1$ *. $e2$ >>
-        | e1 = SELF; "/."; e2 = SELF -> <:expr< $e1$ /. $e2$ >>
-        | e1 = SELF; "land"; e2 = SELF -> <:expr< $e1$ land $e2$ >>
+        [ e1 = SELF; "land"; e2 = SELF -> <:expr< $e1$ land $e2$ >>
         | e1 = SELF; "lor"; e2 = SELF -> <:expr< $e1$ lor $e2$ >>
         | e1 = SELF; "lxor"; e2 = SELF -> <:expr< $e1$ lxor $e2$ >>
-        | e1 = SELF; "mod"; e2 = SELF -> <:expr< $e1$ mod $e2$ >> ]
+        | e1 = SELF; "mod"; e2 = SELF -> <:expr< $e1$ mod $e2$ >>
+        | e1 = SELF; op = infixop3; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
       | "**" RIGHTA
-        [ e1 = SELF; "**"; e2 = SELF -> <:expr< $e1$ ** $e2$ >>
-        | e1 = SELF; "asr"; e2 = SELF -> <:expr< $e1$ asr $e2$ >>
+        [ e1 = SELF; "asr"; e2 = SELF -> <:expr< $e1$ asr $e2$ >>
         | e1 = SELF; "lsl"; e2 = SELF -> <:expr< $e1$ lsl $e2$ >>
-        | e1 = SELF; "lsr"; e2 = SELF -> <:expr< $e1$ lsr $e2$ >> ]
+        | e1 = SELF; "lsr"; e2 = SELF -> <:expr< $e1$ lsr $e2$ >>
+        | e1 = SELF; op = infixop4; e2 = SELF -> <:expr< $op$ $e1$ $e2$ >> ]
       | "unary minus" NONA
         [ "-"; e = SELF -> mkumin _loc "-" e
         | "-."; e = SELF -> mkumin _loc "-." e ]
@@ -561,9 +628,14 @@ Old (no more supported) syntax:
         | "lazy"; e = SELF -> <:expr< lazy $e$ >> ]
       | "label" NONA
         [ "~"; i = a_LIDENT; ":"; e = SELF -> <:expr< ~ $i$ : $e$ >>
-        | `LABEL i; e = SELF -> <:expr< ~ $i$ : $e$ >>
         | "~"; i = a_LIDENT -> <:expr< ~ $i$ >>
+
+        (* Here it's LABEL and not tilde_label since ~a:b is different than ~a : b *)
+        | `LABEL i; e = SELF -> <:expr< ~ $i$ : $e$ >>
+
+        (* Same remark for ?a:b *)
         | `OPTLABEL i; e = SELF -> <:expr< ? $i$ : $e$ >>
+
         | "?"; i = a_LIDENT; ":"; e = SELF -> <:expr< ? $i$ : $e$ >>
         | "?"; i = a_LIDENT -> <:expr< ? $i$ >> ]
       | "." LEFTA
@@ -573,14 +645,18 @@ Old (no more supported) syntax:
         | e1 = SELF; "."; e2 = SELF -> <:expr< $e1$ . $e2$ >>
         | e = SELF; "#"; lab = label -> <:expr< $e$ # $lab$ >> ]
       | "~-" NONA
-        [ "~-"; e = SELF -> <:expr< ~- $e$ >>
-        | "~-."; e = SELF -> <:expr< ~-. $e$ >> ]
+        [ "!"; e = SELF -> <:expr< $e$.val >>
+        | f = prefixop; e = SELF -> <:expr< $f$ $e$ >> ]
       | "simple"
-        [ `QUOTATION x -> Quotation.expand_expr (Gram.parse_string expr) _loc x
+        [ `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.expr_tag
         | `ANTIQUOT ("exp"|""|"anti" as n) s ->
             <:expr< $anti:mk_anti ~c:"expr" n s$ >>
+        | `ANTIQUOT ("`bool" as n) s ->
+            <:expr< $anti:mk_anti n s$ >>
         | `ANTIQUOT ("tup" as n) s ->
-            <:expr< ($tup: <:expr< $anti:mk_anti ~c:"expr" n s$ >>$) >>
+            <:expr< $tup: <:expr< $anti:mk_anti ~c:"expr" n s$ >>$ >>
+        | `ANTIQUOT ("seq" as n) s ->
+            <:expr< do $anti:mk_anti ~c:"expr" n s$ done >>
         | s = a_INT -> <:expr< $int:s$ >>
         | s = a_INT32 -> <:expr< $int32:s$ >>
         | s = a_INT64 -> <:expr< $int64:s$ >>
@@ -605,15 +681,25 @@ Old (no more supported) syntax:
         | "("; ")" -> <:expr< () >>
         | "("; e = SELF; ":"; t = ctyp; ")" -> <:expr< ($e$ : $t$) >>
         | "("; e = SELF; ","; el = comma_expr; ")" -> <:expr< ( $e$, $el$ ) >>
+        | "("; e = SELF; ";"; seq = sequence; ")" -> mksequence _loc <:expr< $e$; $seq$ >>
         | "("; e = SELF; ":"; t = ctyp; ":>"; t2 = ctyp; ")" ->
             <:expr< ($e$ : $t$ :> $t2$ ) >>
         | "("; e = SELF; ":>"; t = ctyp; ")" -> <:expr< ($e$ :> $t$) >>
-        | "("; e = SELF; ")" -> e ] ]
+        | "("; e = SELF; ")" -> e
+        | "begin"; seq = sequence; "end" -> mksequence _loc seq
+        | "begin"; "end" -> <:expr< () >> ] ]
+    ;
+    do_sequence:
+      [ [ "{"; seq = sequence; "}" -> seq
+        | test_not_left_brace_nor_do; seq = sequence; "done" -> seq
+      ] ]
+    ;
+    infixop5:
+      [ [ x = [ "&" | "&&" ] -> <:expr< $lid:x$ >> ] ]
+    ;
+    infixop6:
+      [ [ x = [ "or" | "||" ] -> <:expr< $lid:x$ >> ] ]
     ;
-    (* sem_expr:
-      [ [ e1 = SELF; ";"; e2 = SELF -> <:expr< $e1$; $e2$ >>
-        | e = expr -> e ] ]
-    ;                                                           *)
     sem_expr_for_list:
       [ [ e = expr; ";"; el = SELF -> fun acc -> <:expr< [ $e$ :: $el acc$ ] >>
         | e = expr -> fun acc -> <:expr< [ $e$ :: $acc$ ] >>
@@ -621,6 +707,7 @@ Old (no more supported) syntax:
     ;
     comma_expr:
       [ [ e1 = SELF; ","; e2 = SELF -> <:expr< $e1$, $e2$ >>
+        | `ANTIQUOT ("list" as n) s -> <:expr< $anti:mk_anti ~c:"expr," n s$ >>
         | e = expr -> e ] ]
     ;
     dummy:
@@ -629,6 +716,7 @@ Old (no more supported) syntax:
     sequence:
       [ [ "let"; rf = opt_rec; bi = binding; [ "in" | ";" ]; el = SELF ->
             <:expr< let $rec:rf$ $bi$ in $mksequence _loc el$ >>
+        | `ANTIQUOT ("list" as n) s -> <:expr< $anti:mk_anti ~c:"expr;" n s$ >>
         | e = expr; ";"; el = SELF -> <:expr< $e$; $el$ >>
         | e = expr; ";" -> e
         | e = expr -> e ] ]
@@ -656,7 +744,8 @@ Old (no more supported) syntax:
         | ":>"; t = ctyp; "="; e = expr -> <:expr< ($e$ :> $t$) >> ] ]
     ;
     match_case:
-      [ [ l = LIST0 match_case0 SEP "|" -> Ast.mcOr_of_list l ] ]
+      [ [ "["; l = LIST0 match_case0 SEP "|"; "]" -> Ast.mcOr_of_list l
+        | p = ipatt; "->"; e = expr -> <:match_case< $p$ -> $e$ >> ] ]
     ;
     match_case0:
       [ [ `ANTIQUOT ("match_case"|"list" as n) s ->
@@ -681,13 +770,16 @@ Old (no more supported) syntax:
       ] ]
     ;
     label_expr:
-      [ LEFTA
-        [ b1 = SELF; ";"; b2 = SELF -> <:binding< $b1$ ; $b2$ >>
-        | `ANTIQUOT (""|"binding"|"anti" as n) s ->
-            <:binding< $anti:mk_anti ~c:"binding" n s$ >>
+      [ [ b1 = SELF; ";"; b2 = SELF -> <:rec_binding< $b1$ ; $b2$ >>
+        | `ANTIQUOT ("rec_binding" as n) s ->
+            <:rec_binding< $anti:mk_anti ~c:"rec_binding" n s$ >>
+        | `ANTIQUOT (""|"anti" as n) s ->
+            <:rec_binding< $anti:mk_anti ~c:"rec_binding" n s$ >>
+        | `ANTIQUOT (""|"anti" as n) s; "="; e = expr ->
+            <:rec_binding< $anti:mk_anti ~c:"ident" n s$ = $e$ >>
         | `ANTIQUOT ("list" as n) s ->
-            <:binding< $anti:mk_anti ~c:"binding;" n s$ >>
-        | p = label_longident; e = fun_binding -> <:binding< $id:p$ = $e$ >> ] ]
+            <:rec_binding< $anti:mk_anti ~c:"rec_binding" n s$ >>
+        | i = label_longident; e = fun_binding -> <:rec_binding< $i$ = $e$ >> ] ]
     ;
     fun_def:
       [ RIGHTA
@@ -732,7 +824,7 @@ Old (no more supported) syntax:
         | "("; p = SELF; "as"; p2 = SELF; ")" -> <:patt< ($p$ as $p2$) >>
         | "("; p = SELF; ","; pl = comma_patt; ")" -> <:patt< ($p$, $pl$) >>
         | "_" -> <:patt< _ >>
-        | `QUOTATION x -> Quotation.expand_patt (Gram.parse_string patt) _loc x
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.patt_tag
         | "`"; s = a_ident -> <:patt< ` $s$ >>
         | "#"; i = type_longident -> <:patt< # $i$ >>
         | `LABEL i; p = SELF -> <:patt< ~ $i$ : $p$ >>
@@ -754,11 +846,13 @@ Old (no more supported) syntax:
     ;
     comma_patt:
       [ [ p1 = SELF; ","; p2 = SELF -> <:patt< $p1$, $p2$ >>
+        | `ANTIQUOT ("list" as n) s -> <:patt< $anti:mk_anti ~c:"patt," n s$ >>
         | p = patt -> p ] ]
     ;
     sem_patt:
       [ LEFTA
         [ p1 = SELF; ";"; p2 = SELF -> <:patt< $p1$; $p2$ >>
+        | `ANTIQUOT ("list" as n) s -> <:patt< $anti:mk_anti ~c:"patt;" n s$ >>
         | p = patt -> p ] ]
     ;
     sem_patt_for_list:
@@ -771,9 +865,10 @@ Old (no more supported) syntax:
         [ p1 = SELF; ";"; p2 = SELF -> <:patt< $p1$; $p2$ >>
         | `ANTIQUOT (""|"pat"|"anti" as n) s ->
             <:patt< $anti:mk_anti ~c:"patt" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.patt_tag
         | `ANTIQUOT ("list" as n) s ->
             <:patt< $anti:mk_anti ~c:"patt;" n s$ >>
-        | i = label_longident; "="; p = patt -> <:patt< $id:i$ = $p$ >>
+        | i = label_longident; "="; p = patt -> <:patt< $i$ = $p$ >>
       ] ]
     ;
     ipatt:
@@ -782,6 +877,7 @@ Old (no more supported) syntax:
             <:patt< $anti:mk_anti ~c:"patt" n s$ >>
         | `ANTIQUOT ("tup" as n) s ->
             <:patt< ($tup:<:patt< $anti:mk_anti ~c:"patt" n s$ >>$) >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.patt_tag
         | "("; ")" -> <:patt< () >>
         | "("; p = SELF; ")" -> p
         | "("; p = SELF; ":"; t = ctyp; ")" -> <:patt< ($p$ : $t$) >>
@@ -796,6 +892,7 @@ Old (no more supported) syntax:
     comma_ipatt:
       [ LEFTA
         [ p1 = SELF; ","; p2 = SELF -> <:patt< $p1$, $p2$ >>
+        | `ANTIQUOT ("list" as n) s -> <:patt< $anti:mk_anti ~c:"patt," n s$ >>
         | p = ipatt -> p ] ]
     ;
     label_ipatt:
@@ -803,7 +900,9 @@ Old (no more supported) syntax:
         [ p1 = SELF; ";"; p2 = SELF -> <:patt< $p1$; $p2$ >>
         | `ANTIQUOT (""|"pat"|"anti" as n) s ->
             <:patt< $anti:mk_anti ~c:"patt" n s$ >>
-        | i = label_longident; "="; p = ipatt -> <:patt< $id:i$ = $p$ >>
+        | `ANTIQUOT ("list" as n) s -> <:patt< $anti:mk_anti ~c:"patt;" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.patt_tag
+        | i = label_longident; "="; p = ipatt -> <:patt< $i$ = $p$ >>
       ] ]
     ;
     type_declaration:
@@ -812,16 +911,17 @@ Old (no more supported) syntax:
             <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
         | `ANTIQUOT ("list" as n) s ->
             <:ctyp< $anti:mk_anti ~c:"ctypand" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
         | t1 = SELF; "and"; t2 = SELF -> <:ctyp< $t1$ and $t2$ >>
         | (n, tpl) = type_ident_and_parameters; tk = opt_eq_ctyp;
-          cl = LIST0 constrain -> Ast.TyDcl _loc n tpl (tk tpl) cl ] ]
+          cl = LIST0 constrain -> Ast.TyDcl _loc n tpl tk cl ] ]
     ;
     constrain:
       [ [ "constraint"; t1 = ctyp; "="; t2 = ctyp -> (t1, t2) ] ]
     ;
     opt_eq_ctyp:
-      [ [ "="; tk = type_kind -> fun _ -> tk
-        | -> fun tpl -> <:ctyp< '$choose_tvar tpl$ >> ] ]
+      [ [ "="; tk = type_kind -> tk
+        | -> <:ctyp<>> ] ]
     ;
     type_kind:
       [ [ t = ctyp -> t ] ]
@@ -842,6 +942,7 @@ Old (no more supported) syntax:
     ;
     type_parameter:
       [ [ `ANTIQUOT (""|"typ"|"anti" as n) s -> <:ctyp< $anti:mk_anti n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
         | "'"; i = a_ident -> <:ctyp< '$lid:i$ >>
         | "+"; "'"; i = a_ident -> <:ctyp< +'$lid:i$ >>
         | "-"; "'"; i = a_ident -> <:ctyp< -'$lid:i$ >> ] ]
@@ -880,6 +981,7 @@ Old (no more supported) syntax:
             <:ctyp< ($tup:<:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>$) >>
         | `ANTIQUOT ("id" as n) s ->
             <:ctyp< $id:<:ident< $anti:mk_anti ~c:"ident" n s$ >>$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
         | i = a_LIDENT -> <:ctyp< $lid:i$ >>
         | i = a_UIDENT -> <:ctyp< $uid:i$ >>
         | "("; t = SELF; "*"; tl = star_ctyp; ")" ->
@@ -906,19 +1008,37 @@ Old (no more supported) syntax:
       ] ]
     ;
     star_ctyp:
-      [ [ t1 = SELF; "*"; t2 = SELF -> <:ctyp< $t1$ * $t2$ >>
+      [ [ `ANTIQUOT (""|"typ" as n) s ->
+            <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `ANTIQUOT ("list" as n) s ->
+            <:ctyp< $anti:mk_anti ~c:"ctyp*" n s$ >>
+        | t1 = SELF; "*"; t2 = SELF ->
+            <:ctyp< $t1$ * $t2$ >>
         | t = ctyp -> t
       ] ]
     ;
     constructor_declarations:
-      [ [ l = LIST1 constructor_declaration SEP "|" -> Ast.tyOr_of_list l ] ]
+      [ [ `ANTIQUOT (""|"typ" as n) s ->
+            <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `ANTIQUOT ("list" as n) s ->
+            <:ctyp< $anti:mk_anti ~c:"ctyp|" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
+        | t1 = SELF; "|"; t2 = SELF ->
+            <:ctyp< $t1$ | $t2$ >>
+        | s = a_UIDENT; "of"; t = constructor_arg_list ->
+            <:ctyp< $uid:s$ of $t$ >>
+        | s = a_UIDENT ->
+            <:ctyp< $uid:s$ >>
+      ] ]
     ;
     constructor_declaration:
       [ [ `ANTIQUOT (""|"typ" as n) s ->
             <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
         | s = a_UIDENT; "of"; t = constructor_arg_list ->
             <:ctyp< $uid:s$ of $t$ >>
-        | s = a_UIDENT -> <:ctyp< $uid:s$ >>
+        | s = a_UIDENT ->
+            <:ctyp< $uid:s$ >>
       ] ]
     ;
     constructor_arg_list:
@@ -933,6 +1053,9 @@ Old (no more supported) syntax:
         [ t1 = SELF; ";"; t2 = SELF -> <:ctyp< $t1$; $t2$ >>
         | `ANTIQUOT (""|"typ" as n) s ->
             <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `ANTIQUOT ("list" as n) s ->
+            <:ctyp< $anti:mk_anti ~c:"ctyp;" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
         | s = a_LIDENT; ":"; t = poly_type ->  <:ctyp< $lid:s$ : $t$ >>
         | s = a_LIDENT; ":"; "mutable"; t = poly_type ->
             <:ctyp< $lid:s$ : mutable $t$ >>
@@ -958,17 +1081,23 @@ Old (no more supported) syntax:
         | i = a_UIDENT -> <:ident< $uid:i$ >> ] ]
     ;
     module_longident_with_app:
-      [ [ i = SELF; j = SELF -> <:ident< $i$ $j$ >> ]
-      | [ i = SELF; "."; j = SELF -> <:ident< $i$.$j$ >> ]
-      | [ `ANTIQUOT (""|"id"|"anti"|"list" as n) s ->
+      [ "apply"
+        [ i = SELF; j = SELF -> <:ident< $i$ $j$ >> ]
+      | "."
+        [ i = SELF; "."; j = SELF -> <:ident< $i$.$j$ >> ]
+      | "simple"
+        [ `ANTIQUOT (""|"id"|"anti"|"list" as n) s ->
             <:ident< $anti:mk_anti ~c:"ident" n s$ >>
         | i = a_UIDENT -> <:ident< $uid:i$ >>
         | "("; i = SELF; ")" -> i ] ]
     ;
     type_longident:
-      [ [ i = SELF; j = SELF -> <:ident< $i$ $j$ >> ]
-      | [ i = SELF; "."; j = SELF -> <:ident< $i$.$j$ >> ]
-      | [ `ANTIQUOT (""|"id"|"anti"|"list" as n) s ->
+      [ "apply"
+        [ i = SELF; j = SELF -> <:ident< $i$ $j$ >> ]
+      | "."
+        [ i = SELF; "."; j = SELF -> <:ident< $i$.$j$ >> ]
+      | "simple"
+        [ `ANTIQUOT (""|"id"|"anti"|"list" as n) s ->
             <:ident< $anti:mk_anti ~c:"ident" n s$ >>
         | i = a_LIDENT -> <:ident< $lid:i$ >>
         | i = a_UIDENT -> <:ident< $uid:i$ >>
@@ -995,6 +1124,7 @@ Old (no more supported) syntax:
             <:class_expr< $c1$ and $c2$ >>
         | `ANTIQUOT (""|"cdcl"|"anti"|"list" as n) s ->
             <:class_expr< $anti:mk_anti ~c:"class_expr" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.class_expr_tag
         | ci = class_info_for_class_expr; ce = class_fun_binding ->
             <:class_expr< $ci$ = $ce$ >>
       ] ]
@@ -1009,38 +1139,12 @@ Old (no more supported) syntax:
     ;
     class_info_for_class_type:
       [ [ mv = opt_virtual; (i, ot) = class_name_and_param ->
-            Ast.CtCon _loc mv (Ast.IdLid _loc i) ot
-            (* <:class_type< $virtual:mv$ $lid:i$ [ $t$ ] >> *)
-
-        (* | mv = opt_virtual; i = a_LIDENT -> *)
-            (* Ast.CeCon (_loc, mv, Ast.IdLid (_loc, i), Ast.ONone) *)
-            (* <:class_type< $lid:i$ >> *)
+            <:class_type< $virtual:mv$ $lid:i$ [ $ot$ ] >>
       ] ]
     ;
-      (* [ [ "virtual"; i = a_LIDENT; "["; t = comma_type_parameter; "]" ->
-            <:class_type< virtual $lid:i$ [ $t$ ] >>
-        | "virtual"; i = a_LIDENT ->
-            <:class_type< virtual $lid:i$ >>
-        | i = a_LIDENT; "["; t = comma_type_parameter; "]" ->
-            <:class_type< $lid:i$ [ $t$ ] >>
-        | i = a_LIDENT -> <:class_type< $lid:i$ >>
-      ] ]
-    ;                                                                       *)
     class_info_for_class_expr:
-      [ [
-        (* "virtual"; i = a_LIDENT; "["; t = comma_type_parameter; "]" -> *)
-            (* <:class_expr< virtual $lid:i$ [ $t$ ] >> *)
-        (* | "virtual"; i = a_LIDENT -> *)
-            (* <:class_expr< virtual $lid:i$ >> *)
-        (* | *)
-        mv = opt_virtual; (i, ot) = class_name_and_param ->
-            Ast.CeCon _loc mv (Ast.IdLid _loc i) ot
-            (* <:class_expr< $virtual:mv$ $lid:i$ [ $t$ ] >> *)
-
-            (* <:class_expr< $lid:i$ [ $t$ ] >> *)
-        (* | mv = opt_virtual; i = a_LIDENT -> *)
-            (* Ast.CeCon (_loc, mv, Ast.IdLid (_loc, i), Ast.ONone) *)
-            (* <:class_expr< $lid:i$ >> *)
+      [ [ mv = opt_virtual; (i, ot) = class_name_and_param ->
+            <:class_expr< $virtual:mv$ $lid:i$ [ $ot$ ] >>
       ] ]
     ;
     class_name_and_param:
@@ -1049,8 +1153,8 @@ Old (no more supported) syntax:
       ] ]
     ;
     comma_type_parameter:
-      [ LEFTA
-        [ t1 = SELF; ","; t2 = SELF -> <:ctyp< $t1$, $t2$ >>
+      [ [ t1 = SELF; ","; t2 = SELF -> <:ctyp< $t1$, $t2$ >>
+        | `ANTIQUOT ("list" as n) s -> <:ctyp< $anti:mk_anti ~c:"ctyp," n s$ >>
         | t = type_parameter -> t
       ] ]
     ;
@@ -1061,6 +1165,7 @@ Old (no more supported) syntax:
     ;
     comma_ctyp:
       [ [ t1 = SELF; ","; t2 = SELF -> <:ctyp< $t1$, $t2$ >>
+        | `ANTIQUOT ("list" as n) s -> <:ctyp< $anti:mk_anti ~c:"ctyp," n s$ >>
         | t = ctyp -> t
       ] ]
     ;
@@ -1080,6 +1185,7 @@ Old (no more supported) syntax:
       | "simple"
         [ `ANTIQUOT (""|"cexp"|"anti" as n) s ->
             <:class_expr< $anti:mk_anti ~c:"class_expr" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.class_expr_tag
         | ce = class_longident_and_param -> ce
         | "object"; csp = opt_class_self_patt; cst = class_structure; "end" ->
             <:class_expr< object ($csp$) $cst$ end >>
@@ -1096,6 +1202,8 @@ Old (no more supported) syntax:
     class_structure:
       [ [ `ANTIQUOT (""|"cst"|"anti"|"list" as n) s ->
             <:class_str_item< $anti:mk_anti ~c:"class_str_item" n s$ >>
+        | `ANTIQUOT (""|"cst"|"anti"|"list" as n) s; semi; cst = SELF ->
+            <:class_str_item< $anti:mk_anti ~c:"class_str_item" n s$; $cst$ >>
         | l = LIST0 [ cst = class_str_item; semi -> cst ] -> Ast.crSem_of_list l
       ] ]
     ;
@@ -1108,6 +1216,7 @@ Old (no more supported) syntax:
       [ LEFTA
         [ `ANTIQUOT (""|"cst"|"anti"|"list" as n) s ->
             <:class_str_item< $anti:mk_anti ~c:"class_str_item" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.class_str_item_tag
         | "inherit"; ce = class_expr; pb = opt_as_lident ->
             <:class_str_item< inherit $ce$ as $pb$ >>
         | value_val; mf = opt_mutable; lab = label; e = cvalue_binding ->
@@ -1116,6 +1225,8 @@ Old (no more supported) syntax:
             <:class_str_item< value virtual $mutable:mf$ $l$ : $t$ >>
         | "method"; "virtual"; pf = opt_private; l = label; ":"; t = poly_type ->
             <:class_str_item< method virtual $private:pf$ $l$ : $t$ >>
+        | "method"; pf = opt_private; "virtual"; l = label; ":"; t = poly_type ->
+            <:class_str_item< method virtual $private:pf$ $l$ : $t$ >>
         | "method"; pf = opt_private; l = label; topt = opt_polyt;
           e = fun_binding ->
             <:class_str_item< method $private:pf$ $l$ : $topt$ = $e$ >>
@@ -1145,6 +1256,7 @@ Old (no more supported) syntax:
     class_type:
       [ [ `ANTIQUOT (""|"ctyp"|"anti" as n) s ->
             <:class_type< $anti:mk_anti ~c:"class_type" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.class_type_tag
         | ct = class_type_longident_and_param -> ct
         | "object"; cst = opt_class_self_type; csg = class_signature; "end" ->
             <:class_type< object ($cst$) $csg$ end >> ] ]
@@ -1165,12 +1277,15 @@ Old (no more supported) syntax:
     class_signature:
       [ [ `ANTIQUOT (""|"csg"|"anti"|"list" as n) s ->
             <:class_sig_item< $anti:mk_anti ~c:"class_sig_item" n s$ >>
+        | `ANTIQUOT (""|"csg"|"anti"|"list" as n) s; semi; csg = SELF ->
+            <:class_sig_item< $anti:mk_anti ~c:"class_sig_item" n s$; $csg$ >>
         | l = LIST0 [ csg = class_sig_item; semi -> csg ] -> Ast.cgSem_of_list l
       ] ]
     ;
     class_sig_item:
       [ [ `ANTIQUOT (""|"csg"|"anti"|"list" as n) s ->
             <:class_sig_item< $anti:mk_anti ~c:"class_sig_item" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.class_sig_item_tag
         | "inherit"; cs = class_type -> <:class_sig_item< inherit $cs$ >>
         | value_val; mf = opt_mutable; mv = opt_virtual;
           l = label; ":"; t = ctyp ->
@@ -1179,16 +1294,19 @@ Old (no more supported) syntax:
             <:class_sig_item< method virtual $private:pf$ $l$ : $t$ >>
         | "method"; pf = opt_private; l = label; ":"; t = poly_type ->
             <:class_sig_item< method $private:pf$ $l$ : $t$ >>
+        | "method"; pf = opt_private; "virtual"; l = label; ":"; t = poly_type ->
+            <:class_sig_item< method virtual $private:pf$ $l$ : $t$ >>
         | type_constraint; t1 = ctyp; "="; t2 = ctyp ->
             <:class_sig_item< type $t1$ = $t2$ >> ] ]
     ;
     type_constraint:
-      [ [ "type" -> () ] ]
+      [ [ "type" | "constraint" -> () ] ]
     ;
     class_description:
       [ [ cd1 = SELF; "and"; cd2 = SELF -> <:class_type< $cd1$ and $cd2$ >>
         | `ANTIQUOT (""|"typ"|"anti"|"list" as n) s ->
             <:class_type< $anti:mk_anti ~c:"class_type" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.class_type_tag
         | ci = class_info_for_class_type; ":"; ct = class_type_plus -> <:class_type< $ci$ : $ct$ >>
       ] ]
     ;
@@ -1197,32 +1315,32 @@ Old (no more supported) syntax:
         [ cd1 = SELF; "and"; cd2 = SELF -> <:class_type< $cd1$ and $cd2$ >>
         | `ANTIQUOT (""|"typ"|"anti"|"list" as n) s ->
             <:class_type< $anti:mk_anti ~c:"class_type" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.class_type_tag
         | ci = class_info_for_class_type; "="; ct = class_type -> <:class_type< $ci$ = $ct$ >>
       ] ]
     ;
     field_expr:
       [ LEFTA
-        [ b1 = SELF; ";"; b2 = SELF -> <:binding< $b1$ ; $b2$ >>
+        [ b1 = SELF; ";"; b2 = SELF -> <:rec_binding< $b1$ ; $b2$ >>
         | `ANTIQUOT (""|"bi"|"anti" as n) s ->
-            <:binding< $anti:mk_anti ~c:"binding" n s$ >>
+            <:rec_binding< $anti:mk_anti ~c:"rec_binding" n s$ >>
         | `ANTIQUOT ("list" as n) s ->
-            <:binding< $anti:mk_anti ~c:"binding;" n s$ >>
-        | l = label; "="; e = expr -> <:binding< $lid:l$ = $e$ >> ] ]
+            <:rec_binding< $anti:mk_anti ~c:"rec_binding" n s$ >>
+        | l = label; "="; e = expr -> <:rec_binding< $lid:l$ = $e$ >> ] ]
     ;
     meth_list:
-      [ [ f = field; ";"; ml = SELF -> <:ctyp< $f$; $ml$ >>
-        | f = field; OPT ";" -> f ] ]
+      [ LEFTA
+        [ ml1 = SELF; ";"; ml2 = SELF        -> <:ctyp< $ml1$; $ml2$ >>
+        | `ANTIQUOT (""|"typ" as n) s        -> <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `ANTIQUOT ("list" as n) s          -> <:ctyp< $anti:mk_anti ~c:"ctyp;" n s$ >>
+        | `QUOTATION x                       -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
+        | lab = a_LIDENT; ":"; t = poly_type -> <:ctyp< $lid:lab$ : $t$ >> ] ]
     ;
     opt_meth_list:
-      [ [ ml = meth_list -> ml
+      [ [ ml = meth_list; OPT ";" -> ml
         | -> <:ctyp<>>
       ] ]
     ;
-    field:
-      [ [ `ANTIQUOT (""|"typ" as n) s ->
-            <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
-        | lab = a_LIDENT; ":"; t = poly_type -> <:ctyp< $lid:lab$ : $t$ >> ] ]
-    ;
     poly_type:
       [ [ t = ctyp -> t ] ]
     ;
@@ -1231,30 +1349,24 @@ Old (no more supported) syntax:
         [ t1 = SELF; t2 = SELF -> <:ctyp< $t1$ $t2$ >>
         | `ANTIQUOT (""|"typ" as n) s ->
             <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `QUOTATION x -> Quotation.expand _loc x Quotation.DynAst.ctyp_tag
         | "'"; i = a_ident -> <:ctyp< '$lid:i$ >>
       ] ]
     ;
     row_field:
       [ [ `ANTIQUOT (""|"typ" as n) s ->
             <:ctyp< $anti:mk_anti ~c:"ctyp" n s$ >>
+        | `ANTIQUOT ("list" as n) s ->
+            <:ctyp< $anti:mk_anti ~c:"ctyp|" n s$ >>
         | t1 = SELF; "|"; t2 = SELF -> <:ctyp< $t1$ | $t2$ >>
         | "`"; i = a_ident -> <:ctyp< `$i$ >>
         | "`"; i = a_ident; "of"; "&"; t = amp_ctyp -> <:ctyp< `$i$ of & $t$ >>
         | "`"; i = a_ident; "of"; t = amp_ctyp -> <:ctyp< `$i$ of $t$ >>
         | t = ctyp -> t ] ]
     ;
-    sem_ctyp:
-      [ [ t1 = SELF; ";"; t2 = SELF -> <:ctyp< $t1$ ; $t2$ >>
-        | t = ctyp -> t
-      ] ]
-    ;
-    pipe_ctyp:
-      [ [ t1 = SELF; "|"; t2 = SELF -> <:ctyp< $t1$ | $t2$ >>
-        | t = ctyp -> t
-      ] ]
-    ;
     amp_ctyp:
       [ [ t1 = SELF; "&"; t2 = SELF -> <:ctyp< $t1$ & $t2$ >>
+        | `ANTIQUOT ("list" as n) s -> <:ctyp< $anti:mk_anti ~c:"ctyp&" n s$ >>
         | t = ctyp -> t
       ] ]
     ;
@@ -1346,6 +1458,8 @@ Old (no more supported) syntax:
     sig_items:
       [ [ `ANTIQUOT (""|"sigi"|"anti"|"list" as n) s ->
             <:sig_item< $anti:mk_anti n ~c:"sig_item" s$ >>
+        | `ANTIQUOT (""|"sigi"|"anti"|"list" as n) s; semi; sg = SELF ->
+            <:sig_item< $anti:mk_anti n ~c:"sig_item" s$; $sg$ >>
         | l = LIST0 [ sg = sig_item; semi -> sg ] -> Ast.sgSem_of_list l
       ] ]
     ;
@@ -1359,6 +1473,8 @@ Old (no more supported) syntax:
     str_items:
       [ [ `ANTIQUOT (""|"stri"|"anti"|"list" as n) s ->
             <:str_item< $anti:mk_anti n ~c:"str_item" s$ >>
+        | `ANTIQUOT (""|"stri"|"anti"|"list" as n) s; semi; st = SELF ->
+            <:str_item< $anti:mk_anti n ~c:"str_item" s$; $st$ >>
         | l = LIST0 [ st = str_item; semi -> st ] -> Ast.stSem_of_list l
       ] ]
     ;
@@ -1412,9 +1528,6 @@ Old (no more supported) syntax:
       [ [ `ANTIQUOT (""|"lid" as n) s -> mk_anti n s
         | `LIDENT s -> s ] ]
     ;
-    a_LIDENT_or_operator:
-      [ [ x = a_LIDENT -> x ] ]
-    ;
     a_LABEL:
       [ [ "~"; `ANTIQUOT ("" as n) s; ":" -> mk_anti n s
         | `LABEL s -> s ] ]
@@ -1451,18 +1564,30 @@ Old (no more supported) syntax:
     patt_quot:
       [ [ x = patt; ","; y = comma_patt -> <:patt< $x$, $y$ >>
         | x = patt; ";"; y = sem_patt -> <:patt< $x$; $y$ >>
-        | x = patt; "="; y = patt -> <:patt< $x$ = $y$ >>
+        | x = patt; "="; y = patt ->
+            let i =
+              match x with
+              [ <:patt@loc< $anti:s$ >> -> <:ident@loc< $anti:s$ >>
+              | p -> Ast.ident_of_patt p ]
+            in
+            <:patt< $i$ = $y$ >>
         | x = patt -> x
         | -> <:patt<>>
       ] ]
     ;
     ctyp_quot:
       [ [ x = more_ctyp; ","; y = comma_ctyp -> <:ctyp< $x$, $y$ >>
-        | x = more_ctyp; ";"; y = sem_ctyp -> <:ctyp< $x$; $y$ >>
-        | x = more_ctyp; "|"; y = pipe_ctyp -> <:ctyp< $x$ | $y$ >>
+        | x = more_ctyp; ";"; y = label_declaration -> <:ctyp< $x$; $y$ >>
+        | x = more_ctyp; "|"; y = constructor_declarations -> <:ctyp< $x$ | $y$ >>
         | x = more_ctyp; "of"; y = constructor_arg_list -> <:ctyp< $x$ of $y$ >>
+        | x = more_ctyp; "of"; y = constructor_arg_list; "|"; z = constructor_declarations ->
+            <:ctyp< $ <:ctyp< $x$ of $y$ >> $ | $z$ >>
         | x = more_ctyp; "of"; "&"; y = amp_ctyp -> <:ctyp< $x$ of & $y$ >>
+        | x = more_ctyp; "of"; "&"; y = amp_ctyp; "|"; z = row_field ->
+            <:ctyp< $ <:ctyp< $x$ of & $y$ >> $ | $z$ >>
         | x = more_ctyp; ":"; y = more_ctyp -> <:ctyp< $x$ : $y$ >>
+        | x = more_ctyp; ":"; y = more_ctyp; ";"; z = label_declaration ->
+            <:ctyp< $ <:ctyp< $x$ : $y$ >> $ ; $z$ >>
         | x = more_ctyp; "*"; y = star_ctyp -> <:ctyp< $x$ * $y$ >>
         | x = more_ctyp; "&"; y = amp_ctyp -> <:ctyp< $x$ & $y$ >>
         | x = more_ctyp; "and"; y = constructor_arg_list -> <:ctyp< $x$ and $y$ >>
@@ -1473,7 +1598,7 @@ Old (no more supported) syntax:
     more_ctyp:
       [ [ "mutable"; x = SELF -> <:ctyp< mutable $x$ >>
         | "`"; x = a_LIDENT -> <:ctyp< `$x$ >>
-        | x = ctyp -> x
+        | x = type_kind -> x
         | x = type_parameter -> x
       ] ]
     ;
@@ -1491,24 +1616,27 @@ Old (no more supported) syntax:
     ;
     module_type_quot:
       [ [ x = module_type -> x
+        | -> <:module_type<>>
       ] ]
     ;
     module_expr_quot:
       [ [ x = module_expr -> x
+        | -> <:module_expr<>>
       ] ]
     ;
     match_case_quot:
-      [ [ x = match_case -> x
+      [ [ x = LIST0 match_case0 SEP "|" -> <:match_case< $list:x$ >>
         | -> <:match_case<>> ] ]
     ;
     binding_quot:
-      [ [ b1 = SELF; "and"; b2 = SELF -> <:binding< $b1$ and $b2$ >>
-        | b1 = SELF; ";"; b2 = SELF -> <:binding< $b1$ ; $b2$ >>
-        | x = binding -> x
-        | x = label_expr -> x
+      [ [ x = binding -> x
         | -> <:binding<>>
       ] ]
     ;
+    rec_binding_quot:
+      [ [ x = label_expr -> x
+        | -> <:rec_binding<>> ] ]
+    ;
     module_binding_quot:
       [ [ b1 = SELF; "and"; b2 = SELF ->
             <:module_binding< $b1$ and $b2$ >>
@@ -1541,9 +1669,10 @@ Old (no more supported) syntax:
       [ [ ce1 = SELF; "and"; ce2 = SELF -> <:class_expr< $ce1$ and $ce2$ >>
         | ce1 = SELF; "="; ce2 = SELF -> <:class_expr< $ce1$ = $ce2$ >>
         | "virtual"; (i, ot) = class_name_and_param ->
-            Ast.CeCon _loc Ast.BTrue (Ast.IdLid _loc i) ot
+            <:class_expr< virtual $lid:i$ [ $ot$ ] >>
         | `ANTIQUOT ("virtual" as n) s; i = ident; ot = opt_comma_ctyp ->
-            Ast.CeCon _loc (Ast.BAnt (mk_anti ~c:"class_expr" n s)) i ot
+            let anti = Ast.BAnt (mk_anti ~c:"class_expr" n s) in
+            <:class_expr< $virtual:anti$ $id:i$ [ $ot$ ] >>
         | x = class_expr -> x
         | -> <:class_expr<>>
       ] ]
@@ -1553,9 +1682,10 @@ Old (no more supported) syntax:
         | ct1 = SELF; "="; ct2 = SELF -> <:class_type< $ct1$ = $ct2$ >>
         | ct1 = SELF; ":"; ct2 = SELF -> <:class_type< $ct1$ : $ct2$ >>
         | "virtual"; (i, ot) = class_name_and_param ->
-            Ast.CtCon _loc Ast.BTrue (Ast.IdLid _loc i) ot
+            <:class_type< virtual $lid:i$ [ $ot$ ] >>
         | `ANTIQUOT ("virtual" as n) s; i = ident; ot = opt_comma_ctyp ->
-            Ast.CtCon _loc (Ast.BAnt (mk_anti ~c:"class_type" n s)) i ot
+            let anti = Ast.BAnt (mk_anti ~c:"class_type" n s) in
+            <:class_type< $virtual:anti$ $id:i$ [ $ot$ ] >>
         | x = class_type_plus -> x
         | -> <:class_type<>>
       ] ]
index ccc9ef114a1b607ae96fd7a693bbf6daa67deaf7..b0a42d47e0a634f482991a4e0829e5d672415785 100644 (file)
@@ -21,7 +21,7 @@ open Camlp4;                                        (* -*- camlp4r -*- *)
 
 module Id : Sig.Id = struct
   value name = "Camlp4OCamlRevisedParserParser";
-  value version = "$Id: Camlp4OCamlRevisedParserParser.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4OCamlRevisedParserParser.ml,v 1.1.4.2 2007/04/05 18:06:36 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Camlp4Syntax) = struct
@@ -263,6 +263,11 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
       [ Some bp -> <:expr< let $bp$ = Stream.count $lid:strm_n$ in $pc$ >>
       | None -> pc ]
     in
+    let me =
+      match me with
+      [ <:expr@_loc< $_$; $_$ >> as e -> <:expr< do { $e$ } >>
+      | e -> e ]
+    in
     match me with
     [ <:expr< $lid:x$ >> when x = strm_n -> e
     | _ -> <:expr< let ($lid:strm_n$ : Stream.t _) = $me$ in $e$ >> ]
@@ -316,7 +321,7 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
     expr: LEVEL "top"
       [ [ "parser"; po = OPT parser_ipatt; pcl = parser_case_list ->
             <:expr< $cparser _loc po pcl$ >>
-        | "match"; e = SELF; "with"; "parser"; po = OPT parser_ipatt;
+        | "match"; e = sequence; "with"; "parser"; po = OPT parser_ipatt;
           pcl = parser_case_list ->
             <:expr< $cparser_match _loc e po pcl$ >>
       ] ]
index b013be25609679cb0a4990cb95825177506a340f..07d2a01eb9e4570eb914e5db312231decd20e539 100644 (file)
@@ -19,6 +19,6 @@ open Camlp4;                                             (* -*- camlp4r -*- *)
 
 open PreCast;
 let module Gram = MakeGram Lexer in
-let module M1 = OCamlInitSyntax.Make Warning Ast Gram Quotation in
+let module M1 = OCamlInitSyntax.Make Ast Gram Quotation in
 let module M2 = Camlp4OCamlRevisedParser.Make M1 in
 let module M3 = Camlp4QuotationCommon.Make M2 Syntax.AntiquotSyntax in ();
index 6a1dafcaadf9d118a732dd7a51d74dd246777e7e..42835f382d518d6810c14ca80a799a274d2fefcb 100644 (file)
@@ -19,7 +19,7 @@ open Camlp4;                                             (* -*- camlp4r -*- *)
 
 module Id = struct
   value name = "Camlp4QuotationCommon";
-  value version = "$Id: Camlp4QuotationCommon.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $";
+  value version = "$Id: Camlp4QuotationCommon.ml,v 1.1.4.5 2007/05/10 14:24:22 pouillar Exp $";
 end;
 
 module Make (Syntax : Sig.Camlp4Syntax)
@@ -76,6 +76,7 @@ module Make (Syntax : Sig.Camlp4Syntax)
             | "anticlass_str_item" -> <:patt< Ast.CrAnt $mloc _loc$ $p$ >>
             | "antiwith_constr" -> <:patt< Ast.WcAnt $mloc _loc$ $p$ >>
             | "antibinding" -> <:patt< Ast.BiAnt $mloc _loc$ $p$ >>
+            | "antirec_binding" -> <:patt< Ast.RbAnt $mloc _loc$ $p$ >>
             | "antimatch_case" -> <:patt< Ast.McAnt $mloc _loc$ $p$ >>
             | "antimodule_binding" -> <:patt< Ast.MbAnt $mloc _loc$ $p$ >>
             | "antiident" -> <:patt< Ast.IdAnt $mloc _loc$ $p$ >>
@@ -93,6 +94,9 @@ module Make (Syntax : Sig.Camlp4Syntax)
             | "`flo" -> <:expr< string_of_float $e$ >>
             | "`str" -> <:expr< Ast.safe_string_escaped $e$ >>
             | "`chr" -> <:expr< Char.escaped $e$ >>
+            | "`bool" ->
+                <:expr< if $e$ then $ME.meta_expr _loc <:expr<True>>$
+                               else $ME.meta_expr _loc <:expr<False>>$ >>
             | "liststr_item" -> <:expr< Ast.stSem_of_list $e$ >>
             | "listsig_item" -> <:expr< Ast.sgSem_of_list $e$ >>
             | "listclass_sig_item" -> <:expr< Ast.cgSem_of_list $e$ >>
@@ -102,13 +106,22 @@ module Make (Syntax : Sig.Camlp4Syntax)
             | "listmodule_binding" -> <:expr< Ast.mbAnd_of_list $e$ >>
             | "listbinding" -> <:expr< Ast.biAnd_of_list $e$ >>
             | "listbinding;" -> <:expr< Ast.biSem_of_list $e$ >>
+            | "listrec_binding" -> <:expr< Ast.rbSem_of_list $e$ >>
             | "listclass_type" -> <:expr< Ast.ctAnd_of_list $e$ >>
             | "listclass_expr" -> <:expr< Ast.ceAnd_of_list $e$ >>
             | "listident" -> <:expr< Ast.idAcc_of_list $e$ >>
             | "listctypand" -> <:expr< Ast.tyAnd_of_list $e$ >>
+            | "listctyp;" -> <:expr< Ast.tySem_of_list $e$ >>
+            | "listctyp*" -> <:expr< Ast.tySta_of_list $e$ >>
+            | "listctyp|" -> <:expr< Ast.tyOr_of_list $e$ >>
+            | "listctyp," -> <:expr< Ast.tyCom_of_list $e$ >>
+            | "listctyp&" -> <:expr< Ast.tyAmp_of_list $e$ >>
             | "listwith_constr" -> <:expr< Ast.wcAnd_of_list $e$ >>
             | "listmatch_case" -> <:expr< Ast.mcOr_of_list $e$ >>
+            | "listpatt," -> <:expr< Ast.paCom_of_list $e$ >>
             | "listpatt;" -> <:expr< Ast.paSem_of_list $e$ >>
+            | "listexpr," -> <:expr< Ast.exCom_of_list $e$ >>
+            | "listexpr;" -> <:expr< Ast.exSem_of_list $e$ >>
             | "antisig_item" -> <:expr< Ast.SgAnt $mloc _loc$ $e$ >>
             | "antistr_item" -> <:expr< Ast.StAnt $mloc _loc$ $e$ >>
             | "antictyp" -> <:expr< Ast.TyAnt $mloc _loc$ $e$ >>
@@ -122,6 +135,7 @@ module Make (Syntax : Sig.Camlp4Syntax)
             | "anticlass_str_item" -> <:expr< Ast.CrAnt $mloc _loc$ $e$ >>
             | "antiwith_constr" -> <:expr< Ast.WcAnt $mloc _loc$ $e$ >>
             | "antibinding" -> <:expr< Ast.BiAnt $mloc _loc$ $e$ >>
+            | "antirec_binding" -> <:expr< Ast.RbAnt $mloc _loc$ $e$ >>
             | "antimatch_case" -> <:expr< Ast.McAnt $mloc _loc$ $e$ >>
             | "antimodule_binding" -> <:expr< Ast.MbAnt $mloc _loc$ $e$ >>
             | "antiident" -> <:expr< Ast.IdAnt $mloc _loc$ $e$ >>
@@ -131,14 +145,23 @@ module Make (Syntax : Sig.Camlp4Syntax)
 
   value add_quotation name entry mexpr mpatt =
     let entry_eoi = Gram.Entry.mk (Gram.Entry.name entry) in
+    let parse_quot_string entry loc s =
+      let q = Camlp4_config.antiquotations.val in
+      let () = Camlp4_config.antiquotations.val := True in
+      let res = Gram.parse_string entry loc s in
+      let () = Camlp4_config.antiquotations.val := q in
+      res in
     let expand_expr loc loc_name_opt s =
-      let ast = Gram.parse_string entry_eoi loc s in
+      let ast = parse_quot_string entry_eoi loc s in
       let () = MetaLoc.loc_name.val := loc_name_opt in
       let meta_ast = mexpr loc ast in
       let exp_ast = antiquot_expander#expr meta_ast in
       exp_ast in
+    let expand_str_item loc loc_name_opt s =
+      let exp_ast = expand_expr loc loc_name_opt s in
+      <:str_item@loc< $exp:exp_ast$ >> in
     let expand_patt _loc loc_name_opt s =
-      let ast = Gram.parse_string entry_eoi _loc s in
+      let ast = parse_quot_string entry_eoi _loc s in
       let meta_ast = mpatt _loc ast in
       let exp_ast = antiquot_expander#patt meta_ast in
       match loc_name_opt with
@@ -156,7 +179,9 @@ module Make (Syntax : Sig.Camlp4Syntax)
           [ [ x = entry; `EOI -> x ] ]
         ;
       END;
-      Quotation.add name (Quotation.ExAst (expand_expr, expand_patt))
+      Quotation.add name Quotation.DynAst.expr_tag expand_expr;
+      Quotation.add name Quotation.DynAst.patt_tag expand_patt;
+      Quotation.add name Quotation.DynAst.str_item_tag expand_str_item;
     };
 
   add_quotation "sig_item" sig_item_quot ME.meta_sig_item MP.meta_sig_item;
@@ -174,6 +199,7 @@ module Make (Syntax : Sig.Camlp4Syntax)
                 class_str_item_quot ME.meta_class_str_item MP.meta_class_str_item;
   add_quotation "with_constr" with_constr_quot ME.meta_with_constr MP.meta_with_constr;
   add_quotation "binding" binding_quot ME.meta_binding MP.meta_binding;
+  add_quotation "rec_binding" rec_binding_quot ME.meta_rec_binding MP.meta_rec_binding;
   add_quotation "match_case" match_case_quot ME.meta_match_case MP.meta_match_case;
   add_quotation "module_binding"
                 module_binding_quot ME.meta_module_binding MP.meta_module_binding;
index c4f932d32fbe7ae84244775ac6a9c471b531a4df..fe769e996632ed2cff36500209ec328c4ca8b0b8 100644 (file)
@@ -19,7 +19,7 @@
  *)
 
 
-(* $Id: Rprint.ml,v 1.2 2006/07/08 17:21:32 pouillar Exp $ *)
+(* $Id: Rprint.ml,v 1.2.6.1 2007/05/10 13:31:21 pouillar Exp $ *)
 
 (* This file originally come from typing/oprint.ml *)
 
@@ -198,7 +198,7 @@ and print_simple_out_type ppf =
   | Otyp_record lbls ->
       fprintf ppf "@[<hv 2>{ %a }@]"
         (print_list print_out_label (fun ppf -> fprintf ppf ";@ ")) lbls
-  | Otyp_abstract -> fprintf ppf "'abstract"
+  | Otyp_abstract -> fprintf ppf "<abstract>"
   | Otyp_alias _ _ | Otyp_poly _ _
   | Otyp_arrow _ _ _ | Otyp_constr _ [_ :: _] as ty ->
       fprintf ppf "@[<1>(%a)@]" print_out_type ty ]
index 3767d1eeb07f1c2d66a3f76bc103f768b02c2b80..924a09ebf5a6ae7b20f39aec75d88a46aedc39ff 100644 (file)
@@ -18,7 +18,7 @@
  * - Nicolas Pouillard: refactoring
  *)
 
-(* $Id: Top.ml,v 1.1 2007/02/07 10:09:23 ertai Exp $ *)
+(* $Id: Top.ml,v 1.1.4.2 2007/04/10 13:54:03 pouillar Exp $ *)
 
 open Parsetree;
 open Lexing;
@@ -101,7 +101,9 @@ Toploop.parse_toplevel_phrase.val := wrap toplevel_phrase;
 
 Toploop.parse_use_file.val := wrap use_file;
 
-Warning.current.val :=
+current_warning.val :=
   fun loc txt ->
     Toploop.print_warning (Loc.to_ocaml_location loc) Format.err_formatter
       (Warnings.Camlp4 txt);
+
+Register.iter_and_take_callbacks (fun (_, f) -> f ());
index 362848493ddd7753d9fcea86d3f8de1388b7710e..03fa1f7c14b74afab47ae0e0b7a6706b56c4ae57 100644 (file)
@@ -30,6 +30,7 @@ let program_name = ref "camlp4";;
 let constructors_arity = ref true;;
 let unsafe             = ref false;;
 let verbose            = ref false;;
+let antiquotations     = ref false;;
 let quotations         = ref true;;
 let inter_phrases      = ref None;;
 let camlp4_ast_impl_magic_number = "Camlp42006M001";;
index c2647b890845e96ea8e82e2907b73977cd630e00..175920846330e065f72b1f59c8978328b46262d7 100644 (file)
@@ -28,6 +28,7 @@ val program_name                 : string ref;;
 val unsafe                       : bool ref;;
 val verbose                      : bool ref;;
 val quotations                   : bool ref;;
+val antiquotations               : bool ref;;
 val constructors_arity           : bool ref;;
 val inter_phrases                : (string option) ref;;
 val current_input_file           : string ref;;
index ef4b7686c6224dfca6de744c14de29d693f0f303..067a099330edcad2bd49d74246f8a19cff5caee0 100644 (file)
@@ -350,7 +350,7 @@ module Sig =
       sig
         (** The name of the extension, typically the module name. *)
         val name : string
-        (** The version of the extension, typically $Id: Camlp4.ml,v 1.3 2007/02/26 16:43:01 ertai Exp $ with a versionning system. *)
+        (** The version of the extension, typically $Id: Sig.ml,v 1.2.2.9 2007/05/10 13:31:20 pouillar Exp $ with a versionning system. *)
         val version : string
       end
     module type Loc =
@@ -450,13 +450,15 @@ module Sig =
       the predefined quotations for OCaml syntax trees. Default: [_loc]. *)
         val name : string ref
       end
-    module type Warning =
-      sig
-        module Loc : Loc
-        type t = Loc.t -> string -> unit
-        val default : t
-        val current : t ref
-        val print : t
+    module Warning (Loc : Loc) =
+      struct
+        module type S =
+          sig
+            type warning = Loc.t -> string -> unit
+            val default_warning : warning
+            val current_warning : warning ref
+            val print_warning : warning
+          end
       end
     (** Base class for map traversal, it includes some builtin types. *)
     class mapper =
@@ -469,7 +471,7 @@ module Sig =
            fun f -> function | None -> None | Some x -> Some (f x)
          method array : 'a 'b. ('a -> 'b) -> 'a array -> 'b array = Array.map
          method ref : 'a 'b. ('a -> 'b) -> 'a ref -> 'b ref =
-           fun f { contents = x } -> {  contents = f x; }
+           fun f { contents = x } -> { contents = f x; }
        end :
        object
          method string : string -> string
@@ -505,6 +507,7 @@ module Sig =
         type match_case
         type ident
         type binding
+        type rec_binding
         type module_binding
         val loc_of_ctyp : ctyp -> Loc.t
         val loc_of_patt : patt -> Loc.t
@@ -519,6 +522,7 @@ module Sig =
         val loc_of_class_str_item : class_str_item -> Loc.t
         val loc_of_with_constr : with_constr -> Loc.t
         val loc_of_binding : binding -> Loc.t
+        val loc_of_rec_binding : rec_binding -> Loc.t
         val loc_of_module_binding : module_binding -> Loc.t
         val loc_of_match_case : match_case -> Loc.t
         val loc_of_ident : ident -> Loc.t
@@ -560,6 +564,7 @@ module Sig =
             method class_str_item : class_str_item -> class_str_item
             method with_constr : with_constr -> with_constr
             method binding : binding -> binding
+            method rec_binding : rec_binding -> rec_binding
             method module_binding : module_binding -> module_binding
             method match_case : match_case -> match_case
             method ident : ident -> ident
@@ -601,6 +606,7 @@ module Sig =
             method class_str_item : class_str_item -> 'self_type
             method with_constr : with_constr -> 'self_type
             method binding : binding -> 'self_type
+            method rec_binding : rec_binding -> 'self_type
             method module_binding : module_binding -> 'self_type
             method match_case : match_case -> 'self_type
             method ident : ident -> 'self_type
@@ -623,7 +629,31 @@ module Sig =
     It provides:
       - Types for all kinds of structure.
       - Map: A base class for map traversals.
-      - Map classes and functions for common kinds. *)
+      - Map classes and functions for common kinds.
+
+    (* Core language *)
+    ctyp               (* Representaion of types                                     *)
+    patt               (* The type of patterns                                       *)
+    expr               (* The type of expressions                                    *)
+    match_case         (* The type of cases for match/function/try constructions     *)
+    ident              (* The type of identifiers (including path like Foo(X).Bar.y) *)
+    binding            (* The type of let bindings                                   *)
+    rec_binding        (* The type of record definitions                             *)
+
+    (* Modules *)
+    module_type        (* The type of module types                                   *)
+    sig_item           (* The type of signature items                                *)
+    str_item           (* The type of structure items                                *)
+    module_expr        (* The type of module expressions                             *)
+    module_binding     (* The type of recursive module definitions                   *)
+    with_constr        (* The type of `with' constraints                             *)
+
+    (* Classes *)
+    class_type         (* The type of class types                                    *)
+    class_sig_item     (* The type of class signature items                          *)
+    class_expr         (* The type of class expressions                              *)
+    class_str_item     (* The type of class structure items                          *)
+ *)
     module type Camlp4Ast =
       sig
         module Loc : Loc
@@ -632,46 +662,44 @@ module Sig =
         type 'a meta_list =
           | LNil | LCons of 'a * 'a meta_list | LAnt of string
         type ident =
-          | IdAcc of Loc.t * ident * ident | (* i . i *)
-          IdApp of Loc.t * ident * ident | (* i i *) IdLid of Loc.t * string
-          | (* foo *) IdUid of Loc.t * string | (* Bar *)
-          IdAnt of Loc.t * string
+          | (* i . i *) (* i i *) (* foo *) (* Bar *)
+          IdAcc of Loc.t * ident * ident | IdApp of Loc.t * ident * ident
+          | IdLid of Loc.t * string | IdUid of Loc.t * string
+          IdAnt of Loc.t * string
         (* $s$ *)
         type ctyp =
-          | TyNil of Loc.t | TyAli of Loc.t * ctyp * ctyp | (* t as t *)
-          (* list 'a as 'a *) TyAny of Loc.t | (* _ *)
-          TyApp of Loc.t * ctyp * ctyp | (* t t *) (* list 'a *)
-          TyArr of Loc.t * ctyp * ctyp | (* t -> t *) (* int -> string *)
-          TyCls of Loc.t * ident | (* #i *) (* #point *)
-          TyLab of Loc.t * string * ctyp | (* ~s *) TyId of Loc.t * ident
-          | (* i *) (* Lazy.t *) TyMan of Loc.t * ctyp * ctyp | (* t == t *)
-          (* type t = [ A | B ] == Foo.t *)
+          | (* t as t *) (* list 'a as 'a *) (* _ *) (* t t *) (* list 'a *)
+          (* t -> t *) (* int -> string *) (* #i *) (* #point *) (* ~s *)
+          (* i *) (* Lazy.t *) (* t == t *) (* type t = [ A | B ] == Foo.t *)
           (* type t 'a 'b 'c = t constraint t = t constraint t = t *)
-          TyDcl of Loc.t * string * ctyp list * ctyp * (ctyp * ctyp) list
-          | (* < (t)? (..)? > *) (* < move : int -> 'a .. > as 'a  *)
-          TyObj of Loc.t * ctyp * meta_bool | TyOlb of Loc.t * string * ctyp
-          | (* ?s *) TyPol of Loc.t * ctyp * ctyp | (* ! t . t *)
-          (* ! 'a . list 'a -> 'a *) TyQuo of Loc.t * string | (* 's *)
-          TyQuP of Loc.t * string | (* +'s *) TyQuM of Loc.t * string
-          | (* -'s *) TyVrn of Loc.t * string | (* `s *)
-          TyRec of Loc.t * ctyp | (* { t } *)
-          (* { foo : int ; bar : mutable string } *)
-          TyCol of Loc.t * ctyp * ctyp | (* t : t *)
-          TySem of Loc.t * ctyp * ctyp | (* t; t *)
-          TyCom of Loc.t * ctyp * ctyp | (* t, t *) TySum of Loc.t * ctyp
-          | (* [ t ] *) (* [ A of int and string | B ] *)
-          TyOf of Loc.t * ctyp * ctyp | (* t of t *) (* A of int *)
-          TyAnd of Loc.t * ctyp * ctyp | (* t and t *)
-          TyOr of Loc.t * ctyp * ctyp | (* t | t *) TyPrv of Loc.t * ctyp
-          | (* private t *) TyMut of Loc.t * ctyp | (* mutable t *)
-          TyTup of Loc.t * ctyp | (* ( t ) *) (* (int * string) *)
-          TySta of Loc.t * ctyp * ctyp | (* t * t *) TyVrnEq of Loc.t * ctyp
-          | (* [ = t ] *) TyVrnSup of Loc.t * ctyp | (* [ > t ] *)
-          TyVrnInf of Loc.t * ctyp | (* [ < t ] *)
-          TyVrnInfSup of Loc.t * ctyp * ctyp | (* [ < t > t ] *)
-          TyAmp of Loc.t * ctyp * ctyp | (* t & t *)
-          TyOfAmp of Loc.t * ctyp * ctyp | (* t of & t *)
-          TyAnt of Loc.t * string
+          (* < (t)? (..)? > *) (* < move : int -> 'a .. > as 'a  *) (* ?s *)
+          (* ! t . t *) (* ! 'a . list 'a -> 'a *) (* 's *) (* +'s *)
+          (* -'s *) (* `s *) (* { t } *)
+          (* { foo : int ; bar : mutable string } *) (* t : t *) (* t; t *)
+          (* t, t *) (* [ t ] *) (* [ A of int and string | B ] *)
+          (* t of t *) (* A of int *) (* t and t *) (* t | t *)
+          (* private t *) (* mutable t *) (* ( t ) *) (* (int * string) *)
+          (* t * t *) (* [ = t ] *) (* [ > t ] *) (* [ < t ] *)
+          (* [ < t > t ] *) (* t & t *) (* t of & t *) TyNil of Loc.t
+          | TyAli of Loc.t * ctyp * ctyp | TyAny of Loc.t
+          | TyApp of Loc.t * ctyp * ctyp | TyArr of Loc.t * ctyp * ctyp
+          | TyCls of Loc.t * ident | TyLab of Loc.t * string * ctyp
+          | TyId of Loc.t * ident | TyMan of Loc.t * ctyp * ctyp
+          | TyDcl of Loc.t * string * ctyp list * ctyp * (ctyp * ctyp) list
+          | TyObj of Loc.t * ctyp * meta_bool
+          | TyOlb of Loc.t * string * ctyp | TyPol of Loc.t * ctyp * ctyp
+          | TyQuo of Loc.t * string | TyQuP of Loc.t * string
+          | TyQuM of Loc.t * string | TyVrn of Loc.t * string
+          | TyRec of Loc.t * ctyp | TyCol of Loc.t * ctyp * ctyp
+          | TySem of Loc.t * ctyp * ctyp | TyCom of Loc.t * ctyp * ctyp
+          | TySum of Loc.t * ctyp | TyOf of Loc.t * ctyp * ctyp
+          | TyAnd of Loc.t * ctyp * ctyp | TyOr of Loc.t * ctyp * ctyp
+          | TyPrv of Loc.t * ctyp | TyMut of Loc.t * ctyp
+          | TyTup of Loc.t * ctyp | TySta of Loc.t * ctyp * ctyp
+          | TyVrnEq of Loc.t * ctyp | TyVrnSup of Loc.t * ctyp
+          | TyVrnInf of Loc.t * ctyp | TyVrnInfSup of Loc.t * ctyp * ctyp
+          | TyAmp of Loc.t * ctyp * ctyp | TyOfAmp of Loc.t * ctyp * ctyp
+          | TyAnt of Loc.t * string
         (* $s$ *)
         type (* i *)
           (* p as p *)
@@ -693,7 +721,7 @@ module Sig =
           (* p | p *)
           (* p .. p *)
           (* { p } *)
-          (* p = p *)
+          (* i = p *)
           (* s *)
           (* ( p ) *)
           (* (p : t) *)
@@ -764,10 +792,12 @@ module Sig =
           (* $s$ *)
           (* b and b *)
           (* let a = 42 and c = 43 *)
-          (* b ; b *)
           (* p = e *)
           (* let patt = expr *)
           (* $s$ *)
+          (* b ; b *)
+          (* i = e *)
+          (* $s$ *)
           (* mb and mb *)
           (* module rec (s : mt) = me and (s : mt) = me *)
           (* s : mt = me *)
@@ -833,7 +863,7 @@ module Sig =
           | PaOlb of Loc.t * string * patt
           | PaOlbi of Loc.t * string * patt * expr
           | PaOrp of Loc.t * patt * patt | PaRng of Loc.t * patt * patt
-          | PaRec of Loc.t * patt | PaEq of Loc.t * patt * patt
+          | PaRec of Loc.t * patt | PaEq of Loc.t * ident * patt
           | PaStr of Loc.t * string | PaTup of Loc.t * patt
           | PaTyc of Loc.t * patt * ctyp | PaTyp of Loc.t * ident
           | PaVrn of Loc.t * string
@@ -854,15 +884,15 @@ module Sig =
           | ExLmd of Loc.t * string * module_expr * expr
           | ExMat of Loc.t * expr * match_case | ExNew of Loc.t * ident
           | ExObj of Loc.t * patt * class_str_item
-          | ExOlb of Loc.t * string * expr | ExOvr of Loc.t * binding
-          | ExRec of Loc.t * binding * expr | ExSeq of Loc.t * expr
+          | ExOlb of Loc.t * string * expr | ExOvr of Loc.t * rec_binding
+          | ExRec of Loc.t * rec_binding * expr | ExSeq of Loc.t * expr
           | ExSnd of Loc.t * expr * string | ExSte of Loc.t * expr * expr
           | ExStr of Loc.t * string | ExTry of Loc.t * expr * match_case
           | ExTup of Loc.t * expr | ExCom of Loc.t * expr * expr
           | ExTyc of Loc.t * expr * ctyp | ExVrn of Loc.t * string
           | ExWhi of Loc.t * expr * expr
           and module_type =
-          | MtId of Loc.t * ident
+          | MtNil of Loc.t | MtId of Loc.t * ident
           | MtFun of Loc.t * string * module_type * module_type
           | MtQuo of Loc.t * string | MtSig of Loc.t * sig_item
           | MtWit of Loc.t * module_type * with_constr
@@ -886,8 +916,10 @@ module Sig =
           | WcAnt of Loc.t * string
           and binding =
           | BiNil of Loc.t | BiAnd of Loc.t * binding * binding
-          | BiSem of Loc.t * binding * binding | BiEq of Loc.t * patt * expr
-          | BiAnt of Loc.t * string
+          | BiEq of Loc.t * patt * expr | BiAnt of Loc.t * string
+          and rec_binding =
+          | RbNil of Loc.t | RbSem of Loc.t * rec_binding * rec_binding
+          | RbEq of Loc.t * ident * expr | RbAnt of Loc.t * string
           and module_binding =
           | MbNil of Loc.t | MbAnd of Loc.t * module_binding * module_binding
           | MbColEq of Loc.t * string * module_type * module_expr
@@ -896,7 +928,7 @@ module Sig =
           | McNil of Loc.t | McOr of Loc.t * match_case * match_case
           | McArr of Loc.t * patt * expr * expr | McAnt of Loc.t * string
           and module_expr =
-          | MeId of Loc.t * ident
+          | MeNil of Loc.t | MeId of Loc.t * ident
           | MeApp of Loc.t * module_expr * module_expr
           | MeFun of Loc.t * string * module_type * module_expr
           | MeStr of Loc.t * str_item
@@ -940,19 +972,18 @@ module Sig =
           | CeAnd of Loc.t * class_expr * class_expr
           | CeEq of Loc.t * class_expr * class_expr | CeAnt of Loc.t * string
           and class_str_item =
-          | CrNil of Loc.t | (* cst ; cst *)
-          CrSem of Loc.t * class_str_item * class_str_item | (* type t = t *)
-          CrCtr of Loc.t * ctyp * ctyp | (* inherit ce or inherit ce as s *)
-          CrInh of Loc.t * class_expr * string | (* initializer e *)
-          CrIni of Loc.t * expr
-          | (* method (private)? s : t = e or method (private)? s = e *)
-          CrMth of Loc.t * string * meta_bool * expr * ctyp
-          | (* value (mutable)? s = e *)
-          CrVal of Loc.t * string * meta_bool * expr
-          | (* method virtual (private)? s : t *)
-          CrVir of Loc.t * string * meta_bool * ctyp
-          | (* value virtual (private)? s : t *)
-          CrVvr of Loc.t * string * meta_bool * ctyp
+          | (* cst ; cst *) (* type t = t *)
+          (* inherit ce or inherit ce as s *) (* initializer e *)
+          (* method (private)? s : t = e or method (private)? s = e *)
+          (* value (mutable)? s = e *) (* method virtual (private)? s : t *)
+          (* value virtual (private)? s : t *) CrNil of Loc.t
+          | CrSem of Loc.t * class_str_item * class_str_item
+          | CrCtr of Loc.t * ctyp * ctyp
+          | CrInh of Loc.t * class_expr * string | CrIni of Loc.t * expr
+          | CrMth of Loc.t * string * meta_bool * expr * ctyp
+          | CrVal of Loc.t * string * meta_bool * expr
+          | CrVir of Loc.t * string * meta_bool * ctyp
+          | CrVvr of Loc.t * string * meta_bool * ctyp
           | CrAnt of Loc.t * string
         val loc_of_ctyp : ctyp -> Loc.t
         val loc_of_patt : patt -> Loc.t
@@ -967,6 +998,7 @@ module Sig =
         val loc_of_class_str_item : class_str_item -> Loc.t
         val loc_of_with_constr : with_constr -> Loc.t
         val loc_of_binding : binding -> Loc.t
+        val loc_of_rec_binding : rec_binding -> Loc.t
         val loc_of_module_binding : module_binding -> Loc.t
         val loc_of_match_case : match_case -> Loc.t
         val loc_of_ident : ident -> Loc.t
@@ -1004,6 +1036,7 @@ module Sig =
                     val meta_list :
                       (Loc.t -> 'a -> expr) -> Loc.t -> 'a list -> expr
                     val meta_binding : Loc.t -> binding -> expr
+                    val meta_rec_binding : Loc.t -> rec_binding -> expr
                     val meta_class_expr : Loc.t -> class_expr -> expr
                     val meta_class_sig_item : Loc.t -> class_sig_item -> expr
                     val meta_class_str_item : Loc.t -> class_str_item -> expr
@@ -1030,6 +1063,7 @@ module Sig =
                     val meta_list :
                       (Loc.t -> 'a -> patt) -> Loc.t -> 'a list -> patt
                     val meta_binding : Loc.t -> binding -> patt
+                    val meta_rec_binding : Loc.t -> rec_binding -> patt
                     val meta_class_expr : Loc.t -> class_expr -> patt
                     val meta_class_sig_item : Loc.t -> class_sig_item -> patt
                     val meta_class_str_item : Loc.t -> class_str_item -> patt
@@ -1070,6 +1104,7 @@ module Sig =
             method class_str_item : class_str_item -> class_str_item
             method with_constr : with_constr -> with_constr
             method binding : binding -> binding
+            method rec_binding : rec_binding -> rec_binding
             method module_binding : module_binding -> module_binding
             method match_case : match_case -> match_case
             method ident : ident -> ident
@@ -1111,31 +1146,30 @@ module Sig =
             method class_str_item : class_str_item -> 'self_type
             method with_constr : with_constr -> 'self_type
             method binding : binding -> 'self_type
+            method rec_binding : rec_binding -> 'self_type
             method module_binding : module_binding -> 'self_type
             method match_case : match_case -> 'self_type
             method ident : ident -> 'self_type
           end
-        class c_expr : (expr -> expr) -> object inherit map end
-        class c_patt : (patt -> patt) -> object inherit map end
-        class c_ctyp : (ctyp -> ctyp) -> object inherit map end
-        class c_str_item : (str_item -> str_item) -> object inherit map end
-        class c_sig_item : (sig_item -> sig_item) -> object inherit map end
-        class c_loc : (Loc.t -> Loc.t) -> object inherit map end
-        val map_expr : (expr -> expr) -> expr -> expr
-        val map_patt : (patt -> patt) -> patt -> patt
-        val map_ctyp : (ctyp -> ctyp) -> ctyp -> ctyp
-        val map_str_item : (str_item -> str_item) -> str_item -> str_item
-        val map_sig_item : (sig_item -> sig_item) -> sig_item -> sig_item
-        val map_loc : (Loc.t -> Loc.t) -> Loc.t -> Loc.t
+        val map_expr : (expr -> expr) -> map
+        val map_patt : (patt -> patt) -> map
+        val map_ctyp : (ctyp -> ctyp) -> map
+        val map_str_item : (str_item -> str_item) -> map
+        val map_sig_item : (sig_item -> sig_item) -> map
+        val map_loc : (Loc.t -> Loc.t) -> map
         val ident_of_expr : expr -> ident
+        val ident_of_patt : patt -> ident
         val ident_of_ctyp : ctyp -> ident
         val biAnd_of_list : binding list -> binding
-        val biSem_of_list : binding list -> binding
+        val rbSem_of_list : rec_binding list -> rec_binding
         val paSem_of_list : patt list -> patt
         val paCom_of_list : patt list -> patt
         val tyOr_of_list : ctyp list -> ctyp
         val tyAnd_of_list : ctyp list -> ctyp
+        val tyAmp_of_list : ctyp list -> ctyp
         val tySem_of_list : ctyp list -> ctyp
+        val tyCom_of_list : ctyp list -> ctyp
+        val tySta_of_list : ctyp list -> ctyp
         val stSem_of_list : str_item list -> str_item
         val sgSem_of_list : sig_item list -> sig_item
         val crSem_of_list : class_str_item list -> class_str_item
@@ -1152,6 +1186,8 @@ module Sig =
         val exCom_of_list : expr list -> expr
         val list_of_ctyp : ctyp -> ctyp list -> ctyp list
         val list_of_binding : binding -> binding list -> binding list
+        val list_of_rec_binding :
+          rec_binding -> rec_binding list -> rec_binding list
         val list_of_with_constr :
           with_constr -> with_constr list -> with_constr list
         val list_of_patt : patt -> patt list -> patt list
@@ -1198,6 +1234,7 @@ module Sig =
       and type class_sig_item = M.class_sig_item
       and type class_expr = M.class_expr
       and type class_str_item = M.class_str_item and type binding = M.binding
+      and type rec_binding = M.rec_binding
       and type module_binding = M.module_binding
       and type match_case = M.match_case and type ident = M.ident = M
     module MakeCamlp4Ast (Loc : Type) =
@@ -1242,7 +1279,7 @@ module Sig =
           | PaOlb of Loc.t * string * patt
           | PaOlbi of Loc.t * string * patt * expr
           | PaOrp of Loc.t * patt * patt | PaRng of Loc.t * patt * patt
-          | PaRec of Loc.t * patt | PaEq of Loc.t * patt * patt
+          | PaRec of Loc.t * patt | PaEq of Loc.t * ident * patt
           | PaStr of Loc.t * string | PaTup of Loc.t * patt
           | PaTyc of Loc.t * patt * ctyp | PaTyp of Loc.t * ident
           | PaVrn of Loc.t * string
@@ -1263,15 +1300,15 @@ module Sig =
           | ExLmd of Loc.t * string * module_expr * expr
           | ExMat of Loc.t * expr * match_case | ExNew of Loc.t * ident
           | ExObj of Loc.t * patt * class_str_item
-          | ExOlb of Loc.t * string * expr | ExOvr of Loc.t * binding
-          | ExRec of Loc.t * binding * expr | ExSeq of Loc.t * expr
+          | ExOlb of Loc.t * string * expr | ExOvr of Loc.t * rec_binding
+          | ExRec of Loc.t * rec_binding * expr | ExSeq of Loc.t * expr
           | ExSnd of Loc.t * expr * string | ExSte of Loc.t * expr * expr
           | ExStr of Loc.t * string | ExTry of Loc.t * expr * match_case
           | ExTup of Loc.t * expr | ExCom of Loc.t * expr * expr
           | ExTyc of Loc.t * expr * ctyp | ExVrn of Loc.t * string
           | ExWhi of Loc.t * expr * expr
           and module_type =
-          | MtId of Loc.t * ident
+          | MtNil of Loc.t | MtId of Loc.t * ident
           | MtFun of Loc.t * string * module_type * module_type
           | MtQuo of Loc.t * string | MtSig of Loc.t * sig_item
           | MtWit of Loc.t * module_type * with_constr
@@ -1295,8 +1332,10 @@ module Sig =
           | WcAnt of Loc.t * string
           and binding =
           | BiNil of Loc.t | BiAnd of Loc.t * binding * binding
-          | BiSem of Loc.t * binding * binding | BiEq of Loc.t * patt * expr
-          | BiAnt of Loc.t * string
+          | BiEq of Loc.t * patt * expr | BiAnt of Loc.t * string
+          and rec_binding =
+          | RbNil of Loc.t | RbSem of Loc.t * rec_binding * rec_binding
+          | RbEq of Loc.t * ident * expr | RbAnt of Loc.t * string
           and module_binding =
           | MbNil of Loc.t | MbAnd of Loc.t * module_binding * module_binding
           | MbColEq of Loc.t * string * module_type * module_expr
@@ -1305,7 +1344,7 @@ module Sig =
           | McNil of Loc.t | McOr of Loc.t * match_case * match_case
           | McArr of Loc.t * patt * expr * expr | McAnt of Loc.t * string
           and module_expr =
-          | MeId of Loc.t * ident
+          | MeNil of Loc.t | MeId of Loc.t * ident
           | MeApp of Loc.t * module_expr * module_expr
           | MeFun of Loc.t * string * module_type * module_expr
           | MeStr of Loc.t * str_item
@@ -1369,25 +1408,53 @@ module Sig =
         val fold_implem_filters :
           ('a -> Ast.str_item filter -> 'a) -> 'a -> 'a
       end
+    module type DynAst =
+      sig
+        module Ast : Ast
+        type 'a tag
+        val ctyp_tag : Ast.ctyp tag
+        val patt_tag : Ast.patt tag
+        val expr_tag : Ast.expr tag
+        val module_type_tag : Ast.module_type tag
+        val sig_item_tag : Ast.sig_item tag
+        val with_constr_tag : Ast.with_constr tag
+        val module_expr_tag : Ast.module_expr tag
+        val str_item_tag : Ast.str_item tag
+        val class_type_tag : Ast.class_type tag
+        val class_sig_item_tag : Ast.class_sig_item tag
+        val class_expr_tag : Ast.class_expr tag
+        val class_str_item_tag : Ast.class_str_item tag
+        val match_case_tag : Ast.match_case tag
+        val ident_tag : Ast.ident tag
+        val binding_tag : Ast.binding tag
+        val rec_binding_tag : Ast.rec_binding tag
+        val module_binding_tag : Ast.module_binding tag
+        val string_of_tag : 'a tag -> string
+        module Pack (X : sig type 'a t end) :
+          sig
+            type pack
+            val pack : 'a tag -> 'a X.t -> pack
+            val unpack : 'a tag -> pack -> 'a X.t
+            val print_tag : Format.formatter -> pack -> unit
+          end
+      end
     type quotation =
       { q_name : string; q_loc : string; q_shift : int; q_contents : string
       }
     module type Quotation =
       sig
         module Ast : Ast
+        module DynAst : DynAst with module Ast = Ast
         open Ast
         type 'a expand_fun = Loc.t -> string option -> string -> 'a
-        type expander =
-          | ExStr of (bool -> string expand_fun)
-          | ExAst of Ast.expr expand_fun * Ast.patt expand_fun
-        val add : string -> expander -> unit
-        val find : string -> expander
+        val add : string -> 'a DynAst.tag -> 'a expand_fun -> unit
+        val find : string -> 'a DynAst.tag -> 'a expand_fun
         val default : string ref
+        val parse_quotation_result :
+          (Loc.t -> string -> 'a) ->
+            Loc.t -> quotation -> string -> string -> 'a
         val translate : (string -> string) ref
-        val expand_expr :
-          (Loc.t -> string -> Ast.expr) -> Loc.t -> quotation -> Ast.expr
-        val expand_patt :
-          (Loc.t -> string -> Ast.patt) -> Loc.t -> quotation -> Ast.patt
+        val expand : Loc.t -> quotation -> 'a DynAst.tag -> 'a
         val dump_file : (string option) ref
         module Error : Error
       end
@@ -1573,42 +1640,46 @@ module Sig =
         module Error : Error
         val mk : unit -> Loc.t -> char Stream.t -> (Token.t * Loc.t) Stream.t
       end
-    module type Parser =
-      sig
-        module Ast : Ast
-        open Ast
-        val parse_implem :
-          ?directive_handler: (str_item -> str_item option) ->
-            Loc.t -> char Stream.t -> Ast.str_item
-        val parse_interf :
-          ?directive_handler: (sig_item -> sig_item option) ->
-            Loc.t -> char Stream.t -> Ast.sig_item
+    module Parser (Ast : Ast) =
+      struct
+        module type S =
+          sig
+            val parse_implem :
+              ?directive_handler: (Ast.str_item -> Ast.str_item option) ->
+                Ast.Loc.t -> char Stream.t -> Ast.str_item
+            val parse_interf :
+              ?directive_handler: (Ast.sig_item -> Ast.sig_item option) ->
+                Ast.Loc.t -> char Stream.t -> Ast.sig_item
+          end
       end
-    module type Printer =
-      sig
-        module Ast : Ast
-        val print_interf :
-          ?input_file: string -> ?output_file: string -> Ast.sig_item -> unit
-        val print_implem :
-          ?input_file: string -> ?output_file: string -> Ast.str_item -> unit
+    module Printer (Ast : Ast) =
+      struct
+        module type S =
+          sig
+            val print_interf :
+              ?input_file: string ->
+                ?output_file: string -> Ast.sig_item -> unit
+            val print_implem :
+              ?input_file: string ->
+                ?output_file: string -> Ast.str_item -> unit
+          end
       end
     module type Syntax =
       sig
         module Loc : Loc
-        module Warning : Warning with module Loc = Loc
         module Ast : Ast with module Loc = Loc
         module Token : Token with module Loc = Loc
         module Gram : Grammar.Static with module Loc = Loc
           and module Token = Token
         module AntiquotSyntax : AntiquotSyntax with module Ast = Ast
         module Quotation : Quotation with module Ast = Ast
-        module Parser : Parser with module Ast = Ast
-        module Printer : Printer with module Ast = Ast
+        include Warning(Loc).S
+        include Parser(Ast).S
+        include Printer(Ast).S
       end
     module type Camlp4Syntax =
       sig
         module Loc : Loc
-        module Warning : Warning with module Loc = Loc
         module Ast : Camlp4Ast with module Loc = Loc
         module Token : Camlp4Token with module Loc = Loc
         module Gram : Grammar.Static with module Loc = Loc
@@ -1616,8 +1687,9 @@ module Sig =
         module AntiquotSyntax :
           AntiquotSyntax with module Ast = Camlp4AstToAst(Ast)
         module Quotation : Quotation with module Ast = Camlp4AstToAst(Ast)
-        module Parser : Parser with module Ast = Camlp4AstToAst(Ast)
-        module Printer : Printer with module Ast = Camlp4AstToAst(Ast)
+        include Warning(Loc).S
+        include Parser(Ast).S
+        include Printer(Ast).S
         val interf : ((Ast.sig_item list) * (Loc.t option)) Gram.Entry.t
         val implem : ((Ast.str_item list) * (Loc.t option)) Gram.Entry.t
         val top_phrase : (Ast.str_item option) Gram.Entry.t
@@ -1629,7 +1701,6 @@ module Sig =
         val a_INT64 : string Gram.Entry.t
         val a_LABEL : string Gram.Entry.t
         val a_LIDENT : string Gram.Entry.t
-        val a_LIDENT_or_operator : string Gram.Entry.t
         val a_NATIVEINT : string Gram.Entry.t
         val a_OPTLABEL : string Gram.Entry.t
         val a_STRING : string Gram.Entry.t
@@ -1642,6 +1713,7 @@ module Sig =
         val match_case_quot : Ast.match_case Gram.Entry.t
         val binding : Ast.binding Gram.Entry.t
         val binding_quot : Ast.binding Gram.Entry.t
+        val rec_binding_quot : Ast.rec_binding Gram.Entry.t
         val class_declaration : Ast.class_expr Gram.Entry.t
         val class_description : Ast.class_type Gram.Entry.t
         val class_expr : Ast.class_expr Gram.Entry.t
@@ -1683,8 +1755,7 @@ module Sig =
         val expr : Ast.expr Gram.Entry.t
         val expr_eoi : Ast.expr Gram.Entry.t
         val expr_quot : Ast.expr Gram.Entry.t
-        val field : Ast.ctyp Gram.Entry.t
-        val field_expr : Ast.binding Gram.Entry.t
+        val field_expr : Ast.rec_binding Gram.Entry.t
         val fun_binding : Ast.expr Gram.Entry.t
         val fun_def : Ast.expr Gram.Entry.t
         val ident : Ast.ident Gram.Entry.t
@@ -1693,7 +1764,7 @@ module Sig =
         val ipatt_tcon : Ast.patt Gram.Entry.t
         val label : string Gram.Entry.t
         val label_declaration : Ast.ctyp Gram.Entry.t
-        val label_expr : Ast.binding Gram.Entry.t
+        val label_expr : Ast.rec_binding Gram.Entry.t
         val label_ipatt : Ast.patt Gram.Entry.t
         val label_longident : Ast.ident Gram.Entry.t
         val label_patt : Ast.patt Gram.Entry.t
@@ -1718,7 +1789,7 @@ module Sig =
         val opt_class_self_type : Ast.ctyp Gram.Entry.t
         val opt_comma_ctyp : Ast.ctyp Gram.Entry.t
         val opt_dot_dot : Ast.meta_bool Gram.Entry.t
-        val opt_eq_ctyp : (Ast.ctyp list -> Ast.ctyp) Gram.Entry.t
+        val opt_eq_ctyp : Ast.ctyp Gram.Entry.t
         val opt_expr : Ast.expr Gram.Entry.t
         val opt_meth_list : Ast.ctyp Gram.Entry.t
         val opt_mutable : Ast.meta_bool Gram.Entry.t
@@ -1733,16 +1804,15 @@ module Sig =
         val patt_quot : Ast.patt Gram.Entry.t
         val patt_tcon : Ast.patt Gram.Entry.t
         val phrase : Ast.str_item Gram.Entry.t
-        val pipe_ctyp : Ast.ctyp Gram.Entry.t
         val poly_type : Ast.ctyp Gram.Entry.t
         val row_field : Ast.ctyp Gram.Entry.t
-        val sem_ctyp : Ast.ctyp Gram.Entry.t
         val sem_expr : Ast.expr Gram.Entry.t
         val sem_expr_for_list : (Ast.expr -> Ast.expr) Gram.Entry.t
         val sem_patt : Ast.patt Gram.Entry.t
         val sem_patt_for_list : (Ast.patt -> Ast.patt) Gram.Entry.t
         val semi : unit Gram.Entry.t
         val sequence : Ast.expr Gram.Entry.t
+        val do_sequence : Ast.expr Gram.Entry.t
         val sig_item : Ast.sig_item Gram.Entry.t
         val sig_item_quot : Ast.sig_item Gram.Entry.t
         val sig_items : Ast.sig_item Gram.Entry.t
@@ -1765,11 +1835,17 @@ module Sig =
         val value_val : unit Gram.Entry.t
         val with_constr : Ast.with_constr Gram.Entry.t
         val with_constr_quot : Ast.with_constr Gram.Entry.t
+        val prefixop : Ast.expr Gram.Entry.t
+        val infixop0 : Ast.expr Gram.Entry.t
+        val infixop1 : Ast.expr Gram.Entry.t
+        val infixop2 : Ast.expr Gram.Entry.t
+        val infixop3 : Ast.expr Gram.Entry.t
+        val infixop4 : Ast.expr Gram.Entry.t
       end
     module type SyntaxExtension =
       functor (Syn : Syntax) -> Syntax with module Loc = Syn.Loc
-        and module Warning = Syn.Warning and module Ast = Syn.Ast
-        and module Token = Syn.Token and module Gram = Syn.Gram
+        and module Ast = Syn.Ast and module Token = Syn.Token
+        and module Gram = Syn.Gram
         and module AntiquotSyntax = Syn.AntiquotSyntax
         and module Quotation = Syn.Quotation
   end
@@ -1966,10 +2042,9 @@ module Struct =
             (x.start.off - x.start.bol) (x.stop.off - x.start.bol)
             x.stop.line (x.stop.off - x.stop.bol)
             (fun o -> if x.ghost then fprintf o " (ghost)" else ())
-        let start_pos = {  line = 1; bol = 0; off = 0; }
+        let start_pos = { line = 1; bol = 0; off = 0; }
         let ghost =
           {
-            
             file_name = "ghost-location";
             start = start_pos;
             stop = start_pos;
@@ -1977,7 +2052,6 @@ module Struct =
           }
         let mk file_name =
           {
-            
             file_name = file_name;
             start = start_pos;
             stop = start_pos;
@@ -1987,10 +2061,9 @@ module Struct =
                       stop_bol, stop_off, ghost)
                      =
           {
-            
             file_name = file_name;
-            start = {  line = start_line; bol = start_bol; off = start_off; };
-            stop = {  line = stop_line; bol = stop_bol; off = stop_off; };
+            start = { line = start_line; bol = start_bol; off = start_off; };
+            stop = { line = stop_line; bol = stop_bol; off = stop_off; };
             ghost = ghost;
           }
         let to_tuple {
@@ -2010,7 +2083,6 @@ module Struct =
         let pos_of_lexing_position p =
           let pos =
             {
-              
               line = p.Lexing.pos_lnum;
               bol = p.Lexing.pos_bol;
               off = p.Lexing.pos_cnum;
@@ -2018,7 +2090,6 @@ module Struct =
           in pos
         let pos_to_lexing_position p file_name =
           {
-            
             Lexing.pos_fname = file_name;
             pos_lnum = p.line;
             pos_bol = p.bol;
@@ -2037,7 +2108,6 @@ module Struct =
           and stop = Lexing.lexeme_end_p lb in
           let loc =
             {
-              
               file_name =
                 better_file_name start.Lexing.pos_fname stop.Lexing.pos_fname;
               start = pos_of_lexing_position start;
@@ -2048,7 +2118,6 @@ module Struct =
         let of_lexing_position pos =
           let loc =
             {
-              
               file_name = pos.Lexing.pos_fname;
               start = pos_of_lexing_position pos;
               stop = pos_of_lexing_position pos;
@@ -2057,7 +2126,6 @@ module Struct =
           in loc
         let to_ocaml_location x =
           {
-            
             Location.loc_start = pos_to_lexing_position x.start x.file_name;
             loc_end = pos_to_lexing_position x.stop x.file_name;
             loc_ghost = x.ghost;
@@ -2066,7 +2134,6 @@ module Struct =
           let (a, b) = ((x.Location.loc_start), (x.Location.loc_end)) in
           let res =
             {
-              
               file_name =
                 better_file_name a.Lexing.pos_fname b.Lexing.pos_fname;
               start = pos_of_lexing_position a;
@@ -2082,25 +2149,25 @@ module Struct =
           else
             (let r =
                match ((a.ghost), (b.ghost)) with
-               | (false, false) -> { (a) with  stop = b.stop; }
-               | (true, true) -> { (a) with  stop = b.stop; }
-               | (true, _) -> { (a) with  stop = b.stop; }
-               | (_, true) -> { (b) with  start = a.start; }
+               | (false, false) -> { (a) with stop = b.stop; }
+               | (true, true) -> { (a) with stop = b.stop; }
+               | (true, _) -> { (a) with stop = b.stop; }
+               | (_, true) -> { (b) with start = a.start; }
              in r)
-        let join x = { (x) with  stop = x.start; }
+        let join x = { (x) with stop = x.start; }
         let map f start_stop_both x =
           match start_stop_both with
-          | `start -> { (x) with  start = f x.start; }
-          | `stop -> { (x) with  stop = f x.stop; }
-          | `both -> { (x) with  start = f x.start; stop = f x.stop; }
-        let move_pos chars x = { (x) with  off = x.off + chars; }
+          | `start -> { (x) with start = f x.start; }
+          | `stop -> { (x) with stop = f x.stop; }
+          | `both -> { (x) with start = f x.start; stop = f x.stop; }
+        let move_pos chars x = { (x) with off = x.off + chars; }
         let move s chars x = map (move_pos chars) s x
         let move_line lines x =
           let move_line_pos x =
-            { (x) with  line = x.line + lines; bol = x.off; }
+            { (x) with line = x.line + lines; bol = x.off; }
           in map move_line_pos `both x
         let shift width x =
-          { (x) with  start = x.stop; stop = move_pos width x.stop; }
+          { (x) with start = x.stop; stop = move_pos width x.stop; }
         let file_name x = x.file_name
         let start_line x = x.start.line
         let stop_line x = x.stop.line
@@ -2109,13 +2176,13 @@ module Struct =
         let start_off x = x.start.off
         let stop_off x = x.stop.off
         let is_ghost x = x.ghost
-        let set_file_name s x = { (x) with  file_name = s; }
-        let ghostify x = { (x) with  ghost = true; }
+        let set_file_name s x = { (x) with file_name = s; }
+        let ghostify x = { (x) with ghost = true; }
         let make_absolute x =
           let pwd = Sys.getcwd ()
           in
             if Filename.is_relative x.file_name
-            then { (x) with  file_name = Filename.concat pwd x.file_name; }
+            then { (x) with file_name = Filename.concat pwd x.file_name; }
             else x
         let strictly_before x y =
           let b = (x.stop.off < y.start.off) && (x.file_name = y.file_name)
@@ -2161,18 +2228,6 @@ module Struct =
           | Exc_located (_, _) -> raise exc
           | _ -> raise (Exc_located (loc, exc))
       end
-    module Warning =
-      struct
-        module Make (Loc : Sig.Loc) : Sig.Warning with module Loc = Loc =
-          struct
-            module Loc = Loc
-            open Format
-            type t = Loc.t -> string -> unit
-            let default loc txt = eprintf "<W> %a: %s@." Loc.print loc txt
-            let current = ref default
-            let print loc txt = !current loc txt
-          end
-      end
     module Token :
       sig
         module Make (Loc : Sig.Loc) : Sig.Camlp4Token with module Loc = Loc
@@ -2229,7 +2284,7 @@ module Struct =
                   OPTLABEL s | COMMENT s | BLANKS s | ESCAPED_IDENT s -> s
               | tok ->
                   invalid_arg
-                    ("Cannot extract a string from this token: " ^
+                    ("Cannot extract a string from this token: " ^
                        (to_string tok))
             module Error =
               struct
@@ -2297,7 +2352,7 @@ module Struct =
                          Stream.icons x
                            (Stream.slazy (fun _ -> ignore_layout s)))
                   | _ -> Stream.sempty
-                let mk is_kwd = {  is_kwd = is_kwd; filter = ignore_layout; }
+                let mk is_kwd = { is_kwd = is_kwd; filter = ignore_layout; }
                 let filter x =
                   let f tok loc =
                     let tok = keyword_conversion tok x.is_kwd
@@ -2490,14 +2545,14 @@ module Struct =
             open Error
             type context =
               { loc : Loc.t; in_comment : bool; quotations : bool;
-                lexbuf : lexbuf; buffer : Buffer.t
+                antiquots : bool; lexbuf : lexbuf; buffer : Buffer.t
               }
             let default_context lb =
               {
-                
                 loc = Loc.ghost;
                 in_comment = false;
                 quotations = true;
+                antiquots = false;
                 lexbuf = lb;
                 buffer = Buffer.create 256;
               }
@@ -2509,28 +2564,28 @@ module Struct =
               in (Buffer.reset c.buffer; contents)
             let loc c = Loc.merge c.loc (Loc.of_lexbuf c.lexbuf)
             let quotations c = c.quotations
+            let antiquots c = c.antiquots
             let is_in_comment c = c.in_comment
-            let in_comment c = { (c) with  in_comment = true; }
+            let in_comment c = { (c) with in_comment = true; }
             let set_start_p c = c.lexbuf.lex_start_p <- Loc.start_pos c.loc
             let move_start_p shift c =
               let p = c.lexbuf.lex_start_p
               in
                 c.lexbuf.lex_start_p <-
-                  { (p) with  pos_cnum = p.pos_cnum + shift; }
-            let with_curr_loc f c =
-              f { (c) with  loc = Loc.of_lexbuf c.lexbuf; } c.lexbuf
+                  { (p) with pos_cnum = p.pos_cnum + shift; }
+            let update_loc c = { (c) with loc = Loc.of_lexbuf c.lexbuf; }
+            let with_curr_loc f c = f (update_loc c) c.lexbuf
             let parse_nested f c =
               (with_curr_loc f c; set_start_p c; buff_contents c)
-            let shift n c = { (c) with  loc = Loc.move `both n c.loc; }
+            let shift n c = { (c) with loc = Loc.move `both n c.loc; }
             let store_parse f c = (store c; f c c.lexbuf)
             let parse f c = f c c.lexbuf
             let mk_quotation quotation c name loc shift =
-              let s = parse_nested quotation c in
+              let s = parse_nested quotation (update_loc c) in
               let contents = String.sub s 0 ((String.length s) - 2)
               in
                 QUOTATION
                   {
-                    
                     q_name = name;
                     q_loc = loc;
                     q_shift = shift;
@@ -2546,7 +2601,6 @@ module Struct =
                   {
                     (pos)
                     with
-                    
                     pos_fname = new_file;
                     pos_lnum = if absolute then line else pos.pos_lnum + line;
                     pos_bol = pos.pos_cnum - chars;
@@ -2557,758 +2611,937 @@ module Struct =
                 error
             let __ocaml_lex_tables =
               {
-                
                 Lexing.lex_base =
-                  "\000\000\227\255\228\255\001\001\001\001\231\255\232\255\160\001\
-    \198\001\067\000\091\000\069\000\071\000\084\000\122\000\235\001\
-    \014\002\092\000\102\001\244\255\035\002\068\002\141\002\093\003\
-    \060\004\152\004\126\000\001\000\255\255\104\005\253\255\056\006\
-    \252\255\245\255\246\255\247\255\023\001\001\001\088\000\091\000\
-    \216\002\168\003\179\005\179\001\088\004\132\000\024\007\108\000\
-    \151\000\109\000\243\255\242\255\241\255\012\005\033\001\111\000\
-    \239\002\193\005\111\000\239\255\238\255\024\007\063\007\109\007\
-    \148\007\183\007\174\006\015\003\004\000\233\255\093\001\199\001\
-    \151\002\094\001\005\000\233\255\054\008\246\008\006\000\117\004\
-    \251\255\208\009\095\000\115\000\115\000\254\255\016\010\207\010\
-    \159\011\111\012\079\013\121\000\152\000\124\000\126\000\249\255\
-    \248\255\144\006\197\003\127\000\060\004\128\000\200\007\129\000\
-    \008\003\007\000\106\013\250\255\054\008\169\004\089\001\082\001\
-    \179\004\198\008\054\008\172\013\139\014\169\014\136\015\103\016\
-    \135\016\199\016\151\017\254\255\204\001\008\000\107\000\053\001\
-    \215\017\150\018\102\019\054\020\018\021\062\001\236\021\197\022\
-    \064\001\149\023\248\003\155\001\009\000\213\023\148\024\100\025\
-    \052\026";
+                  "\000\000\223\255\224\255\224\000\226\255\253\000\035\001\072\001\
+    \109\001\146\001\183\001\218\001\068\000\190\001\002\002\227\255\
+    \119\000\046\002\087\002\154\002\123\000\244\255\173\002\206\002\
+    \023\003\231\003\198\004\034\005\120\000\001\000\255\255\242\005\
+    \253\255\194\006\252\255\245\255\246\255\247\255\092\000\224\000\
+    \082\000\105\000\098\003\050\004\061\006\213\001\020\002\129\000\
+    \162\007\095\000\151\000\099\000\243\255\242\255\241\255\150\005\
+    \253\000\100\000\104\002\075\006\162\007\255\007\039\008\106\008\
+    \145\008\212\008\109\000\239\255\249\008\024\001\060\009\099\009\
+    \166\009\232\255\231\255\230\255\205\009\016\010\055\010\122\010\
+    \161\010\075\001\228\255\229\255\238\255\201\007\196\010\233\010\
+    \014\011\051\011\088\011\125\011\162\011\199\011\236\011\052\007\
+    \153\003\004\000\233\255\007\000\153\000\175\002\008\000\005\000\
+    \233\255\243\011\024\012\061\012\098\012\105\012\142\012\179\012\
+    \216\012\251\012\030\013\035\013\070\013\105\013\142\013\179\013\
+    \241\013\006\000\192\002\251\255\203\014\006\001\121\000\122\000\
+    \254\255\011\015\202\015\154\016\106\017\074\018\126\000\002\001\
+    \149\000\150\000\249\255\248\255\022\007\184\002\152\000\079\004\
+    \208\000\060\014\219\000\165\001\009\000\101\018\250\255\021\016\
+    \198\004\079\001\070\001\215\004\229\016\140\018\207\018\174\019\
+    \204\019\171\020\138\021\171\021\235\021\187\022\254\255\164\001\
+    \012\000\197\000\079\001\251\022\186\023\138\024\090\025\054\026\
+    \237\000\016\027\233\027\028\001\185\028\206\001\080\001\013\000\
+    \249\028\184\029\136\030\088\031";
                 Lexing.lex_backtrk =
-                  "\255\255\255\255\255\255\028\000\025\000\255\255\255\255\025\000\
-    \025\000\023\000\023\000\023\000\023\000\023\000\023\000\025\000\
-    \025\000\023\000\023\000\255\255\006\000\006\000\005\000\004\000\
-    \025\000\025\000\001\000\000\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\007\000\255\255\255\255\
-    \255\255\006\000\006\000\006\000\007\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\014\000\014\000\014\000\
-    \255\255\255\255\015\000\255\255\255\255\021\000\020\000\018\000\
-    \025\000\019\000\255\255\255\255\022\000\255\255\255\255\255\255\
-    \255\255\255\255\022\000\255\255\026\000\255\255\013\000\014\000\
-    \255\255\003\000\014\000\014\000\014\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\005\000\255\255\
+                  "\255\255\255\255\255\255\030\000\255\255\028\000\030\000\030\000\
+    \030\000\030\000\028\000\028\000\028\000\028\000\028\000\255\255\
+    \028\000\030\000\030\000\028\000\028\000\255\255\006\000\006\000\
+    \005\000\004\000\030\000\030\000\001\000\000\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\007\000\
+    \255\255\255\255\255\255\006\000\006\000\006\000\007\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\014\000\
+    \014\000\014\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \028\000\028\000\015\000\255\255\028\000\255\255\255\255\028\000\
+    \255\255\255\255\255\255\255\255\028\000\028\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\030\000\021\000\
+    \020\000\018\000\030\000\019\000\028\000\030\000\255\255\255\255\
+    \255\255\022\000\255\255\255\255\255\255\255\255\255\255\022\000\
+    \255\255\255\255\255\255\028\000\255\255\255\255\028\000\028\000\
+    \255\255\028\000\028\000\028\000\028\000\030\000\030\000\030\000\
+    \255\255\013\000\014\000\255\255\003\000\014\000\014\000\014\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\006\000\008\000\255\255\005\000\005\000\001\000\001\000\
-    \255\255\255\255\000\000\001\000\001\000\255\255\002\000\002\000\
-    \255\255\255\255\255\255\255\255\255\255\003\000\004\000\004\000\
-    \255\255\255\255\255\255\255\255\255\255\002\000\002\000\002\000\
-    \255\255\255\255\255\255\004\000\002\000\255\255\255\255\255\255\
-    \255\255";
+    \255\255\005\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\006\000\008\000\255\255\005\000\
+    \005\000\001\000\001\000\255\255\255\255\000\000\001\000\001\000\
+    \255\255\002\000\002\000\255\255\255\255\255\255\255\255\255\255\
+    \003\000\004\000\004\000\255\255\255\255\255\255\255\255\255\255\
+    \002\000\002\000\002\000\255\255\255\255\255\255\004\000\002\000\
+    \255\255\255\255\255\255\255\255";
                 Lexing.lex_default =
-                  "\001\000\000\000\000\000\076\000\255\255\000\000\000\000\255\255\
+                  "\001\000\000\000\000\000\255\255\000\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
+    \255\255\255\255\255\255\255\255\049\000\000\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\000\000\255\255\
+    \000\000\255\255\000\000\000\000\000\000\000\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\047\000\000\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\000\000\255\255\000\000\255\255\
-    \000\000\000\000\000\000\000\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\052\000\255\255\
+    \054\000\255\255\255\255\255\255\000\000\000\000\000\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\000\000\255\255\255\255\255\255\255\255\
+    \255\255\000\000\000\000\000\000\255\255\255\255\255\255\255\255\
     \255\255\255\255\000\000\000\000\000\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\000\000\000\000\255\255\255\255\255\255\
-    \255\255\255\255\070\000\255\255\255\255\000\000\070\000\071\000\
-    \070\000\073\000\255\255\000\000\076\000\052\000\255\255\091\000\
-    \000\000\255\255\255\255\255\255\255\255\000\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\099\000\
+    \255\255\255\255\000\000\099\000\100\000\099\000\102\000\255\255\
     \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \035\000\255\255\107\000\000\000\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\000\000\080\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\030\000\255\255\255\255\255\255\
-    \255\255\255\255\080\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255";
+    \054\000\255\255\134\000\000\000\255\255\255\255\255\255\255\255\
+    \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\000\000\000\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\037\000\255\255\150\000\000\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\000\000\123\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\032\000\
+    \255\255\255\255\255\255\255\255\255\255\123\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255";
                 Lexing.lex_trans =
                   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\026\000\028\000\028\000\026\000\027\000\069\000\075\000\
-    \051\000\095\000\032\000\030\000\000\000\000\000\000\000\000\000\
+    \000\000\028\000\030\000\030\000\028\000\029\000\098\000\104\000\
+    \053\000\098\000\104\000\138\000\097\000\103\000\034\000\032\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \026\000\004\000\019\000\014\000\005\000\004\000\004\000\018\000\
-    \017\000\006\000\016\000\004\000\006\000\004\000\013\000\004\000\
-    \021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\
-    \020\000\020\000\012\000\011\000\015\000\004\000\007\000\024\000\
-    \004\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\010\000\003\000\006\000\004\000\023\000\
-    \006\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\009\000\008\000\006\000\025\000\006\000\
-    \006\000\006\000\006\000\067\000\006\000\006\000\058\000\026\000\
-    \043\000\043\000\026\000\042\000\042\000\042\000\042\000\042\000\
-    \042\000\042\000\042\000\051\000\050\000\006\000\051\000\006\000\
-    \059\000\087\000\067\000\030\000\085\000\028\000\026\000\086\000\
-    \035\000\049\000\093\000\096\000\006\000\095\000\034\000\033\000\
-    \019\000\085\000\066\000\066\000\066\000\066\000\066\000\066\000\
-    \066\000\066\000\066\000\066\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\044\000\044\000\044\000\044\000\050\000\096\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\006\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\000\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \002\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\004\000\255\255\255\255\004\000\004\000\004\000\
-    \000\000\255\255\255\255\004\000\004\000\255\255\004\000\004\000\
-    \004\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
-    \037\000\037\000\037\000\004\000\255\255\004\000\004\000\004\000\
-    \004\000\004\000\045\000\000\000\045\000\000\000\036\000\044\000\
-    \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
-    \056\000\056\000\056\000\111\000\255\255\255\255\255\255\004\000\
-    \037\000\255\255\111\000\111\000\000\000\000\000\036\000\069\000\
-    \075\000\000\000\068\000\074\000\136\000\000\000\136\000\129\000\
-    \049\000\028\000\111\000\048\000\000\000\128\000\000\000\000\000\
-    \085\000\111\000\085\000\000\000\255\255\004\000\255\255\004\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\004\000\046\000\000\000\004\000\004\000\004\000\000\000\
-    \000\000\000\000\004\000\004\000\000\000\004\000\004\000\004\000\
-    \000\000\069\000\000\000\000\000\068\000\142\000\032\000\032\000\
-    \255\255\125\000\004\000\141\000\004\000\004\000\004\000\004\000\
-    \004\000\000\000\000\000\043\000\043\000\000\000\000\000\004\000\
-    \000\000\073\000\004\000\004\000\004\000\000\000\000\000\000\000\
-    \004\000\004\000\000\000\004\000\004\000\004\000\000\000\000\000\
-    \255\255\000\000\000\000\000\000\000\000\006\000\004\000\034\000\
-    \004\000\255\255\004\000\004\000\004\000\004\000\004\000\000\000\
-    \127\000\000\000\126\000\000\000\004\000\000\000\000\000\004\000\
-    \004\000\004\000\043\000\000\000\000\000\004\000\004\000\000\000\
-    \004\000\004\000\004\000\000\000\004\000\006\000\004\000\035\000\
-    \000\000\033\000\000\000\006\000\004\000\061\000\000\000\063\000\
-    \004\000\004\000\004\000\062\000\000\000\000\000\000\000\004\000\
-    \000\000\000\000\004\000\004\000\004\000\000\000\000\000\060\000\
-    \004\000\004\000\000\000\004\000\004\000\004\000\000\000\000\000\
-    \000\000\000\000\004\000\000\000\004\000\000\000\000\000\000\000\
-    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\000\000\
-    \000\000\037\000\000\000\020\000\020\000\020\000\020\000\020\000\
-    \020\000\020\000\020\000\020\000\020\000\255\255\255\255\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\255\255\004\000\
-    \036\000\004\000\000\000\000\000\004\000\000\000\000\000\034\000\
-    \000\000\000\000\037\000\000\000\020\000\020\000\020\000\020\000\
-    \020\000\020\000\020\000\020\000\020\000\020\000\000\000\000\000\
-    \000\000\000\000\020\000\000\000\000\000\000\000\038\000\000\000\
-    \036\000\036\000\004\000\000\000\004\000\000\000\000\000\035\000\
-    \034\000\033\000\000\000\039\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\
-    \072\000\069\000\000\000\020\000\068\000\000\000\038\000\000\000\
-    \000\000\036\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \035\000\000\000\033\000\039\000\022\000\000\000\000\000\072\000\
-    \000\000\071\000\000\000\000\000\040\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\255\255\
-    \000\000\000\000\000\000\000\000\030\000\000\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \000\000\000\000\000\000\000\000\022\000\000\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
+    \028\000\003\000\021\000\016\000\004\000\009\000\009\000\020\000\
+    \019\000\005\000\018\000\003\000\015\000\003\000\014\000\009\000\
+    \023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
+    \022\000\022\000\013\000\012\000\017\000\006\000\007\000\026\000\
+    \009\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\011\000\003\000\005\000\009\000\025\000\
+    \015\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\010\000\008\000\005\000\027\000\015\000\
+    \096\000\028\000\045\000\045\000\028\000\051\000\053\000\047\000\
+    \050\000\047\000\052\000\053\000\046\000\046\000\046\000\046\000\
+    \046\000\046\000\046\000\046\000\046\000\046\000\067\000\096\000\
+    \028\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
+    \044\000\051\000\128\000\098\000\030\000\037\000\097\000\095\000\
+    \095\000\095\000\095\000\095\000\095\000\095\000\095\000\095\000\
+    \095\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
+    \046\000\046\000\046\000\102\000\139\000\138\000\052\000\036\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\048\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\035\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \002\000\003\000\021\000\128\000\003\000\003\000\003\000\255\255\
+    \255\255\000\000\003\000\003\000\136\000\003\000\003\000\003\000\
+    \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\
+    \039\000\039\000\003\000\179\000\003\000\003\000\003\000\003\000\
+    \003\000\069\000\094\000\094\000\069\000\038\000\085\000\128\000\
+    \000\000\139\000\000\000\094\000\094\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\085\000\
+    \069\000\085\000\085\000\085\000\003\000\094\000\003\000\039\000\
+    \130\000\075\000\032\000\000\000\003\000\038\000\129\000\003\000\
+    \009\000\009\000\179\000\000\000\085\000\003\000\003\000\154\000\
+    \003\000\009\000\009\000\000\000\081\000\000\000\128\000\081\000\
+    \154\000\154\000\085\000\094\000\003\000\086\000\003\000\006\000\
+    \006\000\006\000\003\000\009\000\000\000\000\000\154\000\000\000\
+    \000\000\003\000\000\000\081\000\003\000\118\000\118\000\154\000\
+    \000\000\085\000\003\000\003\000\082\000\003\000\118\000\118\000\
+    \000\000\085\000\085\000\255\255\000\000\000\000\000\000\003\000\
+    \085\000\009\000\117\000\000\000\007\000\007\000\007\000\003\000\
+    \118\000\172\000\185\000\030\000\034\000\000\000\003\000\171\000\
+    \184\000\003\000\009\000\009\000\000\000\000\000\005\000\003\000\
+    \003\000\255\255\003\000\009\000\009\000\000\000\000\000\086\000\
+    \085\000\003\000\000\000\000\000\003\000\005\000\118\000\086\000\
+    \000\000\006\000\006\000\006\000\003\000\009\000\034\000\138\000\
+    \000\000\168\000\148\000\003\000\000\000\000\000\003\000\009\000\
+    \009\000\000\000\000\000\092\000\003\000\003\000\000\000\003\000\
+    \009\000\009\000\000\000\000\000\117\000\005\000\003\000\030\000\
+    \000\000\003\000\005\000\009\000\093\000\000\000\009\000\009\000\
+    \009\000\003\000\009\000\000\000\000\000\000\000\000\000\000\000\
+    \032\000\000\000\000\000\183\000\114\000\114\000\000\000\060\000\
+    \170\000\000\000\169\000\105\000\105\000\114\000\114\000\005\000\
+    \000\000\086\000\005\000\003\000\105\000\105\000\003\000\092\000\
+    \009\000\115\000\030\000\113\000\112\000\112\000\000\000\114\000\
+    \111\000\000\000\108\000\110\000\110\000\000\000\105\000\114\000\
+    \114\000\149\000\060\000\000\000\000\000\045\000\045\000\000\000\
+    \114\000\114\000\182\000\000\000\000\000\000\000\093\000\092\000\
+    \003\000\000\000\060\000\000\000\113\000\114\000\113\000\112\000\
+    \112\000\000\000\114\000\005\000\105\000\000\000\000\000\000\000\
+    \000\000\036\000\000\000\000\000\000\000\000\000\000\000\105\000\
+    \105\000\000\000\000\000\092\000\000\000\000\000\000\000\000\000\
+    \107\000\105\000\060\000\115\000\045\000\060\000\000\000\000\000\
+    \114\000\000\000\109\000\005\000\106\000\000\000\105\000\105\000\
+    \105\000\037\000\105\000\035\000\046\000\046\000\046\000\046\000\
+    \046\000\046\000\046\000\046\000\046\000\046\000\000\000\003\000\
+    \000\000\000\000\003\000\009\000\009\000\060\000\113\000\085\000\
+    \003\000\003\000\000\000\003\000\009\000\009\000\000\000\092\000\
+    \105\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \087\000\000\000\089\000\006\000\006\000\003\000\088\000\000\000\
+    \000\000\000\000\000\000\046\000\000\000\000\000\000\000\000\000\
+    \003\000\000\000\000\000\003\000\003\000\003\000\106\000\092\000\
+    \084\000\003\000\003\000\000\000\003\000\003\000\003\000\000\000\
+    \000\000\000\000\003\000\085\000\009\000\000\000\000\000\000\000\
+    \000\000\003\000\000\000\003\000\003\000\003\000\003\000\003\000\
+    \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
+    \049\000\049\000\000\000\061\000\032\000\139\000\061\000\000\000\
+    \000\000\000\000\086\000\085\000\003\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\003\000\000\000\003\000\000\000\000\000\
+    \101\000\098\000\061\000\062\000\097\000\000\000\062\000\065\000\
+    \065\000\000\000\060\000\000\000\066\000\062\000\000\000\062\000\
+    \065\000\065\000\136\000\000\000\000\000\135\000\128\000\101\000\
+    \000\000\100\000\000\000\003\000\064\000\003\000\063\000\063\000\
+    \063\000\062\000\065\000\039\000\000\000\022\000\022\000\022\000\
+    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\137\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\143\000\038\000\000\000\000\000\060\000\062\000\000\000\
+    \065\000\036\000\000\000\000\000\039\000\000\000\022\000\022\000\
     \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\
-    \041\000\041\000\095\000\000\000\000\000\105\000\000\000\000\000\
-    \067\000\041\000\041\000\041\000\041\000\041\000\041\000\047\000\
-    \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
-    \047\000\000\000\028\000\000\000\000\000\000\000\000\000\067\000\
+    \000\000\000\000\000\000\000\000\022\000\000\000\000\000\000\000\
+    \040\000\000\000\038\000\038\000\000\000\060\000\064\000\000\000\
+    \062\000\037\000\036\000\035\000\133\000\041\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\042\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\022\000\000\000\000\000\
+    \040\000\000\000\000\000\038\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\037\000\000\000\035\000\041\000\024\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\042\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\000\000\000\000\000\000\000\000\024\000\000\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\043\000\043\000\043\000\043\000\043\000\043\000\
+    \043\000\043\000\043\000\043\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\096\000\043\000\043\000\043\000\043\000\043\000\
+    \043\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\041\000\041\000\041\000\041\000\041\000\041\000\066\000\
-    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\
-    \066\000\000\000\000\000\000\000\000\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\106\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\023\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\255\255\
-    \000\000\000\000\000\000\000\000\000\000\000\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \000\000\000\000\000\000\000\000\023\000\000\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\
-    \041\000\041\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\041\000\041\000\041\000\041\000\041\000\041\000\000\000\
-    \000\000\000\000\000\000\000\000\034\000\100\000\100\000\100\000\
-    \100\000\100\000\100\000\100\000\100\000\100\000\100\000\000\000\
-    \000\000\000\000\030\000\000\000\000\000\140\000\000\000\041\000\
-    \096\000\041\000\041\000\041\000\041\000\041\000\041\000\000\000\
-    \000\000\000\000\000\000\000\000\035\000\000\000\033\000\000\000\
-    \000\000\000\000\000\000\000\000\028\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\139\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\000\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\004\000\000\000\000\000\
-    \004\000\004\000\004\000\000\000\000\000\000\000\004\000\004\000\
-    \000\000\004\000\004\000\004\000\101\000\101\000\101\000\101\000\
-    \101\000\101\000\101\000\101\000\101\000\101\000\004\000\000\000\
-    \004\000\004\000\004\000\004\000\004\000\000\000\000\000\093\000\
-    \000\000\000\000\092\000\000\000\000\000\000\000\000\000\000\000\
-    \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\004\000\031\000\094\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\044\000\
-    \004\000\004\000\004\000\000\000\004\000\004\000\004\000\000\000\
-    \000\000\000\000\004\000\004\000\000\000\004\000\004\000\004\000\
+    \000\000\096\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \255\255\000\000\000\000\043\000\043\000\043\000\043\000\043\000\
+    \043\000\095\000\095\000\095\000\095\000\095\000\095\000\095\000\
+    \095\000\095\000\095\000\000\000\000\000\000\000\000\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\000\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\025\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\000\000\000\000\000\000\000\000\025\000\000\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\043\000\043\000\043\000\043\000\043\000\043\000\
+    \043\000\043\000\043\000\043\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\043\000\043\000\043\000\043\000\043\000\
+    \043\000\000\000\000\000\000\000\000\000\000\000\036\000\144\000\
+    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
+    \144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\043\000\000\000\043\000\043\000\043\000\043\000\043\000\
+    \043\000\000\000\000\000\000\000\000\000\000\000\037\000\000\000\
+    \035\000\000\000\000\000\000\000\000\000\000\000\000\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\000\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\000\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\003\000\
+    \000\000\000\000\003\000\003\000\003\000\000\000\000\000\000\000\
+    \003\000\003\000\000\000\003\000\003\000\003\000\155\000\155\000\
+    \155\000\155\000\155\000\155\000\155\000\155\000\155\000\155\000\
+    \003\000\000\000\003\000\003\000\003\000\003\000\003\000\034\000\
+    \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\
+    \034\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\090\000\004\000\000\000\004\000\004\000\004\000\004\000\
-    \004\000\112\000\112\000\112\000\112\000\112\000\112\000\112\000\
-    \112\000\112\000\112\000\032\000\032\000\032\000\032\000\032\000\
-    \032\000\032\000\032\000\032\000\032\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\004\000\029\000\
-    \085\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\000\000\004\000\000\000\004\000\000\000\
-    \000\000\000\000\000\000\031\000\031\000\031\000\031\000\031\000\
+    \000\000\000\000\003\000\000\000\003\000\033\000\000\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\000\000\003\000\003\000\003\000\000\000\003\000\003\000\
+    \003\000\000\000\000\000\000\000\003\000\003\000\000\000\003\000\
+    \003\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\003\000\000\000\003\000\003\000\
+    \003\000\003\000\003\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\
+    \003\000\031\000\000\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\000\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\057\000\057\000\057\000\057\000\
-    \057\000\057\000\057\000\057\000\057\000\057\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\057\000\057\000\057\000\
-    \057\000\057\000\057\000\000\000\000\000\000\000\000\000\000\000\
+    \031\000\031\000\031\000\031\000\031\000\000\000\003\000\000\000\
+    \003\000\000\000\000\000\000\000\000\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\000\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\059\000\059\000\
+    \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\059\000\
+    \059\000\059\000\059\000\059\000\059\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\057\000\057\000\057\000\
-    \057\000\057\000\057\000\000\000\000\000\255\255\000\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\030\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\000\000\000\000\000\000\000\000\029\000\
-    \000\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\042\000\042\000\042\000\042\000\042\000\
-    \042\000\042\000\042\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
-    \047\000\047\000\047\000\000\000\000\000\000\000\000\000\034\000\
-    \000\000\000\000\047\000\047\000\047\000\047\000\047\000\047\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\042\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\035\000\
-    \000\000\033\000\047\000\047\000\047\000\047\000\047\000\047\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\000\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\031\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\032\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\059\000\
+    \059\000\059\000\059\000\059\000\059\000\000\000\000\000\000\000\
     \000\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\000\000\000\000\000\000\000\000\031\000\
-    \000\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\000\000\000\000\000\000\000\000\072\000\
-    \069\000\000\000\000\000\068\000\000\000\000\000\000\000\000\000\
-    \102\000\102\000\102\000\102\000\102\000\102\000\102\000\102\000\
-    \102\000\102\000\000\000\000\000\000\000\000\000\072\000\000\000\
-    \071\000\102\000\102\000\102\000\102\000\102\000\102\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\066\000\066\000\
-    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\102\000\102\000\102\000\102\000\102\000\102\000\000\000\
+    \031\000\031\000\031\000\031\000\032\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\031\000\031\000\031\000\031\000\000\000\000\000\000\000\
+    \000\000\031\000\000\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\000\000\
+    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\031\000\031\000\031\000\031\000\044\000\044\000\044\000\
+    \044\000\044\000\044\000\044\000\044\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\049\000\049\000\049\000\049\000\049\000\
+    \049\000\049\000\049\000\049\000\049\000\000\000\000\000\000\000\
+    \000\000\036\000\000\000\000\000\049\000\049\000\049\000\049\000\
+    \049\000\049\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\044\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\037\000\000\000\035\000\049\000\049\000\049\000\049\000\
+    \049\000\049\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\000\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\000\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \055\000\004\000\055\000\000\000\004\000\004\000\004\000\055\000\
-    \000\000\000\000\004\000\004\000\000\000\004\000\004\000\004\000\
-    \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
-    \054\000\054\000\004\000\000\000\004\000\004\000\004\000\004\000\
-    \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \004\000\000\000\000\000\004\000\004\000\004\000\000\000\000\000\
-    \000\000\004\000\004\000\000\000\004\000\004\000\004\000\000\000\
-    \000\000\000\000\000\000\000\000\055\000\000\000\004\000\000\000\
-    \000\000\004\000\055\000\004\000\004\000\004\000\004\000\004\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\055\000\000\000\
-    \000\000\000\000\055\000\000\000\055\000\000\000\004\000\000\000\
-    \053\000\004\000\004\000\004\000\004\000\000\000\004\000\004\000\
-    \004\000\000\000\004\000\004\000\004\000\004\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\
-    \000\000\004\000\004\000\064\000\004\000\004\000\255\255\000\000\
-    \000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\
-    \004\000\004\000\004\000\004\000\000\000\004\000\004\000\004\000\
-    \000\000\004\000\004\000\004\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\004\000\000\000\000\000\004\000\000\000\
-    \004\000\004\000\065\000\004\000\004\000\000\000\000\000\000\000\
-    \004\000\000\000\000\000\004\000\004\000\004\000\000\000\000\000\
-    \000\000\004\000\004\000\000\000\004\000\004\000\004\000\000\000\
-    \000\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\
-    \000\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
-    \103\000\103\000\103\000\103\000\103\000\103\000\103\000\103\000\
-    \103\000\103\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\103\000\103\000\103\000\103\000\103\000\103\000\000\000\
-    \004\000\000\000\004\000\000\000\000\000\004\000\000\000\000\000\
-    \255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\033\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\031\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\034\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\000\000\000\000\000\000\
+    \000\000\033\000\000\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\101\000\098\000\000\000\
+    \000\000\097\000\000\000\000\000\000\000\000\000\145\000\145\000\
+    \145\000\145\000\145\000\145\000\145\000\145\000\145\000\145\000\
+    \000\000\000\000\000\000\000\000\101\000\000\000\100\000\145\000\
+    \145\000\145\000\145\000\145\000\145\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\095\000\095\000\095\000\095\000\
+    \095\000\095\000\095\000\095\000\095\000\095\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\
+    \145\000\145\000\145\000\145\000\145\000\000\000\000\000\000\000\
+    \000\000\000\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\000\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\000\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\057\000\000\000\057\000\000\000\000\000\068\000\
+    \068\000\057\000\060\000\000\000\000\000\000\000\000\000\000\000\
+    \068\000\068\000\056\000\056\000\056\000\056\000\056\000\056\000\
+    \056\000\056\000\056\000\056\000\060\000\000\000\060\000\060\000\
+    \060\000\000\000\068\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\094\000\094\000\
+    \000\000\000\000\085\000\000\000\000\000\000\000\000\000\094\000\
+    \094\000\000\000\000\000\000\000\000\000\060\000\057\000\000\000\
+    \068\000\000\000\000\000\085\000\057\000\085\000\085\000\085\000\
+    \061\000\094\000\000\000\061\000\000\000\000\000\000\000\000\000\
+    \057\000\000\000\000\000\000\000\057\000\000\000\057\000\000\000\
+    \000\000\000\000\055\000\000\000\000\000\060\000\060\000\061\000\
+    \079\000\000\000\000\000\079\000\079\000\079\000\085\000\094\000\
+    \000\000\080\000\079\000\000\000\079\000\079\000\079\000\000\000\
+    \069\000\000\000\000\000\069\000\255\255\000\000\000\000\000\000\
+    \000\000\079\000\000\000\079\000\079\000\079\000\079\000\079\000\
+    \000\000\000\000\000\000\000\000\000\000\085\000\085\000\069\000\
+    \070\000\000\000\000\000\070\000\070\000\070\000\000\000\000\000\
+    \073\000\072\000\070\000\000\000\070\000\070\000\070\000\000\000\
+    \000\000\000\000\000\000\079\000\000\000\079\000\000\000\000\000\
+    \000\000\070\000\000\000\070\000\070\000\070\000\070\000\070\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\103\000\103\000\103\000\103\000\103\000\103\000\000\000\
-    \000\000\000\000\000\000\004\000\000\000\004\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\114\000\
-    \255\255\255\255\114\000\114\000\114\000\000\000\255\255\255\255\
-    \114\000\114\000\255\255\114\000\114\000\114\000\113\000\113\000\
-    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
-    \114\000\255\255\114\000\114\000\114\000\114\000\114\000\113\000\
-    \113\000\113\000\113\000\113\000\113\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\069\000\000\000\000\000\069\000\000\000\
+    \000\000\000\000\000\000\079\000\000\000\079\000\000\000\000\000\
+    \000\000\000\000\000\000\070\000\000\000\070\000\000\000\000\000\
+    \000\000\000\000\069\000\070\000\000\000\000\000\070\000\071\000\
+    \071\000\000\000\060\000\073\000\072\000\070\000\000\000\070\000\
+    \071\000\071\000\069\000\000\000\000\000\069\000\000\000\000\000\
+    \000\000\000\000\255\255\070\000\078\000\070\000\078\000\078\000\
+    \078\000\070\000\071\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\069\000\070\000\000\000\000\000\070\000\077\000\077\000\
+    \000\000\060\000\073\000\072\000\070\000\000\000\070\000\077\000\
+    \077\000\000\000\000\000\000\000\000\000\060\000\070\000\000\000\
+    \071\000\000\000\000\000\076\000\000\000\076\000\076\000\076\000\
+    \070\000\077\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\069\000\000\000\000\000\
+    \069\000\000\000\000\000\000\000\000\000\060\000\078\000\000\000\
+    \070\000\000\000\000\000\000\000\060\000\070\000\000\000\077\000\
+    \000\000\000\000\000\000\000\000\069\000\070\000\000\000\000\000\
+    \070\000\071\000\071\000\000\000\068\000\073\000\072\000\070\000\
+    \000\000\070\000\071\000\071\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\060\000\076\000\071\000\070\000\
+    \071\000\071\000\071\000\070\000\071\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\068\000\068\000\
+    \000\000\068\000\000\000\000\000\000\000\000\000\000\000\068\000\
+    \068\000\000\000\000\000\000\000\000\000\000\000\000\000\068\000\
+    \070\000\000\000\071\000\068\000\000\000\068\000\068\000\068\000\
+    \000\000\068\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\069\000\000\000\000\000\
+    \069\000\000\000\000\000\000\000\000\000\000\000\000\000\068\000\
+    \071\000\000\000\070\000\000\000\068\000\000\000\000\000\068\000\
+    \000\000\000\000\000\000\000\000\069\000\070\000\000\000\000\000\
+    \070\000\070\000\070\000\000\000\000\000\074\000\072\000\070\000\
+    \000\000\070\000\070\000\070\000\069\000\000\000\000\000\069\000\
+    \000\000\000\000\000\000\000\000\068\000\068\000\070\000\000\000\
+    \070\000\070\000\070\000\070\000\070\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\069\000\070\000\000\000\000\000\070\000\
+    \071\000\071\000\000\000\068\000\074\000\072\000\070\000\000\000\
+    \070\000\071\000\071\000\000\000\000\000\000\000\000\000\000\000\
+    \070\000\000\000\070\000\000\000\000\000\071\000\000\000\071\000\
+    \071\000\071\000\070\000\071\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\069\000\
+    \000\000\000\000\069\000\000\000\000\000\000\000\000\000\000\000\
+    \070\000\000\000\070\000\000\000\000\000\000\000\068\000\070\000\
+    \000\000\071\000\000\000\000\000\000\000\000\000\069\000\070\000\
+    \000\000\000\000\070\000\070\000\070\000\000\000\000\000\000\000\
+    \072\000\070\000\000\000\070\000\070\000\070\000\069\000\000\000\
+    \000\000\069\000\000\000\000\000\000\000\000\000\068\000\071\000\
+    \070\000\070\000\070\000\070\000\070\000\070\000\070\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\069\000\070\000\000\000\
+    \000\000\070\000\077\000\077\000\000\000\060\000\074\000\072\000\
+    \070\000\000\000\070\000\077\000\077\000\000\000\000\000\000\000\
+    \000\000\000\000\070\000\000\000\070\000\000\000\000\000\076\000\
+    \000\000\076\000\076\000\076\000\070\000\077\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\069\000\000\000\000\000\069\000\000\000\000\000\000\000\
+    \000\000\000\000\070\000\000\000\070\000\000\000\000\000\000\000\
+    \060\000\070\000\000\000\077\000\000\000\000\000\000\000\000\000\
+    \069\000\070\000\000\000\000\000\070\000\077\000\077\000\000\000\
+    \068\000\074\000\072\000\070\000\000\000\070\000\077\000\077\000\
+    \069\000\000\000\000\000\069\000\000\000\000\000\000\000\000\000\
+    \060\000\076\000\077\000\070\000\077\000\077\000\077\000\070\000\
+    \077\000\000\000\000\000\000\000\000\000\000\000\000\000\069\000\
+    \070\000\000\000\000\000\070\000\071\000\071\000\000\000\060\000\
+    \074\000\072\000\070\000\000\000\070\000\071\000\071\000\000\000\
+    \000\000\000\000\000\000\068\000\070\000\000\000\077\000\000\000\
+    \000\000\078\000\000\000\078\000\078\000\078\000\070\000\071\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\255\255\255\255\255\255\114\000\000\000\255\255\113\000\
-    \113\000\113\000\113\000\113\000\113\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\081\000\000\000\000\000\081\000\000\000\
+    \000\000\000\000\000\000\068\000\077\000\000\000\070\000\000\000\
+    \000\000\000\000\060\000\070\000\000\000\071\000\000\000\000\000\
+    \000\000\000\000\081\000\079\000\000\000\000\000\079\000\079\000\
+    \079\000\000\000\000\000\083\000\080\000\079\000\000\000\079\000\
+    \079\000\079\000\081\000\000\000\000\000\081\000\000\000\000\000\
+    \000\000\000\000\060\000\078\000\079\000\070\000\079\000\079\000\
+    \079\000\079\000\079\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\081\000\079\000\000\000\000\000\079\000\079\000\079\000\
+    \000\000\000\000\000\000\080\000\079\000\000\000\079\000\079\000\
+    \079\000\000\000\000\000\000\000\000\000\000\000\079\000\000\000\
+    \079\000\000\000\000\000\079\000\000\000\079\000\079\000\079\000\
+    \079\000\079\000\000\000\000\000\000\000\003\000\000\000\000\000\
+    \003\000\009\000\009\000\000\000\000\000\005\000\003\000\003\000\
+    \000\000\003\000\009\000\009\000\000\000\000\000\079\000\000\000\
+    \079\000\000\000\000\000\000\000\000\000\079\000\086\000\079\000\
+    \006\000\006\000\006\000\003\000\009\000\000\000\000\000\000\000\
+    \000\000\000\000\003\000\000\000\000\000\003\000\009\000\009\000\
+    \000\000\000\000\005\000\003\000\003\000\000\000\003\000\009\000\
+    \009\000\000\000\000\000\000\000\000\000\079\000\000\000\079\000\
+    \003\000\085\000\009\000\086\000\000\000\006\000\006\000\006\000\
+    \003\000\009\000\000\000\000\000\000\000\000\000\000\000\003\000\
+    \000\000\000\000\003\000\009\000\009\000\000\000\000\000\092\000\
+    \003\000\003\000\000\000\003\000\009\000\009\000\000\000\000\000\
+    \086\000\005\000\003\000\000\000\000\000\003\000\085\000\009\000\
+    \093\000\000\000\009\000\009\000\009\000\003\000\009\000\000\000\
+    \000\000\000\000\000\000\000\000\003\000\000\000\000\000\003\000\
+    \009\000\009\000\000\000\000\000\085\000\003\000\003\000\000\000\
+    \003\000\009\000\009\000\000\000\000\000\086\000\005\000\003\000\
+    \000\000\000\000\003\000\092\000\009\000\086\000\000\000\006\000\
+    \006\000\090\000\003\000\009\000\000\000\000\000\000\000\000\000\
+    \000\000\003\000\000\000\000\000\003\000\009\000\009\000\000\000\
+    \000\000\085\000\003\000\003\000\000\000\003\000\009\000\009\000\
+    \000\000\000\000\093\000\092\000\003\000\000\000\000\000\003\000\
+    \085\000\009\000\086\000\000\000\006\000\006\000\091\000\003\000\
+    \009\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\
+    \000\000\003\000\009\000\009\000\000\000\000\000\085\000\003\000\
+    \003\000\000\000\003\000\009\000\009\000\000\000\000\000\086\000\
+    \085\000\003\000\000\000\000\000\003\000\085\000\009\000\086\000\
+    \000\000\006\000\006\000\006\000\003\000\009\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\094\000\
+    \094\000\000\000\000\000\092\000\000\000\000\000\000\000\000\000\
+    \094\000\094\000\000\000\000\000\086\000\085\000\003\000\000\000\
+    \000\000\003\000\085\000\009\000\094\000\000\000\094\000\094\000\
+    \094\000\000\000\094\000\000\000\000\000\000\000\000\000\000\000\
+    \003\000\000\000\000\000\003\000\009\000\009\000\000\000\000\000\
+    \092\000\003\000\003\000\000\000\003\000\009\000\009\000\000\000\
+    \000\000\086\000\085\000\003\000\000\000\000\000\000\000\092\000\
+    \094\000\093\000\000\000\009\000\009\000\009\000\003\000\009\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\094\000\094\000\000\000\000\000\092\000\000\000\000\000\
+    \105\000\105\000\094\000\094\000\092\000\000\000\094\000\092\000\
+    \000\000\105\000\105\000\003\000\092\000\009\000\094\000\000\000\
+    \094\000\094\000\094\000\000\000\094\000\106\000\000\000\105\000\
+    \105\000\105\000\000\000\105\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\105\000\105\000\000\000\
+    \000\000\092\000\000\000\093\000\092\000\003\000\105\000\105\000\
+    \000\000\092\000\094\000\000\000\000\000\000\000\000\000\000\000\
+    \092\000\105\000\106\000\000\000\105\000\105\000\105\000\000\000\
+    \105\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\105\000\105\000\000\000\000\000\092\000\000\000\
+    \094\000\092\000\000\000\105\000\105\000\000\000\000\000\106\000\
+    \092\000\000\000\000\000\000\000\000\000\092\000\105\000\106\000\
+    \000\000\105\000\105\000\105\000\000\000\105\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\105\000\
+    \105\000\000\000\000\000\085\000\000\000\000\000\105\000\105\000\
+    \105\000\105\000\005\000\000\000\106\000\092\000\000\000\105\000\
+    \105\000\000\000\092\000\105\000\109\000\000\000\108\000\108\000\
+    \108\000\000\000\105\000\109\000\000\000\108\000\108\000\108\000\
+    \000\000\105\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\105\000\105\000\000\000\000\000\085\000\
+    \000\000\106\000\092\000\000\000\105\000\105\000\000\000\085\000\
+    \105\000\000\000\000\000\000\000\000\000\000\000\085\000\105\000\
+    \109\000\000\000\108\000\108\000\108\000\000\000\105\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\255\255\114\000\255\255\114\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\080\000\080\000\
-    \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\
-    \051\000\000\000\000\000\078\000\000\000\000\000\000\000\080\000\
-    \080\000\080\000\080\000\080\000\080\000\255\255\000\000\000\000\
+    \105\000\105\000\000\000\000\000\005\000\000\000\109\000\085\000\
+    \000\000\105\000\105\000\000\000\000\000\109\000\005\000\000\000\
+    \000\000\000\000\000\000\085\000\105\000\109\000\000\000\108\000\
+    \108\000\108\000\000\000\105\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\114\000\114\000\000\000\
+    \060\000\000\000\000\000\000\000\000\000\000\000\114\000\114\000\
+    \000\000\000\000\109\000\085\000\000\000\000\000\000\000\000\000\
+    \085\000\105\000\112\000\000\000\113\000\112\000\112\000\000\000\
+    \114\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \114\000\114\000\000\000\060\000\000\000\000\000\000\000\000\000\
+    \000\000\114\000\114\000\000\000\000\000\000\000\000\000\109\000\
+    \005\000\000\000\000\000\060\000\000\000\112\000\114\000\113\000\
+    \112\000\112\000\000\000\114\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\114\000\114\000\000\000\068\000\000\000\
+    \116\000\116\000\000\000\060\000\114\000\114\000\000\000\000\000\
+    \000\000\116\000\116\000\060\000\112\000\000\000\060\000\000\000\
+    \114\000\114\000\114\000\114\000\114\000\115\000\114\000\115\000\
+    \115\000\115\000\000\000\116\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\116\000\116\000\000\000\068\000\000\000\
+    \000\000\000\000\000\000\000\000\116\000\116\000\060\000\112\000\
+    \000\000\068\000\000\000\000\000\114\000\000\000\060\000\000\000\
+    \116\000\116\000\116\000\116\000\116\000\000\000\116\000\000\000\
+    \000\000\000\000\003\000\000\000\000\000\003\000\118\000\118\000\
+    \000\000\000\000\005\000\003\000\003\000\000\000\003\000\118\000\
+    \118\000\068\000\114\000\000\000\000\000\000\000\060\000\115\000\
+    \000\000\068\000\000\000\117\000\116\000\007\000\007\000\007\000\
+    \003\000\118\000\000\000\000\000\000\000\000\000\000\000\003\000\
+    \000\000\000\000\003\000\118\000\118\000\000\000\000\000\092\000\
+    \003\000\003\000\000\000\003\000\118\000\118\000\000\000\000\000\
+    \000\000\068\000\116\000\000\000\000\000\003\000\005\000\118\000\
+    \119\000\000\000\118\000\118\000\118\000\003\000\118\000\000\000\
+    \000\000\000\000\000\000\000\000\003\000\000\000\000\000\003\000\
+    \118\000\118\000\000\000\000\000\092\000\003\000\003\000\000\000\
+    \003\000\118\000\118\000\000\000\000\000\117\000\005\000\003\000\
+    \000\000\000\000\003\000\092\000\118\000\119\000\000\000\118\000\
+    \118\000\118\000\003\000\118\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\053\000\000\000\000\000\121\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \080\000\000\000\000\000\000\000\000\000\079\000\084\000\000\000\
-    \083\000\000\000\000\000\000\000\000\000\000\000\000\000\080\000\
-    \080\000\080\000\080\000\080\000\080\000\255\255\000\000\000\000\
-    \000\000\000\000\082\000\000\000\000\000\000\000\255\255\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\000\000\000\000\000\000\000\000\081\000\000\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\119\000\092\000\003\000\000\000\000\000\003\000\
+    \092\000\118\000\000\000\123\000\000\000\000\000\000\000\000\000\
+    \122\000\127\000\000\000\126\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\125\000\000\000\119\000\
+    \092\000\003\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\000\000\000\000\000\000\000\000\
+    \124\000\000\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\146\000\146\000\146\000\146\000\
+    \146\000\146\000\146\000\146\000\146\000\146\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\146\000\146\000\146\000\
+    \146\000\146\000\146\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\146\000\146\000\146\000\
+    \146\000\146\000\146\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \000\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \000\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\052\000\124\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\000\000\000\000\
+    \000\000\000\000\124\000\000\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\000\000\000\000\
+    \000\000\000\000\132\000\000\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\000\000\000\000\
+    \000\000\000\000\000\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\000\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\000\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\000\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\000\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\000\000\000\000\000\000\
+    \000\000\131\000\000\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\156\000\156\000\156\000\
+    \156\000\156\000\156\000\156\000\156\000\156\000\156\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\156\000\156\000\
+    \156\000\156\000\156\000\156\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\156\000\156\000\
+    \156\000\156\000\156\000\156\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\000\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\000\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\050\000\081\000\
+    \000\000\000\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\000\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\000\000\000\000\032\000\000\000\
+    \000\000\000\000\129\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\000\000\000\000\000\000\
+    \000\000\131\000\000\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\123\000\123\000\123\000\
+    \123\000\123\000\123\000\123\000\123\000\123\000\123\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\123\000\123\000\
+    \123\000\123\000\123\000\123\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\000\000\000\000\000\000\000\000\081\000\
-    \000\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\000\000\000\000\000\000\000\000\089\000\
-    \000\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\000\000\000\000\000\000\000\000\000\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\000\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\000\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\000\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\000\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\000\000\000\000\000\000\000\000\088\000\000\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\123\000\123\000\
+    \123\000\123\000\123\000\123\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\000\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\132\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\000\000\000\000\032\000\000\000\
+    \000\000\000\000\000\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\000\000\000\000\000\000\
+    \000\000\132\000\000\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\000\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\000\000\000\000\030\000\000\000\000\000\000\000\086\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\000\000\000\000\000\000\000\000\088\000\000\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\000\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\000\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\142\000\000\000\142\000\000\000\000\000\154\000\
+    \000\000\142\000\153\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\141\000\141\000\000\000\032\000\000\000\032\000\
+    \000\000\000\000\000\000\000\000\032\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\152\000\152\000\152\000\
+    \152\000\152\000\152\000\152\000\152\000\152\000\152\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\142\000\000\000\
+    \000\000\000\000\000\000\000\000\142\000\157\000\000\000\000\000\
+    \157\000\157\000\157\000\000\000\000\000\000\000\157\000\157\000\
+    \142\000\157\000\157\000\157\000\142\000\000\000\142\000\000\000\
+    \000\000\032\000\140\000\000\000\000\000\000\000\157\000\032\000\
+    \157\000\157\000\157\000\157\000\157\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\032\000\000\000\000\000\000\000\032\000\
+    \000\000\032\000\000\000\000\000\000\000\151\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \157\000\000\000\157\000\000\000\000\000\000\000\000\000\000\000\
+    \159\000\000\000\000\000\159\000\159\000\159\000\000\000\000\000\
+    \000\000\159\000\159\000\000\000\159\000\159\000\159\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \157\000\159\000\157\000\159\000\159\000\159\000\159\000\159\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\000\000\159\000\000\000\159\000\160\000\000\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\000\000\159\000\000\000\159\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\000\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\089\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\000\000\000\000\030\000\000\000\000\000\000\000\000\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\000\000\000\000\000\000\000\000\089\000\000\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\255\255\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\000\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\000\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\159\000\
+    \000\000\000\000\159\000\159\000\159\000\000\000\000\000\000\000\
+    \159\000\159\000\000\000\159\000\159\000\159\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \159\000\000\000\159\000\159\000\159\000\159\000\159\000\000\000\
+    \000\000\000\000\000\000\160\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\000\000\000\000\
+    \030\000\000\000\159\000\000\000\159\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\000\000\
+    \000\000\000\000\159\000\160\000\159\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\000\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\000\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\099\000\
-    \000\000\099\000\000\000\000\000\111\000\000\000\099\000\110\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\098\000\
-    \098\000\098\000\098\000\098\000\098\000\098\000\098\000\098\000\
-    \098\000\000\000\030\000\000\000\030\000\000\000\000\000\000\000\
-    \000\000\030\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\109\000\109\000\109\000\109\000\109\000\109\000\
-    \109\000\109\000\109\000\109\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\099\000\000\000\000\000\000\000\000\000\
-    \000\000\099\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\099\000\000\000\000\000\
-    \000\000\099\000\000\000\099\000\000\000\000\000\030\000\097\000\
-    \000\000\000\000\000\000\000\000\030\000\116\000\000\000\000\000\
-    \116\000\116\000\116\000\000\000\000\000\000\000\116\000\116\000\
-    \030\000\116\000\116\000\116\000\030\000\000\000\030\000\000\000\
-    \000\000\000\000\108\000\000\000\000\000\000\000\116\000\000\000\
-    \116\000\116\000\116\000\116\000\116\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\000\000\
-    \000\000\000\000\116\000\117\000\000\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\000\000\
-    \116\000\000\000\116\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\000\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\000\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\162\000\000\000\000\000\162\000\
+    \162\000\162\000\000\000\000\000\000\000\162\000\162\000\000\000\
+    \162\000\162\000\162\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\162\000\000\000\162\000\
+    \162\000\162\000\162\000\162\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\000\000\162\000\
+    \000\000\162\000\163\000\000\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\000\000\162\000\
+    \000\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\255\255\000\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\000\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\000\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\116\000\000\000\000\000\116\000\
-    \116\000\116\000\000\000\000\000\000\000\116\000\116\000\000\000\
-    \116\000\116\000\116\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\116\000\000\000\116\000\
-    \116\000\116\000\116\000\116\000\000\000\000\000\000\000\000\000\
-    \117\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\000\000\000\000\028\000\000\000\000\000\
-    \000\000\116\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\000\000\000\000\000\000\116\000\
-    \117\000\116\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\000\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\000\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\162\000\000\000\000\000\162\000\162\000\
+    \162\000\000\000\000\000\000\000\162\000\162\000\000\000\162\000\
+    \162\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\162\000\000\000\162\000\162\000\
+    \162\000\162\000\162\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\163\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\000\000\162\000\030\000\
+    \162\000\000\000\000\000\164\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\162\000\000\000\
+    \162\000\000\000\163\000\000\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\000\000\000\000\
+    \000\000\000\000\165\000\000\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\000\000\000\000\
+    \000\000\000\000\000\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\000\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\000\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\000\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\000\000\000\000\166\000\
+    \000\000\000\000\000\000\000\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\000\000\000\000\
+    \000\000\000\000\165\000\000\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\000\000\000\000\
+    \000\000\000\000\174\000\000\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\000\000\000\000\
+    \000\000\000\000\000\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\000\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\000\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\000\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\000\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\000\000\000\000\000\000\
+    \000\000\173\000\000\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \000\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \000\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\119\000\000\000\000\000\119\000\119\000\119\000\000\000\
-    \000\000\000\000\119\000\119\000\000\000\119\000\119\000\119\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\119\000\000\000\119\000\119\000\119\000\119\000\
-    \119\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\000\000\000\000\000\000\119\000\120\000\
-    \000\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\000\000\119\000\000\000\119\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\000\000\000\000\030\000\000\000\
+    \000\000\000\000\171\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\000\000\000\000\000\000\
+    \000\000\173\000\000\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\000\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\000\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \119\000\000\000\000\000\119\000\119\000\119\000\000\000\000\000\
-    \000\000\119\000\119\000\000\000\119\000\119\000\119\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\119\000\000\000\119\000\119\000\119\000\119\000\119\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\120\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\000\000\000\000\028\000\000\000\119\000\000\000\121\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\000\000\119\000\000\000\119\000\120\000\000\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\000\000\000\000\000\000\000\000\122\000\000\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\000\000\000\000\000\000\000\000\000\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\000\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\000\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\000\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\000\000\000\000\123\000\000\000\000\000\000\000\000\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\000\000\000\000\000\000\000\000\122\000\000\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\000\000\000\000\000\000\000\000\131\000\000\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\000\000\000\000\000\000\000\000\000\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\000\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\000\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\000\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\000\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\000\000\000\000\000\000\000\000\130\000\000\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\174\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\000\000\000\000\030\000\000\000\
+    \000\000\000\000\000\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\000\000\000\000\000\000\
+    \000\000\174\000\000\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\000\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \000\000\000\000\028\000\000\000\000\000\000\000\128\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\000\000\000\000\000\000\000\000\130\000\000\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\000\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\131\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \000\000\000\000\028\000\000\000\000\000\000\000\000\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\000\000\000\000\000\000\000\000\131\000\000\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\000\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\000\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\028\000\000\000\
-    \000\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \133\000\000\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\085\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\000\000\000\000\000\000\
-    \000\000\134\000\135\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\000\000\000\000\000\000\
+    \000\000\000\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\000\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\000\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\030\000\000\000\000\000\177\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\176\000\000\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \128\000\000\000\000\000\000\000\000\000\000\000\000\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\000\000\000\000\000\000\000\000\177\000\178\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -3316,26 +3549,26 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\000\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\000\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\255\255\180\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\000\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\000\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\255\255\137\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\085\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\000\000\
-    \000\000\000\000\000\000\137\000\000\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\000\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\128\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\000\000\000\000\000\000\000\000\180\000\
+    \000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -3344,25 +3577,25 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\000\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\000\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\136\000\000\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\085\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \000\000\000\000\000\000\000\000\137\000\000\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\000\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\000\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\
+    \000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\128\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\000\000\000\000\000\000\000\000\
+    \180\000\000\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -3371,56 +3604,56 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\000\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\085\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \000\000\000\000\000\000\000\000\137\000\000\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \000\000\000\000\000\000\000\000\144\000\000\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \000\000\000\000\000\000\000\000\000\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\000\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\000\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\000\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\000\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\000\000\
-    \000\000\000\000\000\000\143\000\000\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\000\000\
+    \000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\128\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\000\000\000\000\000\000\000\000\
+    \180\000\000\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\000\000\000\000\000\000\000\000\
+    \187\000\000\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\000\000\000\000\000\000\000\000\
+    \000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \000\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \000\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\000\000\000\000\000\000\000\000\186\000\
+    \000\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -3429,24 +3662,24 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\000\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\000\000\000\000\
-    \032\000\000\000\000\000\000\000\141\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\000\000\
-    \000\000\000\000\000\000\143\000\000\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\000\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\000\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\000\000\000\000\034\000\000\000\000\000\000\000\
+    \184\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\000\000\000\000\000\000\000\000\186\000\
+    \000\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -3455,24 +3688,24 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\000\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\144\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\000\000\000\000\
-    \032\000\000\000\000\000\000\000\000\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\000\000\
-    \000\000\000\000\000\000\144\000\000\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\000\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\000\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\187\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\000\000\000\000\034\000\000\000\000\000\000\000\
+    \000\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\000\000\000\000\000\000\000\000\187\000\
+    \000\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -3481,19 +3714,19 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\000\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\000\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\000\000";
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\000\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\000\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \000\000";
                 Lexing.lex_check =
                   "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\000\000\000\000\027\000\000\000\000\000\068\000\074\000\
-    \078\000\105\000\125\000\140\000\255\255\255\255\255\255\255\255\
+    \255\255\000\000\000\000\029\000\000\000\000\000\097\000\103\000\
+    \121\000\099\000\102\000\148\000\099\000\102\000\168\000\183\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -3506,678 +3739,561 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\009\000\
-    \011\000\012\000\013\000\014\000\012\000\012\000\017\000\026\000\
-    \038\000\038\000\026\000\039\000\039\000\039\000\039\000\039\000\
-    \039\000\039\000\039\000\047\000\049\000\010\000\055\000\010\000\
-    \058\000\082\000\014\000\082\000\083\000\084\000\026\000\082\000\
-    \091\000\048\000\092\000\093\000\012\000\094\000\099\000\101\000\
-    \103\000\126\000\014\000\014\000\014\000\014\000\014\000\014\000\
-    \014\000\014\000\014\000\014\000\045\000\045\000\045\000\045\000\
-    \045\000\045\000\045\000\045\000\045\000\045\000\048\000\092\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\
+    \016\000\028\000\040\000\040\000\028\000\020\000\049\000\038\000\
+    \020\000\038\000\051\000\057\000\038\000\038\000\038\000\038\000\
+    \038\000\038\000\038\000\038\000\038\000\038\000\066\000\016\000\
+    \028\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\
+    \041\000\050\000\126\000\100\000\127\000\134\000\100\000\016\000\
+    \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\
+    \016\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
+    \047\000\047\000\047\000\100\000\136\000\137\000\050\000\142\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\004\000\003\000\003\000\004\000\004\000\004\000\
-    \255\255\003\000\003\000\004\000\004\000\003\000\004\000\004\000\
-    \004\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\
-    \037\000\037\000\037\000\004\000\003\000\004\000\004\000\004\000\
-    \004\000\004\000\036\000\255\255\036\000\255\255\037\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\
-    \054\000\054\000\054\000\111\000\003\000\003\000\003\000\004\000\
-    \037\000\003\000\110\000\110\000\255\255\255\255\037\000\070\000\
-    \073\000\255\255\070\000\073\000\133\000\255\255\136\000\127\000\
-    \018\000\127\000\111\000\018\000\255\255\127\000\255\255\255\255\
-    \133\000\110\000\136\000\255\255\003\000\004\000\003\000\004\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\
-    \003\000\007\000\018\000\255\255\007\000\007\000\007\000\255\255\
-    \255\255\255\255\007\000\007\000\255\255\007\000\007\000\007\000\
-    \255\255\071\000\255\255\255\255\071\000\139\000\124\000\139\000\
-    \003\000\124\000\007\000\139\000\007\000\007\000\007\000\007\000\
-    \007\000\255\255\255\255\043\000\043\000\255\255\255\255\008\000\
-    \255\255\071\000\008\000\008\000\008\000\255\255\255\255\255\255\
-    \008\000\008\000\255\255\008\000\008\000\008\000\255\255\255\255\
-    \003\000\255\255\255\255\255\255\255\255\007\000\007\000\043\000\
-    \008\000\003\000\008\000\008\000\008\000\008\000\008\000\255\255\
-    \124\000\255\255\124\000\255\255\015\000\255\255\255\255\015\000\
-    \015\000\015\000\043\000\255\255\255\255\015\000\015\000\255\255\
-    \015\000\015\000\015\000\255\255\007\000\007\000\007\000\043\000\
-    \255\255\043\000\255\255\008\000\008\000\015\000\255\255\015\000\
-    \015\000\015\000\015\000\015\000\255\255\255\255\255\255\016\000\
-    \255\255\255\255\016\000\016\000\016\000\255\255\255\255\016\000\
-    \016\000\016\000\255\255\016\000\016\000\016\000\255\255\255\255\
-    \255\255\255\255\008\000\255\255\008\000\255\255\255\255\255\255\
-    \016\000\015\000\016\000\016\000\016\000\016\000\016\000\255\255\
-    \255\255\020\000\255\255\020\000\020\000\020\000\020\000\020\000\
-    \020\000\020\000\020\000\020\000\020\000\070\000\073\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\018\000\015\000\
-    \020\000\015\000\255\255\255\255\016\000\255\255\255\255\020\000\
-    \255\255\255\255\021\000\255\255\021\000\021\000\021\000\021\000\
-    \021\000\021\000\021\000\021\000\021\000\021\000\255\255\255\255\
-    \255\255\255\255\020\000\255\255\255\255\255\255\021\000\255\255\
-    \020\000\021\000\016\000\255\255\016\000\255\255\255\255\020\000\
-    \021\000\020\000\255\255\021\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\021\000\255\255\255\255\255\255\
-    \072\000\072\000\255\255\021\000\072\000\255\255\021\000\255\255\
-    \255\255\021\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \021\000\255\255\021\000\021\000\022\000\255\255\255\255\072\000\
-    \255\255\072\000\255\255\255\255\021\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\071\000\
-    \255\255\255\255\255\255\255\255\124\000\255\255\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \255\255\255\255\255\255\255\255\022\000\255\255\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\
-    \040\000\040\000\104\000\255\255\255\255\104\000\255\255\255\255\
-    \067\000\040\000\040\000\040\000\040\000\040\000\040\000\056\000\
-    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
-    \056\000\255\255\104\000\255\255\255\255\255\255\255\255\067\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\040\000\040\000\040\000\040\000\040\000\040\000\067\000\
-    \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\
-    \067\000\255\255\255\255\255\255\255\255\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\104\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\023\000\022\000\022\000\022\000\
-    \022\000\022\000\022\000\022\000\022\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\072\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \255\255\255\255\255\255\255\255\023\000\255\255\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\
-    \041\000\041\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\041\000\041\000\041\000\041\000\041\000\041\000\255\255\
-    \255\255\255\255\255\255\255\255\041\000\098\000\098\000\098\000\
-    \098\000\098\000\098\000\098\000\098\000\098\000\098\000\255\255\
-    \255\255\255\255\138\000\255\255\255\255\138\000\255\255\041\000\
-    \104\000\041\000\041\000\041\000\041\000\041\000\041\000\255\255\
-    \255\255\255\255\255\255\255\255\041\000\255\255\041\000\255\255\
-    \255\255\255\255\255\255\255\255\138\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\138\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
+    \000\000\003\000\146\000\169\000\003\000\003\000\003\000\099\000\
+    \102\000\255\255\003\000\003\000\135\000\003\000\003\000\003\000\
+    \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\
+    \039\000\039\000\003\000\176\000\003\000\003\000\003\000\003\000\
+    \003\000\069\000\005\000\005\000\069\000\039\000\005\000\176\000\
+    \255\255\135\000\255\255\005\000\005\000\056\000\056\000\056\000\
+    \056\000\056\000\056\000\056\000\056\000\056\000\056\000\005\000\
+    \069\000\005\000\005\000\005\000\003\000\005\000\003\000\039\000\
+    \125\000\069\000\125\000\255\255\006\000\039\000\125\000\006\000\
+    \006\000\006\000\179\000\255\255\006\000\006\000\006\000\154\000\
+    \006\000\006\000\006\000\255\255\081\000\255\255\179\000\081\000\
+    \153\000\153\000\005\000\005\000\003\000\006\000\003\000\006\000\
+    \006\000\006\000\006\000\006\000\255\255\255\255\154\000\255\255\
+    \255\255\007\000\255\255\081\000\007\000\007\000\007\000\153\000\
+    \255\255\007\000\007\000\007\000\081\000\007\000\007\000\007\000\
+    \255\255\005\000\005\000\020\000\255\255\255\255\255\255\006\000\
+    \006\000\006\000\007\000\255\255\007\000\007\000\007\000\007\000\
+    \007\000\170\000\182\000\170\000\182\000\255\255\008\000\170\000\
+    \182\000\008\000\008\000\008\000\255\255\255\255\008\000\008\000\
+    \008\000\100\000\008\000\008\000\008\000\255\255\255\255\006\000\
+    \006\000\006\000\255\255\255\255\007\000\007\000\007\000\008\000\
+    \255\255\008\000\008\000\008\000\008\000\008\000\167\000\147\000\
+    \255\255\167\000\147\000\009\000\255\255\255\255\009\000\009\000\
+    \009\000\255\255\255\255\009\000\009\000\009\000\255\255\009\000\
+    \009\000\009\000\255\255\255\255\007\000\007\000\007\000\147\000\
+    \255\255\008\000\008\000\008\000\009\000\255\255\009\000\009\000\
+    \009\000\009\000\009\000\255\255\255\255\255\255\255\255\255\255\
+    \181\000\255\255\255\255\181\000\010\000\010\000\255\255\010\000\
+    \167\000\255\255\167\000\013\000\013\000\010\000\010\000\013\000\
+    \255\255\008\000\008\000\008\000\013\000\013\000\009\000\009\000\
+    \009\000\010\000\181\000\010\000\010\000\010\000\255\255\010\000\
+    \013\000\255\255\013\000\013\000\013\000\255\255\013\000\011\000\
+    \011\000\147\000\011\000\255\255\255\255\045\000\045\000\255\255\
+    \011\000\011\000\181\000\255\255\255\255\255\255\009\000\009\000\
+    \009\000\255\255\010\000\255\255\011\000\010\000\011\000\011\000\
+    \011\000\255\255\011\000\013\000\013\000\255\255\255\255\255\255\
+    \255\255\045\000\255\255\255\255\255\255\255\255\255\255\014\000\
+    \014\000\255\255\255\255\014\000\255\255\255\255\255\255\255\255\
+    \014\000\014\000\010\000\010\000\045\000\011\000\255\255\255\255\
+    \011\000\255\255\013\000\013\000\014\000\255\255\014\000\014\000\
+    \014\000\045\000\014\000\045\000\046\000\046\000\046\000\046\000\
+    \046\000\046\000\046\000\046\000\046\000\046\000\255\255\017\000\
+    \255\255\255\255\017\000\017\000\017\000\011\000\011\000\017\000\
+    \017\000\017\000\255\255\017\000\017\000\017\000\255\255\014\000\
+    \014\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \017\000\255\255\017\000\017\000\017\000\017\000\017\000\255\255\
+    \255\255\255\255\255\255\046\000\255\255\255\255\255\255\255\255\
+    \018\000\255\255\255\255\018\000\018\000\018\000\014\000\014\000\
+    \018\000\018\000\018\000\255\255\018\000\018\000\018\000\255\255\
+    \255\255\255\255\017\000\017\000\017\000\255\255\255\255\255\255\
+    \255\255\018\000\255\255\018\000\018\000\018\000\018\000\018\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\255\255\019\000\167\000\147\000\019\000\255\255\
+    \255\255\255\255\017\000\017\000\017\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\018\000\255\255\018\000\255\255\255\255\
+    \101\000\101\000\019\000\019\000\101\000\255\255\019\000\019\000\
+    \019\000\255\255\019\000\255\255\019\000\019\000\255\255\019\000\
+    \019\000\019\000\122\000\255\255\255\255\122\000\181\000\101\000\
+    \255\255\101\000\255\255\018\000\019\000\018\000\019\000\019\000\
+    \019\000\019\000\019\000\022\000\255\255\022\000\022\000\022\000\
+    \022\000\022\000\022\000\022\000\022\000\022\000\022\000\122\000\
+    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
+    \141\000\141\000\022\000\255\255\255\255\019\000\019\000\255\255\
+    \019\000\022\000\255\255\255\255\023\000\255\255\023\000\023\000\
     \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\255\255\023\000\023\000\023\000\
-    \023\000\023\000\023\000\023\000\023\000\024\000\255\255\255\255\
-    \024\000\024\000\024\000\255\255\255\255\255\255\024\000\024\000\
-    \255\255\024\000\024\000\024\000\100\000\100\000\100\000\100\000\
-    \100\000\100\000\100\000\100\000\100\000\100\000\024\000\255\255\
-    \024\000\024\000\024\000\024\000\024\000\255\255\255\255\079\000\
-    \255\255\255\255\079\000\255\255\255\255\255\255\255\255\255\255\
-    \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
-    \044\000\044\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\024\000\024\000\079\000\024\000\024\000\024\000\
+    \255\255\255\255\255\255\255\255\022\000\255\255\255\255\255\255\
+    \023\000\255\255\022\000\023\000\255\255\019\000\019\000\255\255\
+    \019\000\022\000\023\000\022\000\122\000\023\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\023\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\023\000\255\255\255\255\
+    \023\000\255\255\255\255\023\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\023\000\255\255\023\000\023\000\024\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\023\000\024\000\
     \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
-    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\044\000\
-    \024\000\025\000\024\000\255\255\025\000\025\000\025\000\255\255\
-    \255\255\255\255\025\000\025\000\255\255\025\000\025\000\025\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\079\000\025\000\255\255\025\000\025\000\025\000\025\000\
-    \025\000\109\000\109\000\109\000\109\000\109\000\109\000\109\000\
-    \109\000\109\000\109\000\112\000\112\000\112\000\112\000\112\000\
-    \112\000\112\000\112\000\112\000\112\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\025\000\025\000\
-    \138\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
-    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
-    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
-    \025\000\025\000\025\000\255\255\025\000\255\255\025\000\255\255\
-    \255\255\255\255\255\255\024\000\024\000\024\000\024\000\024\000\
     \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
     \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
-    \024\000\024\000\024\000\255\255\024\000\024\000\024\000\024\000\
-    \024\000\024\000\024\000\024\000\053\000\053\000\053\000\053\000\
-    \053\000\053\000\053\000\053\000\053\000\053\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\053\000\053\000\053\000\
-    \053\000\053\000\053\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \024\000\024\000\255\255\255\255\255\255\255\255\024\000\255\255\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\042\000\042\000\042\000\042\000\042\000\042\000\
+    \042\000\042\000\042\000\042\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\096\000\042\000\042\000\042\000\042\000\042\000\
+    \042\000\255\255\255\255\255\255\255\255\255\255\255\255\101\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\053\000\053\000\053\000\
-    \053\000\053\000\053\000\255\255\255\255\079\000\255\255\025\000\
+    \255\255\096\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \122\000\255\255\255\255\042\000\042\000\042\000\042\000\042\000\
+    \042\000\096\000\096\000\096\000\096\000\096\000\096\000\096\000\
+    \096\000\096\000\096\000\255\255\255\255\255\255\255\255\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\255\255\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\025\000\024\000\
+    \024\000\024\000\024\000\024\000\024\000\024\000\024\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
     \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
     \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
-    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\029\000\
+    \025\000\025\000\255\255\255\255\255\255\255\255\025\000\255\255\
     \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\255\255\255\255\255\255\255\255\029\000\
-    \255\255\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\042\000\042\000\042\000\042\000\042\000\
-    \042\000\042\000\042\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\057\000\057\000\057\000\057\000\057\000\057\000\057\000\
-    \057\000\057\000\057\000\255\255\255\255\255\255\255\255\042\000\
-    \255\255\255\255\057\000\057\000\057\000\057\000\057\000\057\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\043\000\043\000\043\000\043\000\043\000\043\000\
+    \043\000\043\000\043\000\043\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\043\000\043\000\043\000\043\000\043\000\
+    \043\000\255\255\255\255\255\255\255\255\255\255\043\000\143\000\
+    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
+    \143\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\043\000\255\255\043\000\043\000\043\000\043\000\043\000\
+    \043\000\255\255\255\255\255\255\255\255\255\255\043\000\255\255\
+    \043\000\255\255\255\255\255\255\255\255\255\255\255\255\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\255\255\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\255\255\025\000\
+    \025\000\025\000\025\000\025\000\025\000\025\000\025\000\026\000\
+    \255\255\255\255\026\000\026\000\026\000\255\255\255\255\255\255\
+    \026\000\026\000\255\255\026\000\026\000\026\000\152\000\152\000\
+    \152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\
+    \026\000\255\255\026\000\026\000\026\000\026\000\026\000\155\000\
+    \155\000\155\000\155\000\155\000\155\000\155\000\155\000\155\000\
+    \155\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\042\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\042\000\
-    \255\255\042\000\057\000\057\000\057\000\057\000\057\000\057\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\255\255\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\031\000\
-    \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \255\255\255\255\026\000\255\255\026\000\026\000\255\255\026\000\
+    \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
+    \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
+    \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
+    \026\000\255\255\026\000\027\000\026\000\255\255\027\000\027\000\
+    \027\000\255\255\255\255\255\255\027\000\027\000\255\255\027\000\
+    \027\000\027\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\027\000\255\255\027\000\027\000\
+    \027\000\027\000\027\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\027\000\255\255\
+    \027\000\027\000\255\255\027\000\027\000\027\000\027\000\027\000\
+    \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
+    \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
+    \027\000\027\000\027\000\027\000\027\000\255\255\027\000\255\255\
+    \027\000\255\255\255\255\255\255\255\255\026\000\026\000\026\000\
+    \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
+    \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
+    \026\000\026\000\026\000\026\000\026\000\255\255\026\000\026\000\
+    \026\000\026\000\026\000\026\000\026\000\026\000\055\000\055\000\
+    \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\055\000\
+    \055\000\055\000\055\000\055\000\055\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\055\000\
+    \055\000\055\000\055\000\055\000\055\000\255\255\255\255\255\255\
+    \255\255\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
+    \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
+    \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
+    \027\000\031\000\027\000\027\000\027\000\027\000\027\000\027\000\
+    \027\000\027\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\031\000\031\000\031\000\031\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\255\255\255\255\255\255\255\255\031\000\
-    \255\255\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\031\000\031\000\031\000\031\000\255\255\255\255\255\255\
+    \255\255\031\000\255\255\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\255\255\255\255\255\255\255\255\066\000\
-    \066\000\255\255\255\255\066\000\255\255\255\255\255\255\255\255\
-    \097\000\097\000\097\000\097\000\097\000\097\000\097\000\097\000\
-    \097\000\097\000\255\255\255\255\255\255\255\255\066\000\255\255\
-    \066\000\097\000\097\000\097\000\097\000\097\000\097\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\066\000\066\000\
-    \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\
+    \031\000\031\000\031\000\031\000\031\000\044\000\044\000\044\000\
+    \044\000\044\000\044\000\044\000\044\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\059\000\059\000\059\000\059\000\059\000\
+    \059\000\059\000\059\000\059\000\059\000\255\255\255\255\255\255\
+    \255\255\044\000\255\255\255\255\059\000\059\000\059\000\059\000\
+    \059\000\059\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\044\000\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\097\000\097\000\097\000\097\000\097\000\097\000\255\255\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \255\255\044\000\255\255\044\000\059\000\059\000\059\000\059\000\
+    \059\000\059\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\255\255\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\255\255\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \031\000\031\000\031\000\031\000\031\000\031\000\031\000\255\255\
     \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
-    \046\000\061\000\046\000\255\255\061\000\061\000\061\000\046\000\
-    \255\255\255\255\061\000\061\000\255\255\061\000\061\000\061\000\
-    \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
-    \046\000\046\000\061\000\255\255\061\000\061\000\061\000\061\000\
-    \061\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \031\000\033\000\031\000\031\000\031\000\031\000\031\000\031\000\
+    \031\000\031\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\255\255\255\255\255\255\
+    \255\255\033\000\255\255\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\095\000\095\000\255\255\
+    \255\255\095\000\255\255\255\255\255\255\255\255\140\000\140\000\
+    \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
+    \255\255\255\255\255\255\255\255\095\000\255\255\095\000\140\000\
+    \140\000\140\000\140\000\140\000\140\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\095\000\095\000\095\000\095\000\
+    \095\000\095\000\095\000\095\000\095\000\095\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\140\000\
+    \140\000\140\000\140\000\140\000\140\000\255\255\255\255\255\255\
+    \255\255\255\255\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\255\255\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\255\255\033\000\033\000\033\000\033\000\033\000\033\000\
+    \033\000\033\000\048\000\255\255\048\000\255\255\255\255\060\000\
+    \060\000\048\000\060\000\255\255\255\255\255\255\255\255\255\255\
+    \060\000\060\000\048\000\048\000\048\000\048\000\048\000\048\000\
+    \048\000\048\000\048\000\048\000\060\000\255\255\060\000\060\000\
+    \060\000\255\255\060\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\085\000\085\000\
+    \255\255\255\255\085\000\255\255\255\255\255\255\255\255\085\000\
+    \085\000\255\255\255\255\255\255\255\255\060\000\048\000\255\255\
+    \060\000\255\255\255\255\085\000\048\000\085\000\085\000\085\000\
+    \061\000\085\000\255\255\061\000\255\255\255\255\255\255\255\255\
+    \048\000\255\255\255\255\255\255\048\000\255\255\048\000\255\255\
+    \255\255\255\255\048\000\255\255\255\255\060\000\060\000\061\000\
+    \061\000\255\255\255\255\061\000\061\000\061\000\085\000\085\000\
+    \255\255\061\000\061\000\255\255\061\000\061\000\061\000\255\255\
+    \062\000\255\255\255\255\062\000\095\000\255\255\255\255\255\255\
+    \255\255\061\000\255\255\061\000\061\000\061\000\061\000\061\000\
+    \255\255\255\255\255\255\255\255\255\255\085\000\085\000\062\000\
     \062\000\255\255\255\255\062\000\062\000\062\000\255\255\255\255\
-    \255\255\062\000\062\000\255\255\062\000\062\000\062\000\255\255\
-    \255\255\255\255\255\255\255\255\046\000\255\255\061\000\255\255\
-    \255\255\062\000\046\000\062\000\062\000\062\000\062\000\062\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\046\000\255\255\
-    \255\255\255\255\046\000\255\255\046\000\255\255\063\000\255\255\
-    \046\000\063\000\063\000\063\000\061\000\255\255\061\000\063\000\
-    \063\000\255\255\063\000\063\000\063\000\062\000\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\063\000\
-    \255\255\063\000\063\000\063\000\063\000\063\000\066\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\064\000\255\255\255\255\
-    \064\000\064\000\064\000\062\000\255\255\062\000\064\000\064\000\
-    \255\255\064\000\064\000\064\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\063\000\255\255\255\255\064\000\255\255\
-    \064\000\064\000\064\000\064\000\064\000\255\255\255\255\255\255\
-    \065\000\255\255\255\255\065\000\065\000\065\000\255\255\255\255\
-    \255\255\065\000\065\000\255\255\065\000\065\000\065\000\255\255\
-    \255\255\063\000\255\255\063\000\255\255\255\255\255\255\255\255\
-    \255\255\065\000\064\000\065\000\065\000\065\000\065\000\065\000\
-    \102\000\102\000\102\000\102\000\102\000\102\000\102\000\102\000\
-    \102\000\102\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\102\000\102\000\102\000\102\000\102\000\102\000\255\255\
-    \064\000\255\255\064\000\255\255\255\255\065\000\255\255\255\255\
-    \046\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\102\000\102\000\102\000\102\000\102\000\102\000\255\255\
-    \255\255\255\255\255\255\065\000\255\255\065\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\114\000\
-    \076\000\076\000\114\000\114\000\114\000\255\255\076\000\076\000\
-    \114\000\114\000\076\000\114\000\114\000\114\000\108\000\108\000\
-    \108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\
-    \114\000\076\000\114\000\114\000\114\000\114\000\114\000\108\000\
-    \108\000\108\000\108\000\108\000\108\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \062\000\062\000\062\000\255\255\062\000\062\000\062\000\255\255\
+    \255\255\255\255\255\255\061\000\255\255\061\000\255\255\255\255\
+    \255\255\062\000\255\255\062\000\062\000\062\000\062\000\062\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\076\000\076\000\076\000\114\000\255\255\076\000\108\000\
-    \108\000\108\000\108\000\108\000\108\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\063\000\255\255\255\255\063\000\255\255\
+    \255\255\255\255\255\255\061\000\255\255\061\000\255\255\255\255\
+    \255\255\255\255\255\255\062\000\255\255\062\000\255\255\255\255\
+    \255\255\255\255\063\000\063\000\255\255\255\255\063\000\063\000\
+    \063\000\255\255\063\000\063\000\063\000\063\000\255\255\063\000\
+    \063\000\063\000\064\000\255\255\255\255\064\000\255\255\255\255\
+    \255\255\255\255\048\000\062\000\063\000\062\000\063\000\063\000\
+    \063\000\063\000\063\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\064\000\064\000\255\255\255\255\064\000\064\000\064\000\
+    \255\255\064\000\064\000\064\000\064\000\255\255\064\000\064\000\
+    \064\000\255\255\255\255\255\255\255\255\063\000\063\000\255\255\
+    \063\000\255\255\255\255\064\000\255\255\064\000\064\000\064\000\
+    \064\000\064\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\065\000\255\255\255\255\
+    \065\000\255\255\255\255\255\255\255\255\063\000\063\000\255\255\
+    \063\000\255\255\255\255\255\255\064\000\064\000\255\255\064\000\
+    \255\255\255\255\255\255\255\255\065\000\065\000\255\255\255\255\
+    \065\000\065\000\065\000\255\255\065\000\065\000\065\000\065\000\
+    \255\255\065\000\065\000\065\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\064\000\064\000\065\000\064\000\
+    \065\000\065\000\065\000\065\000\065\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\068\000\068\000\
+    \255\255\068\000\255\255\255\255\255\255\255\255\255\255\068\000\
+    \068\000\255\255\255\255\255\255\255\255\255\255\255\255\065\000\
+    \065\000\255\255\065\000\068\000\255\255\068\000\068\000\068\000\
+    \255\255\068\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\070\000\255\255\255\255\
+    \070\000\255\255\255\255\255\255\255\255\255\255\255\255\065\000\
+    \065\000\255\255\065\000\255\255\068\000\255\255\255\255\068\000\
+    \255\255\255\255\255\255\255\255\070\000\070\000\255\255\255\255\
+    \070\000\070\000\070\000\255\255\255\255\070\000\070\000\070\000\
+    \255\255\070\000\070\000\070\000\071\000\255\255\255\255\071\000\
+    \255\255\255\255\255\255\255\255\068\000\068\000\070\000\255\255\
+    \070\000\070\000\070\000\070\000\070\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\071\000\071\000\255\255\255\255\071\000\
+    \071\000\071\000\255\255\071\000\071\000\071\000\071\000\255\255\
+    \071\000\071\000\071\000\255\255\255\255\255\255\255\255\255\255\
+    \070\000\255\255\070\000\255\255\255\255\071\000\255\255\071\000\
+    \071\000\071\000\071\000\071\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\072\000\
+    \255\255\255\255\072\000\255\255\255\255\255\255\255\255\255\255\
+    \070\000\255\255\070\000\255\255\255\255\255\255\071\000\071\000\
+    \255\255\071\000\255\255\255\255\255\255\255\255\072\000\072\000\
+    \255\255\255\255\072\000\072\000\072\000\255\255\255\255\255\255\
+    \072\000\072\000\255\255\072\000\072\000\072\000\076\000\255\255\
+    \255\255\076\000\255\255\255\255\255\255\255\255\071\000\071\000\
+    \072\000\071\000\072\000\072\000\072\000\072\000\072\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\076\000\076\000\255\255\
+    \255\255\076\000\076\000\076\000\255\255\076\000\076\000\076\000\
+    \076\000\255\255\076\000\076\000\076\000\255\255\255\255\255\255\
+    \255\255\255\255\072\000\255\255\072\000\255\255\255\255\076\000\
+    \255\255\076\000\076\000\076\000\076\000\076\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\077\000\255\255\255\255\077\000\255\255\255\255\255\255\
+    \255\255\255\255\072\000\255\255\072\000\255\255\255\255\255\255\
+    \076\000\076\000\255\255\076\000\255\255\255\255\255\255\255\255\
+    \077\000\077\000\255\255\255\255\077\000\077\000\077\000\255\255\
+    \077\000\077\000\077\000\077\000\255\255\077\000\077\000\077\000\
+    \078\000\255\255\255\255\078\000\255\255\255\255\255\255\255\255\
+    \076\000\076\000\077\000\076\000\077\000\077\000\077\000\077\000\
+    \077\000\255\255\255\255\255\255\255\255\255\255\255\255\078\000\
+    \078\000\255\255\255\255\078\000\078\000\078\000\255\255\078\000\
+    \078\000\078\000\078\000\255\255\078\000\078\000\078\000\255\255\
+    \255\255\255\255\255\255\077\000\077\000\255\255\077\000\255\255\
+    \255\255\078\000\255\255\078\000\078\000\078\000\078\000\078\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\076\000\114\000\076\000\114\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\
-    \076\000\076\000\076\000\076\000\076\000\076\000\113\000\113\000\
-    \113\000\113\000\113\000\113\000\113\000\113\000\113\000\113\000\
-    \077\000\255\255\255\255\077\000\255\255\255\255\255\255\113\000\
-    \113\000\113\000\113\000\113\000\113\000\076\000\255\255\255\255\
+    \255\255\255\255\255\255\079\000\255\255\255\255\079\000\255\255\
+    \255\255\255\255\255\255\077\000\077\000\255\255\077\000\255\255\
+    \255\255\255\255\078\000\078\000\255\255\078\000\255\255\255\255\
+    \255\255\255\255\079\000\079\000\255\255\255\255\079\000\079\000\
+    \079\000\255\255\255\255\079\000\079\000\079\000\255\255\079\000\
+    \079\000\079\000\080\000\255\255\255\255\080\000\255\255\255\255\
+    \255\255\255\255\078\000\078\000\079\000\078\000\079\000\079\000\
+    \079\000\079\000\079\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\080\000\080\000\255\255\255\255\080\000\080\000\080\000\
+    \255\255\255\255\255\255\080\000\080\000\255\255\080\000\080\000\
+    \080\000\255\255\255\255\255\255\255\255\255\255\079\000\255\255\
+    \079\000\255\255\255\255\080\000\255\255\080\000\080\000\080\000\
+    \080\000\080\000\255\255\255\255\255\255\086\000\255\255\255\255\
+    \086\000\086\000\086\000\255\255\255\255\086\000\086\000\086\000\
+    \255\255\086\000\086\000\086\000\255\255\255\255\079\000\255\255\
+    \079\000\255\255\255\255\255\255\255\255\080\000\086\000\080\000\
+    \086\000\086\000\086\000\086\000\086\000\255\255\255\255\255\255\
+    \255\255\255\255\087\000\255\255\255\255\087\000\087\000\087\000\
+    \255\255\255\255\087\000\087\000\087\000\255\255\087\000\087\000\
+    \087\000\255\255\255\255\255\255\255\255\080\000\255\255\080\000\
+    \086\000\086\000\086\000\087\000\255\255\087\000\087\000\087\000\
+    \087\000\087\000\255\255\255\255\255\255\255\255\255\255\088\000\
+    \255\255\255\255\088\000\088\000\088\000\255\255\255\255\088\000\
+    \088\000\088\000\255\255\088\000\088\000\088\000\255\255\255\255\
+    \086\000\086\000\086\000\255\255\255\255\087\000\087\000\087\000\
+    \088\000\255\255\088\000\088\000\088\000\088\000\088\000\255\255\
+    \255\255\255\255\255\255\255\255\089\000\255\255\255\255\089\000\
+    \089\000\089\000\255\255\255\255\089\000\089\000\089\000\255\255\
+    \089\000\089\000\089\000\255\255\255\255\087\000\087\000\087\000\
+    \255\255\255\255\088\000\088\000\088\000\089\000\255\255\089\000\
+    \089\000\089\000\089\000\089\000\255\255\255\255\255\255\255\255\
+    \255\255\090\000\255\255\255\255\090\000\090\000\090\000\255\255\
+    \255\255\090\000\090\000\090\000\255\255\090\000\090\000\090\000\
+    \255\255\255\255\088\000\088\000\088\000\255\255\255\255\089\000\
+    \089\000\089\000\090\000\255\255\090\000\090\000\090\000\090\000\
+    \090\000\255\255\255\255\255\255\255\255\255\255\091\000\255\255\
+    \255\255\091\000\091\000\091\000\255\255\255\255\091\000\091\000\
+    \091\000\255\255\091\000\091\000\091\000\255\255\255\255\089\000\
+    \089\000\089\000\255\255\255\255\090\000\090\000\090\000\091\000\
+    \255\255\091\000\091\000\091\000\091\000\091\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\092\000\
+    \092\000\255\255\255\255\092\000\255\255\255\255\255\255\255\255\
+    \092\000\092\000\255\255\255\255\090\000\090\000\090\000\255\255\
+    \255\255\091\000\091\000\091\000\092\000\255\255\092\000\092\000\
+    \092\000\255\255\092\000\255\255\255\255\255\255\255\255\255\255\
+    \093\000\255\255\255\255\093\000\093\000\093\000\255\255\255\255\
+    \093\000\093\000\093\000\255\255\093\000\093\000\093\000\255\255\
+    \255\255\091\000\091\000\091\000\255\255\255\255\255\255\092\000\
+    \092\000\093\000\255\255\093\000\093\000\093\000\093\000\093\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \077\000\255\255\255\255\255\255\255\255\077\000\077\000\255\255\
-    \077\000\255\255\255\255\255\255\255\255\255\255\255\255\113\000\
-    \113\000\113\000\113\000\113\000\113\000\076\000\255\255\255\255\
-    \255\255\255\255\077\000\255\255\255\255\255\255\076\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\255\255\255\255\255\255\255\255\077\000\255\255\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\094\000\094\000\255\255\255\255\094\000\255\255\255\255\
+    \105\000\105\000\094\000\094\000\105\000\255\255\092\000\092\000\
+    \255\255\105\000\105\000\093\000\093\000\093\000\094\000\255\255\
+    \094\000\094\000\094\000\255\255\094\000\105\000\255\255\105\000\
+    \105\000\105\000\255\255\105\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\106\000\106\000\255\255\
+    \255\255\106\000\255\255\093\000\093\000\093\000\106\000\106\000\
+    \255\255\094\000\094\000\255\255\255\255\255\255\255\255\255\255\
+    \105\000\105\000\106\000\255\255\106\000\106\000\106\000\255\255\
+    \106\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\107\000\107\000\255\255\255\255\107\000\255\255\
+    \094\000\094\000\255\255\107\000\107\000\255\255\255\255\105\000\
+    \105\000\255\255\255\255\255\255\255\255\106\000\106\000\107\000\
+    \255\255\107\000\107\000\107\000\255\255\107\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\108\000\
+    \108\000\255\255\255\255\108\000\255\255\255\255\109\000\109\000\
+    \108\000\108\000\109\000\255\255\106\000\106\000\255\255\109\000\
+    \109\000\255\255\107\000\107\000\108\000\255\255\108\000\108\000\
+    \108\000\255\255\108\000\109\000\255\255\109\000\109\000\109\000\
+    \255\255\109\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\110\000\110\000\255\255\255\255\110\000\
+    \255\255\107\000\107\000\255\255\110\000\110\000\255\255\108\000\
+    \108\000\255\255\255\255\255\255\255\255\255\255\109\000\109\000\
+    \110\000\255\255\110\000\110\000\110\000\255\255\110\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \111\000\111\000\255\255\255\255\111\000\255\255\108\000\108\000\
+    \255\255\111\000\111\000\255\255\255\255\109\000\109\000\255\255\
+    \255\255\255\255\255\255\110\000\110\000\111\000\255\255\111\000\
+    \111\000\111\000\255\255\111\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\112\000\112\000\255\255\
+    \112\000\255\255\255\255\255\255\255\255\255\255\112\000\112\000\
+    \255\255\255\255\110\000\110\000\255\255\255\255\255\255\255\255\
+    \111\000\111\000\112\000\255\255\112\000\112\000\112\000\255\255\
+    \112\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \113\000\113\000\255\255\113\000\255\255\255\255\255\255\255\255\
+    \255\255\113\000\113\000\255\255\255\255\255\255\255\255\111\000\
+    \111\000\255\255\255\255\112\000\255\255\113\000\112\000\113\000\
+    \113\000\113\000\255\255\113\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\114\000\114\000\255\255\114\000\255\255\
+    \115\000\115\000\255\255\115\000\114\000\114\000\255\255\255\255\
+    \255\255\115\000\115\000\112\000\112\000\255\255\113\000\255\255\
+    \114\000\113\000\114\000\114\000\114\000\115\000\114\000\115\000\
+    \115\000\115\000\255\255\115\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\116\000\116\000\255\255\116\000\255\255\
+    \255\255\255\255\255\255\255\255\116\000\116\000\113\000\113\000\
+    \255\255\114\000\255\255\255\255\114\000\255\255\115\000\255\255\
+    \116\000\115\000\116\000\116\000\116\000\255\255\116\000\255\255\
+    \255\255\255\255\117\000\255\255\255\255\117\000\117\000\117\000\
+    \255\255\255\255\117\000\117\000\117\000\255\255\117\000\117\000\
+    \117\000\114\000\114\000\255\255\255\255\255\255\115\000\115\000\
+    \255\255\116\000\255\255\117\000\116\000\117\000\117\000\117\000\
+    \117\000\117\000\255\255\255\255\255\255\255\255\255\255\118\000\
+    \255\255\255\255\118\000\118\000\118\000\255\255\255\255\118\000\
+    \118\000\118\000\255\255\118\000\118\000\118\000\255\255\255\255\
+    \255\255\116\000\116\000\255\255\255\255\117\000\117\000\117\000\
+    \118\000\255\255\118\000\118\000\118\000\118\000\118\000\255\255\
+    \255\255\255\255\255\255\255\255\119\000\255\255\255\255\119\000\
+    \119\000\119\000\255\255\255\255\119\000\119\000\119\000\255\255\
+    \119\000\119\000\119\000\255\255\255\255\117\000\117\000\117\000\
+    \255\255\255\255\118\000\118\000\118\000\119\000\255\255\119\000\
+    \119\000\119\000\119\000\119\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\120\000\255\255\255\255\120\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\118\000\118\000\118\000\255\255\255\255\119\000\
+    \119\000\119\000\255\255\120\000\255\255\255\255\255\255\255\255\
+    \120\000\120\000\255\255\120\000\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\255\255\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\255\255\077\000\077\000\
-    \077\000\077\000\077\000\077\000\077\000\077\000\077\000\081\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\255\255\255\255\255\255\255\255\081\000\
-    \255\255\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\255\255\255\255\255\255\255\255\086\000\
-    \255\255\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\255\255\255\255\255\255\255\255\255\255\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\255\255\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\255\255\
-    \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\255\255\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\255\255\
-    \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\255\255\255\255\255\255\255\255\087\000\255\255\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\255\255\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\088\000\087\000\
-    \087\000\087\000\087\000\087\000\087\000\087\000\087\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\255\255\255\255\088\000\255\255\255\255\255\255\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\255\255\255\255\255\255\255\255\088\000\255\255\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\255\255\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\089\000\088\000\
-    \088\000\088\000\088\000\088\000\088\000\088\000\088\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\255\255\255\255\089\000\255\255\255\255\255\255\255\255\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\255\255\255\255\255\255\255\255\089\000\255\255\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\255\255\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\255\255\089\000\
-    \089\000\089\000\089\000\089\000\089\000\089\000\089\000\090\000\
-    \255\255\090\000\255\255\255\255\106\000\255\255\090\000\106\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\090\000\
-    \090\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\
-    \090\000\255\255\106\000\255\255\106\000\255\255\255\255\255\255\
-    \255\255\106\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\106\000\106\000\106\000\106\000\106\000\106\000\
-    \106\000\106\000\106\000\106\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\090\000\255\255\255\255\255\255\255\255\
-    \255\255\090\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\090\000\255\255\255\255\
-    \255\255\090\000\255\255\090\000\255\255\255\255\106\000\090\000\
-    \255\255\255\255\255\255\255\255\106\000\115\000\255\255\255\255\
-    \115\000\115\000\115\000\255\255\255\255\255\255\115\000\115\000\
-    \106\000\115\000\115\000\115\000\106\000\255\255\106\000\255\255\
-    \255\255\255\255\106\000\255\255\255\255\255\255\115\000\255\255\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\255\255\
-    \255\255\255\255\115\000\115\000\255\255\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\255\255\
-    \115\000\255\255\115\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\106\000\255\255\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\255\255\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\255\255\115\000\115\000\115\000\115\000\
-    \115\000\115\000\115\000\115\000\116\000\255\255\255\255\116\000\
-    \116\000\116\000\255\255\255\255\255\255\116\000\116\000\255\255\
-    \116\000\116\000\116\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\116\000\255\255\116\000\
-    \116\000\116\000\116\000\116\000\255\255\255\255\255\255\255\255\
-    \117\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\255\255\255\255\117\000\255\255\255\255\
-    \255\255\116\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\255\255\255\255\255\255\116\000\
-    \117\000\116\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \255\255\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \255\255\117\000\117\000\117\000\117\000\117\000\117\000\117\000\
-    \117\000\118\000\255\255\255\255\118\000\118\000\118\000\255\255\
-    \255\255\255\255\118\000\118\000\255\255\118\000\118\000\118\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\118\000\255\255\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\255\255\255\255\255\255\118\000\118\000\
-    \255\255\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\255\255\118\000\255\255\118\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\255\255\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\255\255\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \119\000\255\255\255\255\119\000\119\000\119\000\255\255\255\255\
-    \255\255\119\000\119\000\255\255\119\000\119\000\119\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\119\000\255\255\119\000\119\000\119\000\119\000\119\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\120\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\255\255\255\255\120\000\255\255\119\000\255\255\120\000\
+    \255\255\255\255\255\255\255\255\255\255\120\000\255\255\119\000\
+    \119\000\119\000\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\255\255\119\000\255\255\119\000\120\000\255\255\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
+    \120\000\120\000\120\000\120\000\255\255\255\255\255\255\255\255\
+    \120\000\255\255\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\255\255\255\255\255\255\255\255\121\000\255\255\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\255\255\255\255\255\255\255\255\255\255\120\000\
+    \120\000\120\000\120\000\120\000\145\000\145\000\145\000\145\000\
+    \145\000\145\000\145\000\145\000\145\000\145\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\145\000\145\000\145\000\
+    \145\000\145\000\145\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\145\000\145\000\145\000\
+    \145\000\145\000\145\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\255\255\120\000\
+    \255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
     \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\255\255\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\255\255\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\122\000\121\000\
-    \121\000\121\000\121\000\121\000\121\000\121\000\121\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\255\255\255\255\122\000\255\255\255\255\255\255\255\255\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\255\255\255\255\255\255\255\255\122\000\255\255\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\255\255\255\255\255\255\255\255\128\000\255\255\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\255\255\255\255\255\255\255\255\255\255\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\255\255\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\255\255\122\000\
-    \122\000\122\000\122\000\122\000\122\000\122\000\122\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\255\255\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\255\255\128\000\
-    \128\000\128\000\128\000\128\000\128\000\128\000\128\000\129\000\
-    \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
-    \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
+    \255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
+    \120\000\120\000\124\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\255\255\255\255\
+    \255\255\255\255\124\000\255\255\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\129\000\129\000\129\000\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
-    \129\000\255\255\255\255\255\255\255\255\129\000\255\255\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
+    \129\000\129\000\129\000\129\000\129\000\129\000\255\255\255\255\
+    \255\255\255\255\129\000\255\255\129\000\129\000\129\000\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
-    \129\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\129\000\129\000\
+    \129\000\129\000\129\000\129\000\129\000\129\000\255\255\255\255\
+    \255\255\255\255\255\255\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\255\255\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\255\255\124\000\124\000\124\000\124\000\124\000\
+    \124\000\124\000\124\000\129\000\129\000\129\000\129\000\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
-    \129\000\129\000\129\000\129\000\129\000\255\255\129\000\129\000\
+    \129\000\129\000\255\255\129\000\129\000\129\000\129\000\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
     \129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
-    \129\000\129\000\129\000\129\000\129\000\130\000\129\000\129\000\
-    \129\000\129\000\129\000\129\000\129\000\129\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \255\255\255\255\130\000\255\255\255\255\255\255\130\000\130\000\
+    \129\000\129\000\255\255\129\000\129\000\129\000\129\000\129\000\
+    \129\000\129\000\129\000\130\000\130\000\130\000\130\000\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
+    \130\000\130\000\130\000\130\000\130\000\255\255\255\255\255\255\
+    \255\255\130\000\255\255\130\000\130\000\130\000\130\000\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\255\255\255\255\255\255\255\255\130\000\255\255\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \130\000\130\000\130\000\130\000\130\000\151\000\151\000\151\000\
+    \151\000\151\000\151\000\151\000\151\000\151\000\151\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\151\000\151\000\
+    \151\000\151\000\151\000\151\000\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\151\000\151\000\
+    \151\000\151\000\151\000\151\000\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\130\000\130\000\
+    \255\255\255\255\130\000\130\000\130\000\130\000\130\000\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\255\255\130\000\130\000\
+    \130\000\255\255\130\000\130\000\130\000\130\000\130\000\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
     \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\131\000\130\000\130\000\
-    \130\000\130\000\130\000\130\000\130\000\130\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \255\255\255\255\131\000\255\255\255\255\255\255\255\255\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \130\000\131\000\130\000\130\000\130\000\130\000\130\000\130\000\
+    \130\000\130\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\131\000\131\000\255\255\255\255\131\000\255\255\
+    \255\255\255\255\131\000\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\255\255\255\255\255\255\255\255\131\000\255\255\131\000\
+    \131\000\131\000\131\000\131\000\131\000\255\255\255\255\255\255\
+    \255\255\131\000\255\255\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \131\000\131\000\131\000\131\000\131\000\156\000\156\000\156\000\
+    \156\000\156\000\156\000\156\000\156\000\156\000\156\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\156\000\156\000\
+    \156\000\156\000\156\000\156\000\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\156\000\156\000\
+    \156\000\156\000\156\000\156\000\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\255\255\131\000\131\000\
+    \255\255\255\255\131\000\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\255\255\131\000\131\000\
+    \131\000\255\255\131\000\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
     \131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\255\255\131\000\131\000\
-    \131\000\131\000\131\000\131\000\131\000\131\000\132\000\255\255\
-    \255\255\132\000\255\255\255\255\255\255\255\255\255\255\255\255\
-    \132\000\255\255\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\132\000\132\000\255\255\255\255\255\255\
+    \131\000\132\000\131\000\131\000\131\000\131\000\131\000\131\000\
+    \131\000\131\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \132\000\132\000\132\000\132\000\255\255\255\255\132\000\255\255\
     \255\255\255\255\255\255\132\000\132\000\132\000\132\000\132\000\
     \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
     \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
     \132\000\132\000\132\000\132\000\132\000\255\255\255\255\255\255\
-    \255\255\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
+    \255\255\132\000\255\255\132\000\132\000\132\000\132\000\132\000\
     \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
     \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
     \132\000\132\000\132\000\132\000\132\000\255\255\255\255\255\255\
@@ -4197,45 +4313,66 @@ module Struct =
     \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
     \132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
     \132\000\255\255\132\000\132\000\132\000\132\000\132\000\132\000\
-    \132\000\132\000\132\000\134\000\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\255\255\
-    \255\255\255\255\255\255\255\255\255\255\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\255\255\
-    \255\255\255\255\255\255\134\000\255\255\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\255\255\
+    \132\000\132\000\133\000\255\255\133\000\255\255\255\255\149\000\
+    \255\255\133\000\149\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\133\000\133\000\133\000\133\000\133\000\133\000\
+    \133\000\133\000\133\000\133\000\255\255\149\000\255\255\149\000\
+    \255\255\255\255\255\255\255\255\149\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\149\000\149\000\149\000\
+    \149\000\149\000\149\000\149\000\149\000\149\000\149\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\133\000\255\255\
+    \255\255\255\255\255\255\255\255\133\000\157\000\255\255\255\255\
+    \157\000\157\000\157\000\255\255\255\255\255\255\157\000\157\000\
+    \133\000\157\000\157\000\157\000\133\000\255\255\133\000\255\255\
+    \255\255\149\000\133\000\255\255\255\255\255\255\157\000\149\000\
+    \157\000\157\000\157\000\157\000\157\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\149\000\255\255\255\255\255\255\149\000\
+    \255\255\149\000\255\255\255\255\255\255\149\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \157\000\255\255\157\000\255\255\255\255\255\255\255\255\255\255\
+    \158\000\255\255\255\255\158\000\158\000\158\000\255\255\255\255\
+    \255\255\158\000\158\000\255\255\158\000\158\000\158\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \157\000\158\000\157\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\255\255\158\000\255\255\158\000\158\000\255\255\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\255\255\158\000\255\255\158\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\149\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\255\255\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\255\255\134\000\134\000\134\000\134\000\
-    \134\000\134\000\134\000\134\000\135\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\135\000\255\255\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \255\255\255\255\255\255\255\255\135\000\255\255\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\255\255\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\255\255\158\000\
+    \158\000\158\000\158\000\158\000\158\000\158\000\158\000\159\000\
+    \255\255\255\255\159\000\159\000\159\000\255\255\255\255\255\255\
+    \159\000\159\000\255\255\159\000\159\000\159\000\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \159\000\255\255\159\000\159\000\159\000\159\000\159\000\255\255\
+    \255\255\255\255\255\255\160\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\255\255\255\255\
+    \160\000\255\255\159\000\255\255\159\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\255\255\
+    \255\255\255\255\159\000\160\000\159\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
@@ -4243,57 +4380,28 @@ module Struct =
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\255\255\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\255\255\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\137\000\135\000\135\000\135\000\
-    \135\000\135\000\135\000\135\000\135\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \255\255\255\255\255\255\255\255\137\000\255\255\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \255\255\255\255\255\255\255\255\255\255\255\255\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \255\255\255\255\255\255\255\255\141\000\255\255\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \255\255\255\255\255\255\255\255\255\255\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\255\255\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\255\255\137\000\137\000\137\000\
-    \137\000\137\000\137\000\137\000\137\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\255\255\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\255\255\141\000\141\000\141\000\
-    \141\000\141\000\141\000\141\000\141\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\255\255\
-    \255\255\255\255\255\255\142\000\255\255\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\255\255\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\255\255\160\000\160\000\160\000\160\000\
+    \160\000\160\000\160\000\160\000\161\000\255\255\255\255\161\000\
+    \161\000\161\000\255\255\255\255\255\255\161\000\161\000\255\255\
+    \161\000\161\000\161\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\161\000\255\255\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\255\255\161\000\
+    \255\255\161\000\161\000\255\255\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\255\255\161\000\
+    \255\255\161\000\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
@@ -4301,24 +4409,96 @@ module Struct =
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\255\255\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\143\000\142\000\142\000\142\000\142\000\
-    \142\000\142\000\142\000\142\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\255\255\255\255\
-    \143\000\255\255\255\255\255\255\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\255\255\
-    \255\255\255\255\255\255\143\000\255\255\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\255\255\
+    \255\255\255\255\255\255\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\255\255\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\255\255\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\162\000\255\255\255\255\162\000\162\000\
+    \162\000\255\255\255\255\255\255\162\000\162\000\255\255\162\000\
+    \162\000\162\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\162\000\255\255\162\000\162\000\
+    \162\000\162\000\162\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\163\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\255\255\162\000\163\000\
+    \162\000\255\255\255\255\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\162\000\255\255\
+    \162\000\255\255\163\000\255\255\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\255\255\255\255\
+    \255\255\255\255\164\000\255\255\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\255\255\255\255\
+    \255\255\255\255\255\255\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\255\255\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\255\255\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\255\255\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\165\000\164\000\164\000\164\000\164\000\164\000\
+    \164\000\164\000\164\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\255\255\255\255\165\000\
+    \255\255\255\255\255\255\255\255\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\255\255\255\255\
+    \255\255\255\255\165\000\255\255\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\255\255\255\255\
+    \255\255\255\255\171\000\255\255\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\255\255\255\255\
+    \255\255\255\255\255\255\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\255\255\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\255\255\165\000\165\000\165\000\165\000\165\000\
+    \165\000\165\000\165\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\255\255\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\255\255\171\000\171\000\171\000\171\000\171\000\
+    \171\000\171\000\171\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\255\255\255\255\255\255\
+    \255\255\172\000\255\255\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
@@ -4327,24 +4507,24 @@ module Struct =
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\255\255\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\144\000\143\000\143\000\143\000\143\000\
-    \143\000\143\000\143\000\143\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\255\255\255\255\
-    \144\000\255\255\255\255\255\255\255\255\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\255\255\
-    \255\255\255\255\255\255\144\000\255\255\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\255\255\
+    \255\255\255\255\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\255\255\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\173\000\172\000\172\000\172\000\172\000\172\000\172\000\
+    \172\000\172\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\255\255\255\255\173\000\255\255\
+    \255\255\255\255\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\255\255\255\255\255\255\
+    \255\255\173\000\255\255\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
@@ -4353,35 +4533,258 @@ module Struct =
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\255\255\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\255\255\144\000\144\000\144\000\144\000\
-    \144\000\144\000\144\000\144\000\255\255";
-                Lexing.lex_base_code =
-                  "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\010\000\036\000\000\000\012\000\000\000\000\000\
-    \002\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\001\000\000\000\000\000\000\000\002\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\041\000\000\000\
-    \249\000\000\000\000\000\039\000\000\000\000\000\000\000\000\000\
+    \255\255\255\255\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\255\255\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\174\000\173\000\173\000\173\000\173\000\173\000\173\000\
+    \173\000\173\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\255\255\255\255\174\000\255\255\
+    \255\255\255\255\255\255\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\255\255\255\255\255\255\
+    \255\255\174\000\255\255\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\255\255\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\255\255\174\000\174\000\174\000\174\000\174\000\174\000\
+    \174\000\174\000\175\000\255\255\255\255\175\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\175\000\255\255\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\255\255\255\255\255\255\255\255\255\255\255\255\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\255\255\255\255\255\255\255\255\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\255\255\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\255\255\175\000\175\000\
+    \175\000\175\000\175\000\175\000\175\000\175\000\175\000\177\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\255\255\255\255\255\255\255\255\177\000\
+    \255\255\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\255\255\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\255\255\
+    \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
+    \178\000\255\255\255\255\255\255\255\255\255\255\255\255\178\000\
+    \255\255\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\255\255\255\255\255\255\255\255\
+    \178\000\255\255\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \255\255\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \180\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
+    \178\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\255\255\255\255\255\255\255\255\
+    \180\000\255\255\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\255\255\255\255\255\255\255\255\
+    \184\000\255\255\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\255\255\255\255\255\255\255\255\
+    \255\255\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \255\255\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \255\255\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
+    \180\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \255\255\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \255\255\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
+    \184\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\255\255\255\255\255\255\255\255\185\000\
+    \255\255\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\255\255\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\186\000\
+    \185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\255\255\255\255\186\000\255\255\255\255\255\255\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\255\255\255\255\255\255\255\255\186\000\
+    \255\255\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\255\255\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\187\000\
+    \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\255\255\255\255\187\000\255\255\255\255\255\255\
+    \255\255\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\255\255\255\255\255\255\255\255\187\000\
+    \255\255\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\255\255\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\255\255\
+    \187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
+    \255\255";
+                Lexing.lex_base_code =
+                  "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000";
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\066\000\101\000\136\000\
+    \171\000\206\000\000\000\000\000\000\000\000\000\241\000\020\001\
+    \055\001\000\000\000\000\018\000\090\001\125\001\160\001\195\001\
+    \230\001\000\000\021\000\026\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\247\001\
+    \040\002\000\000\034\000\000\000\000\000\003\000\000\000\000\000\
+    \049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\
+    \000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\036\002\000\000\244\002\000\000\000\000\061\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000";
                 Lexing.lex_backtrk_code =
                   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -4391,17 +4794,22 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\
-    \000\000\000\000\027\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\039\000\039\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\034\000\000\000\000\000\000\000\000\000\000\000\049\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000";
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\061\000\061\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000";
                 Lexing.lex_default_code =
                   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -4411,39 +4819,107 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\041\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000";
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000";
                 Lexing.lex_trans_code =
                   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\001\000\000\000\036\000\036\000\000\000\036\000\000\000\
+    \000\000\001\000\000\000\058\000\058\000\000\000\058\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \001\000\000\000\000\000\001\000\022\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\007\000\001\000\000\000\000\000\
+    \001\000\000\000\000\000\001\000\007\000\044\000\000\000\007\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
+    \004\000\004\000\000\000\007\000\012\000\000\000\000\000\012\000\
+    \012\000\012\000\000\000\000\000\000\000\000\000\012\000\000\000\
+    \012\000\012\000\012\000\007\000\000\000\000\000\007\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\
+    \012\000\012\000\012\000\012\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\007\000\015\000\000\000\000\000\015\000\015\000\
+    \015\000\000\000\000\000\000\000\015\000\015\000\000\000\015\000\
+    \015\000\015\000\000\000\000\000\000\000\000\000\000\000\012\000\
+    \000\000\012\000\000\000\000\000\015\000\000\000\015\000\015\000\
+    \015\000\015\000\015\000\000\000\000\000\000\000\012\000\000\000\
+    \000\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
+    \012\000\000\000\012\000\012\000\012\000\000\000\000\000\012\000\
+    \000\000\012\000\000\000\000\000\000\000\000\000\015\000\012\000\
+    \015\000\012\000\012\000\012\000\012\000\012\000\000\000\000\000\
+    \000\000\012\000\000\000\000\000\012\000\012\000\012\000\000\000\
+    \000\000\000\000\012\000\012\000\000\000\012\000\012\000\012\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\
+    \015\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
+    \012\000\000\000\000\000\000\000\012\000\000\000\000\000\012\000\
+    \012\000\012\000\000\000\000\000\000\000\012\000\012\000\000\000\
+    \012\000\012\000\012\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\012\000\000\000\012\000\012\000\012\000\012\000\012\000\
+    \012\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
+    \000\000\000\000\012\000\012\000\012\000\000\000\000\000\000\000\
+    \012\000\012\000\000\000\012\000\012\000\012\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\012\000\000\000\012\000\012\000\
+    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
+    \000\000\000\000\012\000\000\000\000\000\012\000\012\000\012\000\
+    \000\000\000\000\000\000\012\000\012\000\000\000\012\000\012\000\
+    \012\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\
+    \000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
+    \012\000\012\000\000\000\000\000\000\000\012\000\000\000\000\000\
+    \012\000\012\000\012\000\000\000\000\000\000\000\012\000\012\000\
+    \000\000\012\000\012\000\012\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\012\000\000\000\012\000\012\000\012\000\012\000\
+    \012\000\012\000\012\000\012\000\012\000\000\000\000\000\000\000\
+    \012\000\000\000\000\000\012\000\012\000\012\000\000\000\000\000\
+    \000\000\012\000\012\000\000\000\012\000\012\000\012\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\
+    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
+    \000\000\000\000\000\000\012\000\000\000\000\000\012\000\012\000\
+    \012\000\000\000\000\000\000\000\012\000\012\000\000\000\012\000\
+    \012\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \012\000\000\000\012\000\012\000\012\000\012\000\012\000\012\000\
+    \012\000\012\000\012\000\000\000\000\000\000\000\012\000\000\000\
+    \000\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
+    \012\000\000\000\012\000\012\000\012\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\012\000\000\000\012\000\012\000\012\000\
+    \012\000\012\000\012\000\012\000\012\000\012\000\000\000\000\000\
+    \000\000\012\000\000\000\000\000\012\000\012\000\012\000\000\000\
+    \000\000\000\000\012\000\012\000\000\000\012\000\012\000\012\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\
+    \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
+    \012\000\000\000\000\000\000\000\015\000\000\000\000\000\015\000\
+    \015\000\015\000\000\000\000\000\000\000\015\000\015\000\000\000\
+    \015\000\015\000\015\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\012\000\000\000\012\000\012\000\015\000\012\000\015\000\
+    \015\000\015\000\015\000\015\000\000\000\000\000\000\000\015\000\
+    \000\000\000\000\015\000\015\000\015\000\000\000\000\000\000\000\
+    \015\000\015\000\000\000\015\000\015\000\015\000\000\000\000\000\
+    \000\000\029\000\000\000\000\000\012\000\000\000\012\000\015\000\
+    \015\000\015\000\015\000\015\000\015\000\015\000\015\000\004\000\
     \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
-    \004\000\004\000\004\000\004\000\001\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\000\000\000\000\004\000\004\000\004\000\004\000\
-    \004\000\004\000\004\000\004\000\004\000\004\000\000\000\000\000\
+    \004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\
+    \000\000\015\000\015\000\000\000\015\000\000\000\000\000\000\000\
+    \001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\000\000\000\000\000\000\000\000\
-    \036\000\000\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\000\000\000\000\000\000\000\000\
+    \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
+    \004\000\004\000\015\000\000\000\015\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
+    \000\000\000\000\000\000\058\000\000\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -4452,24 +4928,24 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \000\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\000\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\000\000\000\000\000\000\000\000\
-    \036\000\000\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
+    \000\000\000\000\000\000\058\000\000\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
@@ -4478,37 +4954,100 @@ module Struct =
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
     \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
-    \000\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \000\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \000\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\
-    \036\000\000\000";
+    \000\000\000\000\000\000\000\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
+    \058\000\058\000\058\000\058\000\000\000";
                 Lexing.lex_check_code =
                   "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\014\000\071\000\106\000\110\000\071\000\106\000\255\255\
+    \255\255\016\000\100\000\149\000\153\000\100\000\149\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \014\000\255\255\071\000\000\000\072\000\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\066\000\067\000\255\255\255\255\
-    \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\
-    \014\000\014\000\066\000\066\000\066\000\066\000\066\000\066\000\
-    \066\000\066\000\066\000\066\000\067\000\255\255\255\255\255\255\
+    \016\000\255\255\100\000\000\000\019\000\101\000\255\255\019\000\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\255\255\255\255\067\000\067\000\067\000\067\000\
-    \067\000\067\000\067\000\067\000\067\000\067\000\255\255\255\255\
+    \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\
+    \016\000\016\000\255\255\019\000\019\000\255\255\255\255\019\000\
+    \019\000\019\000\255\255\255\255\255\255\255\255\019\000\255\255\
+    \019\000\019\000\019\000\061\000\255\255\255\255\061\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\019\000\255\255\019\000\
+    \019\000\019\000\019\000\019\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\061\000\061\000\255\255\255\255\061\000\061\000\
+    \061\000\255\255\255\255\255\255\061\000\061\000\255\255\061\000\
+    \061\000\061\000\255\255\255\255\255\255\255\255\255\255\019\000\
+    \255\255\019\000\255\255\255\255\061\000\255\255\061\000\061\000\
+    \061\000\061\000\061\000\255\255\255\255\255\255\062\000\255\255\
+    \255\255\062\000\062\000\062\000\255\255\255\255\255\255\062\000\
+    \062\000\255\255\062\000\062\000\062\000\255\255\255\255\019\000\
+    \255\255\019\000\255\255\255\255\255\255\255\255\061\000\062\000\
+    \061\000\062\000\062\000\062\000\062\000\062\000\255\255\255\255\
+    \255\255\063\000\255\255\255\255\063\000\063\000\063\000\255\255\
+    \255\255\255\255\063\000\063\000\255\255\063\000\063\000\063\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\061\000\255\255\
+    \061\000\062\000\063\000\062\000\063\000\063\000\063\000\063\000\
+    \063\000\255\255\255\255\255\255\064\000\255\255\255\255\064\000\
+    \064\000\064\000\255\255\255\255\255\255\064\000\064\000\255\255\
+    \064\000\064\000\064\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\062\000\255\255\062\000\063\000\064\000\063\000\064\000\
+    \064\000\064\000\064\000\064\000\255\255\255\255\255\255\065\000\
+    \255\255\255\255\065\000\065\000\065\000\255\255\255\255\255\255\
+    \065\000\065\000\255\255\065\000\065\000\065\000\255\255\255\255\
+    \100\000\255\255\255\255\255\255\063\000\255\255\063\000\064\000\
+    \065\000\064\000\065\000\065\000\065\000\065\000\065\000\255\255\
+    \255\255\255\255\070\000\255\255\255\255\070\000\070\000\070\000\
+    \255\255\255\255\255\255\070\000\070\000\255\255\070\000\070\000\
+    \070\000\255\255\255\255\255\255\255\255\255\255\255\255\064\000\
+    \255\255\064\000\065\000\070\000\065\000\070\000\070\000\070\000\
+    \070\000\070\000\255\255\255\255\255\255\071\000\255\255\255\255\
+    \071\000\071\000\071\000\255\255\255\255\255\255\071\000\071\000\
+    \255\255\071\000\071\000\071\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\065\000\255\255\065\000\070\000\071\000\070\000\
+    \071\000\071\000\071\000\071\000\071\000\255\255\255\255\255\255\
+    \072\000\255\255\255\255\072\000\072\000\072\000\255\255\255\255\
+    \255\255\072\000\072\000\255\255\072\000\072\000\072\000\255\255\
+    \255\255\255\255\255\255\255\255\255\255\070\000\255\255\070\000\
+    \071\000\072\000\071\000\072\000\072\000\072\000\072\000\072\000\
+    \255\255\255\255\255\255\076\000\255\255\255\255\076\000\076\000\
+    \076\000\255\255\255\255\255\255\076\000\076\000\255\255\076\000\
+    \076\000\076\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \071\000\255\255\071\000\072\000\076\000\072\000\076\000\076\000\
+    \076\000\076\000\076\000\255\255\255\255\255\255\077\000\255\255\
+    \255\255\077\000\077\000\077\000\255\255\255\255\255\255\077\000\
+    \077\000\255\255\077\000\077\000\077\000\255\255\255\255\255\255\
+    \255\255\255\255\255\255\072\000\255\255\072\000\076\000\077\000\
+    \076\000\077\000\077\000\077\000\077\000\077\000\255\255\255\255\
+    \255\255\078\000\255\255\255\255\078\000\078\000\078\000\255\255\
+    \255\255\255\255\078\000\078\000\255\255\078\000\078\000\078\000\
+    \255\255\255\255\255\255\255\255\255\255\255\255\076\000\255\255\
+    \076\000\077\000\078\000\077\000\078\000\078\000\078\000\078\000\
+    \078\000\255\255\255\255\255\255\079\000\255\255\255\255\079\000\
+    \079\000\079\000\255\255\255\255\255\255\079\000\079\000\255\255\
+    \079\000\079\000\079\000\255\255\255\255\255\255\255\255\255\255\
+    \255\255\077\000\255\255\077\000\078\000\079\000\078\000\079\000\
+    \079\000\079\000\079\000\079\000\255\255\255\255\255\255\080\000\
+    \255\255\255\255\080\000\080\000\080\000\255\255\255\255\255\255\
+    \080\000\080\000\255\255\080\000\080\000\080\000\255\255\255\255\
+    \255\255\095\000\255\255\255\255\078\000\255\255\078\000\079\000\
+    \080\000\079\000\080\000\080\000\080\000\080\000\080\000\095\000\
+    \095\000\095\000\095\000\095\000\095\000\095\000\095\000\095\000\
+    \095\000\096\000\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\079\000\
+    \255\255\079\000\080\000\255\255\080\000\255\255\255\255\255\255\
+    \096\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\255\255\255\255\255\255\255\255\
-    \118\000\255\255\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\255\255\255\255\255\255\255\255\
+    \096\000\096\000\096\000\096\000\096\000\096\000\096\000\096\000\
+    \096\000\096\000\080\000\255\255\080\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\255\255\
+    \255\255\255\255\255\255\161\000\255\255\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
@@ -4517,24 +5056,24 @@ module Struct =
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \071\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \120\000\118\000\118\000\118\000\118\000\118\000\118\000\118\000\
-    \118\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\255\255\255\255\255\255\255\255\255\255\
-    \255\255\255\255\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\255\255\255\255\255\255\255\255\
-    \120\000\255\255\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\255\255\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\163\000\161\000\161\000\161\000\161\000\
+    \161\000\161\000\161\000\161\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\255\255\
+    \255\255\255\255\255\255\163\000\255\255\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
@@ -4543,22 +5082,24 @@ module Struct =
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
     \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
-    \255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
-    \120\000\255\255";
+    \255\255\255\255\255\255\255\255\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\255\255\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\255\255\163\000\163\000\163\000\163\000\
+    \163\000\163\000\163\000\163\000\255\255";
                 Lexing.lex_code =
-                  "\255\004\255\255\005\255\255\007\255\006\255\255\003\255\000\004\
-    \001\005\255\007\255\255\006\255\007\255\255\000\004\001\005\003\
-    \006\002\007\255\001\255\255\000\001\255";
+                  "\255\004\255\255\009\255\255\006\255\005\255\255\007\255\255\008\
+    \255\255\000\007\255\000\006\001\008\255\000\005\255\011\255\010\
+    \255\255\003\255\000\004\001\009\255\011\255\255\010\255\011\255\
+    \255\000\004\001\009\003\010\002\011\255\001\255\255\000\001\255\
+    ";
               }
             let rec token c lexbuf =
-              (lexbuf.Lexing.lex_mem <- Array.create 8 (-1);
+              (lexbuf.Lexing.lex_mem <- Array.create 12 (-1);
                __ocaml_lex_token_rec c lexbuf 0)
             and __ocaml_lex_token_rec c lexbuf __ocaml_lex_state =
               match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state
@@ -4683,7 +5224,6 @@ module Struct =
                   then
                     QUOTATION
                       {
-                        
                         q_name = "";
                         q_loc = "";
                         q_shift = 2;
@@ -4710,45 +5250,65 @@ module Struct =
                     (update_loc c name inum true 0;
                      LINE_DIRECTIVE (inum, name))
               | 23 ->
+                  let op =
+                    Lexing.sub_lexeme_char lexbuf
+                      (lexbuf.Lexing.lex_start_pos + 1)
+                  in ESCAPED_IDENT (String.make 1 op)
+              | 24 ->
+                  let op =
+                    Lexing.sub_lexeme lexbuf
+                      (lexbuf.Lexing.lex_start_pos + 1)
+                      (lexbuf.Lexing.lex_curr_pos + (-1))
+                  in ESCAPED_IDENT op
+              | 25 ->
+                  let op =
+                    Lexing.sub_lexeme lexbuf
+                      (lexbuf.Lexing.lex_start_pos + 1)
+                      lexbuf.Lexing.lex_mem.(0)
+                  in ESCAPED_IDENT op
+              | 26 ->
+                  let op =
+                    Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
+                      (lexbuf.Lexing.lex_curr_pos + (-1))
+                  in ESCAPED_IDENT op
+              | 27 ->
+                  let op =
+                    Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
+                      lexbuf.Lexing.lex_mem.(1)
+                  in ESCAPED_IDENT op
+              | 28 ->
                   let x =
                     Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
                       lexbuf.Lexing.lex_curr_pos
                   in SYMBOL x
-              | 24 ->
-                  if quotations c
+              | 29 ->
+                  if antiquots c
                   then with_curr_loc dollar (shift 1 c)
                   else parse (symbolchar_star "$") c
-              | 25 ->
+              | 30 ->
                   let x =
                     Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
                       lexbuf.Lexing.lex_curr_pos
                   in SYMBOL x
-              | 26 ->
-                  let x =
-                    Lexing.sub_lexeme lexbuf
-                      (lexbuf.Lexing.lex_start_pos + 1)
-                      lexbuf.Lexing.lex_curr_pos
-                  in ESCAPED_IDENT x
-              | 27 ->
+              | 31 ->
                   let pos = lexbuf.lex_curr_p
                   in
                     (lexbuf.lex_curr_p <-
                        {
                          (pos)
                          with
-                         
                          pos_bol = pos.pos_bol + 1;
                          pos_cnum = pos.pos_cnum + 1;
                        };
                      EOI)
-              | 28 ->
+              | 32 ->
                   let c =
                     Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos
                   in err (Illegal_character c) (Loc.of_lexbuf lexbuf)
               | __ocaml_lex_state ->
                   (lexbuf.Lexing.refill_buff lexbuf;
                    __ocaml_lex_token_rec c lexbuf __ocaml_lex_state)
-            and comment c lexbuf = __ocaml_lex_comment_rec c lexbuf 77
+            and comment c lexbuf = __ocaml_lex_comment_rec c lexbuf 120
             and __ocaml_lex_comment_rec c lexbuf __ocaml_lex_state =
               match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
               with
@@ -4782,7 +5342,7 @@ module Struct =
                    __ocaml_lex_comment_rec c lexbuf __ocaml_lex_state)
             and string c lexbuf =
               (lexbuf.Lexing.lex_mem <- Array.create 2 (-1);
-               __ocaml_lex_string_rec c lexbuf 104)
+               __ocaml_lex_string_rec c lexbuf 147)
             and __ocaml_lex_string_rec c lexbuf __ocaml_lex_state =
               match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state
                       lexbuf
@@ -4816,7 +5376,7 @@ module Struct =
                   (lexbuf.Lexing.refill_buff lexbuf;
                    __ocaml_lex_string_rec c lexbuf __ocaml_lex_state)
             and symbolchar_star beginning c lexbuf =
-              __ocaml_lex_symbolchar_star_rec beginning c lexbuf 114
+              __ocaml_lex_symbolchar_star_rec beginning c lexbuf 157
             and
               __ocaml_lex_symbolchar_star_rec beginning c lexbuf
                                               __ocaml_lex_state =
@@ -4834,7 +5394,7 @@ module Struct =
                    __ocaml_lex_symbolchar_star_rec beginning c lexbuf
                      __ocaml_lex_state)
             and maybe_quotation_at c lexbuf =
-              __ocaml_lex_maybe_quotation_at_rec c lexbuf 115
+              __ocaml_lex_maybe_quotation_at_rec c lexbuf 158
             and
               __ocaml_lex_maybe_quotation_at_rec c lexbuf __ocaml_lex_state =
               match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
@@ -4856,7 +5416,7 @@ module Struct =
                      __ocaml_lex_state)
             and maybe_quotation_colon c lexbuf =
               (lexbuf.Lexing.lex_mem <- Array.create 2 (-1);
-               __ocaml_lex_maybe_quotation_colon_rec c lexbuf 118)
+               __ocaml_lex_maybe_quotation_colon_rec c lexbuf 161)
             and
               __ocaml_lex_maybe_quotation_colon_rec c lexbuf
                                                     __ocaml_lex_state =
@@ -4889,7 +5449,7 @@ module Struct =
                   (lexbuf.Lexing.refill_buff lexbuf;
                    __ocaml_lex_maybe_quotation_colon_rec c lexbuf
                      __ocaml_lex_state)
-            and quotation c lexbuf = __ocaml_lex_quotation_rec c lexbuf 124
+            and quotation c lexbuf = __ocaml_lex_quotation_rec c lexbuf 167
             and __ocaml_lex_quotation_rec c lexbuf __ocaml_lex_state =
               match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
               with
@@ -4901,7 +5461,7 @@ module Struct =
               | __ocaml_lex_state ->
                   (lexbuf.Lexing.refill_buff lexbuf;
                    __ocaml_lex_quotation_rec c lexbuf __ocaml_lex_state)
-            and dollar c lexbuf = __ocaml_lex_dollar_rec c lexbuf 132
+            and dollar c lexbuf = __ocaml_lex_dollar_rec c lexbuf 175
             and __ocaml_lex_dollar_rec c lexbuf __ocaml_lex_state =
               match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
               with
@@ -4918,7 +5478,7 @@ module Struct =
                   (lexbuf.Lexing.refill_buff lexbuf;
                    __ocaml_lex_dollar_rec c lexbuf __ocaml_lex_state)
             and antiquot name c lexbuf =
-              __ocaml_lex_antiquot_rec name c lexbuf 138
+              __ocaml_lex_antiquot_rec name c lexbuf 181
             and __ocaml_lex_antiquot_rec name c lexbuf __ocaml_lex_state =
               match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
               with
@@ -4954,8 +5514,8 @@ module Struct =
                 {
                   (default_context lb)
                   with
-                  
                   loc = Loc.of_lexbuf lb;
+                  antiquots = !Camlp4_config.antiquotations;
                   quotations = quotations;
                 }
               in from_context c
@@ -5005,4958 +5565,11 @@ module Struct =
               "%field0"
             external loc_of_with_constr : with_constr -> Loc.t = "%field0"
             external loc_of_binding : binding -> Loc.t = "%field0"
+            external loc_of_rec_binding : rec_binding -> Loc.t = "%field0"
             external loc_of_module_binding : module_binding -> Loc.t =
               "%field0"
             external loc_of_match_case : match_case -> Loc.t = "%field0"
             external loc_of_ident : ident -> Loc.t = "%field0"
-            module Meta =
-              struct
-                module type META_LOC =
-                  sig
-                    val meta_loc_patt : Loc.t -> Loc.t -> Ast.patt
-                    val meta_loc_expr : Loc.t -> Loc.t -> Ast.expr
-                  end
-                module MetaLoc =
-                  struct
-                    let meta_loc_patt _loc location =
-                      let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
-                      in
-                        Ast.PaApp (_loc,
-                          Ast.PaId (_loc,
-                            Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
-                              Ast.IdLid (_loc, "of_tuple"))),
-                          Ast.PaTup (_loc,
-                            Ast.PaCom (_loc,
-                              Ast.PaStr (_loc, Ast.safe_string_escaped a),
-                              Ast.PaCom (_loc,
-                                Ast.PaCom (_loc,
-                                  Ast.PaCom (_loc,
-                                    Ast.PaCom (_loc,
-                                      Ast.PaCom (_loc,
-                                        Ast.PaCom (_loc,
-                                          Ast.PaInt (_loc, string_of_int b),
-                                          Ast.PaInt (_loc, string_of_int c)),
-                                        Ast.PaInt (_loc, string_of_int d)),
-                                      Ast.PaInt (_loc, string_of_int e)),
-                                    Ast.PaInt (_loc, string_of_int f)),
-                                  Ast.PaInt (_loc, string_of_int g)),
-                                if h
-                                then
-                                  Ast.PaId (_loc, Ast.IdUid (_loc, "True"))
-                                else
-                                  Ast.PaId (_loc, Ast.IdUid (_loc, "False"))))))
-                    let meta_loc_expr _loc location =
-                      let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
-                      in
-                        Ast.ExApp (_loc,
-                          Ast.ExId (_loc,
-                            Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
-                              Ast.IdLid (_loc, "of_tuple"))),
-                          Ast.ExTup (_loc,
-                            Ast.ExCom (_loc,
-                              Ast.ExStr (_loc, Ast.safe_string_escaped a),
-                              Ast.ExCom (_loc,
-                                Ast.ExCom (_loc,
-                                  Ast.ExCom (_loc,
-                                    Ast.ExCom (_loc,
-                                      Ast.ExCom (_loc,
-                                        Ast.ExCom (_loc,
-                                          Ast.ExInt (_loc, string_of_int b),
-                                          Ast.ExInt (_loc, string_of_int c)),
-                                        Ast.ExInt (_loc, string_of_int d)),
-                                      Ast.ExInt (_loc, string_of_int e)),
-                                    Ast.ExInt (_loc, string_of_int f)),
-                                  Ast.ExInt (_loc, string_of_int g)),
-                                if h
-                                then
-                                  Ast.ExId (_loc, Ast.IdUid (_loc, "True"))
-                                else
-                                  Ast.ExId (_loc, Ast.IdUid (_loc, "False"))))))
-                  end
-                module MetaGhostLoc =
-                  struct
-                    let meta_loc_patt _loc _ =
-                      Ast.PaId (_loc,
-                        Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
-                          Ast.IdLid (_loc, "ghost")))
-                    let meta_loc_expr _loc _ =
-                      Ast.ExId (_loc,
-                        Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
-                          Ast.IdLid (_loc, "ghost")))
-                  end
-                module MetaLocVar =
-                  struct
-                    let meta_loc_patt _loc _ =
-                      Ast.PaId (_loc, Ast.IdLid (_loc, !Loc.name))
-                    let meta_loc_expr _loc _ =
-                      Ast.ExId (_loc, Ast.IdLid (_loc, !Loc.name))
-                  end
-                module Make (MetaLoc : META_LOC) =
-                  struct
-                    open MetaLoc
-                    let meta_acc_Loc_t = meta_loc_expr
-                    module Expr =
-                      struct
-                        let meta_string _loc s = Ast.ExStr (_loc, s)
-                        let meta_int _loc s = Ast.ExInt (_loc, s)
-                        let meta_float _loc s = Ast.ExFlo (_loc, s)
-                        let meta_char _loc s = Ast.ExChr (_loc, s)
-                        let meta_bool _loc =
-                          function
-                          | false ->
-                              Ast.ExId (_loc, Ast.IdUid (_loc, "False"))
-                          | true -> Ast.ExId (_loc, Ast.IdUid (_loc, "True"))
-                        let rec meta_list mf_a _loc =
-                          function
-                          | [] -> Ast.ExId (_loc, Ast.IdUid (_loc, "[]"))
-                          | x :: xs ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc, Ast.IdUid (_loc, "::")),
-                                  mf_a _loc x),
-                                meta_list mf_a _loc xs)
-                        let rec meta_binding _loc =
-                          function
-                          | Ast.BiAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.BiEq (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "BiEq"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.BiSem (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "BiSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_binding _loc x1),
-                                meta_binding _loc x2)
-                          | Ast.BiAnd (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "BiAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_binding _loc x1),
-                                meta_binding _loc x2)
-                          | Ast.BiNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "BiNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_class_expr _loc =
-                          function
-                          | Ast.CeAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.CeEq (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeEq"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_class_expr _loc x2)
-                          | Ast.CeAnd (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_class_expr _loc x2)
-                          | Ast.CeTyc (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeTyc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CeStr (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeStr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_class_str_item _loc x2)
-                          | Ast.CeLet (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CeLet"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_meta_bool _loc x1),
-                                  meta_binding _loc x2),
-                                meta_class_expr _loc x3)
-                          | Ast.CeFun (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeFun"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_class_expr _loc x2)
-                          | Ast.CeCon (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CeCon"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_meta_bool _loc x1),
-                                  meta_ident _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CeApp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.CeNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "CeNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_class_sig_item _loc =
-                          function
-                          | Ast.CgAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.CgVir (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CgVir"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CgVal (x0, x1, x2, x3, x4) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExApp (_loc,
-                                        Ast.ExId (_loc,
-                                          Ast.IdAcc (_loc,
-                                            Ast.IdUid (_loc, "Ast"),
-                                            Ast.IdUid (_loc, "CgVal"))),
-                                        meta_acc_Loc_t _loc x0),
-                                      meta_string _loc x1),
-                                    meta_meta_bool _loc x2),
-                                  meta_meta_bool _loc x3),
-                                meta_ctyp _loc x4)
-                          | Ast.CgMth (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CgMth"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CgInh (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "CgInh"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_type _loc x1)
-                          | Ast.CgSem (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CgSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_sig_item _loc x1),
-                                meta_class_sig_item _loc x2)
-                          | Ast.CgCtr (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CgCtr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.CgNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "CgNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_class_str_item _loc =
-                          function
-                          | Ast.CrAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.CrVvr (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CrVvr"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CrVir (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CrVir"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CrVal (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CrVal"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.CrMth (x0, x1, x2, x3, x4) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExApp (_loc,
-                                        Ast.ExId (_loc,
-                                          Ast.IdAcc (_loc,
-                                            Ast.IdUid (_loc, "Ast"),
-                                            Ast.IdUid (_loc, "CrMth"))),
-                                        meta_acc_Loc_t _loc x0),
-                                      meta_string _loc x1),
-                                    meta_meta_bool _loc x2),
-                                  meta_expr _loc x3),
-                                meta_ctyp _loc x4)
-                          | Ast.CrIni (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "CrIni"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.CrInh (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CrInh"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_string _loc x2)
-                          | Ast.CrCtr (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CrCtr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.CrSem (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CrSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_str_item _loc x1),
-                                meta_class_str_item _loc x2)
-                          | Ast.CrNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "CrNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_class_type _loc =
-                          function
-                          | Ast.CtAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.CtEq (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtEq"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_type _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CtCol (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtCol"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_type _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CtAnd (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_type _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CtSig (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtSig"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_class_sig_item _loc x2)
-                          | Ast.CtFun (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtFun"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CtCon (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CtCon"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_meta_bool _loc x1),
-                                  meta_ident _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CtNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "CtNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_ctyp _loc =
-                          function
-                          | Ast.TyAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.TyOfAmp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyOfAmp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyAmp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyAmp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyVrnInfSup (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyVrnInfSup"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyVrnInf (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyVrnInf"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyVrnSup (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyVrnSup"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyVrnEq (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyVrnEq"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TySta (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TySta"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyTup (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyTup"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyMut (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyMut"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyPrv (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyPrv"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyOr (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyOr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyAnd (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyOf (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyOf"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TySum (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TySum"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyCom (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyCom"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TySem (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TySem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyCol (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyCol"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyRec (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyRec"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyVrn (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyVrn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.TyQuM (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyQuM"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.TyQuP (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyQuP"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.TyQuo (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyQuo"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.TyPol (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyPol"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyOlb (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyOlb"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyObj (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyObj"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_meta_bool _loc x2)
-                          | Ast.TyDcl (x0, x1, x2, x3, x4) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExApp (_loc,
-                                        Ast.ExId (_loc,
-                                          Ast.IdAcc (_loc,
-                                            Ast.IdUid (_loc, "Ast"),
-                                            Ast.IdUid (_loc, "TyDcl"))),
-                                        meta_acc_Loc_t _loc x0),
-                                      meta_string _loc x1),
-                                    meta_list meta_ctyp _loc x2),
-                                  meta_ctyp _loc x3),
-                                meta_list
-                                  (fun _loc (x1, x2) ->
-                                     Ast.ExTup (_loc,
-                                       Ast.ExCom (_loc, meta_ctyp _loc x1,
-                                         meta_ctyp _loc x2)))
-                                  _loc x4)
-                          | Ast.TyMan (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyMan"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyId (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.TyLab (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyLab"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyCls (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyCls"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.TyArr (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyArr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyApp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyAny x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "TyAny"))),
-                                meta_acc_Loc_t _loc x0)
-                          | Ast.TyAli (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyAli"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "TyNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_expr _loc =
-                          function
-                          | Ast.ExWhi (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExWhi"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExVrn (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExVrn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExTyc (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExTyc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.ExCom (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExCom"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExTup (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExTup"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExTry (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExTry"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_match_case _loc x2)
-                          | Ast.ExStr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExStr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExSte (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExSte"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExSnd (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExSnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_string _loc x2)
-                          | Ast.ExSeq (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExSeq"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExRec (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExRec"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_binding _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExOvr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExOvr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_binding _loc x1)
-                          | Ast.ExOlb (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExOlb"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExObj (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExObj"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_class_str_item _loc x2)
-                          | Ast.ExNew (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExNew"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.ExMat (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExMat"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_match_case _loc x2)
-                          | Ast.ExLmd (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "ExLmd"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_module_expr _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.ExLet (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "ExLet"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_meta_bool _loc x1),
-                                  meta_binding _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.ExLaz (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExLaz"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExLab (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExLab"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExNativeInt (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExNativeInt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExInt64 (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExInt64"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExInt32 (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExInt32"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExInt (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExInt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExIfe (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "ExIfe"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_expr _loc x1),
-                                  meta_expr _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.ExFun (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExFun"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_match_case _loc x1)
-                          | Ast.ExFor (x0, x1, x2, x3, x4, x5) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExApp (_loc,
-                                        Ast.ExApp (_loc,
-                                          Ast.ExId (_loc,
-                                            Ast.IdAcc (_loc,
-                                              Ast.IdUid (_loc, "Ast"),
-                                              Ast.IdUid (_loc, "ExFor"))),
-                                          meta_acc_Loc_t _loc x0),
-                                        meta_string _loc x1),
-                                      meta_expr _loc x2),
-                                    meta_expr _loc x3),
-                                  meta_meta_bool _loc x4),
-                                meta_expr _loc x5)
-                          | Ast.ExFlo (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExFlo"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExCoe (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "ExCoe"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_expr _loc x1),
-                                  meta_ctyp _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.ExChr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExChr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExAss (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExAss"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExAsr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExAsr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExAsf x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "ExAsf"))),
-                                meta_acc_Loc_t _loc x0)
-                          | Ast.ExSem (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExArr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExArr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExAre (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExAre"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExApp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.ExAcc (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExAcc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExId (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.ExNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "ExNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_ident _loc =
-                          function
-                          | Ast.IdAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.IdUid (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "IdUid"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.IdLid (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "IdLid"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.IdApp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "IdApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ident _loc x1),
-                                meta_ident _loc x2)
-                          | Ast.IdAcc (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "IdAcc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ident _loc x1),
-                                meta_ident _loc x2)
-                        and meta_match_case _loc =
-                          function
-                          | Ast.McAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.McArr (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "McArr"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_patt _loc x1),
-                                  meta_expr _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.McOr (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "McOr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_match_case _loc x1),
-                                meta_match_case _loc x2)
-                          | Ast.McNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "McNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_meta_bool _loc =
-                          function
-                          | Ast.BAnt x0 -> Ast.ExAnt (_loc, x0)
-                          | Ast.BFalse ->
-                              Ast.ExId (_loc,
-                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                  Ast.IdUid (_loc, "BFalse")))
-                          | Ast.BTrue ->
-                              Ast.ExId (_loc,
-                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                  Ast.IdUid (_loc, "BTrue")))
-                        and meta_meta_list mf_a _loc =
-                          function
-                          | Ast.LAnt x0 -> Ast.ExAnt (_loc, x0)
-                          | Ast.LCons (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "LCons"))),
-                                  mf_a _loc x0),
-                                meta_meta_list mf_a _loc x1)
-                          | Ast.LNil ->
-                              Ast.ExId (_loc,
-                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                  Ast.IdUid (_loc, "LNil")))
-                        and meta_meta_option mf_a _loc =
-                          function
-                          | Ast.OAnt x0 -> Ast.ExAnt (_loc, x0)
-                          | Ast.OSome x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "OSome"))),
-                                mf_a _loc x0)
-                          | Ast.ONone ->
-                              Ast.ExId (_loc,
-                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                  Ast.IdUid (_loc, "ONone")))
-                        and meta_module_binding _loc =
-                          function
-                          | Ast.MbAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.MbCol (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MbCol"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.MbColEq (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "MbColEq"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_module_type _loc x2),
-                                meta_module_expr _loc x3)
-                          | Ast.MbAnd (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MbAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_module_binding _loc x1),
-                                meta_module_binding _loc x2)
-                          | Ast.MbNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "MbNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_module_expr _loc =
-                          function
-                          | Ast.MeAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.MeTyc (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MeTyc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_module_expr _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.MeStr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MeStr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_str_item _loc x1)
-                          | Ast.MeFun (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "MeFun"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_module_type _loc x2),
-                                meta_module_expr _loc x3)
-                          | Ast.MeApp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MeApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_module_expr _loc x1),
-                                meta_module_expr _loc x2)
-                          | Ast.MeId (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MeId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                        and meta_module_type _loc =
-                          function
-                          | Ast.MtAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.MtWit (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MtWit"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_module_type _loc x1),
-                                meta_with_constr _loc x2)
-                          | Ast.MtSig (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MtSig"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_sig_item _loc x1)
-                          | Ast.MtQuo (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MtQuo"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.MtFun (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "MtFun"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_module_type _loc x2),
-                                meta_module_type _loc x3)
-                          | Ast.MtId (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MtId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                        and meta_patt _loc =
-                          function
-                          | Ast.PaVrn (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaVrn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaTyp (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaTyp"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.PaTyc (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaTyc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.PaTup (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaTup"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_patt _loc x1)
-                          | Ast.PaStr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaStr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaEq (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaEq"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaRec (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaRec"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_patt _loc x1)
-                          | Ast.PaRng (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaRng"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaOrp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaOrp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaOlbi (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "PaOlbi"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_patt _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.PaOlb (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaOlb"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaLab (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaLab"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaFlo (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaFlo"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaNativeInt (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaNativeInt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaInt64 (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaInt64"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaInt32 (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaInt32"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaInt (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaInt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaChr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaChr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaSem (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaCom (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaCom"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaArr (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaArr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_patt _loc x1)
-                          | Ast.PaApp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaAny x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "PaAny"))),
-                                meta_acc_Loc_t _loc x0)
-                          | Ast.PaAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.PaAli (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaAli"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaId (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.PaNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "PaNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_sig_item _loc =
-                          function
-                          | Ast.SgAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.SgVal (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgVal"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.SgTyp (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgTyp"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.SgOpn (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgOpn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.SgMty (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgMty"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.SgRecMod (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgRecMod"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_module_binding _loc x1)
-                          | Ast.SgMod (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgMod"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.SgInc (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgInc"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_module_type _loc x1)
-                          | Ast.SgExt (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "SgExt"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_ctyp _loc x2),
-                                meta_meta_list meta_string _loc x3)
-                          | Ast.SgExc (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgExc"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.SgDir (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgDir"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.SgSem (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_sig_item _loc x1),
-                                meta_sig_item _loc x2)
-                          | Ast.SgClt (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgClt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_type _loc x1)
-                          | Ast.SgCls (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgCls"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_type _loc x1)
-                          | Ast.SgNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "SgNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_str_item _loc =
-                          function
-                          | Ast.StAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.StVal (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StVal"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_meta_bool _loc x1),
-                                meta_binding _loc x2)
-                          | Ast.StTyp (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StTyp"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.StOpn (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StOpn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.StMty (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StMty"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.StRecMod (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StRecMod"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_module_binding _loc x1)
-                          | Ast.StMod (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StMod"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_expr _loc x2)
-                          | Ast.StInc (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StInc"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_module_expr _loc x1)
-                          | Ast.StExt (x0, x1, x2, x3) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExApp (_loc,
-                                      Ast.ExId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "StExt"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_ctyp _loc x2),
-                                meta_meta_list meta_string _loc x3)
-                          | Ast.StExp (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StExp"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.StExc (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StExc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_meta_option meta_ident _loc x2)
-                          | Ast.StDir (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StDir"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.StSem (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_str_item _loc x1),
-                                meta_str_item _loc x2)
-                          | Ast.StClt (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StClt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_type _loc x1)
-                          | Ast.StCls (x0, x1) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StCls"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_expr _loc x1)
-                          | Ast.StNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "StNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_with_constr _loc =
-                          function
-                          | Ast.WcAnt (x0, x1) -> Ast.ExAnt (x0, x1)
-                          | Ast.WcAnd (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "WcAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_with_constr _loc x1),
-                                meta_with_constr _loc x2)
-                          | Ast.WcMod (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "WcMod"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ident _loc x1),
-                                meta_ident _loc x2)
-                          | Ast.WcTyp (x0, x1, x2) ->
-                              Ast.ExApp (_loc,
-                                Ast.ExApp (_loc,
-                                  Ast.ExApp (_loc,
-                                    Ast.ExId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "WcTyp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.WcNil x0 ->
-                              Ast.ExApp (_loc,
-                                Ast.ExId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "WcNil"))),
-                                meta_acc_Loc_t _loc x0)
-                      end
-                    let meta_acc_Loc_t = meta_loc_patt
-                    module Patt =
-                      struct
-                        let meta_string _loc s = Ast.PaStr (_loc, s)
-                        let meta_int _loc s = Ast.PaInt (_loc, s)
-                        let meta_float _loc s = Ast.PaFlo (_loc, s)
-                        let meta_char _loc s = Ast.PaChr (_loc, s)
-                        let meta_bool _loc =
-                          function
-                          | false ->
-                              Ast.PaId (_loc, Ast.IdUid (_loc, "False"))
-                          | true -> Ast.PaId (_loc, Ast.IdUid (_loc, "True"))
-                        let rec meta_list mf_a _loc =
-                          function
-                          | [] -> Ast.PaId (_loc, Ast.IdUid (_loc, "[]"))
-                          | x :: xs ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc, Ast.IdUid (_loc, "::")),
-                                  mf_a _loc x),
-                                meta_list mf_a _loc xs)
-                        let rec meta_binding _loc =
-                          function
-                          | Ast.BiAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.BiEq (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "BiEq"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.BiSem (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "BiSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_binding _loc x1),
-                                meta_binding _loc x2)
-                          | Ast.BiAnd (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "BiAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_binding _loc x1),
-                                meta_binding _loc x2)
-                          | Ast.BiNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "BiNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_class_expr _loc =
-                          function
-                          | Ast.CeAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.CeEq (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeEq"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_class_expr _loc x2)
-                          | Ast.CeAnd (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_class_expr _loc x2)
-                          | Ast.CeTyc (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeTyc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CeStr (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeStr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_class_str_item _loc x2)
-                          | Ast.CeLet (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CeLet"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_meta_bool _loc x1),
-                                  meta_binding _loc x2),
-                                meta_class_expr _loc x3)
-                          | Ast.CeFun (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeFun"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_class_expr _loc x2)
-                          | Ast.CeCon (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CeCon"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_meta_bool _loc x1),
-                                  meta_ident _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CeApp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CeApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.CeNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "CeNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_class_sig_item _loc =
-                          function
-                          | Ast.CgAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.CgVir (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CgVir"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CgVal (x0, x1, x2, x3, x4) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaApp (_loc,
-                                        Ast.PaId (_loc,
-                                          Ast.IdAcc (_loc,
-                                            Ast.IdUid (_loc, "Ast"),
-                                            Ast.IdUid (_loc, "CgVal"))),
-                                        meta_acc_Loc_t _loc x0),
-                                      meta_string _loc x1),
-                                    meta_meta_bool _loc x2),
-                                  meta_meta_bool _loc x3),
-                                meta_ctyp _loc x4)
-                          | Ast.CgMth (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CgMth"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CgInh (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "CgInh"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_type _loc x1)
-                          | Ast.CgSem (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CgSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_sig_item _loc x1),
-                                meta_class_sig_item _loc x2)
-                          | Ast.CgCtr (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CgCtr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.CgNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "CgNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_class_str_item _loc =
-                          function
-                          | Ast.CrAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.CrVvr (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CrVvr"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CrVir (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CrVir"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CrVal (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CrVal"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_meta_bool _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.CrMth (x0, x1, x2, x3, x4) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaApp (_loc,
-                                        Ast.PaId (_loc,
-                                          Ast.IdAcc (_loc,
-                                            Ast.IdUid (_loc, "Ast"),
-                                            Ast.IdUid (_loc, "CrMth"))),
-                                        meta_acc_Loc_t _loc x0),
-                                      meta_string _loc x1),
-                                    meta_meta_bool _loc x2),
-                                  meta_expr _loc x3),
-                                meta_ctyp _loc x4)
-                          | Ast.CrIni (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "CrIni"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.CrInh (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CrInh"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_expr _loc x1),
-                                meta_string _loc x2)
-                          | Ast.CrCtr (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CrCtr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.CrSem (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CrSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_str_item _loc x1),
-                                meta_class_str_item _loc x2)
-                          | Ast.CrNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "CrNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_class_type _loc =
-                          function
-                          | Ast.CtAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.CtEq (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtEq"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_type _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CtCol (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtCol"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_type _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CtAnd (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_class_type _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CtSig (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtSig"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_class_sig_item _loc x2)
-                          | Ast.CtFun (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "CtFun"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_class_type _loc x2)
-                          | Ast.CtCon (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "CtCon"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_meta_bool _loc x1),
-                                  meta_ident _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.CtNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "CtNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_ctyp _loc =
-                          function
-                          | Ast.TyAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.TyOfAmp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyOfAmp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyAmp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyAmp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyVrnInfSup (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyVrnInfSup"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyVrnInf (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyVrnInf"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyVrnSup (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyVrnSup"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyVrnEq (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyVrnEq"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TySta (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TySta"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyTup (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyTup"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyMut (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyMut"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyPrv (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyPrv"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyOr (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyOr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyAnd (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyOf (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyOf"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TySum (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TySum"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyCom (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyCom"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TySem (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TySem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyCol (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyCol"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyRec (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyRec"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.TyVrn (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyVrn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.TyQuM (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyQuM"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.TyQuP (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyQuP"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.TyQuo (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyQuo"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.TyPol (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyPol"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyOlb (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyOlb"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyObj (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyObj"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_meta_bool _loc x2)
-                          | Ast.TyDcl (x0, x1, x2, x3, x4) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaApp (_loc,
-                                        Ast.PaId (_loc,
-                                          Ast.IdAcc (_loc,
-                                            Ast.IdUid (_loc, "Ast"),
-                                            Ast.IdUid (_loc, "TyDcl"))),
-                                        meta_acc_Loc_t _loc x0),
-                                      meta_string _loc x1),
-                                    meta_list meta_ctyp _loc x2),
-                                  meta_ctyp _loc x3),
-                                meta_list
-                                  (fun _loc (x1, x2) ->
-                                     Ast.PaTup (_loc,
-                                       Ast.PaCom (_loc, meta_ctyp _loc x1,
-                                         meta_ctyp _loc x2)))
-                                  _loc x4)
-                          | Ast.TyMan (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyMan"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyId (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.TyLab (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyLab"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyCls (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "TyCls"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.TyArr (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyArr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyApp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyAny x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "TyAny"))),
-                                meta_acc_Loc_t _loc x0)
-                          | Ast.TyAli (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "TyAli"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.TyNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "TyNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_expr _loc =
-                          function
-                          | Ast.ExWhi (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExWhi"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExVrn (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExVrn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExTyc (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExTyc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.ExCom (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExCom"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExTup (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExTup"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExTry (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExTry"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_match_case _loc x2)
-                          | Ast.ExStr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExStr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExSte (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExSte"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExSnd (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExSnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_string _loc x2)
-                          | Ast.ExSeq (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExSeq"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExRec (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExRec"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_binding _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExOvr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExOvr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_binding _loc x1)
-                          | Ast.ExOlb (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExOlb"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExObj (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExObj"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_class_str_item _loc x2)
-                          | Ast.ExNew (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExNew"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.ExMat (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExMat"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_match_case _loc x2)
-                          | Ast.ExLmd (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "ExLmd"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_module_expr _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.ExLet (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "ExLet"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_meta_bool _loc x1),
-                                  meta_binding _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.ExLaz (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExLaz"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExLab (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExLab"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExNativeInt (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExNativeInt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExInt64 (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExInt64"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExInt32 (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExInt32"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExInt (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExInt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExIfe (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "ExIfe"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_expr _loc x1),
-                                  meta_expr _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.ExFun (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExFun"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_match_case _loc x1)
-                          | Ast.ExFor (x0, x1, x2, x3, x4, x5) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaApp (_loc,
-                                        Ast.PaApp (_loc,
-                                          Ast.PaId (_loc,
-                                            Ast.IdAcc (_loc,
-                                              Ast.IdUid (_loc, "Ast"),
-                                              Ast.IdUid (_loc, "ExFor"))),
-                                          meta_acc_Loc_t _loc x0),
-                                        meta_string _loc x1),
-                                      meta_expr _loc x2),
-                                    meta_expr _loc x3),
-                                  meta_meta_bool _loc x4),
-                                meta_expr _loc x5)
-                          | Ast.ExFlo (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExFlo"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExCoe (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "ExCoe"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_expr _loc x1),
-                                  meta_ctyp _loc x2),
-                                meta_ctyp _loc x3)
-                          | Ast.ExChr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExChr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.ExAss (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExAss"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExAsr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExAsr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExAsf x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "ExAsf"))),
-                                meta_acc_Loc_t _loc x0)
-                          | Ast.ExSem (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExArr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExArr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.ExAre (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExAre"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExApp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.ExAcc (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "ExAcc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_expr _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.ExId (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "ExId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.ExNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "ExNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_ident _loc =
-                          function
-                          | Ast.IdAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.IdUid (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "IdUid"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.IdLid (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "IdLid"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.IdApp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "IdApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ident _loc x1),
-                                meta_ident _loc x2)
-                          | Ast.IdAcc (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "IdAcc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ident _loc x1),
-                                meta_ident _loc x2)
-                        and meta_match_case _loc =
-                          function
-                          | Ast.McAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.McArr (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "McArr"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_patt _loc x1),
-                                  meta_expr _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.McOr (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "McOr"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_match_case _loc x1),
-                                meta_match_case _loc x2)
-                          | Ast.McNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "McNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_meta_bool _loc =
-                          function
-                          | Ast.BAnt x0 -> Ast.PaAnt (_loc, x0)
-                          | Ast.BFalse ->
-                              Ast.PaId (_loc,
-                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                  Ast.IdUid (_loc, "BFalse")))
-                          | Ast.BTrue ->
-                              Ast.PaId (_loc,
-                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                  Ast.IdUid (_loc, "BTrue")))
-                        and meta_meta_list mf_a _loc =
-                          function
-                          | Ast.LAnt x0 -> Ast.PaAnt (_loc, x0)
-                          | Ast.LCons (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "LCons"))),
-                                  mf_a _loc x0),
-                                meta_meta_list mf_a _loc x1)
-                          | Ast.LNil ->
-                              Ast.PaId (_loc,
-                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                  Ast.IdUid (_loc, "LNil")))
-                        and meta_meta_option mf_a _loc =
-                          function
-                          | Ast.OAnt x0 -> Ast.PaAnt (_loc, x0)
-                          | Ast.OSome x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "OSome"))),
-                                mf_a _loc x0)
-                          | Ast.ONone ->
-                              Ast.PaId (_loc,
-                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                  Ast.IdUid (_loc, "ONone")))
-                        and meta_module_binding _loc =
-                          function
-                          | Ast.MbAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.MbCol (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MbCol"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.MbColEq (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "MbColEq"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_module_type _loc x2),
-                                meta_module_expr _loc x3)
-                          | Ast.MbAnd (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MbAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_module_binding _loc x1),
-                                meta_module_binding _loc x2)
-                          | Ast.MbNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "MbNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_module_expr _loc =
-                          function
-                          | Ast.MeAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.MeTyc (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MeTyc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_module_expr _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.MeStr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MeStr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_str_item _loc x1)
-                          | Ast.MeFun (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "MeFun"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_module_type _loc x2),
-                                meta_module_expr _loc x3)
-                          | Ast.MeApp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MeApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_module_expr _loc x1),
-                                meta_module_expr _loc x2)
-                          | Ast.MeId (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MeId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                        and meta_module_type _loc =
-                          function
-                          | Ast.MtAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.MtWit (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "MtWit"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_module_type _loc x1),
-                                meta_with_constr _loc x2)
-                          | Ast.MtSig (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MtSig"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_sig_item _loc x1)
-                          | Ast.MtQuo (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MtQuo"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.MtFun (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "MtFun"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_module_type _loc x2),
-                                meta_module_type _loc x3)
-                          | Ast.MtId (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "MtId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                        and meta_patt _loc =
-                          function
-                          | Ast.PaVrn (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaVrn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaTyp (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaTyp"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.PaTyc (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaTyc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.PaTup (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaTup"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_patt _loc x1)
-                          | Ast.PaStr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaStr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaEq (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaEq"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaRec (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaRec"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_patt _loc x1)
-                          | Ast.PaRng (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaRng"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaOrp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaOrp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaOlbi (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "PaOlbi"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_patt _loc x2),
-                                meta_expr _loc x3)
-                          | Ast.PaOlb (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaOlb"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaLab (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaLab"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaFlo (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaFlo"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaNativeInt (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaNativeInt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaInt64 (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaInt64"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaInt32 (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaInt32"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaInt (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaInt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaChr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaChr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_string _loc x1)
-                          | Ast.PaSem (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaCom (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaCom"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaArr (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaArr"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_patt _loc x1)
-                          | Ast.PaApp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaApp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaAny x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "PaAny"))),
-                                meta_acc_Loc_t _loc x0)
-                          | Ast.PaAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.PaAli (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "PaAli"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_patt _loc x1),
-                                meta_patt _loc x2)
-                          | Ast.PaId (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "PaId"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.PaNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "PaNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_sig_item _loc =
-                          function
-                          | Ast.SgAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.SgVal (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgVal"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.SgTyp (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgTyp"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.SgOpn (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgOpn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.SgMty (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgMty"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.SgRecMod (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgRecMod"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_module_binding _loc x1)
-                          | Ast.SgMod (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgMod"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.SgInc (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgInc"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_module_type _loc x1)
-                          | Ast.SgExt (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "SgExt"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_ctyp _loc x2),
-                                meta_meta_list meta_string _loc x3)
-                          | Ast.SgExc (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgExc"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.SgDir (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgDir"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.SgSem (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "SgSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_sig_item _loc x1),
-                                meta_sig_item _loc x2)
-                          | Ast.SgClt (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgClt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_type _loc x1)
-                          | Ast.SgCls (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "SgCls"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_type _loc x1)
-                          | Ast.SgNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "SgNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_str_item _loc =
-                          function
-                          | Ast.StAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.StVal (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StVal"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_meta_bool _loc x1),
-                                meta_binding _loc x2)
-                          | Ast.StTyp (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StTyp"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ctyp _loc x1)
-                          | Ast.StOpn (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StOpn"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_ident _loc x1)
-                          | Ast.StMty (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StMty"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_type _loc x2)
-                          | Ast.StRecMod (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StRecMod"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_module_binding _loc x1)
-                          | Ast.StMod (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StMod"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_module_expr _loc x2)
-                          | Ast.StInc (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StInc"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_module_expr _loc x1)
-                          | Ast.StExt (x0, x1, x2, x3) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaApp (_loc,
-                                      Ast.PaId (_loc,
-                                        Ast.IdAcc (_loc,
-                                          Ast.IdUid (_loc, "Ast"),
-                                          Ast.IdUid (_loc, "StExt"))),
-                                      meta_acc_Loc_t _loc x0),
-                                    meta_string _loc x1),
-                                  meta_ctyp _loc x2),
-                                meta_meta_list meta_string _loc x3)
-                          | Ast.StExp (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StExp"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_expr _loc x1)
-                          | Ast.StExc (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StExc"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_meta_option meta_ident _loc x2)
-                          | Ast.StDir (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StDir"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_string _loc x1),
-                                meta_expr _loc x2)
-                          | Ast.StSem (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "StSem"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_str_item _loc x1),
-                                meta_str_item _loc x2)
-                          | Ast.StClt (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StClt"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_type _loc x1)
-                          | Ast.StCls (x0, x1) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaId (_loc,
-                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                      Ast.IdUid (_loc, "StCls"))),
-                                  meta_acc_Loc_t _loc x0),
-                                meta_class_expr _loc x1)
-                          | Ast.StNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "StNil"))),
-                                meta_acc_Loc_t _loc x0)
-                        and meta_with_constr _loc =
-                          function
-                          | Ast.WcAnt (x0, x1) -> Ast.PaAnt (x0, x1)
-                          | Ast.WcAnd (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "WcAnd"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_with_constr _loc x1),
-                                meta_with_constr _loc x2)
-                          | Ast.WcMod (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "WcMod"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ident _loc x1),
-                                meta_ident _loc x2)
-                          | Ast.WcTyp (x0, x1, x2) ->
-                              Ast.PaApp (_loc,
-                                Ast.PaApp (_loc,
-                                  Ast.PaApp (_loc,
-                                    Ast.PaId (_loc,
-                                      Ast.IdAcc (_loc,
-                                        Ast.IdUid (_loc, "Ast"),
-                                        Ast.IdUid (_loc, "WcTyp"))),
-                                    meta_acc_Loc_t _loc x0),
-                                  meta_ctyp _loc x1),
-                                meta_ctyp _loc x2)
-                          | Ast.WcNil x0 ->
-                              Ast.PaApp (_loc,
-                                Ast.PaId (_loc,
-                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
-                                    Ast.IdUid (_loc, "WcNil"))),
-                                meta_acc_Loc_t _loc x0)
-                      end
-                  end
-              end
-            class map =
-              object (o)
-                method string = fun x -> (x : string)
-                method int = fun x -> (x : int)
-                method float = fun x -> (x : float)
-                method bool = fun x -> (x : bool)
-                method list : 'a 'b. ('a -> 'b) -> 'a list -> 'b list = List.
-                  map
-                method option : 'a 'b. ('a -> 'b) -> 'a option -> 'b option =
-                  fun f -> function | None -> None | Some x -> Some (f x)
-                method array : 'a 'b. ('a -> 'b) -> 'a array -> 'b array =
-                  Array.map
-                method ref : 'a 'b. ('a -> 'b) -> 'a ref -> 'b ref =
-                  fun f { contents = x } -> {  contents = f x; }
-                method _Loc_t : Loc.t -> Loc.t = fun x -> x
-                method with_constr : with_constr -> with_constr =
-                  function
-                  | WcNil _x0 -> WcNil (o#_Loc_t _x0)
-                  | WcTyp (_x0, _x1, _x2) ->
-                      WcTyp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | WcMod (_x0, _x1, _x2) ->
-                      WcMod (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
-                  | WcAnd (_x0, _x1, _x2) ->
-                      WcAnd (o#_Loc_t _x0, o#with_constr _x1,
-                        o#with_constr _x2)
-                  | WcAnt (_x0, _x1) -> WcAnt (o#_Loc_t _x0, o#string _x1)
-                method str_item : str_item -> str_item =
-                  function
-                  | StNil _x0 -> StNil (o#_Loc_t _x0)
-                  | StCls (_x0, _x1) ->
-                      StCls (o#_Loc_t _x0, o#class_expr _x1)
-                  | StClt (_x0, _x1) ->
-                      StClt (o#_Loc_t _x0, o#class_type _x1)
-                  | StSem (_x0, _x1, _x2) ->
-                      StSem (o#_Loc_t _x0, o#str_item _x1, o#str_item _x2)
-                  | StDir (_x0, _x1, _x2) ->
-                      StDir (o#_Loc_t _x0, o#string _x1, o#expr _x2)
-                  | StExc (_x0, _x1, _x2) ->
-                      StExc (o#_Loc_t _x0, o#ctyp _x1,
-                        o#meta_option o#ident _x2)
-                  | StExp (_x0, _x1) -> StExp (o#_Loc_t _x0, o#expr _x1)
-                  | StExt (_x0, _x1, _x2, _x3) ->
-                      StExt (o#_Loc_t _x0, o#string _x1, o#ctyp _x2,
-                        o#meta_list o#string _x3)
-                  | StInc (_x0, _x1) ->
-                      StInc (o#_Loc_t _x0, o#module_expr _x1)
-                  | StMod (_x0, _x1, _x2) ->
-                      StMod (o#_Loc_t _x0, o#string _x1, o#module_expr _x2)
-                  | StRecMod (_x0, _x1) ->
-                      StRecMod (o#_Loc_t _x0, o#module_binding _x1)
-                  | StMty (_x0, _x1, _x2) ->
-                      StMty (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
-                  | StOpn (_x0, _x1) -> StOpn (o#_Loc_t _x0, o#ident _x1)
-                  | StTyp (_x0, _x1) -> StTyp (o#_Loc_t _x0, o#ctyp _x1)
-                  | StVal (_x0, _x1, _x2) ->
-                      StVal (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2)
-                  | StAnt (_x0, _x1) -> StAnt (o#_Loc_t _x0, o#string _x1)
-                method sig_item : sig_item -> sig_item =
-                  function
-                  | SgNil _x0 -> SgNil (o#_Loc_t _x0)
-                  | SgCls (_x0, _x1) ->
-                      SgCls (o#_Loc_t _x0, o#class_type _x1)
-                  | SgClt (_x0, _x1) ->
-                      SgClt (o#_Loc_t _x0, o#class_type _x1)
-                  | SgSem (_x0, _x1, _x2) ->
-                      SgSem (o#_Loc_t _x0, o#sig_item _x1, o#sig_item _x2)
-                  | SgDir (_x0, _x1, _x2) ->
-                      SgDir (o#_Loc_t _x0, o#string _x1, o#expr _x2)
-                  | SgExc (_x0, _x1) -> SgExc (o#_Loc_t _x0, o#ctyp _x1)
-                  | SgExt (_x0, _x1, _x2, _x3) ->
-                      SgExt (o#_Loc_t _x0, o#string _x1, o#ctyp _x2,
-                        o#meta_list o#string _x3)
-                  | SgInc (_x0, _x1) ->
-                      SgInc (o#_Loc_t _x0, o#module_type _x1)
-                  | SgMod (_x0, _x1, _x2) ->
-                      SgMod (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
-                  | SgRecMod (_x0, _x1) ->
-                      SgRecMod (o#_Loc_t _x0, o#module_binding _x1)
-                  | SgMty (_x0, _x1, _x2) ->
-                      SgMty (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
-                  | SgOpn (_x0, _x1) -> SgOpn (o#_Loc_t _x0, o#ident _x1)
-                  | SgTyp (_x0, _x1) -> SgTyp (o#_Loc_t _x0, o#ctyp _x1)
-                  | SgVal (_x0, _x1, _x2) ->
-                      SgVal (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
-                  | SgAnt (_x0, _x1) -> SgAnt (o#_Loc_t _x0, o#string _x1)
-                method patt : patt -> patt =
-                  function
-                  | PaNil _x0 -> PaNil (o#_Loc_t _x0)
-                  | PaId (_x0, _x1) -> PaId (o#_Loc_t _x0, o#ident _x1)
-                  | PaAli (_x0, _x1, _x2) ->
-                      PaAli (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
-                  | PaAnt (_x0, _x1) -> PaAnt (o#_Loc_t _x0, o#string _x1)
-                  | PaAny _x0 -> PaAny (o#_Loc_t _x0)
-                  | PaApp (_x0, _x1, _x2) ->
-                      PaApp (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
-                  | PaArr (_x0, _x1) -> PaArr (o#_Loc_t _x0, o#patt _x1)
-                  | PaCom (_x0, _x1, _x2) ->
-                      PaCom (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
-                  | PaSem (_x0, _x1, _x2) ->
-                      PaSem (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
-                  | PaChr (_x0, _x1) -> PaChr (o#_Loc_t _x0, o#string _x1)
-                  | PaInt (_x0, _x1) -> PaInt (o#_Loc_t _x0, o#string _x1)
-                  | PaInt32 (_x0, _x1) ->
-                      PaInt32 (o#_Loc_t _x0, o#string _x1)
-                  | PaInt64 (_x0, _x1) ->
-                      PaInt64 (o#_Loc_t _x0, o#string _x1)
-                  | PaNativeInt (_x0, _x1) ->
-                      PaNativeInt (o#_Loc_t _x0, o#string _x1)
-                  | PaFlo (_x0, _x1) -> PaFlo (o#_Loc_t _x0, o#string _x1)
-                  | PaLab (_x0, _x1, _x2) ->
-                      PaLab (o#_Loc_t _x0, o#string _x1, o#patt _x2)
-                  | PaOlb (_x0, _x1, _x2) ->
-                      PaOlb (o#_Loc_t _x0, o#string _x1, o#patt _x2)
-                  | PaOlbi (_x0, _x1, _x2, _x3) ->
-                      PaOlbi (o#_Loc_t _x0, o#string _x1, o#patt _x2,
-                        o#expr _x3)
-                  | PaOrp (_x0, _x1, _x2) ->
-                      PaOrp (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
-                  | PaRng (_x0, _x1, _x2) ->
-                      PaRng (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
-                  | PaRec (_x0, _x1) -> PaRec (o#_Loc_t _x0, o#patt _x1)
-                  | PaEq (_x0, _x1, _x2) ->
-                      PaEq (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
-                  | PaStr (_x0, _x1) -> PaStr (o#_Loc_t _x0, o#string _x1)
-                  | PaTup (_x0, _x1) -> PaTup (o#_Loc_t _x0, o#patt _x1)
-                  | PaTyc (_x0, _x1, _x2) ->
-                      PaTyc (o#_Loc_t _x0, o#patt _x1, o#ctyp _x2)
-                  | PaTyp (_x0, _x1) -> PaTyp (o#_Loc_t _x0, o#ident _x1)
-                  | PaVrn (_x0, _x1) -> PaVrn (o#_Loc_t _x0, o#string _x1)
-                method module_type : module_type -> module_type =
-                  function
-                  | MtId (_x0, _x1) -> MtId (o#_Loc_t _x0, o#ident _x1)
-                  | MtFun (_x0, _x1, _x2, _x3) ->
-                      MtFun (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
-                        o#module_type _x3)
-                  | MtQuo (_x0, _x1) -> MtQuo (o#_Loc_t _x0, o#string _x1)
-                  | MtSig (_x0, _x1) -> MtSig (o#_Loc_t _x0, o#sig_item _x1)
-                  | MtWit (_x0, _x1, _x2) ->
-                      MtWit (o#_Loc_t _x0, o#module_type _x1,
-                        o#with_constr _x2)
-                  | MtAnt (_x0, _x1) -> MtAnt (o#_Loc_t _x0, o#string _x1)
-                method module_expr : module_expr -> module_expr =
-                  function
-                  | MeId (_x0, _x1) -> MeId (o#_Loc_t _x0, o#ident _x1)
-                  | MeApp (_x0, _x1, _x2) ->
-                      MeApp (o#_Loc_t _x0, o#module_expr _x1,
-                        o#module_expr _x2)
-                  | MeFun (_x0, _x1, _x2, _x3) ->
-                      MeFun (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
-                        o#module_expr _x3)
-                  | MeStr (_x0, _x1) -> MeStr (o#_Loc_t _x0, o#str_item _x1)
-                  | MeTyc (_x0, _x1, _x2) ->
-                      MeTyc (o#_Loc_t _x0, o#module_expr _x1,
-                        o#module_type _x2)
-                  | MeAnt (_x0, _x1) -> MeAnt (o#_Loc_t _x0, o#string _x1)
-                method module_binding : module_binding -> module_binding =
-                  function
-                  | MbNil _x0 -> MbNil (o#_Loc_t _x0)
-                  | MbAnd (_x0, _x1, _x2) ->
-                      MbAnd (o#_Loc_t _x0, o#module_binding _x1,
-                        o#module_binding _x2)
-                  | MbColEq (_x0, _x1, _x2, _x3) ->
-                      MbColEq (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
-                        o#module_expr _x3)
-                  | MbCol (_x0, _x1, _x2) ->
-                      MbCol (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
-                  | MbAnt (_x0, _x1) -> MbAnt (o#_Loc_t _x0, o#string _x1)
-                method meta_option :
-                  'a 'b. ('a -> 'b) -> 'a meta_option -> 'b meta_option =
-                  fun _f_a ->
-                    function
-                    | ONone -> ONone
-                    | OSome _x0 -> OSome (_f_a _x0)
-                    | OAnt _x0 -> OAnt (o#string _x0)
-                method meta_list :
-                  'a 'b. ('a -> 'b) -> 'a meta_list -> 'b meta_list =
-                  fun _f_a ->
-                    function
-                    | LNil -> LNil
-                    | LCons (_x0, _x1) ->
-                        LCons (_f_a _x0, o#meta_list _f_a _x1)
-                    | LAnt _x0 -> LAnt (o#string _x0)
-                method meta_bool : meta_bool -> meta_bool =
-                  function
-                  | BTrue -> BTrue
-                  | BFalse -> BFalse
-                  | BAnt _x0 -> BAnt (o#string _x0)
-                method match_case : match_case -> match_case =
-                  function
-                  | McNil _x0 -> McNil (o#_Loc_t _x0)
-                  | McOr (_x0, _x1, _x2) ->
-                      McOr (o#_Loc_t _x0, o#match_case _x1, o#match_case _x2)
-                  | McArr (_x0, _x1, _x2, _x3) ->
-                      McArr (o#_Loc_t _x0, o#patt _x1, o#expr _x2,
-                        o#expr _x3)
-                  | McAnt (_x0, _x1) -> McAnt (o#_Loc_t _x0, o#string _x1)
-                method ident : ident -> ident =
-                  function
-                  | IdAcc (_x0, _x1, _x2) ->
-                      IdAcc (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
-                  | IdApp (_x0, _x1, _x2) ->
-                      IdApp (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
-                  | IdLid (_x0, _x1) -> IdLid (o#_Loc_t _x0, o#string _x1)
-                  | IdUid (_x0, _x1) -> IdUid (o#_Loc_t _x0, o#string _x1)
-                  | IdAnt (_x0, _x1) -> IdAnt (o#_Loc_t _x0, o#string _x1)
-                method expr : expr -> expr =
-                  function
-                  | ExNil _x0 -> ExNil (o#_Loc_t _x0)
-                  | ExId (_x0, _x1) -> ExId (o#_Loc_t _x0, o#ident _x1)
-                  | ExAcc (_x0, _x1, _x2) ->
-                      ExAcc (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
-                  | ExAnt (_x0, _x1) -> ExAnt (o#_Loc_t _x0, o#string _x1)
-                  | ExApp (_x0, _x1, _x2) ->
-                      ExApp (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
-                  | ExAre (_x0, _x1, _x2) ->
-                      ExAre (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
-                  | ExArr (_x0, _x1) -> ExArr (o#_Loc_t _x0, o#expr _x1)
-                  | ExSem (_x0, _x1, _x2) ->
-                      ExSem (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
-                  | ExAsf _x0 -> ExAsf (o#_Loc_t _x0)
-                  | ExAsr (_x0, _x1) -> ExAsr (o#_Loc_t _x0, o#expr _x1)
-                  | ExAss (_x0, _x1, _x2) ->
-                      ExAss (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
-                  | ExChr (_x0, _x1) -> ExChr (o#_Loc_t _x0, o#string _x1)
-                  | ExCoe (_x0, _x1, _x2, _x3) ->
-                      ExCoe (o#_Loc_t _x0, o#expr _x1, o#ctyp _x2,
-                        o#ctyp _x3)
-                  | ExFlo (_x0, _x1) -> ExFlo (o#_Loc_t _x0, o#string _x1)
-                  | ExFor (_x0, _x1, _x2, _x3, _x4, _x5) ->
-                      ExFor (o#_Loc_t _x0, o#string _x1, o#expr _x2,
-                        o#expr _x3, o#meta_bool _x4, o#expr _x5)
-                  | ExFun (_x0, _x1) ->
-                      ExFun (o#_Loc_t _x0, o#match_case _x1)
-                  | ExIfe (_x0, _x1, _x2, _x3) ->
-                      ExIfe (o#_Loc_t _x0, o#expr _x1, o#expr _x2,
-                        o#expr _x3)
-                  | ExInt (_x0, _x1) -> ExInt (o#_Loc_t _x0, o#string _x1)
-                  | ExInt32 (_x0, _x1) ->
-                      ExInt32 (o#_Loc_t _x0, o#string _x1)
-                  | ExInt64 (_x0, _x1) ->
-                      ExInt64 (o#_Loc_t _x0, o#string _x1)
-                  | ExNativeInt (_x0, _x1) ->
-                      ExNativeInt (o#_Loc_t _x0, o#string _x1)
-                  | ExLab (_x0, _x1, _x2) ->
-                      ExLab (o#_Loc_t _x0, o#string _x1, o#expr _x2)
-                  | ExLaz (_x0, _x1) -> ExLaz (o#_Loc_t _x0, o#expr _x1)
-                  | ExLet (_x0, _x1, _x2, _x3) ->
-                      ExLet (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2,
-                        o#expr _x3)
-                  | ExLmd (_x0, _x1, _x2, _x3) ->
-                      ExLmd (o#_Loc_t _x0, o#string _x1, o#module_expr _x2,
-                        o#expr _x3)
-                  | ExMat (_x0, _x1, _x2) ->
-                      ExMat (o#_Loc_t _x0, o#expr _x1, o#match_case _x2)
-                  | ExNew (_x0, _x1) -> ExNew (o#_Loc_t _x0, o#ident _x1)
-                  | ExObj (_x0, _x1, _x2) ->
-                      ExObj (o#_Loc_t _x0, o#patt _x1, o#class_str_item _x2)
-                  | ExOlb (_x0, _x1, _x2) ->
-                      ExOlb (o#_Loc_t _x0, o#string _x1, o#expr _x2)
-                  | ExOvr (_x0, _x1) -> ExOvr (o#_Loc_t _x0, o#binding _x1)
-                  | ExRec (_x0, _x1, _x2) ->
-                      ExRec (o#_Loc_t _x0, o#binding _x1, o#expr _x2)
-                  | ExSeq (_x0, _x1) -> ExSeq (o#_Loc_t _x0, o#expr _x1)
-                  | ExSnd (_x0, _x1, _x2) ->
-                      ExSnd (o#_Loc_t _x0, o#expr _x1, o#string _x2)
-                  | ExSte (_x0, _x1, _x2) ->
-                      ExSte (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
-                  | ExStr (_x0, _x1) -> ExStr (o#_Loc_t _x0, o#string _x1)
-                  | ExTry (_x0, _x1, _x2) ->
-                      ExTry (o#_Loc_t _x0, o#expr _x1, o#match_case _x2)
-                  | ExTup (_x0, _x1) -> ExTup (o#_Loc_t _x0, o#expr _x1)
-                  | ExCom (_x0, _x1, _x2) ->
-                      ExCom (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
-                  | ExTyc (_x0, _x1, _x2) ->
-                      ExTyc (o#_Loc_t _x0, o#expr _x1, o#ctyp _x2)
-                  | ExVrn (_x0, _x1) -> ExVrn (o#_Loc_t _x0, o#string _x1)
-                  | ExWhi (_x0, _x1, _x2) ->
-                      ExWhi (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
-                method ctyp : ctyp -> ctyp =
-                  function
-                  | TyNil _x0 -> TyNil (o#_Loc_t _x0)
-                  | TyAli (_x0, _x1, _x2) ->
-                      TyAli (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyAny _x0 -> TyAny (o#_Loc_t _x0)
-                  | TyApp (_x0, _x1, _x2) ->
-                      TyApp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyArr (_x0, _x1, _x2) ->
-                      TyArr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyCls (_x0, _x1) -> TyCls (o#_Loc_t _x0, o#ident _x1)
-                  | TyLab (_x0, _x1, _x2) ->
-                      TyLab (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
-                  | TyId (_x0, _x1) -> TyId (o#_Loc_t _x0, o#ident _x1)
-                  | TyMan (_x0, _x1, _x2) ->
-                      TyMan (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyDcl (_x0, _x1, _x2, _x3, _x4) ->
-                      TyDcl (o#_Loc_t _x0, o#string _x1, o#list o#ctyp _x2,
-                        o#ctyp _x3,
-                        o#list
-                          (fun (_x0, _x1) -> ((o#ctyp _x0), (o#ctyp _x1)))
-                          _x4)
-                  | TyObj (_x0, _x1, _x2) ->
-                      TyObj (o#_Loc_t _x0, o#ctyp _x1, o#meta_bool _x2)
-                  | TyOlb (_x0, _x1, _x2) ->
-                      TyOlb (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
-                  | TyPol (_x0, _x1, _x2) ->
-                      TyPol (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyQuo (_x0, _x1) -> TyQuo (o#_Loc_t _x0, o#string _x1)
-                  | TyQuP (_x0, _x1) -> TyQuP (o#_Loc_t _x0, o#string _x1)
-                  | TyQuM (_x0, _x1) -> TyQuM (o#_Loc_t _x0, o#string _x1)
-                  | TyVrn (_x0, _x1) -> TyVrn (o#_Loc_t _x0, o#string _x1)
-                  | TyRec (_x0, _x1) -> TyRec (o#_Loc_t _x0, o#ctyp _x1)
-                  | TyCol (_x0, _x1, _x2) ->
-                      TyCol (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TySem (_x0, _x1, _x2) ->
-                      TySem (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyCom (_x0, _x1, _x2) ->
-                      TyCom (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TySum (_x0, _x1) -> TySum (o#_Loc_t _x0, o#ctyp _x1)
-                  | TyOf (_x0, _x1, _x2) ->
-                      TyOf (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyAnd (_x0, _x1, _x2) ->
-                      TyAnd (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyOr (_x0, _x1, _x2) ->
-                      TyOr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyPrv (_x0, _x1) -> TyPrv (o#_Loc_t _x0, o#ctyp _x1)
-                  | TyMut (_x0, _x1) -> TyMut (o#_Loc_t _x0, o#ctyp _x1)
-                  | TyTup (_x0, _x1) -> TyTup (o#_Loc_t _x0, o#ctyp _x1)
-                  | TySta (_x0, _x1, _x2) ->
-                      TySta (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyVrnEq (_x0, _x1) -> TyVrnEq (o#_Loc_t _x0, o#ctyp _x1)
-                  | TyVrnSup (_x0, _x1) ->
-                      TyVrnSup (o#_Loc_t _x0, o#ctyp _x1)
-                  | TyVrnInf (_x0, _x1) ->
-                      TyVrnInf (o#_Loc_t _x0, o#ctyp _x1)
-                  | TyVrnInfSup (_x0, _x1, _x2) ->
-                      TyVrnInfSup (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyAmp (_x0, _x1, _x2) ->
-                      TyAmp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyOfAmp (_x0, _x1, _x2) ->
-                      TyOfAmp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | TyAnt (_x0, _x1) -> TyAnt (o#_Loc_t _x0, o#string _x1)
-                method class_type : class_type -> class_type =
-                  function
-                  | CtNil _x0 -> CtNil (o#_Loc_t _x0)
-                  | CtCon (_x0, _x1, _x2, _x3) ->
-                      CtCon (o#_Loc_t _x0, o#meta_bool _x1, o#ident _x2,
-                        o#ctyp _x3)
-                  | CtFun (_x0, _x1, _x2) ->
-                      CtFun (o#_Loc_t _x0, o#ctyp _x1, o#class_type _x2)
-                  | CtSig (_x0, _x1, _x2) ->
-                      CtSig (o#_Loc_t _x0, o#ctyp _x1, o#class_sig_item _x2)
-                  | CtAnd (_x0, _x1, _x2) ->
-                      CtAnd (o#_Loc_t _x0, o#class_type _x1,
-                        o#class_type _x2)
-                  | CtCol (_x0, _x1, _x2) ->
-                      CtCol (o#_Loc_t _x0, o#class_type _x1,
-                        o#class_type _x2)
-                  | CtEq (_x0, _x1, _x2) ->
-                      CtEq (o#_Loc_t _x0, o#class_type _x1, o#class_type _x2)
-                  | CtAnt (_x0, _x1) -> CtAnt (o#_Loc_t _x0, o#string _x1)
-                method class_str_item : class_str_item -> class_str_item =
-                  function
-                  | CrNil _x0 -> CrNil (o#_Loc_t _x0)
-                  | CrSem (_x0, _x1, _x2) ->
-                      CrSem (o#_Loc_t _x0, o#class_str_item _x1,
-                        o#class_str_item _x2)
-                  | CrCtr (_x0, _x1, _x2) ->
-                      CrCtr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | CrInh (_x0, _x1, _x2) ->
-                      CrInh (o#_Loc_t _x0, o#class_expr _x1, o#string _x2)
-                  | CrIni (_x0, _x1) -> CrIni (o#_Loc_t _x0, o#expr _x1)
-                  | CrMth (_x0, _x1, _x2, _x3, _x4) ->
-                      CrMth (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
-                        o#expr _x3, o#ctyp _x4)
-                  | CrVal (_x0, _x1, _x2, _x3) ->
-                      CrVal (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
-                        o#expr _x3)
-                  | CrVir (_x0, _x1, _x2, _x3) ->
-                      CrVir (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
-                        o#ctyp _x3)
-                  | CrVvr (_x0, _x1, _x2, _x3) ->
-                      CrVvr (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
-                        o#ctyp _x3)
-                  | CrAnt (_x0, _x1) -> CrAnt (o#_Loc_t _x0, o#string _x1)
-                method class_sig_item : class_sig_item -> class_sig_item =
-                  function
-                  | CgNil _x0 -> CgNil (o#_Loc_t _x0)
-                  | CgCtr (_x0, _x1, _x2) ->
-                      CgCtr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
-                  | CgSem (_x0, _x1, _x2) ->
-                      CgSem (o#_Loc_t _x0, o#class_sig_item _x1,
-                        o#class_sig_item _x2)
-                  | CgInh (_x0, _x1) ->
-                      CgInh (o#_Loc_t _x0, o#class_type _x1)
-                  | CgMth (_x0, _x1, _x2, _x3) ->
-                      CgMth (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
-                        o#ctyp _x3)
-                  | CgVal (_x0, _x1, _x2, _x3, _x4) ->
-                      CgVal (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
-                        o#meta_bool _x3, o#ctyp _x4)
-                  | CgVir (_x0, _x1, _x2, _x3) ->
-                      CgVir (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
-                        o#ctyp _x3)
-                  | CgAnt (_x0, _x1) -> CgAnt (o#_Loc_t _x0, o#string _x1)
-                method class_expr : class_expr -> class_expr =
-                  function
-                  | CeNil _x0 -> CeNil (o#_Loc_t _x0)
-                  | CeApp (_x0, _x1, _x2) ->
-                      CeApp (o#_Loc_t _x0, o#class_expr _x1, o#expr _x2)
-                  | CeCon (_x0, _x1, _x2, _x3) ->
-                      CeCon (o#_Loc_t _x0, o#meta_bool _x1, o#ident _x2,
-                        o#ctyp _x3)
-                  | CeFun (_x0, _x1, _x2) ->
-                      CeFun (o#_Loc_t _x0, o#patt _x1, o#class_expr _x2)
-                  | CeLet (_x0, _x1, _x2, _x3) ->
-                      CeLet (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2,
-                        o#class_expr _x3)
-                  | CeStr (_x0, _x1, _x2) ->
-                      CeStr (o#_Loc_t _x0, o#patt _x1, o#class_str_item _x2)
-                  | CeTyc (_x0, _x1, _x2) ->
-                      CeTyc (o#_Loc_t _x0, o#class_expr _x1,
-                        o#class_type _x2)
-                  | CeAnd (_x0, _x1, _x2) ->
-                      CeAnd (o#_Loc_t _x0, o#class_expr _x1,
-                        o#class_expr _x2)
-                  | CeEq (_x0, _x1, _x2) ->
-                      CeEq (o#_Loc_t _x0, o#class_expr _x1, o#class_expr _x2)
-                  | CeAnt (_x0, _x1) -> CeAnt (o#_Loc_t _x0, o#string _x1)
-                method binding : binding -> binding =
-                  function
-                  | BiNil _x0 -> BiNil (o#_Loc_t _x0)
-                  | BiAnd (_x0, _x1, _x2) ->
-                      BiAnd (o#_Loc_t _x0, o#binding _x1, o#binding _x2)
-                  | BiSem (_x0, _x1, _x2) ->
-                      BiSem (o#_Loc_t _x0, o#binding _x1, o#binding _x2)
-                  | BiEq (_x0, _x1, _x2) ->
-                      BiEq (o#_Loc_t _x0, o#patt _x1, o#expr _x2)
-                  | BiAnt (_x0, _x1) -> BiAnt (o#_Loc_t _x0, o#string _x1)
-              end
-            class fold =
-              object ((o : 'self_type))
-                method string = fun (_ : string) -> (o : 'self_type)
-                method int = fun (_ : int) -> (o : 'self_type)
-                method float = fun (_ : float) -> (o : 'self_type)
-                method bool = fun (_ : bool) -> (o : 'self_type)
-                method list :
-                  'a.
-                    ('self_type -> 'a -> 'self_type) -> 'a list -> 'self_type =
-                  fun f -> List.fold_left f o
-                method option :
-                  'a.
-                    ('self_type -> 'a -> 'self_type) ->
-                      'a option -> 'self_type =
-                  fun f -> function | None -> o | Some x -> f o x
-                method array :
-                  'a.
-                    ('self_type -> 'a -> 'self_type) ->
-                      'a array -> 'self_type =
-                  fun f -> Array.fold_left f o
-                method ref :
-                  'a.
-                    ('self_type -> 'a -> 'self_type) -> 'a ref -> 'self_type =
-                  fun f { contents = x } -> f o x
-                method _Loc_t : Loc.t -> 'self_type = fun _ -> o
-                method with_constr : with_constr -> 'self_type =
-                  function
-                  | WcNil _x0 -> o#_Loc_t _x0
-                  | WcTyp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | WcMod (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ident _x1)#ident _x2
-                  | WcAnd (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#with_constr _x1)#with_constr _x2
-                  | WcAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method str_item : str_item -> 'self_type =
-                  function
-                  | StNil _x0 -> o#_Loc_t _x0
-                  | StCls (_x0, _x1) -> (o#_Loc_t _x0)#class_expr _x1
-                  | StClt (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
-                  | StSem (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#str_item _x1)#str_item _x2
-                  | StDir (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#expr _x2
-                  | StExc (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#meta_option
-                        (fun o -> o#ident) _x2
-                  | StExp (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
-                  | StExt (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
-                        (fun o -> o#string) _x3
-                  | StInc (_x0, _x1) -> (o#_Loc_t _x0)#module_expr _x1
-                  | StMod (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#module_expr _x2
-                  | StRecMod (_x0, _x1) -> (o#_Loc_t _x0)#module_binding _x1
-                  | StMty (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#module_type _x2
-                  | StOpn (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | StTyp (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | StVal (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#meta_bool _x1)#binding _x2
-                  | StAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method sig_item : sig_item -> 'self_type =
-                  function
-                  | SgNil _x0 -> o#_Loc_t _x0
-                  | SgCls (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
-                  | SgClt (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
-                  | SgSem (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#sig_item _x1)#sig_item _x2
-                  | SgDir (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#expr _x2
-                  | SgExc (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | SgExt (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
-                        (fun o -> o#string) _x3
-                  | SgInc (_x0, _x1) -> (o#_Loc_t _x0)#module_type _x1
-                  | SgMod (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#module_type _x2
-                  | SgRecMod (_x0, _x1) -> (o#_Loc_t _x0)#module_binding _x1
-                  | SgMty (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#module_type _x2
-                  | SgOpn (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | SgTyp (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | SgVal (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#ctyp _x2
-                  | SgAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method patt : patt -> 'self_type =
-                  function
-                  | PaNil _x0 -> o#_Loc_t _x0
-                  | PaId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | PaAli (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
-                  | PaAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | PaAny _x0 -> o#_Loc_t _x0
-                  | PaApp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
-                  | PaArr (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
-                  | PaCom (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
-                  | PaSem (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
-                  | PaChr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | PaInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | PaInt32 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | PaInt64 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | PaNativeInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | PaFlo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | PaLab (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#patt _x2
-                  | PaOlb (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#patt _x2
-                  | PaOlbi (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#patt _x2)#expr _x3
-                  | PaOrp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
-                  | PaRng (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
-                  | PaRec (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
-                  | PaEq (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
-                  | PaStr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | PaTup (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
-                  | PaTyc (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#ctyp _x2
-                  | PaTyp (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | PaVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method module_type : module_type -> 'self_type =
-                  function
-                  | MtId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | MtFun (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#module_type _x2)#
-                        module_type _x3
-                  | MtQuo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | MtSig (_x0, _x1) -> (o#_Loc_t _x0)#sig_item _x1
-                  | MtWit (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#module_type _x1)#with_constr _x2
-                  | MtAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method module_expr : module_expr -> 'self_type =
-                  function
-                  | MeId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | MeApp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#module_expr _x1)#module_expr _x2
-                  | MeFun (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#module_type _x2)#
-                        module_expr _x3
-                  | MeStr (_x0, _x1) -> (o#_Loc_t _x0)#str_item _x1
-                  | MeTyc (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#module_expr _x1)#module_type _x2
-                  | MeAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method module_binding : module_binding -> 'self_type =
-                  function
-                  | MbNil _x0 -> o#_Loc_t _x0
-                  | MbAnd (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#module_binding _x1)#module_binding _x2
-                  | MbColEq (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#module_type _x2)#
-                        module_expr _x3
-                  | MbCol (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#module_type _x2
-                  | MbAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method meta_option :
-                  'a.
-                    ('self_type -> 'a -> 'self_type) ->
-                      'a meta_option -> 'self_type =
-                  fun _f_a ->
-                    function
-                    | ONone -> o
-                    | OSome _x0 -> _f_a o _x0
-                    | OAnt _x0 -> o#string _x0
-                method meta_list :
-                  'a.
-                    ('self_type -> 'a -> 'self_type) ->
-                      'a meta_list -> 'self_type =
-                  fun _f_a ->
-                    function
-                    | LNil -> o
-                    | LCons (_x0, _x1) ->
-                        (_f_a o _x0)#meta_list (fun o -> _f_a o) _x1
-                    | LAnt _x0 -> o#string _x0
-                method meta_bool : meta_bool -> 'self_type =
-                  function
-                  | BTrue -> o
-                  | BFalse -> o
-                  | BAnt _x0 -> o#string _x0
-                method match_case : match_case -> 'self_type =
-                  function
-                  | McNil _x0 -> o#_Loc_t _x0
-                  | McOr (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#match_case _x1)#match_case _x2
-                  | McArr (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#patt _x1)#expr _x2)#expr _x3
-                  | McAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method ident : ident -> 'self_type =
-                  function
-                  | IdAcc (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ident _x1)#ident _x2
-                  | IdApp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ident _x1)#ident _x2
-                  | IdLid (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | IdUid (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | IdAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method expr : expr -> 'self_type =
-                  function
-                  | ExNil _x0 -> o#_Loc_t _x0
-                  | ExId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | ExAcc (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
-                  | ExAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExApp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
-                  | ExAre (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
-                  | ExArr (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
-                  | ExSem (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
-                  | ExAsf _x0 -> o#_Loc_t _x0
-                  | ExAsr (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
-                  | ExAss (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
-                  | ExChr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExCoe (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#expr _x1)#ctyp _x2)#ctyp _x3
-                  | ExFlo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExFor (_x0, _x1, _x2, _x3, _x4, _x5) ->
-                      (((((o#_Loc_t _x0)#string _x1)#expr _x2)#expr _x3)#
-                         meta_bool _x4)#
-                        expr _x5
-                  | ExFun (_x0, _x1) -> (o#_Loc_t _x0)#match_case _x1
-                  | ExIfe (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#expr _x1)#expr _x2)#expr _x3
-                  | ExInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExInt32 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExInt64 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExNativeInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExLab (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#expr _x2
-                  | ExLaz (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
-                  | ExLet (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#expr _x3
-                  | ExLmd (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#module_expr _x2)#expr _x3
-                  | ExMat (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#match_case _x2
-                  | ExNew (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | ExObj (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
-                  | ExOlb (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#expr _x2
-                  | ExOvr (_x0, _x1) -> (o#_Loc_t _x0)#binding _x1
-                  | ExRec (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#binding _x1)#expr _x2
-                  | ExSeq (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
-                  | ExSnd (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#string _x2
-                  | ExSte (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
-                  | ExStr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExTry (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#match_case _x2
-                  | ExTup (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
-                  | ExCom (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
-                  | ExTyc (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#ctyp _x2
-                  | ExVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | ExWhi (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
-                method ctyp : ctyp -> 'self_type =
-                  function
-                  | TyNil _x0 -> o#_Loc_t _x0
-                  | TyAli (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyAny _x0 -> o#_Loc_t _x0
-                  | TyApp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyArr (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyCls (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | TyLab (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#ctyp _x2
-                  | TyId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
-                  | TyMan (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyDcl (_x0, _x1, _x2, _x3, _x4) ->
-                      ((((o#_Loc_t _x0)#string _x1)#list (fun o -> o#ctyp)
-                          _x2)#
-                         ctyp _x3)#
-                        list (fun o (_x0, _x1) -> (o#ctyp _x0)#ctyp _x1) _x4
-                  | TyObj (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#meta_bool _x2
-                  | TyOlb (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#string _x1)#ctyp _x2
-                  | TyPol (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyQuo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | TyQuP (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | TyQuM (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | TyVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                  | TyRec (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | TyCol (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TySem (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyCom (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TySum (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | TyOf (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyAnd (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyOr (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyPrv (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | TyMut (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | TyTup (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | TySta (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyVrnEq (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | TyVrnSup (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | TyVrnInf (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
-                  | TyVrnInfSup (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyAmp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyOfAmp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | TyAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method class_type : class_type -> 'self_type =
-                  function
-                  | CtNil _x0 -> o#_Loc_t _x0
-                  | CtCon (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
-                  | CtFun (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#class_type _x2
-                  | CtSig (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#class_sig_item _x2
-                  | CtAnd (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
-                  | CtCol (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
-                  | CtEq (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
-                  | CtAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method class_str_item : class_str_item -> 'self_type =
-                  function
-                  | CrNil _x0 -> o#_Loc_t _x0
-                  | CrSem (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_str_item _x1)#class_str_item _x2
-                  | CrCtr (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | CrInh (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_expr _x1)#string _x2
-                  | CrIni (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
-                  | CrMth (_x0, _x1, _x2, _x3, _x4) ->
-                      ((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3)#
-                        ctyp _x4
-                  | CrVal (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3
-                  | CrVir (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
-                  | CrVvr (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
-                  | CrAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method class_sig_item : class_sig_item -> 'self_type =
-                  function
-                  | CgNil _x0 -> o#_Loc_t _x0
-                  | CgCtr (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-                  | CgSem (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_sig_item _x1)#class_sig_item _x2
-                  | CgInh (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
-                  | CgMth (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
-                  | CgVal (_x0, _x1, _x2, _x3, _x4) ->
-                      ((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#meta_bool
-                         _x3)#
-                        ctyp _x4
-                  | CgVir (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
-                  | CgAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method class_expr : class_expr -> 'self_type =
-                  function
-                  | CeNil _x0 -> o#_Loc_t _x0
-                  | CeApp (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_expr _x1)#expr _x2
-                  | CeCon (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
-                  | CeFun (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#class_expr _x2
-                  | CeLet (_x0, _x1, _x2, _x3) ->
-                      (((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#class_expr
-                        _x3
-                  | CeStr (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
-                  | CeTyc (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_expr _x1)#class_type _x2
-                  | CeAnd (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
-                  | CeEq (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
-                  | CeAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-                method binding : binding -> 'self_type =
-                  function
-                  | BiNil _x0 -> o#_Loc_t _x0
-                  | BiAnd (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#binding _x1)#binding _x2
-                  | BiSem (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#binding _x1)#binding _x2
-                  | BiEq (_x0, _x1, _x2) ->
-                      ((o#_Loc_t _x0)#patt _x1)#expr _x2
-                  | BiAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
-              end
-            class c_expr f =
-              object inherit map as super
-                method expr = fun x -> f (super#expr x)
-              end
-            class c_patt f =
-              object inherit map as super
-                method patt = fun x -> f (super#patt x)
-              end
-            class c_ctyp f =
-              object inherit map as super
-                method ctyp = fun x -> f (super#ctyp x)
-              end
-            class c_str_item f =
-              object inherit map as super
-                method str_item = fun x -> f (super#str_item x)
-              end
-            class c_sig_item f =
-              object inherit map as super
-                method sig_item = fun x -> f (super#sig_item x)
-              end
-            class c_loc f =
-              object inherit map as super
-                method _Loc_t = fun x -> f (super#_Loc_t x)
-              end
-            let map_patt f ast = (new c_patt f)#patt ast
-            let map_loc f ast = (new c_loc f)#_Loc_t ast
-            let map_sig_item f ast = (new c_sig_item f)#sig_item ast
-            let map_str_item f ast = (new c_str_item f)#str_item ast
-            let map_ctyp f ast = (new c_ctyp f)#ctyp ast
-            let map_expr f ast = (new c_expr f)#expr ast
             let ghost = Loc.ghost
             let rec is_module_longident =
               function
@@ -9965,6 +5578,50 @@ module Struct =
                   (is_module_longident i1) && (is_module_longident i2)
               | Ast.IdUid (_, _) -> true
               | _ -> false
+            let ident_of_expr =
+              let error () =
+                invalid_arg
+                  "ident_of_expr: this expression is not an identifier" in
+              let rec self =
+                function
+                | Ast.ExApp (_loc, e1, e2) ->
+                    Ast.IdApp (_loc, self e1, self e2)
+                | Ast.ExAcc (_loc, e1, e2) ->
+                    Ast.IdAcc (_loc, self e1, self e2)
+                | Ast.ExId (_, (Ast.IdLid (_, _))) -> error ()
+                | Ast.ExId (_, i) ->
+                    if is_module_longident i then i else error ()
+                | _ -> error ()
+              in
+                function
+                | Ast.ExId (_, i) -> i
+                | Ast.ExApp (_, _, _) -> error ()
+                | t -> self t
+            let ident_of_ctyp =
+              let error () =
+                invalid_arg "ident_of_ctyp: this type is not an identifier" in
+              let rec self =
+                function
+                | Ast.TyApp (_loc, t1, t2) ->
+                    Ast.IdApp (_loc, self t1, self t2)
+                | Ast.TyId (_, (Ast.IdLid (_, _))) -> error ()
+                | Ast.TyId (_, i) ->
+                    if is_module_longident i then i else error ()
+                | _ -> error ()
+              in function | Ast.TyId (_, i) -> i | t -> self t
+            let ident_of_patt =
+              let error () =
+                invalid_arg
+                  "ident_of_patt: this pattern is not an identifier" in
+              let rec self =
+                function
+                | Ast.PaApp (_loc, p1, p2) ->
+                    Ast.IdApp (_loc, self p1, self p2)
+                | Ast.PaId (_, (Ast.IdLid (_, _))) -> error ()
+                | Ast.PaId (_, i) ->
+                    if is_module_longident i then i else error ()
+                | _ -> error ()
+              in function | Ast.PaId (_, i) -> i | p -> self p
             let rec is_irrefut_patt =
               function
               | Ast.PaId (_, (Ast.IdLid (_, _))) -> true
@@ -9973,8 +5630,7 @@ module Struct =
               | Ast.PaAli (_, x, y) ->
                   (is_irrefut_patt x) && (is_irrefut_patt y)
               | Ast.PaRec (_, p) -> is_irrefut_patt p
-              | Ast.PaEq (_, (Ast.PaId (_, (Ast.IdLid (_, _)))), p) ->
-                  is_irrefut_patt p
+              | Ast.PaEq (_, (Ast.IdLid (_, _)), p) -> is_irrefut_patt p
               | Ast.PaSem (_, p1, p2) ->
                   (is_irrefut_patt p1) && (is_irrefut_patt p2)
               | Ast.PaCom (_, p1, p2) ->
@@ -10005,37 +5661,6 @@ module Struct =
                   (is_expr_constructor e1) && (is_expr_constructor e2)
               | Ast.ExVrn (_, _) -> true
               | _ -> false
-            let ident_of_expr =
-              let error () =
-                invalid_arg
-                  "ident_of_expr: this expression is not an identifier" in
-              let rec self =
-                function
-                | Ast.ExApp (_loc, e1, e2) ->
-                    Ast.IdApp (_loc, self e1, self e2)
-                | Ast.ExAcc (_loc, e1, e2) ->
-                    Ast.IdAcc (_loc, self e1, self e2)
-                | Ast.ExId (_, (Ast.IdLid (_, _))) -> error ()
-                | Ast.ExId (_, i) ->
-                    if is_module_longident i then i else error ()
-                | _ -> error ()
-              in
-                function
-                | Ast.ExId (_, i) -> i
-                | Ast.ExApp (_, _, _) -> error ()
-                | t -> self t
-            let ident_of_ctyp =
-              let error () =
-                invalid_arg "ident_of_ctyp: this type is not an identifier" in
-              let rec self =
-                function
-                | Ast.TyApp (_loc, t1, t2) ->
-                    Ast.IdApp (_loc, self t1, self t2)
-                | Ast.TyId (_, (Ast.IdLid (_, _))) -> error ()
-                | Ast.TyId (_, i) ->
-                    if is_module_longident i then i else error ()
-                | _ -> error ()
-              in function | Ast.TyId (_, i) -> i | t -> self t
             let rec tyOr_of_list =
               function
               | [] -> Ast.TyNil ghost
@@ -10057,6 +5682,27 @@ module Struct =
               | t :: ts ->
                   let _loc = loc_of_ctyp t
                   in Ast.TySem (_loc, t, tySem_of_list ts)
+            let rec tyCom_of_list =
+              function
+              | [] -> Ast.TyNil ghost
+              | [ t ] -> t
+              | t :: ts ->
+                  let _loc = loc_of_ctyp t
+                  in Ast.TyCom (_loc, t, tyCom_of_list ts)
+            let rec tyAmp_of_list =
+              function
+              | [] -> Ast.TyNil ghost
+              | [ t ] -> t
+              | t :: ts ->
+                  let _loc = loc_of_ctyp t
+                  in Ast.TyAmp (_loc, t, tyAmp_of_list ts)
+            let rec tySta_of_list =
+              function
+              | [] -> Ast.TyNil ghost
+              | [ t ] -> t
+              | t :: ts ->
+                  let _loc = loc_of_ctyp t
+                  in Ast.TySta (_loc, t, tySta_of_list ts)
             let rec stSem_of_list =
               function
               | [] -> Ast.StNil ghost
@@ -10078,6 +5724,13 @@ module Struct =
               | b :: bs ->
                   let _loc = loc_of_binding b
                   in Ast.BiAnd (_loc, b, biAnd_of_list bs)
+            let rec rbSem_of_list =
+              function
+              | [] -> Ast.RbNil ghost
+              | [ b ] -> b
+              | b :: bs ->
+                  let _loc = loc_of_rec_binding b
+                  in Ast.RbSem (_loc, b, rbSem_of_list bs)
             let rec wcAnd_of_list =
               function
               | [] -> Ast.WcNil ghost
@@ -10162,13 +5815,6 @@ module Struct =
               | x :: xs ->
                   let _loc = loc_of_patt x
                   in Ast.PaCom (_loc, x, paCom_of_list xs)
-            let rec biSem_of_list =
-              function
-              | [] -> Ast.BiNil ghost
-              | [ x ] -> x
-              | x :: xs ->
-                  let _loc = loc_of_binding x
-                  in Ast.BiSem (_loc, x, biSem_of_list xs)
             let rec exSem_of_list =
               function
               | [] -> Ast.ExNil ghost
@@ -10203,97 +5849,5194 @@ module Struct =
             let binding_of_pel l = biAnd_of_list (List.map bi_of_pe l)
             let rec pel_of_binding =
               function
-              | Ast.BiAnd (_, b1, b2) ->
-                  (pel_of_binding b1) @ (pel_of_binding b2)
-              | Ast.BiEq (_, p, e) -> [ (p, e) ]
-              | Ast.BiSem (_, b1, b2) ->
-                  (pel_of_binding b1) @ (pel_of_binding b2)
-              | _ -> assert false
-            let rec list_of_binding x acc =
-              match x with
-              | Ast.BiAnd (_, b1, b2) | Ast.BiSem (_, b1, b2) ->
-                  list_of_binding b1 (list_of_binding b2 acc)
-              | t -> t :: acc
-            let rec list_of_with_constr x acc =
-              match x with
-              | Ast.WcAnd (_, w1, w2) ->
-                  list_of_with_constr w1 (list_of_with_constr w2 acc)
-              | t -> t :: acc
-            let rec list_of_ctyp x acc =
-              match x with
-              | Ast.TyNil _ -> acc
-              | Ast.TyAmp (_, x, y) | Ast.TyCom (_, x, y) |
-                  Ast.TySta (_, x, y) | Ast.TySem (_, x, y) |
-                  Ast.TyAnd (_, x, y) | Ast.TyOr (_, x, y) ->
-                  list_of_ctyp x (list_of_ctyp y acc)
-              | x -> x :: acc
-            let rec list_of_patt x acc =
-              match x with
-              | Ast.PaNil _ -> acc
-              | Ast.PaCom (_, x, y) | Ast.PaSem (_, x, y) ->
-                  list_of_patt x (list_of_patt y acc)
-              | x -> x :: acc
-            let rec list_of_expr x acc =
-              match x with
-              | Ast.ExNil _ -> acc
-              | Ast.ExCom (_, x, y) | Ast.ExSem (_, x, y) ->
-                  list_of_expr x (list_of_expr y acc)
-              | x -> x :: acc
-            let rec list_of_str_item x acc =
-              match x with
-              | Ast.StNil _ -> acc
-              | Ast.StSem (_, x, y) ->
-                  list_of_str_item x (list_of_str_item y acc)
-              | x -> x :: acc
-            let rec list_of_sig_item x acc =
-              match x with
-              | Ast.SgNil _ -> acc
-              | Ast.SgSem (_, x, y) ->
-                  list_of_sig_item x (list_of_sig_item y acc)
-              | x -> x :: acc
-            let rec list_of_class_sig_item x acc =
-              match x with
-              | Ast.CgNil _ -> acc
-              | Ast.CgSem (_, x, y) ->
-                  list_of_class_sig_item x (list_of_class_sig_item y acc)
-              | x -> x :: acc
-            let rec list_of_class_str_item x acc =
-              match x with
-              | Ast.CrNil _ -> acc
-              | Ast.CrSem (_, x, y) ->
-                  list_of_class_str_item x (list_of_class_str_item y acc)
-              | x -> x :: acc
-            let rec list_of_class_type x acc =
-              match x with
-              | Ast.CtAnd (_, x, y) ->
-                  list_of_class_type x (list_of_class_type y acc)
-              | x -> x :: acc
-            let rec list_of_class_expr x acc =
-              match x with
-              | Ast.CeAnd (_, x, y) ->
-                  list_of_class_expr x (list_of_class_expr y acc)
-              | x -> x :: acc
-            let rec list_of_module_expr x acc =
-              match x with
-              | Ast.MeApp (_, x, y) ->
-                  list_of_module_expr x (list_of_module_expr y acc)
-              | x -> x :: acc
-            let rec list_of_match_case x acc =
-              match x with
-              | Ast.McNil _ -> acc
-              | Ast.McOr (_, x, y) ->
-                  list_of_match_case x (list_of_match_case y acc)
-              | x -> x :: acc
-            let rec list_of_ident x acc =
-              match x with
-              | Ast.IdAcc (_, x, y) | Ast.IdApp (_, x, y) ->
-                  list_of_ident x (list_of_ident y acc)
-              | x -> x :: acc
-            let rec list_of_module_binding x acc =
-              match x with
-              | Ast.MbAnd (_, x, y) ->
-                  list_of_module_binding x (list_of_module_binding y acc)
-              | x -> x :: acc
+              | Ast.BiAnd (_, b1, b2) ->
+                  (pel_of_binding b1) @ (pel_of_binding b2)
+              | Ast.BiEq (_, p, e) -> [ (p, e) ]
+              | _ -> assert false
+            let rec list_of_binding x acc =
+              match x with
+              | Ast.BiAnd (_, b1, b2) ->
+                  list_of_binding b1 (list_of_binding b2 acc)
+              | t -> t :: acc
+            let rec list_of_rec_binding x acc =
+              match x with
+              | Ast.RbSem (_, b1, b2) ->
+                  list_of_rec_binding b1 (list_of_rec_binding b2 acc)
+              | t -> t :: acc
+            let rec list_of_with_constr x acc =
+              match x with
+              | Ast.WcAnd (_, w1, w2) ->
+                  list_of_with_constr w1 (list_of_with_constr w2 acc)
+              | t -> t :: acc
+            let rec list_of_ctyp x acc =
+              match x with
+              | Ast.TyNil _ -> acc
+              | Ast.TyAmp (_, x, y) | Ast.TyCom (_, x, y) |
+                  Ast.TySta (_, x, y) | Ast.TySem (_, x, y) |
+                  Ast.TyAnd (_, x, y) | Ast.TyOr (_, x, y) ->
+                  list_of_ctyp x (list_of_ctyp y acc)
+              | x -> x :: acc
+            let rec list_of_patt x acc =
+              match x with
+              | Ast.PaNil _ -> acc
+              | Ast.PaCom (_, x, y) | Ast.PaSem (_, x, y) ->
+                  list_of_patt x (list_of_patt y acc)
+              | x -> x :: acc
+            let rec list_of_expr x acc =
+              match x with
+              | Ast.ExNil _ -> acc
+              | Ast.ExCom (_, x, y) | Ast.ExSem (_, x, y) ->
+                  list_of_expr x (list_of_expr y acc)
+              | x -> x :: acc
+            let rec list_of_str_item x acc =
+              match x with
+              | Ast.StNil _ -> acc
+              | Ast.StSem (_, x, y) ->
+                  list_of_str_item x (list_of_str_item y acc)
+              | x -> x :: acc
+            let rec list_of_sig_item x acc =
+              match x with
+              | Ast.SgNil _ -> acc
+              | Ast.SgSem (_, x, y) ->
+                  list_of_sig_item x (list_of_sig_item y acc)
+              | x -> x :: acc
+            let rec list_of_class_sig_item x acc =
+              match x with
+              | Ast.CgNil _ -> acc
+              | Ast.CgSem (_, x, y) ->
+                  list_of_class_sig_item x (list_of_class_sig_item y acc)
+              | x -> x :: acc
+            let rec list_of_class_str_item x acc =
+              match x with
+              | Ast.CrNil _ -> acc
+              | Ast.CrSem (_, x, y) ->
+                  list_of_class_str_item x (list_of_class_str_item y acc)
+              | x -> x :: acc
+            let rec list_of_class_type x acc =
+              match x with
+              | Ast.CtAnd (_, x, y) ->
+                  list_of_class_type x (list_of_class_type y acc)
+              | x -> x :: acc
+            let rec list_of_class_expr x acc =
+              match x with
+              | Ast.CeAnd (_, x, y) ->
+                  list_of_class_expr x (list_of_class_expr y acc)
+              | x -> x :: acc
+            let rec list_of_module_expr x acc =
+              match x with
+              | Ast.MeApp (_, x, y) ->
+                  list_of_module_expr x (list_of_module_expr y acc)
+              | x -> x :: acc
+            let rec list_of_match_case x acc =
+              match x with
+              | Ast.McNil _ -> acc
+              | Ast.McOr (_, x, y) ->
+                  list_of_match_case x (list_of_match_case y acc)
+              | x -> x :: acc
+            let rec list_of_ident x acc =
+              match x with
+              | Ast.IdAcc (_, x, y) | Ast.IdApp (_, x, y) ->
+                  list_of_ident x (list_of_ident y acc)
+              | x -> x :: acc
+            let rec list_of_module_binding x acc =
+              match x with
+              | Ast.MbAnd (_, x, y) ->
+                  list_of_module_binding x (list_of_module_binding y acc)
+              | x -> x :: acc
+            module Meta =
+              struct
+                module type META_LOC =
+                  sig
+                    val meta_loc_patt : Loc.t -> Loc.t -> Ast.patt
+                    val meta_loc_expr : Loc.t -> Loc.t -> Ast.expr
+                  end
+                module MetaLoc =
+                  struct
+                    let meta_loc_patt _loc location =
+                      let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
+                      in
+                        Ast.PaApp (_loc,
+                          Ast.PaId (_loc,
+                            Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
+                              Ast.IdLid (_loc, "of_tuple"))),
+                          Ast.PaTup (_loc,
+                            Ast.PaCom (_loc,
+                              Ast.PaStr (_loc, Ast.safe_string_escaped a),
+                              Ast.PaCom (_loc,
+                                Ast.PaCom (_loc,
+                                  Ast.PaCom (_loc,
+                                    Ast.PaCom (_loc,
+                                      Ast.PaCom (_loc,
+                                        Ast.PaCom (_loc,
+                                          Ast.PaInt (_loc, string_of_int b),
+                                          Ast.PaInt (_loc, string_of_int c)),
+                                        Ast.PaInt (_loc, string_of_int d)),
+                                      Ast.PaInt (_loc, string_of_int e)),
+                                    Ast.PaInt (_loc, string_of_int f)),
+                                  Ast.PaInt (_loc, string_of_int g)),
+                                if h
+                                then
+                                  Ast.PaId (_loc, Ast.IdUid (_loc, "True"))
+                                else
+                                  Ast.PaId (_loc, Ast.IdUid (_loc, "False"))))))
+                    let meta_loc_expr _loc location =
+                      let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
+                      in
+                        Ast.ExApp (_loc,
+                          Ast.ExId (_loc,
+                            Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
+                              Ast.IdLid (_loc, "of_tuple"))),
+                          Ast.ExTup (_loc,
+                            Ast.ExCom (_loc,
+                              Ast.ExStr (_loc, Ast.safe_string_escaped a),
+                              Ast.ExCom (_loc,
+                                Ast.ExCom (_loc,
+                                  Ast.ExCom (_loc,
+                                    Ast.ExCom (_loc,
+                                      Ast.ExCom (_loc,
+                                        Ast.ExCom (_loc,
+                                          Ast.ExInt (_loc, string_of_int b),
+                                          Ast.ExInt (_loc, string_of_int c)),
+                                        Ast.ExInt (_loc, string_of_int d)),
+                                      Ast.ExInt (_loc, string_of_int e)),
+                                    Ast.ExInt (_loc, string_of_int f)),
+                                  Ast.ExInt (_loc, string_of_int g)),
+                                if h
+                                then
+                                  Ast.ExId (_loc, Ast.IdUid (_loc, "True"))
+                                else
+                                  Ast.ExId (_loc, Ast.IdUid (_loc, "False"))))))
+                  end
+                module MetaGhostLoc =
+                  struct
+                    let meta_loc_patt _loc _ =
+                      Ast.PaId (_loc,
+                        Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
+                          Ast.IdLid (_loc, "ghost")))
+                    let meta_loc_expr _loc _ =
+                      Ast.ExId (_loc,
+                        Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
+                          Ast.IdLid (_loc, "ghost")))
+                  end
+                module MetaLocVar =
+                  struct
+                    let meta_loc_patt _loc _ =
+                      Ast.PaId (_loc, Ast.IdLid (_loc, !Loc.name))
+                    let meta_loc_expr _loc _ =
+                      Ast.ExId (_loc, Ast.IdLid (_loc, !Loc.name))
+                  end
+                module Make (MetaLoc : META_LOC) =
+                  struct
+                    open MetaLoc
+                    let meta_acc_Loc_t = meta_loc_expr
+                    module Expr =
+                      struct
+                        let meta_string _loc s = Ast.ExStr (_loc, s)
+                        let meta_int _loc s = Ast.ExInt (_loc, s)
+                        let meta_float _loc s = Ast.ExFlo (_loc, s)
+                        let meta_char _loc s = Ast.ExChr (_loc, s)
+                        let meta_bool _loc =
+                          function
+                          | false ->
+                              Ast.ExId (_loc, Ast.IdUid (_loc, "False"))
+                          | true -> Ast.ExId (_loc, Ast.IdUid (_loc, "True"))
+                        let rec meta_list mf_a _loc =
+                          function
+                          | [] -> Ast.ExId (_loc, Ast.IdUid (_loc, "[]"))
+                          | x :: xs ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc, Ast.IdUid (_loc, "::")),
+                                  mf_a _loc x),
+                                meta_list mf_a _loc xs)
+                        let rec meta_binding _loc =
+                          function
+                          | Ast.BiAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.BiEq (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "BiEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.BiAnd (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "BiAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_binding _loc x1),
+                                meta_binding _loc x2)
+                          | Ast.BiNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "BiNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_class_expr _loc =
+                          function
+                          | Ast.CeAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.CeEq (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_class_expr _loc x2)
+                          | Ast.CeAnd (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_class_expr _loc x2)
+                          | Ast.CeTyc (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeTyc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CeStr (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeStr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_class_str_item _loc x2)
+                          | Ast.CeLet (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CeLet"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_meta_bool _loc x1),
+                                  meta_binding _loc x2),
+                                meta_class_expr _loc x3)
+                          | Ast.CeFun (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeFun"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_class_expr _loc x2)
+                          | Ast.CeCon (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CeCon"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_meta_bool _loc x1),
+                                  meta_ident _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CeApp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.CeNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "CeNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_class_sig_item _loc =
+                          function
+                          | Ast.CgAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.CgVir (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CgVir"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CgVal (x0, x1, x2, x3, x4) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExApp (_loc,
+                                        Ast.ExId (_loc,
+                                          Ast.IdAcc (_loc,
+                                            Ast.IdUid (_loc, "Ast"),
+                                            Ast.IdUid (_loc, "CgVal"))),
+                                        meta_acc_Loc_t _loc x0),
+                                      meta_string _loc x1),
+                                    meta_meta_bool _loc x2),
+                                  meta_meta_bool _loc x3),
+                                meta_ctyp _loc x4)
+                          | Ast.CgMth (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CgMth"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CgInh (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "CgInh"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_type _loc x1)
+                          | Ast.CgSem (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CgSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_sig_item _loc x1),
+                                meta_class_sig_item _loc x2)
+                          | Ast.CgCtr (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CgCtr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.CgNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "CgNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_class_str_item _loc =
+                          function
+                          | Ast.CrAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.CrVvr (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CrVvr"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CrVir (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CrVir"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CrVal (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CrVal"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.CrMth (x0, x1, x2, x3, x4) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExApp (_loc,
+                                        Ast.ExId (_loc,
+                                          Ast.IdAcc (_loc,
+                                            Ast.IdUid (_loc, "Ast"),
+                                            Ast.IdUid (_loc, "CrMth"))),
+                                        meta_acc_Loc_t _loc x0),
+                                      meta_string _loc x1),
+                                    meta_meta_bool _loc x2),
+                                  meta_expr _loc x3),
+                                meta_ctyp _loc x4)
+                          | Ast.CrIni (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "CrIni"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.CrInh (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CrInh"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_string _loc x2)
+                          | Ast.CrCtr (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CrCtr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.CrSem (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CrSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_str_item _loc x1),
+                                meta_class_str_item _loc x2)
+                          | Ast.CrNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "CrNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_class_type _loc =
+                          function
+                          | Ast.CtAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.CtEq (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_type _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CtCol (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtCol"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_type _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CtAnd (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_type _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CtSig (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtSig"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_class_sig_item _loc x2)
+                          | Ast.CtFun (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtFun"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CtCon (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CtCon"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_meta_bool _loc x1),
+                                  meta_ident _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CtNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "CtNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_ctyp _loc =
+                          function
+                          | Ast.TyAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.TyOfAmp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyOfAmp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyAmp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyAmp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyVrnInfSup (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyVrnInfSup"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyVrnInf (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyVrnInf"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyVrnSup (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyVrnSup"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyVrnEq (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyVrnEq"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TySta (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TySta"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyTup (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyTup"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyMut (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyMut"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyPrv (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyPrv"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyOr (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyOr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyAnd (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyOf (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyOf"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TySum (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TySum"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyCom (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyCom"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TySem (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TySem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyCol (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyCol"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyRec (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyRec"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyVrn (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyVrn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.TyQuM (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyQuM"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.TyQuP (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyQuP"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.TyQuo (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyQuo"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.TyPol (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyPol"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyOlb (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyOlb"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyObj (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyObj"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_meta_bool _loc x2)
+                          | Ast.TyDcl (x0, x1, x2, x3, x4) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExApp (_loc,
+                                        Ast.ExId (_loc,
+                                          Ast.IdAcc (_loc,
+                                            Ast.IdUid (_loc, "Ast"),
+                                            Ast.IdUid (_loc, "TyDcl"))),
+                                        meta_acc_Loc_t _loc x0),
+                                      meta_string _loc x1),
+                                    meta_list meta_ctyp _loc x2),
+                                  meta_ctyp _loc x3),
+                                meta_list
+                                  (fun _loc (x1, x2) ->
+                                     Ast.ExTup (_loc,
+                                       Ast.ExCom (_loc, meta_ctyp _loc x1,
+                                         meta_ctyp _loc x2)))
+                                  _loc x4)
+                          | Ast.TyMan (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyMan"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyId (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.TyLab (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyLab"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyCls (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyCls"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.TyArr (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyArr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyApp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyAny x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "TyAny"))),
+                                meta_acc_Loc_t _loc x0)
+                          | Ast.TyAli (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyAli"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "TyNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_expr _loc =
+                          function
+                          | Ast.ExWhi (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExWhi"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExVrn (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExVrn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExTyc (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExTyc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.ExCom (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExCom"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExTup (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExTup"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExTry (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExTry"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_match_case _loc x2)
+                          | Ast.ExStr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExStr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExSte (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExSte"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExSnd (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExSnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_string _loc x2)
+                          | Ast.ExSeq (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExSeq"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExRec (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExRec"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_rec_binding _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExOvr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExOvr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_rec_binding _loc x1)
+                          | Ast.ExOlb (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExOlb"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExObj (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExObj"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_class_str_item _loc x2)
+                          | Ast.ExNew (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExNew"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.ExMat (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExMat"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_match_case _loc x2)
+                          | Ast.ExLmd (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "ExLmd"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_module_expr _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.ExLet (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "ExLet"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_meta_bool _loc x1),
+                                  meta_binding _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.ExLaz (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExLaz"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExLab (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExLab"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExNativeInt (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExNativeInt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExInt64 (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExInt64"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExInt32 (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExInt32"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExInt (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExInt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExIfe (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "ExIfe"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_expr _loc x1),
+                                  meta_expr _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.ExFun (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExFun"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_match_case _loc x1)
+                          | Ast.ExFor (x0, x1, x2, x3, x4, x5) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExApp (_loc,
+                                        Ast.ExApp (_loc,
+                                          Ast.ExId (_loc,
+                                            Ast.IdAcc (_loc,
+                                              Ast.IdUid (_loc, "Ast"),
+                                              Ast.IdUid (_loc, "ExFor"))),
+                                          meta_acc_Loc_t _loc x0),
+                                        meta_string _loc x1),
+                                      meta_expr _loc x2),
+                                    meta_expr _loc x3),
+                                  meta_meta_bool _loc x4),
+                                meta_expr _loc x5)
+                          | Ast.ExFlo (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExFlo"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExCoe (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "ExCoe"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_expr _loc x1),
+                                  meta_ctyp _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.ExChr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExChr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExAss (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExAss"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExAsr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExAsr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExAsf x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "ExAsf"))),
+                                meta_acc_Loc_t _loc x0)
+                          | Ast.ExSem (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExArr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExArr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExAre (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExAre"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExApp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.ExAcc (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExAcc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExId (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.ExNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "ExNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_ident _loc =
+                          function
+                          | Ast.IdAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.IdUid (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "IdUid"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.IdLid (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "IdLid"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.IdApp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "IdApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_ident _loc x2)
+                          | Ast.IdAcc (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "IdAcc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_ident _loc x2)
+                        and meta_match_case _loc =
+                          function
+                          | Ast.McAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.McArr (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "McArr"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_patt _loc x1),
+                                  meta_expr _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.McOr (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "McOr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_match_case _loc x1),
+                                meta_match_case _loc x2)
+                          | Ast.McNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "McNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_meta_bool _loc =
+                          function
+                          | Ast.BAnt x0 -> Ast.ExAnt (_loc, x0)
+                          | Ast.BFalse ->
+                              Ast.ExId (_loc,
+                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                  Ast.IdUid (_loc, "BFalse")))
+                          | Ast.BTrue ->
+                              Ast.ExId (_loc,
+                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                  Ast.IdUid (_loc, "BTrue")))
+                        and meta_meta_list mf_a _loc =
+                          function
+                          | Ast.LAnt x0 -> Ast.ExAnt (_loc, x0)
+                          | Ast.LCons (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "LCons"))),
+                                  mf_a _loc x0),
+                                meta_meta_list mf_a _loc x1)
+                          | Ast.LNil ->
+                              Ast.ExId (_loc,
+                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                  Ast.IdUid (_loc, "LNil")))
+                        and meta_meta_option mf_a _loc =
+                          function
+                          | Ast.OAnt x0 -> Ast.ExAnt (_loc, x0)
+                          | Ast.OSome x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "OSome"))),
+                                mf_a _loc x0)
+                          | Ast.ONone ->
+                              Ast.ExId (_loc,
+                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                  Ast.IdUid (_loc, "ONone")))
+                        and meta_module_binding _loc =
+                          function
+                          | Ast.MbAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.MbCol (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MbCol"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.MbColEq (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "MbColEq"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_module_type _loc x2),
+                                meta_module_expr _loc x3)
+                          | Ast.MbAnd (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MbAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_module_binding _loc x1),
+                                meta_module_binding _loc x2)
+                          | Ast.MbNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "MbNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_module_expr _loc =
+                          function
+                          | Ast.MeAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.MeTyc (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MeTyc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_module_expr _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.MeStr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MeStr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_str_item _loc x1)
+                          | Ast.MeFun (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "MeFun"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_module_type _loc x2),
+                                meta_module_expr _loc x3)
+                          | Ast.MeApp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MeApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_module_expr _loc x1),
+                                meta_module_expr _loc x2)
+                          | Ast.MeId (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MeId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.MeNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "MeNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_module_type _loc =
+                          function
+                          | Ast.MtAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.MtWit (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MtWit"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_module_type _loc x1),
+                                meta_with_constr _loc x2)
+                          | Ast.MtSig (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MtSig"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_sig_item _loc x1)
+                          | Ast.MtQuo (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MtQuo"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.MtFun (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "MtFun"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_module_type _loc x2),
+                                meta_module_type _loc x3)
+                          | Ast.MtId (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MtId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.MtNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "MtNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_patt _loc =
+                          function
+                          | Ast.PaVrn (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaVrn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaTyp (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaTyp"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.PaTyc (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaTyc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.PaTup (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaTup"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_patt _loc x1)
+                          | Ast.PaStr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaStr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaEq (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaRec (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaRec"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_patt _loc x1)
+                          | Ast.PaRng (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaRng"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaOrp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaOrp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaOlbi (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "PaOlbi"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_patt _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.PaOlb (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaOlb"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaLab (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaLab"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaFlo (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaFlo"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaNativeInt (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaNativeInt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaInt64 (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaInt64"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaInt32 (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaInt32"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaInt (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaInt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaChr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaChr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaSem (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaCom (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaCom"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaArr (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaArr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_patt _loc x1)
+                          | Ast.PaApp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaAny x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "PaAny"))),
+                                meta_acc_Loc_t _loc x0)
+                          | Ast.PaAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.PaAli (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaAli"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaId (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.PaNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "PaNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_rec_binding _loc =
+                          function
+                          | Ast.RbAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.RbEq (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "RbEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.RbSem (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "RbSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_rec_binding _loc x1),
+                                meta_rec_binding _loc x2)
+                          | Ast.RbNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "RbNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_sig_item _loc =
+                          function
+                          | Ast.SgAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.SgVal (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgVal"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.SgTyp (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgTyp"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.SgOpn (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgOpn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.SgMty (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgMty"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.SgRecMod (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgRecMod"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_module_binding _loc x1)
+                          | Ast.SgMod (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgMod"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.SgInc (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgInc"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_module_type _loc x1)
+                          | Ast.SgExt (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "SgExt"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_ctyp _loc x2),
+                                meta_meta_list meta_string _loc x3)
+                          | Ast.SgExc (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgExc"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.SgDir (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgDir"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.SgSem (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_sig_item _loc x1),
+                                meta_sig_item _loc x2)
+                          | Ast.SgClt (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgClt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_type _loc x1)
+                          | Ast.SgCls (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgCls"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_type _loc x1)
+                          | Ast.SgNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "SgNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_str_item _loc =
+                          function
+                          | Ast.StAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.StVal (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StVal"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_meta_bool _loc x1),
+                                meta_binding _loc x2)
+                          | Ast.StTyp (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StTyp"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.StOpn (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StOpn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.StMty (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StMty"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.StRecMod (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StRecMod"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_module_binding _loc x1)
+                          | Ast.StMod (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StMod"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_expr _loc x2)
+                          | Ast.StInc (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StInc"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_module_expr _loc x1)
+                          | Ast.StExt (x0, x1, x2, x3) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExApp (_loc,
+                                      Ast.ExId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "StExt"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_ctyp _loc x2),
+                                meta_meta_list meta_string _loc x3)
+                          | Ast.StExp (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StExp"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.StExc (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StExc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_meta_option meta_ident _loc x2)
+                          | Ast.StDir (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StDir"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.StSem (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_str_item _loc x1),
+                                meta_str_item _loc x2)
+                          | Ast.StClt (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StClt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_type _loc x1)
+                          | Ast.StCls (x0, x1) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StCls"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_expr _loc x1)
+                          | Ast.StNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "StNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_with_constr _loc =
+                          function
+                          | Ast.WcAnt (x0, x1) -> Ast.ExAnt (x0, x1)
+                          | Ast.WcAnd (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "WcAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_with_constr _loc x1),
+                                meta_with_constr _loc x2)
+                          | Ast.WcMod (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "WcMod"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_ident _loc x2)
+                          | Ast.WcTyp (x0, x1, x2) ->
+                              Ast.ExApp (_loc,
+                                Ast.ExApp (_loc,
+                                  Ast.ExApp (_loc,
+                                    Ast.ExId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "WcTyp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.WcNil x0 ->
+                              Ast.ExApp (_loc,
+                                Ast.ExId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "WcNil"))),
+                                meta_acc_Loc_t _loc x0)
+                      end
+                    let meta_acc_Loc_t = meta_loc_patt
+                    module Patt =
+                      struct
+                        let meta_string _loc s = Ast.PaStr (_loc, s)
+                        let meta_int _loc s = Ast.PaInt (_loc, s)
+                        let meta_float _loc s = Ast.PaFlo (_loc, s)
+                        let meta_char _loc s = Ast.PaChr (_loc, s)
+                        let meta_bool _loc =
+                          function
+                          | false ->
+                              Ast.PaId (_loc, Ast.IdUid (_loc, "False"))
+                          | true -> Ast.PaId (_loc, Ast.IdUid (_loc, "True"))
+                        let rec meta_list mf_a _loc =
+                          function
+                          | [] -> Ast.PaId (_loc, Ast.IdUid (_loc, "[]"))
+                          | x :: xs ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc, Ast.IdUid (_loc, "::")),
+                                  mf_a _loc x),
+                                meta_list mf_a _loc xs)
+                        let rec meta_binding _loc =
+                          function
+                          | Ast.BiAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.BiEq (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "BiEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.BiAnd (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "BiAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_binding _loc x1),
+                                meta_binding _loc x2)
+                          | Ast.BiNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "BiNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_class_expr _loc =
+                          function
+                          | Ast.CeAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.CeEq (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_class_expr _loc x2)
+                          | Ast.CeAnd (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_class_expr _loc x2)
+                          | Ast.CeTyc (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeTyc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CeStr (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeStr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_class_str_item _loc x2)
+                          | Ast.CeLet (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CeLet"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_meta_bool _loc x1),
+                                  meta_binding _loc x2),
+                                meta_class_expr _loc x3)
+                          | Ast.CeFun (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeFun"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_class_expr _loc x2)
+                          | Ast.CeCon (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CeCon"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_meta_bool _loc x1),
+                                  meta_ident _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CeApp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CeApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.CeNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "CeNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_class_sig_item _loc =
+                          function
+                          | Ast.CgAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.CgVir (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CgVir"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CgVal (x0, x1, x2, x3, x4) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaApp (_loc,
+                                        Ast.PaId (_loc,
+                                          Ast.IdAcc (_loc,
+                                            Ast.IdUid (_loc, "Ast"),
+                                            Ast.IdUid (_loc, "CgVal"))),
+                                        meta_acc_Loc_t _loc x0),
+                                      meta_string _loc x1),
+                                    meta_meta_bool _loc x2),
+                                  meta_meta_bool _loc x3),
+                                meta_ctyp _loc x4)
+                          | Ast.CgMth (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CgMth"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CgInh (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "CgInh"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_type _loc x1)
+                          | Ast.CgSem (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CgSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_sig_item _loc x1),
+                                meta_class_sig_item _loc x2)
+                          | Ast.CgCtr (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CgCtr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.CgNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "CgNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_class_str_item _loc =
+                          function
+                          | Ast.CrAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.CrVvr (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CrVvr"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CrVir (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CrVir"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CrVal (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CrVal"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_meta_bool _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.CrMth (x0, x1, x2, x3, x4) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaApp (_loc,
+                                        Ast.PaId (_loc,
+                                          Ast.IdAcc (_loc,
+                                            Ast.IdUid (_loc, "Ast"),
+                                            Ast.IdUid (_loc, "CrMth"))),
+                                        meta_acc_Loc_t _loc x0),
+                                      meta_string _loc x1),
+                                    meta_meta_bool _loc x2),
+                                  meta_expr _loc x3),
+                                meta_ctyp _loc x4)
+                          | Ast.CrIni (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "CrIni"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.CrInh (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CrInh"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_expr _loc x1),
+                                meta_string _loc x2)
+                          | Ast.CrCtr (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CrCtr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.CrSem (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CrSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_str_item _loc x1),
+                                meta_class_str_item _loc x2)
+                          | Ast.CrNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "CrNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_class_type _loc =
+                          function
+                          | Ast.CtAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.CtEq (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_type _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CtCol (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtCol"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_type _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CtAnd (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_class_type _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CtSig (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtSig"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_class_sig_item _loc x2)
+                          | Ast.CtFun (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "CtFun"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_class_type _loc x2)
+                          | Ast.CtCon (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "CtCon"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_meta_bool _loc x1),
+                                  meta_ident _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.CtNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "CtNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_ctyp _loc =
+                          function
+                          | Ast.TyAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.TyOfAmp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyOfAmp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyAmp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyAmp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyVrnInfSup (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyVrnInfSup"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyVrnInf (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyVrnInf"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyVrnSup (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyVrnSup"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyVrnEq (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyVrnEq"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TySta (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TySta"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyTup (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyTup"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyMut (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyMut"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyPrv (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyPrv"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyOr (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyOr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyAnd (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyOf (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyOf"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TySum (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TySum"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyCom (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyCom"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TySem (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TySem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyCol (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyCol"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyRec (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyRec"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.TyVrn (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyVrn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.TyQuM (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyQuM"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.TyQuP (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyQuP"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.TyQuo (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyQuo"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.TyPol (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyPol"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyOlb (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyOlb"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyObj (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyObj"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_meta_bool _loc x2)
+                          | Ast.TyDcl (x0, x1, x2, x3, x4) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaApp (_loc,
+                                        Ast.PaId (_loc,
+                                          Ast.IdAcc (_loc,
+                                            Ast.IdUid (_loc, "Ast"),
+                                            Ast.IdUid (_loc, "TyDcl"))),
+                                        meta_acc_Loc_t _loc x0),
+                                      meta_string _loc x1),
+                                    meta_list meta_ctyp _loc x2),
+                                  meta_ctyp _loc x3),
+                                meta_list
+                                  (fun _loc (x1, x2) ->
+                                     Ast.PaTup (_loc,
+                                       Ast.PaCom (_loc, meta_ctyp _loc x1,
+                                         meta_ctyp _loc x2)))
+                                  _loc x4)
+                          | Ast.TyMan (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyMan"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyId (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.TyLab (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyLab"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyCls (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "TyCls"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.TyArr (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyArr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyApp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyAny x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "TyAny"))),
+                                meta_acc_Loc_t _loc x0)
+                          | Ast.TyAli (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "TyAli"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.TyNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "TyNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_expr _loc =
+                          function
+                          | Ast.ExWhi (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExWhi"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExVrn (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExVrn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExTyc (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExTyc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.ExCom (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExCom"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExTup (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExTup"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExTry (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExTry"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_match_case _loc x2)
+                          | Ast.ExStr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExStr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExSte (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExSte"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExSnd (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExSnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_string _loc x2)
+                          | Ast.ExSeq (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExSeq"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExRec (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExRec"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_rec_binding _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExOvr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExOvr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_rec_binding _loc x1)
+                          | Ast.ExOlb (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExOlb"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExObj (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExObj"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_class_str_item _loc x2)
+                          | Ast.ExNew (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExNew"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.ExMat (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExMat"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_match_case _loc x2)
+                          | Ast.ExLmd (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "ExLmd"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_module_expr _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.ExLet (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "ExLet"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_meta_bool _loc x1),
+                                  meta_binding _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.ExLaz (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExLaz"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExLab (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExLab"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExNativeInt (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExNativeInt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExInt64 (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExInt64"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExInt32 (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExInt32"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExInt (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExInt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExIfe (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "ExIfe"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_expr _loc x1),
+                                  meta_expr _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.ExFun (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExFun"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_match_case _loc x1)
+                          | Ast.ExFor (x0, x1, x2, x3, x4, x5) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaApp (_loc,
+                                        Ast.PaApp (_loc,
+                                          Ast.PaId (_loc,
+                                            Ast.IdAcc (_loc,
+                                              Ast.IdUid (_loc, "Ast"),
+                                              Ast.IdUid (_loc, "ExFor"))),
+                                          meta_acc_Loc_t _loc x0),
+                                        meta_string _loc x1),
+                                      meta_expr _loc x2),
+                                    meta_expr _loc x3),
+                                  meta_meta_bool _loc x4),
+                                meta_expr _loc x5)
+                          | Ast.ExFlo (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExFlo"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExCoe (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "ExCoe"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_expr _loc x1),
+                                  meta_ctyp _loc x2),
+                                meta_ctyp _loc x3)
+                          | Ast.ExChr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExChr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.ExAss (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExAss"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExAsr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExAsr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExAsf x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "ExAsf"))),
+                                meta_acc_Loc_t _loc x0)
+                          | Ast.ExSem (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExArr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExArr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.ExAre (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExAre"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExApp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.ExAcc (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "ExAcc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_expr _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.ExId (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "ExId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.ExNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "ExNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_ident _loc =
+                          function
+                          | Ast.IdAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.IdUid (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "IdUid"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.IdLid (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "IdLid"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.IdApp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "IdApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_ident _loc x2)
+                          | Ast.IdAcc (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "IdAcc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_ident _loc x2)
+                        and meta_match_case _loc =
+                          function
+                          | Ast.McAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.McArr (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "McArr"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_patt _loc x1),
+                                  meta_expr _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.McOr (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "McOr"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_match_case _loc x1),
+                                meta_match_case _loc x2)
+                          | Ast.McNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "McNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_meta_bool _loc =
+                          function
+                          | Ast.BAnt x0 -> Ast.PaAnt (_loc, x0)
+                          | Ast.BFalse ->
+                              Ast.PaId (_loc,
+                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                  Ast.IdUid (_loc, "BFalse")))
+                          | Ast.BTrue ->
+                              Ast.PaId (_loc,
+                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                  Ast.IdUid (_loc, "BTrue")))
+                        and meta_meta_list mf_a _loc =
+                          function
+                          | Ast.LAnt x0 -> Ast.PaAnt (_loc, x0)
+                          | Ast.LCons (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "LCons"))),
+                                  mf_a _loc x0),
+                                meta_meta_list mf_a _loc x1)
+                          | Ast.LNil ->
+                              Ast.PaId (_loc,
+                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                  Ast.IdUid (_loc, "LNil")))
+                        and meta_meta_option mf_a _loc =
+                          function
+                          | Ast.OAnt x0 -> Ast.PaAnt (_loc, x0)
+                          | Ast.OSome x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "OSome"))),
+                                mf_a _loc x0)
+                          | Ast.ONone ->
+                              Ast.PaId (_loc,
+                                Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                  Ast.IdUid (_loc, "ONone")))
+                        and meta_module_binding _loc =
+                          function
+                          | Ast.MbAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.MbCol (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MbCol"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.MbColEq (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "MbColEq"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_module_type _loc x2),
+                                meta_module_expr _loc x3)
+                          | Ast.MbAnd (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MbAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_module_binding _loc x1),
+                                meta_module_binding _loc x2)
+                          | Ast.MbNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "MbNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_module_expr _loc =
+                          function
+                          | Ast.MeAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.MeTyc (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MeTyc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_module_expr _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.MeStr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MeStr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_str_item _loc x1)
+                          | Ast.MeFun (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "MeFun"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_module_type _loc x2),
+                                meta_module_expr _loc x3)
+                          | Ast.MeApp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MeApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_module_expr _loc x1),
+                                meta_module_expr _loc x2)
+                          | Ast.MeId (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MeId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.MeNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "MeNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_module_type _loc =
+                          function
+                          | Ast.MtAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.MtWit (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "MtWit"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_module_type _loc x1),
+                                meta_with_constr _loc x2)
+                          | Ast.MtSig (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MtSig"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_sig_item _loc x1)
+                          | Ast.MtQuo (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MtQuo"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.MtFun (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "MtFun"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_module_type _loc x2),
+                                meta_module_type _loc x3)
+                          | Ast.MtId (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "MtId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.MtNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "MtNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_patt _loc =
+                          function
+                          | Ast.PaVrn (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaVrn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaTyp (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaTyp"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.PaTyc (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaTyc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.PaTup (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaTup"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_patt _loc x1)
+                          | Ast.PaStr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaStr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaEq (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaRec (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaRec"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_patt _loc x1)
+                          | Ast.PaRng (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaRng"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaOrp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaOrp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaOlbi (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "PaOlbi"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_patt _loc x2),
+                                meta_expr _loc x3)
+                          | Ast.PaOlb (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaOlb"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaLab (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaLab"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaFlo (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaFlo"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaNativeInt (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaNativeInt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaInt64 (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaInt64"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaInt32 (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaInt32"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaInt (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaInt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaChr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaChr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_string _loc x1)
+                          | Ast.PaSem (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaCom (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaCom"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaArr (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaArr"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_patt _loc x1)
+                          | Ast.PaApp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaApp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaAny x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "PaAny"))),
+                                meta_acc_Loc_t _loc x0)
+                          | Ast.PaAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.PaAli (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "PaAli"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_patt _loc x1),
+                                meta_patt _loc x2)
+                          | Ast.PaId (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "PaId"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.PaNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "PaNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_rec_binding _loc =
+                          function
+                          | Ast.RbAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.RbEq (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "RbEq"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.RbSem (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "RbSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_rec_binding _loc x1),
+                                meta_rec_binding _loc x2)
+                          | Ast.RbNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "RbNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_sig_item _loc =
+                          function
+                          | Ast.SgAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.SgVal (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgVal"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.SgTyp (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgTyp"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.SgOpn (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgOpn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.SgMty (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgMty"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.SgRecMod (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgRecMod"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_module_binding _loc x1)
+                          | Ast.SgMod (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgMod"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.SgInc (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgInc"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_module_type _loc x1)
+                          | Ast.SgExt (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "SgExt"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_ctyp _loc x2),
+                                meta_meta_list meta_string _loc x3)
+                          | Ast.SgExc (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgExc"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.SgDir (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgDir"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.SgSem (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "SgSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_sig_item _loc x1),
+                                meta_sig_item _loc x2)
+                          | Ast.SgClt (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgClt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_type _loc x1)
+                          | Ast.SgCls (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "SgCls"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_type _loc x1)
+                          | Ast.SgNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "SgNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_str_item _loc =
+                          function
+                          | Ast.StAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.StVal (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StVal"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_meta_bool _loc x1),
+                                meta_binding _loc x2)
+                          | Ast.StTyp (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StTyp"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ctyp _loc x1)
+                          | Ast.StOpn (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StOpn"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_ident _loc x1)
+                          | Ast.StMty (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StMty"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_type _loc x2)
+                          | Ast.StRecMod (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StRecMod"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_module_binding _loc x1)
+                          | Ast.StMod (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StMod"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_module_expr _loc x2)
+                          | Ast.StInc (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StInc"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_module_expr _loc x1)
+                          | Ast.StExt (x0, x1, x2, x3) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaApp (_loc,
+                                      Ast.PaId (_loc,
+                                        Ast.IdAcc (_loc,
+                                          Ast.IdUid (_loc, "Ast"),
+                                          Ast.IdUid (_loc, "StExt"))),
+                                      meta_acc_Loc_t _loc x0),
+                                    meta_string _loc x1),
+                                  meta_ctyp _loc x2),
+                                meta_meta_list meta_string _loc x3)
+                          | Ast.StExp (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StExp"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_expr _loc x1)
+                          | Ast.StExc (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StExc"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_meta_option meta_ident _loc x2)
+                          | Ast.StDir (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StDir"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_string _loc x1),
+                                meta_expr _loc x2)
+                          | Ast.StSem (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "StSem"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_str_item _loc x1),
+                                meta_str_item _loc x2)
+                          | Ast.StClt (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StClt"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_type _loc x1)
+                          | Ast.StCls (x0, x1) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaId (_loc,
+                                    Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                      Ast.IdUid (_loc, "StCls"))),
+                                  meta_acc_Loc_t _loc x0),
+                                meta_class_expr _loc x1)
+                          | Ast.StNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "StNil"))),
+                                meta_acc_Loc_t _loc x0)
+                        and meta_with_constr _loc =
+                          function
+                          | Ast.WcAnt (x0, x1) -> Ast.PaAnt (x0, x1)
+                          | Ast.WcAnd (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "WcAnd"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_with_constr _loc x1),
+                                meta_with_constr _loc x2)
+                          | Ast.WcMod (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "WcMod"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ident _loc x1),
+                                meta_ident _loc x2)
+                          | Ast.WcTyp (x0, x1, x2) ->
+                              Ast.PaApp (_loc,
+                                Ast.PaApp (_loc,
+                                  Ast.PaApp (_loc,
+                                    Ast.PaId (_loc,
+                                      Ast.IdAcc (_loc,
+                                        Ast.IdUid (_loc, "Ast"),
+                                        Ast.IdUid (_loc, "WcTyp"))),
+                                    meta_acc_Loc_t _loc x0),
+                                  meta_ctyp _loc x1),
+                                meta_ctyp _loc x2)
+                          | Ast.WcNil x0 ->
+                              Ast.PaApp (_loc,
+                                Ast.PaId (_loc,
+                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                    Ast.IdUid (_loc, "WcNil"))),
+                                meta_acc_Loc_t _loc x0)
+                      end
+                  end
+              end
+            class map =
+              object (o)
+                method string = fun x -> (x : string)
+                method int = fun x -> (x : int)
+                method float = fun x -> (x : float)
+                method bool = fun x -> (x : bool)
+                method list : 'a 'b. ('a -> 'b) -> 'a list -> 'b list = List.
+                  map
+                method option : 'a 'b. ('a -> 'b) -> 'a option -> 'b option =
+                  fun f -> function | None -> None | Some x -> Some (f x)
+                method array : 'a 'b. ('a -> 'b) -> 'a array -> 'b array =
+                  Array.map
+                method ref : 'a 'b. ('a -> 'b) -> 'a ref -> 'b ref =
+                  fun f { contents = x } -> { contents = f x; }
+                method _Loc_t : Loc.t -> Loc.t = fun x -> x
+                method with_constr : with_constr -> with_constr =
+                  function
+                  | WcNil _x0 -> WcNil (o#_Loc_t _x0)
+                  | WcTyp (_x0, _x1, _x2) ->
+                      WcTyp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | WcMod (_x0, _x1, _x2) ->
+                      WcMod (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
+                  | WcAnd (_x0, _x1, _x2) ->
+                      WcAnd (o#_Loc_t _x0, o#with_constr _x1,
+                        o#with_constr _x2)
+                  | WcAnt (_x0, _x1) -> WcAnt (o#_Loc_t _x0, o#string _x1)
+                method str_item : str_item -> str_item =
+                  function
+                  | StNil _x0 -> StNil (o#_Loc_t _x0)
+                  | StCls (_x0, _x1) ->
+                      StCls (o#_Loc_t _x0, o#class_expr _x1)
+                  | StClt (_x0, _x1) ->
+                      StClt (o#_Loc_t _x0, o#class_type _x1)
+                  | StSem (_x0, _x1, _x2) ->
+                      StSem (o#_Loc_t _x0, o#str_item _x1, o#str_item _x2)
+                  | StDir (_x0, _x1, _x2) ->
+                      StDir (o#_Loc_t _x0, o#string _x1, o#expr _x2)
+                  | StExc (_x0, _x1, _x2) ->
+                      StExc (o#_Loc_t _x0, o#ctyp _x1,
+                        o#meta_option o#ident _x2)
+                  | StExp (_x0, _x1) -> StExp (o#_Loc_t _x0, o#expr _x1)
+                  | StExt (_x0, _x1, _x2, _x3) ->
+                      StExt (o#_Loc_t _x0, o#string _x1, o#ctyp _x2,
+                        o#meta_list o#string _x3)
+                  | StInc (_x0, _x1) ->
+                      StInc (o#_Loc_t _x0, o#module_expr _x1)
+                  | StMod (_x0, _x1, _x2) ->
+                      StMod (o#_Loc_t _x0, o#string _x1, o#module_expr _x2)
+                  | StRecMod (_x0, _x1) ->
+                      StRecMod (o#_Loc_t _x0, o#module_binding _x1)
+                  | StMty (_x0, _x1, _x2) ->
+                      StMty (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
+                  | StOpn (_x0, _x1) -> StOpn (o#_Loc_t _x0, o#ident _x1)
+                  | StTyp (_x0, _x1) -> StTyp (o#_Loc_t _x0, o#ctyp _x1)
+                  | StVal (_x0, _x1, _x2) ->
+                      StVal (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2)
+                  | StAnt (_x0, _x1) -> StAnt (o#_Loc_t _x0, o#string _x1)
+                method sig_item : sig_item -> sig_item =
+                  function
+                  | SgNil _x0 -> SgNil (o#_Loc_t _x0)
+                  | SgCls (_x0, _x1) ->
+                      SgCls (o#_Loc_t _x0, o#class_type _x1)
+                  | SgClt (_x0, _x1) ->
+                      SgClt (o#_Loc_t _x0, o#class_type _x1)
+                  | SgSem (_x0, _x1, _x2) ->
+                      SgSem (o#_Loc_t _x0, o#sig_item _x1, o#sig_item _x2)
+                  | SgDir (_x0, _x1, _x2) ->
+                      SgDir (o#_Loc_t _x0, o#string _x1, o#expr _x2)
+                  | SgExc (_x0, _x1) -> SgExc (o#_Loc_t _x0, o#ctyp _x1)
+                  | SgExt (_x0, _x1, _x2, _x3) ->
+                      SgExt (o#_Loc_t _x0, o#string _x1, o#ctyp _x2,
+                        o#meta_list o#string _x3)
+                  | SgInc (_x0, _x1) ->
+                      SgInc (o#_Loc_t _x0, o#module_type _x1)
+                  | SgMod (_x0, _x1, _x2) ->
+                      SgMod (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
+                  | SgRecMod (_x0, _x1) ->
+                      SgRecMod (o#_Loc_t _x0, o#module_binding _x1)
+                  | SgMty (_x0, _x1, _x2) ->
+                      SgMty (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
+                  | SgOpn (_x0, _x1) -> SgOpn (o#_Loc_t _x0, o#ident _x1)
+                  | SgTyp (_x0, _x1) -> SgTyp (o#_Loc_t _x0, o#ctyp _x1)
+                  | SgVal (_x0, _x1, _x2) ->
+                      SgVal (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
+                  | SgAnt (_x0, _x1) -> SgAnt (o#_Loc_t _x0, o#string _x1)
+                method rec_binding : rec_binding -> rec_binding =
+                  function
+                  | RbNil _x0 -> RbNil (o#_Loc_t _x0)
+                  | RbSem (_x0, _x1, _x2) ->
+                      RbSem (o#_Loc_t _x0, o#rec_binding _x1,
+                        o#rec_binding _x2)
+                  | RbEq (_x0, _x1, _x2) ->
+                      RbEq (o#_Loc_t _x0, o#ident _x1, o#expr _x2)
+                  | RbAnt (_x0, _x1) -> RbAnt (o#_Loc_t _x0, o#string _x1)
+                method patt : patt -> patt =
+                  function
+                  | PaNil _x0 -> PaNil (o#_Loc_t _x0)
+                  | PaId (_x0, _x1) -> PaId (o#_Loc_t _x0, o#ident _x1)
+                  | PaAli (_x0, _x1, _x2) ->
+                      PaAli (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
+                  | PaAnt (_x0, _x1) -> PaAnt (o#_Loc_t _x0, o#string _x1)
+                  | PaAny _x0 -> PaAny (o#_Loc_t _x0)
+                  | PaApp (_x0, _x1, _x2) ->
+                      PaApp (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
+                  | PaArr (_x0, _x1) -> PaArr (o#_Loc_t _x0, o#patt _x1)
+                  | PaCom (_x0, _x1, _x2) ->
+                      PaCom (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
+                  | PaSem (_x0, _x1, _x2) ->
+                      PaSem (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
+                  | PaChr (_x0, _x1) -> PaChr (o#_Loc_t _x0, o#string _x1)
+                  | PaInt (_x0, _x1) -> PaInt (o#_Loc_t _x0, o#string _x1)
+                  | PaInt32 (_x0, _x1) ->
+                      PaInt32 (o#_Loc_t _x0, o#string _x1)
+                  | PaInt64 (_x0, _x1) ->
+                      PaInt64 (o#_Loc_t _x0, o#string _x1)
+                  | PaNativeInt (_x0, _x1) ->
+                      PaNativeInt (o#_Loc_t _x0, o#string _x1)
+                  | PaFlo (_x0, _x1) -> PaFlo (o#_Loc_t _x0, o#string _x1)
+                  | PaLab (_x0, _x1, _x2) ->
+                      PaLab (o#_Loc_t _x0, o#string _x1, o#patt _x2)
+                  | PaOlb (_x0, _x1, _x2) ->
+                      PaOlb (o#_Loc_t _x0, o#string _x1, o#patt _x2)
+                  | PaOlbi (_x0, _x1, _x2, _x3) ->
+                      PaOlbi (o#_Loc_t _x0, o#string _x1, o#patt _x2,
+                        o#expr _x3)
+                  | PaOrp (_x0, _x1, _x2) ->
+                      PaOrp (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
+                  | PaRng (_x0, _x1, _x2) ->
+                      PaRng (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
+                  | PaRec (_x0, _x1) -> PaRec (o#_Loc_t _x0, o#patt _x1)
+                  | PaEq (_x0, _x1, _x2) ->
+                      PaEq (o#_Loc_t _x0, o#ident _x1, o#patt _x2)
+                  | PaStr (_x0, _x1) -> PaStr (o#_Loc_t _x0, o#string _x1)
+                  | PaTup (_x0, _x1) -> PaTup (o#_Loc_t _x0, o#patt _x1)
+                  | PaTyc (_x0, _x1, _x2) ->
+                      PaTyc (o#_Loc_t _x0, o#patt _x1, o#ctyp _x2)
+                  | PaTyp (_x0, _x1) -> PaTyp (o#_Loc_t _x0, o#ident _x1)
+                  | PaVrn (_x0, _x1) -> PaVrn (o#_Loc_t _x0, o#string _x1)
+                method module_type : module_type -> module_type =
+                  function
+                  | MtNil _x0 -> MtNil (o#_Loc_t _x0)
+                  | MtId (_x0, _x1) -> MtId (o#_Loc_t _x0, o#ident _x1)
+                  | MtFun (_x0, _x1, _x2, _x3) ->
+                      MtFun (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
+                        o#module_type _x3)
+                  | MtQuo (_x0, _x1) -> MtQuo (o#_Loc_t _x0, o#string _x1)
+                  | MtSig (_x0, _x1) -> MtSig (o#_Loc_t _x0, o#sig_item _x1)
+                  | MtWit (_x0, _x1, _x2) ->
+                      MtWit (o#_Loc_t _x0, o#module_type _x1,
+                        o#with_constr _x2)
+                  | MtAnt (_x0, _x1) -> MtAnt (o#_Loc_t _x0, o#string _x1)
+                method module_expr : module_expr -> module_expr =
+                  function
+                  | MeNil _x0 -> MeNil (o#_Loc_t _x0)
+                  | MeId (_x0, _x1) -> MeId (o#_Loc_t _x0, o#ident _x1)
+                  | MeApp (_x0, _x1, _x2) ->
+                      MeApp (o#_Loc_t _x0, o#module_expr _x1,
+                        o#module_expr _x2)
+                  | MeFun (_x0, _x1, _x2, _x3) ->
+                      MeFun (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
+                        o#module_expr _x3)
+                  | MeStr (_x0, _x1) -> MeStr (o#_Loc_t _x0, o#str_item _x1)
+                  | MeTyc (_x0, _x1, _x2) ->
+                      MeTyc (o#_Loc_t _x0, o#module_expr _x1,
+                        o#module_type _x2)
+                  | MeAnt (_x0, _x1) -> MeAnt (o#_Loc_t _x0, o#string _x1)
+                method module_binding : module_binding -> module_binding =
+                  function
+                  | MbNil _x0 -> MbNil (o#_Loc_t _x0)
+                  | MbAnd (_x0, _x1, _x2) ->
+                      MbAnd (o#_Loc_t _x0, o#module_binding _x1,
+                        o#module_binding _x2)
+                  | MbColEq (_x0, _x1, _x2, _x3) ->
+                      MbColEq (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
+                        o#module_expr _x3)
+                  | MbCol (_x0, _x1, _x2) ->
+                      MbCol (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
+                  | MbAnt (_x0, _x1) -> MbAnt (o#_Loc_t _x0, o#string _x1)
+                method meta_option :
+                  'a 'b. ('a -> 'b) -> 'a meta_option -> 'b meta_option =
+                  fun _f_a ->
+                    function
+                    | ONone -> ONone
+                    | OSome _x0 -> OSome (_f_a _x0)
+                    | OAnt _x0 -> OAnt (o#string _x0)
+                method meta_list :
+                  'a 'b. ('a -> 'b) -> 'a meta_list -> 'b meta_list =
+                  fun _f_a ->
+                    function
+                    | LNil -> LNil
+                    | LCons (_x0, _x1) ->
+                        LCons (_f_a _x0, o#meta_list _f_a _x1)
+                    | LAnt _x0 -> LAnt (o#string _x0)
+                method meta_bool : meta_bool -> meta_bool =
+                  function
+                  | BTrue -> BTrue
+                  | BFalse -> BFalse
+                  | BAnt _x0 -> BAnt (o#string _x0)
+                method match_case : match_case -> match_case =
+                  function
+                  | McNil _x0 -> McNil (o#_Loc_t _x0)
+                  | McOr (_x0, _x1, _x2) ->
+                      McOr (o#_Loc_t _x0, o#match_case _x1, o#match_case _x2)
+                  | McArr (_x0, _x1, _x2, _x3) ->
+                      McArr (o#_Loc_t _x0, o#patt _x1, o#expr _x2,
+                        o#expr _x3)
+                  | McAnt (_x0, _x1) -> McAnt (o#_Loc_t _x0, o#string _x1)
+                method ident : ident -> ident =
+                  function
+                  | IdAcc (_x0, _x1, _x2) ->
+                      IdAcc (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
+                  | IdApp (_x0, _x1, _x2) ->
+                      IdApp (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
+                  | IdLid (_x0, _x1) -> IdLid (o#_Loc_t _x0, o#string _x1)
+                  | IdUid (_x0, _x1) -> IdUid (o#_Loc_t _x0, o#string _x1)
+                  | IdAnt (_x0, _x1) -> IdAnt (o#_Loc_t _x0, o#string _x1)
+                method expr : expr -> expr =
+                  function
+                  | ExNil _x0 -> ExNil (o#_Loc_t _x0)
+                  | ExId (_x0, _x1) -> ExId (o#_Loc_t _x0, o#ident _x1)
+                  | ExAcc (_x0, _x1, _x2) ->
+                      ExAcc (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
+                  | ExAnt (_x0, _x1) -> ExAnt (o#_Loc_t _x0, o#string _x1)
+                  | ExApp (_x0, _x1, _x2) ->
+                      ExApp (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
+                  | ExAre (_x0, _x1, _x2) ->
+                      ExAre (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
+                  | ExArr (_x0, _x1) -> ExArr (o#_Loc_t _x0, o#expr _x1)
+                  | ExSem (_x0, _x1, _x2) ->
+                      ExSem (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
+                  | ExAsf _x0 -> ExAsf (o#_Loc_t _x0)
+                  | ExAsr (_x0, _x1) -> ExAsr (o#_Loc_t _x0, o#expr _x1)
+                  | ExAss (_x0, _x1, _x2) ->
+                      ExAss (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
+                  | ExChr (_x0, _x1) -> ExChr (o#_Loc_t _x0, o#string _x1)
+                  | ExCoe (_x0, _x1, _x2, _x3) ->
+                      ExCoe (o#_Loc_t _x0, o#expr _x1, o#ctyp _x2,
+                        o#ctyp _x3)
+                  | ExFlo (_x0, _x1) -> ExFlo (o#_Loc_t _x0, o#string _x1)
+                  | ExFor (_x0, _x1, _x2, _x3, _x4, _x5) ->
+                      ExFor (o#_Loc_t _x0, o#string _x1, o#expr _x2,
+                        o#expr _x3, o#meta_bool _x4, o#expr _x5)
+                  | ExFun (_x0, _x1) ->
+                      ExFun (o#_Loc_t _x0, o#match_case _x1)
+                  | ExIfe (_x0, _x1, _x2, _x3) ->
+                      ExIfe (o#_Loc_t _x0, o#expr _x1, o#expr _x2,
+                        o#expr _x3)
+                  | ExInt (_x0, _x1) -> ExInt (o#_Loc_t _x0, o#string _x1)
+                  | ExInt32 (_x0, _x1) ->
+                      ExInt32 (o#_Loc_t _x0, o#string _x1)
+                  | ExInt64 (_x0, _x1) ->
+                      ExInt64 (o#_Loc_t _x0, o#string _x1)
+                  | ExNativeInt (_x0, _x1) ->
+                      ExNativeInt (o#_Loc_t _x0, o#string _x1)
+                  | ExLab (_x0, _x1, _x2) ->
+                      ExLab (o#_Loc_t _x0, o#string _x1, o#expr _x2)
+                  | ExLaz (_x0, _x1) -> ExLaz (o#_Loc_t _x0, o#expr _x1)
+                  | ExLet (_x0, _x1, _x2, _x3) ->
+                      ExLet (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2,
+                        o#expr _x3)
+                  | ExLmd (_x0, _x1, _x2, _x3) ->
+                      ExLmd (o#_Loc_t _x0, o#string _x1, o#module_expr _x2,
+                        o#expr _x3)
+                  | ExMat (_x0, _x1, _x2) ->
+                      ExMat (o#_Loc_t _x0, o#expr _x1, o#match_case _x2)
+                  | ExNew (_x0, _x1) -> ExNew (o#_Loc_t _x0, o#ident _x1)
+                  | ExObj (_x0, _x1, _x2) ->
+                      ExObj (o#_Loc_t _x0, o#patt _x1, o#class_str_item _x2)
+                  | ExOlb (_x0, _x1, _x2) ->
+                      ExOlb (o#_Loc_t _x0, o#string _x1, o#expr _x2)
+                  | ExOvr (_x0, _x1) ->
+                      ExOvr (o#_Loc_t _x0, o#rec_binding _x1)
+                  | ExRec (_x0, _x1, _x2) ->
+                      ExRec (o#_Loc_t _x0, o#rec_binding _x1, o#expr _x2)
+                  | ExSeq (_x0, _x1) -> ExSeq (o#_Loc_t _x0, o#expr _x1)
+                  | ExSnd (_x0, _x1, _x2) ->
+                      ExSnd (o#_Loc_t _x0, o#expr _x1, o#string _x2)
+                  | ExSte (_x0, _x1, _x2) ->
+                      ExSte (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
+                  | ExStr (_x0, _x1) -> ExStr (o#_Loc_t _x0, o#string _x1)
+                  | ExTry (_x0, _x1, _x2) ->
+                      ExTry (o#_Loc_t _x0, o#expr _x1, o#match_case _x2)
+                  | ExTup (_x0, _x1) -> ExTup (o#_Loc_t _x0, o#expr _x1)
+                  | ExCom (_x0, _x1, _x2) ->
+                      ExCom (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
+                  | ExTyc (_x0, _x1, _x2) ->
+                      ExTyc (o#_Loc_t _x0, o#expr _x1, o#ctyp _x2)
+                  | ExVrn (_x0, _x1) -> ExVrn (o#_Loc_t _x0, o#string _x1)
+                  | ExWhi (_x0, _x1, _x2) ->
+                      ExWhi (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
+                method ctyp : ctyp -> ctyp =
+                  function
+                  | TyNil _x0 -> TyNil (o#_Loc_t _x0)
+                  | TyAli (_x0, _x1, _x2) ->
+                      TyAli (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyAny _x0 -> TyAny (o#_Loc_t _x0)
+                  | TyApp (_x0, _x1, _x2) ->
+                      TyApp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyArr (_x0, _x1, _x2) ->
+                      TyArr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyCls (_x0, _x1) -> TyCls (o#_Loc_t _x0, o#ident _x1)
+                  | TyLab (_x0, _x1, _x2) ->
+                      TyLab (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
+                  | TyId (_x0, _x1) -> TyId (o#_Loc_t _x0, o#ident _x1)
+                  | TyMan (_x0, _x1, _x2) ->
+                      TyMan (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyDcl (_x0, _x1, _x2, _x3, _x4) ->
+                      TyDcl (o#_Loc_t _x0, o#string _x1, o#list o#ctyp _x2,
+                        o#ctyp _x3,
+                        o#list
+                          (fun (_x0, _x1) -> ((o#ctyp _x0), (o#ctyp _x1)))
+                          _x4)
+                  | TyObj (_x0, _x1, _x2) ->
+                      TyObj (o#_Loc_t _x0, o#ctyp _x1, o#meta_bool _x2)
+                  | TyOlb (_x0, _x1, _x2) ->
+                      TyOlb (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
+                  | TyPol (_x0, _x1, _x2) ->
+                      TyPol (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyQuo (_x0, _x1) -> TyQuo (o#_Loc_t _x0, o#string _x1)
+                  | TyQuP (_x0, _x1) -> TyQuP (o#_Loc_t _x0, o#string _x1)
+                  | TyQuM (_x0, _x1) -> TyQuM (o#_Loc_t _x0, o#string _x1)
+                  | TyVrn (_x0, _x1) -> TyVrn (o#_Loc_t _x0, o#string _x1)
+                  | TyRec (_x0, _x1) -> TyRec (o#_Loc_t _x0, o#ctyp _x1)
+                  | TyCol (_x0, _x1, _x2) ->
+                      TyCol (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TySem (_x0, _x1, _x2) ->
+                      TySem (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyCom (_x0, _x1, _x2) ->
+                      TyCom (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TySum (_x0, _x1) -> TySum (o#_Loc_t _x0, o#ctyp _x1)
+                  | TyOf (_x0, _x1, _x2) ->
+                      TyOf (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyAnd (_x0, _x1, _x2) ->
+                      TyAnd (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyOr (_x0, _x1, _x2) ->
+                      TyOr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyPrv (_x0, _x1) -> TyPrv (o#_Loc_t _x0, o#ctyp _x1)
+                  | TyMut (_x0, _x1) -> TyMut (o#_Loc_t _x0, o#ctyp _x1)
+                  | TyTup (_x0, _x1) -> TyTup (o#_Loc_t _x0, o#ctyp _x1)
+                  | TySta (_x0, _x1, _x2) ->
+                      TySta (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyVrnEq (_x0, _x1) -> TyVrnEq (o#_Loc_t _x0, o#ctyp _x1)
+                  | TyVrnSup (_x0, _x1) ->
+                      TyVrnSup (o#_Loc_t _x0, o#ctyp _x1)
+                  | TyVrnInf (_x0, _x1) ->
+                      TyVrnInf (o#_Loc_t _x0, o#ctyp _x1)
+                  | TyVrnInfSup (_x0, _x1, _x2) ->
+                      TyVrnInfSup (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyAmp (_x0, _x1, _x2) ->
+                      TyAmp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyOfAmp (_x0, _x1, _x2) ->
+                      TyOfAmp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | TyAnt (_x0, _x1) -> TyAnt (o#_Loc_t _x0, o#string _x1)
+                method class_type : class_type -> class_type =
+                  function
+                  | CtNil _x0 -> CtNil (o#_Loc_t _x0)
+                  | CtCon (_x0, _x1, _x2, _x3) ->
+                      CtCon (o#_Loc_t _x0, o#meta_bool _x1, o#ident _x2,
+                        o#ctyp _x3)
+                  | CtFun (_x0, _x1, _x2) ->
+                      CtFun (o#_Loc_t _x0, o#ctyp _x1, o#class_type _x2)
+                  | CtSig (_x0, _x1, _x2) ->
+                      CtSig (o#_Loc_t _x0, o#ctyp _x1, o#class_sig_item _x2)
+                  | CtAnd (_x0, _x1, _x2) ->
+                      CtAnd (o#_Loc_t _x0, o#class_type _x1,
+                        o#class_type _x2)
+                  | CtCol (_x0, _x1, _x2) ->
+                      CtCol (o#_Loc_t _x0, o#class_type _x1,
+                        o#class_type _x2)
+                  | CtEq (_x0, _x1, _x2) ->
+                      CtEq (o#_Loc_t _x0, o#class_type _x1, o#class_type _x2)
+                  | CtAnt (_x0, _x1) -> CtAnt (o#_Loc_t _x0, o#string _x1)
+                method class_str_item : class_str_item -> class_str_item =
+                  function
+                  | CrNil _x0 -> CrNil (o#_Loc_t _x0)
+                  | CrSem (_x0, _x1, _x2) ->
+                      CrSem (o#_Loc_t _x0, o#class_str_item _x1,
+                        o#class_str_item _x2)
+                  | CrCtr (_x0, _x1, _x2) ->
+                      CrCtr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | CrInh (_x0, _x1, _x2) ->
+                      CrInh (o#_Loc_t _x0, o#class_expr _x1, o#string _x2)
+                  | CrIni (_x0, _x1) -> CrIni (o#_Loc_t _x0, o#expr _x1)
+                  | CrMth (_x0, _x1, _x2, _x3, _x4) ->
+                      CrMth (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
+                        o#expr _x3, o#ctyp _x4)
+                  | CrVal (_x0, _x1, _x2, _x3) ->
+                      CrVal (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
+                        o#expr _x3)
+                  | CrVir (_x0, _x1, _x2, _x3) ->
+                      CrVir (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
+                        o#ctyp _x3)
+                  | CrVvr (_x0, _x1, _x2, _x3) ->
+                      CrVvr (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
+                        o#ctyp _x3)
+                  | CrAnt (_x0, _x1) -> CrAnt (o#_Loc_t _x0, o#string _x1)
+                method class_sig_item : class_sig_item -> class_sig_item =
+                  function
+                  | CgNil _x0 -> CgNil (o#_Loc_t _x0)
+                  | CgCtr (_x0, _x1, _x2) ->
+                      CgCtr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
+                  | CgSem (_x0, _x1, _x2) ->
+                      CgSem (o#_Loc_t _x0, o#class_sig_item _x1,
+                        o#class_sig_item _x2)
+                  | CgInh (_x0, _x1) ->
+                      CgInh (o#_Loc_t _x0, o#class_type _x1)
+                  | CgMth (_x0, _x1, _x2, _x3) ->
+                      CgMth (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
+                        o#ctyp _x3)
+                  | CgVal (_x0, _x1, _x2, _x3, _x4) ->
+                      CgVal (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
+                        o#meta_bool _x3, o#ctyp _x4)
+                  | CgVir (_x0, _x1, _x2, _x3) ->
+                      CgVir (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
+                        o#ctyp _x3)
+                  | CgAnt (_x0, _x1) -> CgAnt (o#_Loc_t _x0, o#string _x1)
+                method class_expr : class_expr -> class_expr =
+                  function
+                  | CeNil _x0 -> CeNil (o#_Loc_t _x0)
+                  | CeApp (_x0, _x1, _x2) ->
+                      CeApp (o#_Loc_t _x0, o#class_expr _x1, o#expr _x2)
+                  | CeCon (_x0, _x1, _x2, _x3) ->
+                      CeCon (o#_Loc_t _x0, o#meta_bool _x1, o#ident _x2,
+                        o#ctyp _x3)
+                  | CeFun (_x0, _x1, _x2) ->
+                      CeFun (o#_Loc_t _x0, o#patt _x1, o#class_expr _x2)
+                  | CeLet (_x0, _x1, _x2, _x3) ->
+                      CeLet (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2,
+                        o#class_expr _x3)
+                  | CeStr (_x0, _x1, _x2) ->
+                      CeStr (o#_Loc_t _x0, o#patt _x1, o#class_str_item _x2)
+                  | CeTyc (_x0, _x1, _x2) ->
+                      CeTyc (o#_Loc_t _x0, o#class_expr _x1,
+                        o#class_type _x2)
+                  | CeAnd (_x0, _x1, _x2) ->
+                      CeAnd (o#_Loc_t _x0, o#class_expr _x1,
+                        o#class_expr _x2)
+                  | CeEq (_x0, _x1, _x2) ->
+                      CeEq (o#_Loc_t _x0, o#class_expr _x1, o#class_expr _x2)
+                  | CeAnt (_x0, _x1) -> CeAnt (o#_Loc_t _x0, o#string _x1)
+                method binding : binding -> binding =
+                  function
+                  | BiNil _x0 -> BiNil (o#_Loc_t _x0)
+                  | BiAnd (_x0, _x1, _x2) ->
+                      BiAnd (o#_Loc_t _x0, o#binding _x1, o#binding _x2)
+                  | BiEq (_x0, _x1, _x2) ->
+                      BiEq (o#_Loc_t _x0, o#patt _x1, o#expr _x2)
+                  | BiAnt (_x0, _x1) -> BiAnt (o#_Loc_t _x0, o#string _x1)
+              end
+            class fold =
+              object ((o : 'self_type))
+                method string = fun (_ : string) -> (o : 'self_type)
+                method int = fun (_ : int) -> (o : 'self_type)
+                method float = fun (_ : float) -> (o : 'self_type)
+                method bool = fun (_ : bool) -> (o : 'self_type)
+                method list :
+                  'a.
+                    ('self_type -> 'a -> 'self_type) -> 'a list -> 'self_type =
+                  fun f -> List.fold_left f o
+                method option :
+                  'a.
+                    ('self_type -> 'a -> 'self_type) ->
+                      'a option -> 'self_type =
+                  fun f -> function | None -> o | Some x -> f o x
+                method array :
+                  'a.
+                    ('self_type -> 'a -> 'self_type) ->
+                      'a array -> 'self_type =
+                  fun f -> Array.fold_left f o
+                method ref :
+                  'a.
+                    ('self_type -> 'a -> 'self_type) -> 'a ref -> 'self_type =
+                  fun f { contents = x } -> f o x
+                method _Loc_t : Loc.t -> 'self_type = fun _ -> o
+                method with_constr : with_constr -> 'self_type =
+                  function
+                  | WcNil _x0 -> o#_Loc_t _x0
+                  | WcTyp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | WcMod (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ident _x1)#ident _x2
+                  | WcAnd (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#with_constr _x1)#with_constr _x2
+                  | WcAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method str_item : str_item -> 'self_type =
+                  function
+                  | StNil _x0 -> o#_Loc_t _x0
+                  | StCls (_x0, _x1) -> (o#_Loc_t _x0)#class_expr _x1
+                  | StClt (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
+                  | StSem (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#str_item _x1)#str_item _x2
+                  | StDir (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#expr _x2
+                  | StExc (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#meta_option
+                        (fun o -> o#ident) _x2
+                  | StExp (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
+                  | StExt (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
+                        (fun o -> o#string) _x3
+                  | StInc (_x0, _x1) -> (o#_Loc_t _x0)#module_expr _x1
+                  | StMod (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#module_expr _x2
+                  | StRecMod (_x0, _x1) -> (o#_Loc_t _x0)#module_binding _x1
+                  | StMty (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#module_type _x2
+                  | StOpn (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | StTyp (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | StVal (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#meta_bool _x1)#binding _x2
+                  | StAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method sig_item : sig_item -> 'self_type =
+                  function
+                  | SgNil _x0 -> o#_Loc_t _x0
+                  | SgCls (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
+                  | SgClt (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
+                  | SgSem (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#sig_item _x1)#sig_item _x2
+                  | SgDir (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#expr _x2
+                  | SgExc (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | SgExt (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
+                        (fun o -> o#string) _x3
+                  | SgInc (_x0, _x1) -> (o#_Loc_t _x0)#module_type _x1
+                  | SgMod (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#module_type _x2
+                  | SgRecMod (_x0, _x1) -> (o#_Loc_t _x0)#module_binding _x1
+                  | SgMty (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#module_type _x2
+                  | SgOpn (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | SgTyp (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | SgVal (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#ctyp _x2
+                  | SgAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method rec_binding : rec_binding -> 'self_type =
+                  function
+                  | RbNil _x0 -> o#_Loc_t _x0
+                  | RbSem (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#rec_binding _x1)#rec_binding _x2
+                  | RbEq (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ident _x1)#expr _x2
+                  | RbAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method patt : patt -> 'self_type =
+                  function
+                  | PaNil _x0 -> o#_Loc_t _x0
+                  | PaId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | PaAli (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
+                  | PaAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | PaAny _x0 -> o#_Loc_t _x0
+                  | PaApp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
+                  | PaArr (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
+                  | PaCom (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
+                  | PaSem (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
+                  | PaChr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | PaInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | PaInt32 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | PaInt64 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | PaNativeInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | PaFlo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | PaLab (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#patt _x2
+                  | PaOlb (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#patt _x2
+                  | PaOlbi (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#patt _x2)#expr _x3
+                  | PaOrp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
+                  | PaRng (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#patt _x2
+                  | PaRec (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
+                  | PaEq (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ident _x1)#patt _x2
+                  | PaStr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | PaTup (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
+                  | PaTyc (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#ctyp _x2
+                  | PaTyp (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | PaVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method module_type : module_type -> 'self_type =
+                  function
+                  | MtNil _x0 -> o#_Loc_t _x0
+                  | MtId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | MtFun (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#module_type _x2)#
+                        module_type _x3
+                  | MtQuo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | MtSig (_x0, _x1) -> (o#_Loc_t _x0)#sig_item _x1
+                  | MtWit (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#module_type _x1)#with_constr _x2
+                  | MtAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method module_expr : module_expr -> 'self_type =
+                  function
+                  | MeNil _x0 -> o#_Loc_t _x0
+                  | MeId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | MeApp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#module_expr _x1)#module_expr _x2
+                  | MeFun (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#module_type _x2)#
+                        module_expr _x3
+                  | MeStr (_x0, _x1) -> (o#_Loc_t _x0)#str_item _x1
+                  | MeTyc (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#module_expr _x1)#module_type _x2
+                  | MeAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method module_binding : module_binding -> 'self_type =
+                  function
+                  | MbNil _x0 -> o#_Loc_t _x0
+                  | MbAnd (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#module_binding _x1)#module_binding _x2
+                  | MbColEq (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#module_type _x2)#
+                        module_expr _x3
+                  | MbCol (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#module_type _x2
+                  | MbAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method meta_option :
+                  'a.
+                    ('self_type -> 'a -> 'self_type) ->
+                      'a meta_option -> 'self_type =
+                  fun _f_a ->
+                    function
+                    | ONone -> o
+                    | OSome _x0 -> _f_a o _x0
+                    | OAnt _x0 -> o#string _x0
+                method meta_list :
+                  'a.
+                    ('self_type -> 'a -> 'self_type) ->
+                      'a meta_list -> 'self_type =
+                  fun _f_a ->
+                    function
+                    | LNil -> o
+                    | LCons (_x0, _x1) ->
+                        (_f_a o _x0)#meta_list (fun o -> _f_a o) _x1
+                    | LAnt _x0 -> o#string _x0
+                method meta_bool : meta_bool -> 'self_type =
+                  function
+                  | BTrue -> o
+                  | BFalse -> o
+                  | BAnt _x0 -> o#string _x0
+                method match_case : match_case -> 'self_type =
+                  function
+                  | McNil _x0 -> o#_Loc_t _x0
+                  | McOr (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#match_case _x1)#match_case _x2
+                  | McArr (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#patt _x1)#expr _x2)#expr _x3
+                  | McAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method ident : ident -> 'self_type =
+                  function
+                  | IdAcc (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ident _x1)#ident _x2
+                  | IdApp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ident _x1)#ident _x2
+                  | IdLid (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | IdUid (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | IdAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method expr : expr -> 'self_type =
+                  function
+                  | ExNil _x0 -> o#_Loc_t _x0
+                  | ExId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | ExAcc (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
+                  | ExAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExApp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
+                  | ExAre (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
+                  | ExArr (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
+                  | ExSem (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
+                  | ExAsf _x0 -> o#_Loc_t _x0
+                  | ExAsr (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
+                  | ExAss (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
+                  | ExChr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExCoe (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#expr _x1)#ctyp _x2)#ctyp _x3
+                  | ExFlo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExFor (_x0, _x1, _x2, _x3, _x4, _x5) ->
+                      (((((o#_Loc_t _x0)#string _x1)#expr _x2)#expr _x3)#
+                         meta_bool _x4)#
+                        expr _x5
+                  | ExFun (_x0, _x1) -> (o#_Loc_t _x0)#match_case _x1
+                  | ExIfe (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#expr _x1)#expr _x2)#expr _x3
+                  | ExInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExInt32 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExInt64 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExNativeInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExLab (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#expr _x2
+                  | ExLaz (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
+                  | ExLet (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#expr _x3
+                  | ExLmd (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#module_expr _x2)#expr _x3
+                  | ExMat (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#match_case _x2
+                  | ExNew (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | ExObj (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
+                  | ExOlb (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#expr _x2
+                  | ExOvr (_x0, _x1) -> (o#_Loc_t _x0)#rec_binding _x1
+                  | ExRec (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#rec_binding _x1)#expr _x2
+                  | ExSeq (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
+                  | ExSnd (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#string _x2
+                  | ExSte (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
+                  | ExStr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExTry (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#match_case _x2
+                  | ExTup (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
+                  | ExCom (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
+                  | ExTyc (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#ctyp _x2
+                  | ExVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | ExWhi (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#expr _x1)#expr _x2
+                method ctyp : ctyp -> 'self_type =
+                  function
+                  | TyNil _x0 -> o#_Loc_t _x0
+                  | TyAli (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyAny _x0 -> o#_Loc_t _x0
+                  | TyApp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyArr (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyCls (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | TyLab (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#ctyp _x2
+                  | TyId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
+                  | TyMan (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyDcl (_x0, _x1, _x2, _x3, _x4) ->
+                      ((((o#_Loc_t _x0)#string _x1)#list (fun o -> o#ctyp)
+                          _x2)#
+                         ctyp _x3)#
+                        list (fun o (_x0, _x1) -> (o#ctyp _x0)#ctyp _x1) _x4
+                  | TyObj (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#meta_bool _x2
+                  | TyOlb (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#string _x1)#ctyp _x2
+                  | TyPol (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyQuo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | TyQuP (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | TyQuM (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | TyVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                  | TyRec (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | TyCol (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TySem (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyCom (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TySum (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | TyOf (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyAnd (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyOr (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyPrv (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | TyMut (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | TyTup (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | TySta (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyVrnEq (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | TyVrnSup (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | TyVrnInf (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
+                  | TyVrnInfSup (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyAmp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyOfAmp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | TyAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method class_type : class_type -> 'self_type =
+                  function
+                  | CtNil _x0 -> o#_Loc_t _x0
+                  | CtCon (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
+                  | CtFun (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#class_type _x2
+                  | CtSig (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#class_sig_item _x2
+                  | CtAnd (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
+                  | CtCol (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
+                  | CtEq (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
+                  | CtAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method class_str_item : class_str_item -> 'self_type =
+                  function
+                  | CrNil _x0 -> o#_Loc_t _x0
+                  | CrSem (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_str_item _x1)#class_str_item _x2
+                  | CrCtr (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | CrInh (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_expr _x1)#string _x2
+                  | CrIni (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
+                  | CrMth (_x0, _x1, _x2, _x3, _x4) ->
+                      ((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3)#
+                        ctyp _x4
+                  | CrVal (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3
+                  | CrVir (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
+                  | CrVvr (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
+                  | CrAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method class_sig_item : class_sig_item -> 'self_type =
+                  function
+                  | CgNil _x0 -> o#_Loc_t _x0
+                  | CgCtr (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+                  | CgSem (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_sig_item _x1)#class_sig_item _x2
+                  | CgInh (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
+                  | CgMth (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
+                  | CgVal (_x0, _x1, _x2, _x3, _x4) ->
+                      ((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#meta_bool
+                         _x3)#
+                        ctyp _x4
+                  | CgVir (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
+                  | CgAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method class_expr : class_expr -> 'self_type =
+                  function
+                  | CeNil _x0 -> o#_Loc_t _x0
+                  | CeApp (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_expr _x1)#expr _x2
+                  | CeCon (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
+                  | CeFun (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#class_expr _x2
+                  | CeLet (_x0, _x1, _x2, _x3) ->
+                      (((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#class_expr
+                        _x3
+                  | CeStr (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
+                  | CeTyc (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_expr _x1)#class_type _x2
+                  | CeAnd (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
+                  | CeEq (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
+                  | CeAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+                method binding : binding -> 'self_type =
+                  function
+                  | BiNil _x0 -> o#_Loc_t _x0
+                  | BiAnd (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#binding _x1)#binding _x2
+                  | BiEq (_x0, _x1, _x2) ->
+                      ((o#_Loc_t _x0)#patt _x1)#expr _x2
+                  | BiAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
+              end
+            let map_expr f =
+              object
+                inherit map as super
+                method expr = fun x -> f (super#expr x)
+              end
+            let map_patt f =
+              object
+                inherit map as super
+                method patt = fun x -> f (super#patt x)
+              end
+            let map_ctyp f =
+              object
+                inherit map as super
+                method ctyp = fun x -> f (super#ctyp x)
+              end
+            let map_str_item f =
+              object
+                inherit map as super
+                method str_item = fun x -> f (super#str_item x)
+              end
+            let map_sig_item f =
+              object
+                inherit map as super
+                method sig_item = fun x -> f (super#sig_item x)
+              end
+            let map_loc f =
+              object
+                inherit map as super
+                method _Loc_t = fun x -> f (super#_Loc_t x)
+              end
+          end
+      end
+    module DynAst =
+      struct
+        module Make (Ast : Sig.Ast) : Sig.DynAst with module Ast = Ast =
+          struct
+            module Ast = Ast
+            type 'a tag =
+              | Tag_ctyp | Tag_patt | Tag_expr | Tag_module_type
+              | Tag_sig_item | Tag_with_constr | Tag_module_expr
+              | Tag_str_item | Tag_class_type | Tag_class_sig_item
+              | Tag_class_expr | Tag_class_str_item | Tag_match_case
+              | Tag_ident | Tag_binding | Tag_rec_binding
+              | Tag_module_binding
+            let string_of_tag =
+              function
+              | Tag_ctyp -> "ctyp"
+              | Tag_patt -> "patt"
+              | Tag_expr -> "expr"
+              | Tag_module_type -> "module_type"
+              | Tag_sig_item -> "sig_item"
+              | Tag_with_constr -> "with_constr"
+              | Tag_module_expr -> "module_expr"
+              | Tag_str_item -> "str_item"
+              | Tag_class_type -> "class_type"
+              | Tag_class_sig_item -> "class_sig_item"
+              | Tag_class_expr -> "class_expr"
+              | Tag_class_str_item -> "class_str_item"
+              | Tag_match_case -> "match_case"
+              | Tag_ident -> "ident"
+              | Tag_binding -> "binding"
+              | Tag_rec_binding -> "rec_binding"
+              | Tag_module_binding -> "module_binding"
+            let ctyp_tag = Tag_ctyp
+            let patt_tag = Tag_patt
+            let expr_tag = Tag_expr
+            let module_type_tag = Tag_module_type
+            let sig_item_tag = Tag_sig_item
+            let with_constr_tag = Tag_with_constr
+            let module_expr_tag = Tag_module_expr
+            let str_item_tag = Tag_str_item
+            let class_type_tag = Tag_class_type
+            let class_sig_item_tag = Tag_class_sig_item
+            let class_expr_tag = Tag_class_expr
+            let class_str_item_tag = Tag_class_str_item
+            let match_case_tag = Tag_match_case
+            let ident_tag = Tag_ident
+            let binding_tag = Tag_binding
+            let rec_binding_tag = Tag_rec_binding
+            let module_binding_tag = Tag_module_binding
+            type dyn
+            external dyn_tag : 'a tag -> dyn tag = "%identity"
+            module Pack (X : sig type 'a t end) =
+              struct
+                type pack = ((dyn tag) * Obj.t)
+                exception Pack_error
+                let pack tag v = ((dyn_tag tag), (Obj.repr v))
+                let unpack (tag : 'a tag) (tag', obj) =
+                  if (dyn_tag tag) = tag'
+                  then (Obj.obj obj : 'a X.t)
+                  else raise Pack_error
+                let print_tag f (tag, _) =
+                  Format.pp_print_string f (string_of_tag tag)
+              end
           end
       end
     module Quotation =
@@ -10301,37 +11044,49 @@ module Struct =
         module Make (Ast : Sig.Ast) : Sig.Quotation with module Ast = Ast =
           struct
             module Ast = Ast
+            module DynAst = DynAst.Make(Ast)
             module Loc = Ast.Loc
             open Format
             open Sig
             type 'a expand_fun = Loc.t -> string option -> string -> 'a
-            type expander =
-              | ExStr of (bool -> string expand_fun)
-              | ExAst of Ast.expr expand_fun * Ast.patt expand_fun
-            let expanders_table = ref []
+            module Exp_key = DynAst.Pack(struct type 'a t = unit end)
+            module Exp_fun =
+              DynAst.Pack(struct type 'a t = 'a expand_fun end)
+            let expanders_table :
+              (((string * Exp_key.pack) * Exp_fun.pack) list) ref = ref []
             let default = ref ""
             let translate = ref (fun x -> x)
             let expander_name name =
               match !translate name with | "" -> !default | name -> name
-            let find name = List.assoc (expander_name name) !expanders_table
-            let add name f = expanders_table := (name, f) :: !expanders_table
+            let find name tag =
+              let key = ((expander_name name), (Exp_key.pack tag ()))
+              in Exp_fun.unpack tag (List.assoc key !expanders_table)
+            let add name tag f =
+              let elt = ((name, (Exp_key.pack tag ())), (Exp_fun.pack tag f))
+              in expanders_table := elt :: !expanders_table
             let dump_file = ref None
             module Error =
               struct
                 type error =
                   | Finding | Expanding | ParsingResult of Loc.t * string
                   | Locating
-                type t = (string * error * exn)
+                type t = (string * string * error * exn)
                 exception E of t
-                let print ppf (name, ctx, exn) =
+                let print ppf (name, position, ctx, exn) =
                   let name = if name = "" then !default else name in
-                  let pp x = fprintf ppf "@?@[<2>While %s %S:" x name in
+                  let pp x =
+                    fprintf ppf "@?@[<2>While %s %S in a position of %S:" x
+                      name position in
                   let () =
                     match ctx with
                     | Finding ->
                         (pp "finding quotation";
-                         fprintf ppf " available quotations are:\n@[<2>";
-                         List.iter (fun (s, _) -> fprintf ppf "%s@ " s)
+                         fprintf ppf "@ @[<hv2>Available quotations are:@\n";
+                         List.iter
+                           (fun ((s, t), _) ->
+                              fprintf ppf
+                                "@[<2>%s@ (in@ a@ position@ of %a)@]@ " s
+                                Exp_key.print_tag t)
                            !expanders_table;
                          fprintf ppf "@]")
                     | Expanding -> pp "expanding quotation"
@@ -10367,54 +11122,50 @@ module Struct =
               end
             let _ = let module M = ErrorHandler.Register(Error) in ()
             open Error
-            let expand_quotation loc expander quot =
+            let expand_quotation loc expander pos_tag quot =
               let loc_name_opt =
                 if quot.q_loc = "" then None else Some quot.q_loc
               in
                 try expander loc loc_name_opt quot.q_contents
                 with | (Loc.Exc_located (_, (Error.E _)) as exc) -> raise exc
                 | Loc.Exc_located (iloc, exc) ->
-                    let exc1 = Error.E (((quot.q_name), Expanding, exc))
+                    let exc1 =
+                      Error.E (((quot.q_name), pos_tag, Expanding, exc))
                     in raise (Loc.Exc_located (iloc, exc1))
                 | exc ->
-                    let exc1 = Error.E (((quot.q_name), Expanding, exc))
+                    let exc1 =
+                      Error.E (((quot.q_name), pos_tag, Expanding, exc))
                     in raise (Loc.Exc_located (loc, exc1))
-            let parse_quotation_result parse loc quot str =
+            let parse_quotation_result parse loc quot pos_tag str =
               try parse loc str
               with
-              | Loc.Exc_located (iloc, (Error.E ((n, Expanding, exc)))) ->
+              | Loc.Exc_located (iloc,
+                  (Error.E ((n, pos_tag, Expanding, exc)))) ->
                   let ctx = ParsingResult (iloc, quot.q_contents) in
-                  let exc1 = Error.E ((n, ctx, exc))
+                  let exc1 = Error.E ((n, pos_tag, ctx, exc))
                   in raise (Loc.Exc_located (iloc, exc1))
               | Loc.Exc_located (iloc, ((Error.E _ as exc))) ->
                   raise (Loc.Exc_located (iloc, exc))
               | Loc.Exc_located (iloc, exc) ->
                   let ctx = ParsingResult (iloc, quot.q_contents) in
-                  let exc1 = Error.E (((quot.q_name), ctx, exc))
+                  let exc1 = Error.E (((quot.q_name), pos_tag, ctx, exc))
                   in raise (Loc.Exc_located (iloc, exc1))
-            let handle_quotation loc proj in_expr parse quotation =
+            let expand loc quotation tag =
+              let pos_tag = DynAst.string_of_tag tag in
               let name = quotation.q_name in
               let expander =
-                try find name
+                try find name tag
                 with | (Loc.Exc_located (_, (Error.E _)) as exc) -> raise exc
                 | Loc.Exc_located (qloc, exc) ->
                     raise
-                      (Loc.Exc_located (qloc, Error.E ((name, Finding, exc))))
+                      (Loc.Exc_located (qloc,
+                         Error.E ((name, pos_tag, Finding, exc))))
                 | exc ->
                     raise
-                      (Loc.Exc_located (loc, Error.E ((name, Finding, exc)))) in
+                      (Loc.Exc_located (loc,
+                         Error.E ((name, pos_tag, Finding, exc)))) in
               let loc = Loc.join (Loc.move `start quotation.q_shift loc)
-              in
-                match expander with
-                | ExStr f ->
-                    let new_str = expand_quotation loc (f in_expr) quotation
-                    in parse_quotation_result parse loc quotation new_str
-                | ExAst (fe, fp) ->
-                    expand_quotation loc (proj (fe, fp)) quotation
-            let expand_expr parse loc x =
-              handle_quotation loc fst true parse x
-            let expand_patt parse loc x =
-              handle_quotation loc snd false parse x
+              in expand_quotation loc expander pos_tag quotation
           end
       end
     module AstFilters =
@@ -10458,23 +11209,33 @@ module Struct =
             let string_of_string_token loc s =
               try Token.Eval.string s
               with | (Failure _ as exn) -> Loc.raise loc exn
+            let remove_underscores s =
+              let l = String.length s in
+              let rec remove src dst =
+                if src >= l
+                then if dst >= l then s else String.sub s 0 dst
+                else
+                  (match s.[src] with
+                   | '_' -> remove (src + 1) dst
+                   | c -> (s.[dst] <- c; remove (src + 1) (dst + 1)))
+              in remove 0 0
             let mkloc = Loc.to_ocaml_location
             let mkghloc loc = Loc.to_ocaml_location (Loc.ghostify loc)
-            let mktyp loc d = {  ptyp_desc = d; ptyp_loc = mkloc loc; }
-            let mkpat loc d = {  ppat_desc = d; ppat_loc = mkloc loc; }
-            let mkghpat loc d = {  ppat_desc = d; ppat_loc = mkghloc loc; }
-            let mkexp loc d = {  pexp_desc = d; pexp_loc = mkloc loc; }
-            let mkmty loc d = {  pmty_desc = d; pmty_loc = mkloc loc; }
-            let mksig loc d = {  psig_desc = d; psig_loc = mkloc loc; }
-            let mkmod loc d = {  pmod_desc = d; pmod_loc = mkloc loc; }
-            let mkstr loc d = {  pstr_desc = d; pstr_loc = mkloc loc; }
-            let mkfield loc d = {  pfield_desc = d; pfield_loc = mkloc loc; }
-            let mkcty loc d = {  pcty_desc = d; pcty_loc = mkloc loc; }
-            let mkpcl loc d = {  pcl_desc = d; pcl_loc = mkloc loc; }
+            let mktyp loc d = { ptyp_desc = d; ptyp_loc = mkloc loc; }
+            let mkpat loc d = { ppat_desc = d; ppat_loc = mkloc loc; }
+            let mkghpat loc d = { ppat_desc = d; ppat_loc = mkghloc loc; }
+            let mkexp loc d = { pexp_desc = d; pexp_loc = mkloc loc; }
+            let mkmty loc d = { pmty_desc = d; pmty_loc = mkloc loc; }
+            let mksig loc d = { psig_desc = d; psig_loc = mkloc loc; }
+            let mkmod loc d = { pmod_desc = d; pmod_loc = mkloc loc; }
+            let mkstr loc d = { pstr_desc = d; pstr_loc = mkloc loc; }
+            let mkfield loc d = { pfield_desc = d; pfield_loc = mkloc loc; }
+            let mkcty loc d = { pcty_desc = d; pcty_loc = mkloc loc; }
+            let mkpcl loc d = { pcl_desc = d; pcl_loc = mkloc loc; }
             let mkpolytype t =
               match t.ptyp_desc with
               | Ptyp_poly (_, _) -> t
-              | _ -> { (t) with  ptyp_desc = Ptyp_poly ([], t); }
+              | _ -> { (t) with ptyp_desc = Ptyp_poly ([], t); }
             let mb2b =
               function
               | Ast.BTrue -> true
@@ -10684,7 +11445,6 @@ module Struct =
               let (params, variance) = List.split tl
               in
                 {
-                  
                   ptype_params = params;
                   ptype_cstrs = cl;
                   ptype_kind = tk;
@@ -10712,15 +11472,15 @@ module Struct =
               | _ -> assert false
             let rec type_decl tl cl loc m pflag =
               function
-              | TyMan (_, t1, t2) ->
+              | Ast.TyMan (_, t1, t2) ->
                   type_decl tl cl loc (Some (ctyp t1)) pflag t2
-              | TyPrv (_, t) -> type_decl tl cl loc m true t
-              | TyRec (_, t) ->
+              | Ast.TyPrv (_, t) -> type_decl tl cl loc m true t
+              | Ast.TyRec (_, t) ->
                   mktype loc tl cl
                     (Ptype_record (List.map mktrecord (list_of_ctyp t []),
                        mkprivate' pflag))
                     m
-              | TySum (_, t) ->
+              | Ast.TySum (_, t) ->
                   mktype loc tl cl
                     (Ptype_variant (List.map mkvariant (list_of_ctyp t []),
                        mkprivate' pflag))
@@ -10732,16 +11492,13 @@ module Struct =
                   else
                     (let m =
                        match t with
-                       | TyQuo (_, s) ->
-                           if List.mem_assoc s tl
-                           then Some (ctyp t)
-                           else None
+                       | Ast.TyNil _ -> None
                        | _ -> Some (ctyp t) in
                      let k = if pflag then Ptype_private else Ptype_abstract
                      in mktype loc tl cl k m)
             let type_decl tl cl t =
               type_decl tl cl (loc_of_ctyp t) None false t
-            let mkvalue_desc t p = {  pval_type = ctyp t; pval_prim = p; }
+            let mkvalue_desc t p = { pval_type = ctyp t; pval_prim = p; }
             let rec list_of_meta_list =
               function
               | Ast.LNil -> []
@@ -10793,7 +11550,6 @@ module Struct =
                     (id,
                      (Pwith_type
                         {
-                          
                           ptype_params = params;
                           ptype_cstrs = [];
                           ptype_kind = kind;
@@ -10916,7 +11672,9 @@ module Struct =
                          error loc
                            "Integer literal exceeds the range of representable integers of type nativeint")
                   in mkpat loc (Ppat_constant (Const_nativeint nati))
-              | PaFlo (loc, s) -> mkpat loc (Ppat_constant (Const_float s))
+              | PaFlo (loc, s) ->
+                  mkpat loc
+                    (Ppat_constant (Const_float (remove_underscores s)))
               | PaLab (loc, _, _) ->
                   error loc "labeled pattern not allowed here"
               | PaOlb (loc, _, _) | PaOlbi (loc, _, _, _) ->
@@ -10950,7 +11708,7 @@ module Struct =
                  as p) -> error (loc_of_patt p) "invalid pattern"
             and mklabpat =
               function
-              | Ast.PaEq (_, (Ast.PaId (_, i)), p) ->
+              | Ast.PaEq (_, i, p) ->
                   ((ident ~conv_lid: conv_lab i), (patt p))
               | p -> error (loc_of_patt p) "invalid pattern"
             let rec expr_fa al =
@@ -11092,7 +11850,9 @@ module Struct =
                   let t1 =
                     (match t1 with | Ast.TyNil _ -> None | t -> Some (ctyp t))
                   in mkexp loc (Pexp_constraint (expr e, t1, Some (ctyp t2)))
-              | ExFlo (loc, s) -> mkexp loc (Pexp_constant (Const_float s))
+              | ExFlo (loc, s) ->
+                  mkexp loc
+                    (Pexp_constant (Const_float (remove_underscores s)))
               | ExFor (loc, i, e1, e2, df, el) ->
                   let e3 = ExSeq (loc, el) in
                   let df = if mb2b df then Upto else Downto
@@ -11174,7 +11934,7 @@ module Struct =
                   mkexp loc (Pexp_override (mkideexp iel []))
               | ExRec (loc, lel, eo) ->
                   (match lel with
-                   | Ast.BiNil _ -> error loc "empty record"
+                   | Ast.RbNil _ -> error loc "empty record"
                    | _ ->
                        let eo =
                          (match eo with
@@ -11244,8 +12004,7 @@ module Struct =
               | e -> ("", (expr e))
             and binding x acc =
               match x with
-              | Ast.BiAnd (_, x, y) | Ast.BiSem (_, x, y) ->
-                  binding x (binding y acc)
+              | Ast.BiAnd (_, x, y) -> binding x (binding y acc)
               | Ast.BiEq (_, p, e) -> ((patt p), (expr e)) :: acc
               | Ast.BiNil _ -> acc
               | _ -> assert false
@@ -11261,17 +12020,14 @@ module Struct =
               | w -> mkexp (loc_of_expr w) (Pexp_when (expr w, expr e))
             and mklabexp x acc =
               match x with
-              | Ast.BiAnd (_, x, y) | Ast.BiSem (_, x, y) ->
-                  mklabexp x (mklabexp y acc)
-              | Ast.BiEq (_, (Ast.PaId (_, i)), e) ->
+              | Ast.RbSem (_, x, y) -> mklabexp x (mklabexp y acc)
+              | Ast.RbEq (_, i, e) ->
                   ((ident ~conv_lid: conv_lab i), (expr e)) :: acc
               | _ -> assert false
             and mkideexp x acc =
               match x with
-              | Ast.BiAnd (_, x, y) | Ast.BiSem (_, x, y) ->
-                  mkideexp x (mkideexp y acc)
-              | Ast.BiEq (_, (Ast.PaId (_, (Ast.IdLid (_, s)))), e) ->
-                  (s, (expr e)) :: acc
+              | Ast.RbSem (_, x, y) -> mkideexp x (mkideexp y acc)
+              | Ast.RbEq (_, (Ast.IdLid (_, s)), e) -> (s, (expr e)) :: acc
               | _ -> assert false
             and mktype_decl x acc =
               match x with
@@ -11291,15 +12047,17 @@ module Struct =
               | _ -> assert false
             and module_type =
               function
-              | MtId (loc, i) -> mkmty loc (Pmty_ident (long_uident i))
-              | MtFun (loc, n, nt, mt) ->
+              | Ast.MtNil loc ->
+                  error loc "abstract/nil module type not allowed here"
+              | Ast.MtId (loc, i) -> mkmty loc (Pmty_ident (long_uident i))
+              | Ast.MtFun (loc, n, nt, mt) ->
                   mkmty loc
                     (Pmty_functor (n, module_type nt, module_type mt))
-              | MtQuo (loc, _) ->
-                  error loc "abstract module type not allowed here"
-              | MtSig (loc, sl) ->
+              | Ast.MtQuo (loc, _) ->
+                  error loc "module type variable not allowed here"
+              | Ast.MtSig (loc, sl) ->
                   mkmty loc (Pmty_signature (sig_item sl []))
-              | MtWit (loc, mt, wc) ->
+              | Ast.MtWit (loc, mt, wc) ->
                   mkmty loc (Pmty_with (module_type mt, mkwithc wc []))
               | Ast.MtAnt (_, _) -> assert false
             and sig_item s l =
@@ -11367,15 +12125,16 @@ module Struct =
               | _ -> assert false
             and module_expr =
               function
-              | MeId (loc, i) -> mkmod loc (Pmod_ident (long_uident i))
-              | MeApp (loc, me1, me2) ->
+              | Ast.MeNil loc -> error loc "nil module expression"
+              | Ast.MeId (loc, i) -> mkmod loc (Pmod_ident (long_uident i))
+              | Ast.MeApp (loc, me1, me2) ->
                   mkmod loc (Pmod_apply (module_expr me1, module_expr me2))
-              | MeFun (loc, n, mt, me) ->
+              | Ast.MeFun (loc, n, mt, me) ->
                   mkmod loc
                     (Pmod_functor (n, module_type mt, module_expr me))
-              | MeStr (loc, sl) ->
+              | Ast.MeStr (loc, sl) ->
                   mkmod loc (Pmod_structure (str_item sl []))
-              | MeTyc (loc, me, mt) ->
+              | Ast.MeTyc (loc, me, mt) ->
                   mkmod loc
                     (Pmod_constraint (module_expr me, module_type mt))
               | Ast.MeAnt (loc, _) ->
@@ -11469,7 +12228,6 @@ module Struct =
                           (List.split (class_parameters t []))))
                   in
                     {
-                      
                       pci_virt = if mb2b vir then Virtual else Concrete;
                       pci_params = (params, (mkloc loc_params));
                       pci_name = name;
@@ -11492,7 +12250,6 @@ module Struct =
                           (List.split (class_parameters t []))))
                   in
                     {
-                      
                       pci_virt = if mb2b vir then Virtual else Concrete;
                       pci_params = (params, (mkloc loc_params));
                       pci_name = name;
@@ -11625,7 +12382,7 @@ module Struct =
                 method expr =
                   function
                   | Ast.ExLet (_, _, (Ast.BiNil _), e) |
-                      Ast.ExRec (_, (Ast.BiNil _), e) |
+                      Ast.ExRec (_, (Ast.RbNil _), e) |
                       Ast.ExCom (_, (Ast.ExNil _), e) |
                       Ast.ExCom (_, e, (Ast.ExNil _)) |
                       Ast.ExSem (_, (Ast.ExNil _), e) |
@@ -11649,10 +12406,13 @@ module Struct =
                 method binding =
                   function
                   | Ast.BiAnd (_, (Ast.BiNil _), bi) |
-                      Ast.BiAnd (_, bi, (Ast.BiNil _)) |
-                      Ast.BiSem (_, (Ast.BiNil _), bi) |
-                      Ast.BiSem (_, bi, (Ast.BiNil _)) -> self#binding bi
+                      Ast.BiAnd (_, bi, (Ast.BiNil _)) -> self#binding bi
                   | bi -> super#binding bi
+                method rec_binding =
+                  function
+                  | Ast.RbSem (_, (Ast.RbNil _), bi) |
+                      Ast.RbSem (_, bi, (Ast.RbNil _)) -> self#rec_binding bi
+                  | bi -> super#rec_binding bi
                 method module_binding =
                   function
                   | Ast.MbAnd (_, (Ast.MbNil _), mb) |
@@ -11826,11 +12586,10 @@ module Struct =
         let to_string _ = assert false
       end
     module EmptyPrinter :
-      sig module Make (Ast : Sig.Ast) : Sig.Printer with module Ast = Ast end =
+      sig module Make (Ast : Sig.Ast) : Sig.Printer(Ast).S end =
       struct
         module Make (Ast : Sig.Ast) =
           struct
-            module Ast = Ast
             let print_interf ?input_file:(_) ?output_file:(_) _ =
               failwith "No interface printer"
             let print_implem ?input_file:(_) ?output_file:(_) _ =
@@ -11874,24 +12633,20 @@ module Struct =
             module S = Set.Make(String)
             let rec fold_binding_vars f bi acc =
               match bi with
-              | Ast.BiAnd (_, bi1, bi2) | Ast.BiSem (_, bi1, bi2) ->
+              | Ast.BiAnd (_, bi1, bi2) ->
                   fold_binding_vars f bi1 (fold_binding_vars f bi2 acc)
               | Ast.BiEq (_, (Ast.PaId (_, (Ast.IdLid (_, i)))), _) ->
                   f i acc
               | _ -> assert false
             class ['accu] c_fold_pattern_vars f init =
-              object (o)
-                inherit Ast.fold as super
+              object inherit Ast.fold as super
                 val acc = init
                 method acc : 'accu = acc
                 method patt =
                   function
                   | Ast.PaId (_, (Ast.IdLid (_, s))) |
                       Ast.PaLab (_, s, (Ast.PaNil _)) |
-                      Ast.PaOlb (_, s, (Ast.PaNil _)) ->
-                      {<  acc = f s acc; >}
-                  | Ast.PaEq (_, (Ast.PaId (_, (Ast.IdLid (_, _)))), p) ->
-                      o#patt p
+                      Ast.PaOlb (_, s, (Ast.PaNil _)) -> {< acc = f s acc; >}
                   | p -> super#patt p
               end
             let fold_pattern_vars f p init =
@@ -11903,18 +12658,18 @@ module Struct =
                 val free = (free_init : 'accu)
                 val env = (env_init : S.t)
                 method free = free
-                method set_env = fun env -> {<  env = env; >}
-                method add_atom = fun s -> {<  env = S.add s env; >}
+                method set_env = fun env -> {< env = env; >}
+                method add_atom = fun s -> {< env = S.add s env; >}
                 method add_patt =
-                  fun p -> {<  env = fold_pattern_vars S.add p env; >}
+                  fun p -> {< env = fold_pattern_vars S.add p env; >}
                 method add_binding =
-                  fun bi -> {<  env = fold_binding_vars S.add bi env; >}
+                  fun bi -> {< env = fold_binding_vars S.add bi env; >}
                 method expr =
                   function
                   | Ast.ExId (_, (Ast.IdLid (_, s))) |
                       Ast.ExLab (_, s, (Ast.ExNil _)) |
                       Ast.ExOlb (_, s, (Ast.ExNil _)) ->
-                      if S.mem s env then o else {<  free = f s free; >}
+                      if S.mem s env then o else {< free = f s free; >}
                   | Ast.ExLet (_, Ast.BFalse, bi, e) ->
                       (((o#add_binding bi)#expr e)#set_env env)#binding bi
                   | Ast.ExLet (_, Ast.BTrue, bi, e) ->
@@ -12007,8 +12762,8 @@ module Struct =
                   | None -> ()
                 let mk strm =
                   match Stream.peek strm with
-                  | Some ((_, loc)) -> {  strm = strm; loc = loc; }
-                  | None -> {  strm = strm; loc = Loc.ghost; }
+                  | Some ((_, loc)) -> { strm = strm; loc = loc; }
+                  | None -> { strm = strm; loc = Loc.ghost; }
                 let stream c = c.strm
                 let peek_nth c n =
                   let list = Stream.npeek n c.strm in
@@ -12206,11 +12961,7 @@ module Struct =
                          | Some t ->
                              Some
                                (Node
-                                  {
-                                    
-                                    node = Sself;
-                                    son = t;
-                                    brother = DeadEnd;
+                                  { node = Sself; son = t; brother = DeadEnd;
                                   })
                          | None -> search_tree level.lprefix)
                       and search_tree t =
@@ -12224,7 +12975,6 @@ module Struct =
                                     Some
                                       (Node
                                          {
-                                           
                                            node = symb;
                                            son = n.son;
                                            brother = DeadEnd;
@@ -12235,7 +12985,6 @@ module Struct =
                                          Some
                                            (Node
                                               {
-                                                
                                                 node = n.node;
                                                 son = t;
                                                 brother = DeadEnd;
@@ -12760,7 +13509,7 @@ module Struct =
                      txt ^ (" (in [" ^ (entry.ename ^ "])")))
                 let symb_failed entry prev_symb_result prev_symb symb =
                   let tree =
-                    Node {  node = symb; brother = DeadEnd; son = DeadEnd; }
+                    Node { node = symb; brother = DeadEnd; son = DeadEnd; }
                   in tree_failed entry prev_symb_result prev_symb tree
                 let symb_failed_txt e s1 s2 = symb_failed e 0 s1 s2
               end
@@ -12808,7 +13557,7 @@ module Struct =
                   function
                   | Node { node = s; brother = bro; son = son } ->
                       Node
-                        {  node = top_symb entry s; brother = bro; son = son;
+                        { node = top_symb entry s; brother = bro; son = son;
                         }
                   | LocAct (_, _) | DeadEnd -> raise Stream.Failure
                 let entry_of_symb entry =
@@ -13298,7 +14047,6 @@ module Struct =
                   let assoc = match assoc with | Some a -> a | None -> LeftA
                   in
                     {
-                      
                       assoc = assoc;
                       lname = lname;
                       lsuffix = DeadEnd;
@@ -13330,7 +14078,6 @@ module Struct =
                           else ()
                       | None -> ());
                      {
-                       
                        assoc = a;
                        lname = lev.lname;
                        lsuffix = lev.lsuffix;
@@ -13466,7 +14213,6 @@ module Struct =
                          | Node { node = s; son = son; brother = bro } ->
                              Node
                                {
-                                 
                                  node = s;
                                  son = son;
                                  brother = insert [] bro;
@@ -13487,7 +14233,6 @@ module Struct =
                     | None ->
                         Node
                           {
-                            
                             node = s;
                             son = insert sl DeadEnd;
                             brother = tree;
@@ -13500,7 +14245,6 @@ module Struct =
                           (let t =
                              Node
                                {
-                                 
                                  node = s1;
                                  son = insert sl son;
                                  brother = bro;
@@ -13517,21 +14261,19 @@ module Struct =
                                | None ->
                                    Node
                                      {
-                                       
                                        node = s;
                                        son = insert sl DeadEnd;
                                        brother = bro;
                                      } in
                              let t =
-                               Node {  node = s1; son = son; brother = bro; }
+                               Node { node = s1; son = son; brother = bro; }
                              in Some t)
                           else
                             (match try_insert s sl bro with
                              | Some bro ->
                                  let t =
                                    Node
-                                     {  node = s1; son = son; brother = bro;
-                                     }
+                                     { node = s1; son = son; brother = bro; }
                                  in Some t
                              | None -> None)
                     | LocAct (_, _) | DeadEnd -> None
@@ -13539,11 +14281,7 @@ module Struct =
                     function
                     | s :: sl ->
                         Node
-                          {
-                            
-                            node = s;
-                            son = insert_new sl;
-                            brother = DeadEnd;
+                          { node = s; son = insert_new sl; brother = DeadEnd;
                           }
                     | [] -> LocAct (action, [])
                   in insert gsymbols tree
@@ -13551,7 +14289,6 @@ module Struct =
                   match e1 with
                   | true ->
                       {
-                        
                         assoc = slev.assoc;
                         lname = slev.lname;
                         lsuffix =
@@ -13560,7 +14297,6 @@ module Struct =
                       }
                   | false ->
                       {
-                        
                         assoc = slev.assoc;
                         lname = slev.lname;
                         lsuffix = slev.lsuffix;
@@ -13638,7 +14374,6 @@ module Struct =
                                  ((dsl,
                                    (Node
                                       {
-                                        
                                         node = n.node;
                                         son = n.son;
                                         brother = t;
@@ -13652,7 +14387,6 @@ module Struct =
                                ((dsl,
                                  (Node
                                     {
-                                      
                                       node = n.node;
                                       son = n.son;
                                       brother = t;
@@ -13669,12 +14403,12 @@ module Struct =
                     | Some ((Some dsl, t)) ->
                         let t =
                           Node
-                            {  node = n.node; son = t; brother = n.brother; }
+                            { node = n.node; son = t; brother = n.brother; }
                         in Some (((Some (n.node :: dsl)), t))
                     | Some ((None, t)) ->
                         let t =
                           Node
-                            {  node = n.node; son = t; brother = n.brother; }
+                            { node = n.node; son = t; brother = n.brother; }
                         in Some ((None, t))
                     | None -> None
                   in delete_in_tree
@@ -13714,7 +14448,6 @@ module Struct =
                              | _ ->
                                  let lev =
                                    {
-                                     
                                      assoc = lev.assoc;
                                      lname = lev.lname;
                                      lsuffix = t;
@@ -13741,7 +14474,6 @@ module Struct =
                              | _ ->
                                  let lev =
                                    {
-                                     
                                      assoc = lev.assoc;
                                      lname = lev.lname;
                                      lsuffix = lev.lsuffix;
@@ -13894,7 +14626,6 @@ module Struct =
                 let dump ppf e = fprintf ppf "%a@\n" Dump.entry e
                 let mk g n =
                   {
-                    
                     egram = g;
                     ename = n;
                     estart = Tools.empty_entry n;
@@ -13930,7 +14661,6 @@ module Struct =
                 let of_parser g n (p : (Token.t * Loc.t) Stream.t -> 'a) :
                   'a t =
                   {
-                    
                     egram = g;
                     ename = n;
                     estart = (fun _ _ ts -> Action.mk (p ts));
@@ -13972,7 +14702,6 @@ module Struct =
                   let gkeywords = Hashtbl.create 301
                   in
                     {
-                      
                       gkeywords = gkeywords;
                       gfilter = Token.Filter.mk (Hashtbl.mem gkeywords);
                       glexer = Lexer.mk ();
@@ -14034,7 +14763,6 @@ module Struct =
                   let gkeywords = Hashtbl.create 301
                   in
                     {
-                      
                       gkeywords = gkeywords;
                       gfilter = Token.Filter.mk (Hashtbl.mem gkeywords);
                       glexer = Lexer.mk ();
@@ -14075,18 +14803,16 @@ module Printers =
     module DumpCamlp4Ast :
       sig
         module Id : Sig.Id
-        module Make (Syntax : Sig.Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast
+        module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S
       end =
       struct
         module Id =
           struct
             let name = "Camlp4Printers.DumpCamlp4Ast"
             let version =
-              "$Id: Camlp4.ml,v 1.3 2007/02/26 16:43:01 ertai Exp $"
+              "$Id: DumpCamlp4Ast.ml,v 1.5.4.1 2007/03/30 15:50:12 pouillar Exp $"
           end
-        module Make (Syntax : Sig.Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast =
+        module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S =
           struct
             include Syntax
             let with_open_out_file x f =
@@ -14109,18 +14835,16 @@ module Printers =
     module DumpOCamlAst :
       sig
         module Id : Sig.Id
-        module Make (Syntax : Sig.Camlp4Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast
+        module Make (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.Ast).S
       end =
       struct
         module Id : Sig.Id =
           struct
             let name = "Camlp4Printers.DumpOCamlAst"
             let version =
-              "$Id: Camlp4.ml,v 1.3 2007/02/26 16:43:01 ertai Exp $"
+              "$Id: DumpOCamlAst.ml,v 1.5.4.1 2007/03/30 15:50:12 pouillar Exp $"
           end
-        module Make (Syntax : Sig.Camlp4Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast =
+        module Make (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.Ast).S =
           struct
             include Syntax
             module Ast2pt = Struct.Camlp4Ast2OCamlAst.Make(Ast)
@@ -14152,15 +14876,14 @@ module Printers =
     module Null :
       sig
         module Id : Sig.Id
-        module Make (Syntax : Sig.Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast
+        module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S
       end =
       struct
         module Id =
           struct
             let name = "Camlp4.Printers.Null"
             let version =
-              "$Id: Camlp4.ml,v 1.3 2007/02/26 16:43:01 ertai Exp $"
+              "$Id: Null.ml,v 1.2 2007/02/07 10:09:21 ertai Exp $"
           end
         module Make (Syntax : Sig.Syntax) =
           struct
@@ -14176,7 +14899,6 @@ module Printers =
           sig
             open Format
             include Sig.Camlp4Syntax with module Loc = Syntax.Loc
-              and module Warning = Syntax.Warning
               and module Token = Syntax.Token and module Ast = Syntax.Ast
               and module Gram = Syntax.Gram
             val list' :
@@ -14227,6 +14949,7 @@ module Printers =
                       method ctyp1 : formatter -> Ast.ctyp -> unit
                       method constructor_type : formatter -> Ast.ctyp -> unit
                       method dot_expr : formatter -> Ast.expr -> unit
+                      method apply_expr : formatter -> Ast.expr -> unit
                       method expr : formatter -> Ast.expr -> unit
                       method expr_list : formatter -> Ast.expr list -> unit
                       method expr_list_cons :
@@ -14239,7 +14962,7 @@ module Printers =
                       method intlike : formatter -> string -> unit
                       method binding : formatter -> Ast.binding -> unit
                       method record_binding :
-                        formatter -> Ast.binding -> unit
+                        formatter -> Ast.rec_binding -> unit
                       method match_case : formatter -> Ast.match_case -> unit
                       method match_case_aux :
                         formatter -> Ast.match_case -> unit
@@ -14312,15 +15035,9 @@ module Printers =
             val print :
               string option ->
                 (printer -> formatter -> 'a -> unit) -> 'a -> unit
-            val print_interf :
-              ?input_file: string ->
-                ?output_file: string -> Ast.sig_item -> unit
-            val print_implem :
-              ?input_file: string ->
-                ?output_file: string -> Ast.str_item -> unit
           end
-        module MakeMore (Syntax : Sig.Camlp4Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast
+        module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
+          Ast).S
       end =
       struct
         open Format
@@ -14328,7 +15045,7 @@ module Printers =
           struct
             let name = "Camlp4.Printers.OCaml"
             let version =
-              "$Id: Camlp4.ml,v 1.3 2007/02/26 16:43:01 ertai Exp $"
+              "$Id: OCaml.ml,v 1.21.2.7 2007/05/10 13:31:20 pouillar Exp $"
           end
         module Make (Syntax : Sig.Camlp4Syntax) =
           struct
@@ -14459,10 +15176,10 @@ module Printers =
               object (o)
                 val pipe = false
                 val semi = false
-                method under_pipe = {<  pipe = true; >}
-                method under_semi = {<  semi = true; >}
-                method reset_semi = {<  semi = false; >}
-                method reset = {<  pipe = false; semi = false; >}
+                method under_pipe = {< pipe = true; >}
+                method under_semi = {< semi = true; >}
+                method reset_semi = {< semi = false; >}
+                method reset = {< pipe = false; semi = false; >}
                 val semisep = ";;"
                 val andsep =
                   ("@]@ @[<2>and@ " : (unit, formatter, unit) format)
@@ -14472,13 +15189,12 @@ module Printers =
                 val curry_constr = init_curry_constr
                 val var_conversion = false
                 method semisep = semisep
-                method set_semisep = fun s -> {<  semisep = s; >}
+                method set_semisep = fun s -> {< semisep = s; >}
                 method set_comments =
                   fun b ->
-                    {<  mode = if b then `comments else `no_comments; >}
-                method set_loc_and_comments =
-                  {<  mode = `loc_and_comments; >}
-                method set_curry_constr = fun b -> {<  curry_constr = b; >}
+                    {< mode = if b then `comments else `no_comments; >}
+                method set_loc_and_comments = {< mode = `loc_and_comments; >}
+                method set_curry_constr = fun b -> {< curry_constr = b; >}
                 method print_comments_before =
                   fun loc f ->
                     match mode with
@@ -14591,21 +15307,19 @@ module Printers =
                              | _ ->
                                  pp f "%a @[<0>%a=@]@ %a" o#simple_patt p
                                    (list' o#simple_patt "" "@ ") pl o#expr e)
-                      | Ast.BiSem (_, _, _) -> assert false
                       | Ast.BiAnt (_, s) -> o#anti f s
                 method record_binding =
                   fun f bi ->
-                    let () = o#node f bi Ast.loc_of_binding
+                    let () = o#node f bi Ast.loc_of_rec_binding
                     in
                       match bi with
-                      | Ast.BiNil _ -> ()
-                      | Ast.BiEq (_, p, e) ->
-                          pp f "@ @[<2>%a =@ %a@];" o#simple_patt p o#expr e
-                      | Ast.BiSem (_, b1, b2) ->
+                      | Ast.RbNil _ -> ()
+                      | Ast.RbEq (_, i, e) ->
+                          pp f "@ @[<2>%a =@ %a@];" o#var_ident i o#expr e
+                      | Ast.RbSem (_, b1, b2) ->
                           (o#under_semi#record_binding f b1;
                            o#under_semi#record_binding f b2)
-                      | Ast.BiAnd (_, _, _) -> assert false
-                      | Ast.BiAnt (_, s) -> o#anti f s
+                      | Ast.RbAnt (_, s) -> o#anti f s
                 method object_dup =
                   fun f ->
                     list
@@ -14731,8 +15445,7 @@ module Printers =
                           pp f "%a@,(%a)" o#ident i1 o#ident i2
                       | Ast.IdAnt (_, s) -> o#anti f s
                       | Ast.IdLid (_, s) | Ast.IdUid (_, s) -> o#var f s
-                method private var_ident =
-                  {<  var_conversion = true; >}#ident
+                method private var_ident = {< var_conversion = true; >}#ident
                 method expr =
                   fun f e ->
                     let () = o#node f e Ast.loc_of_expr
@@ -14756,8 +15469,8 @@ module Printers =
                           (Ast.ExApp (_, (Ast.ExId (_, (Ast.IdLid (_, n)))),
                              x)),
                           y) when is_infix n ->
-                          pp f "@[<2>%a@ %s@ %a@]" o#dot_expr x n o#dot_expr
-                            y
+                          pp f "@[<2>%a@ %s@ %a@]" o#apply_expr x n
+                            o#apply_expr y
                       | Ast.ExApp (_, x, y) ->
                           let (a, al) = get_expr_args x [ y ]
                           in
@@ -14767,16 +15480,16 @@ module Printers =
                             then
                               (match al with
                                | [ Ast.ExTup (_, _) ] ->
-                                   pp f "@[<2>%a@ (%a)@]" o#dot_expr x 
+                                   pp f "@[<2>%a@ (%a)@]" o#apply_expr x
                                      o#expr y
                                | [ _ ] ->
-                                   pp f "@[<2>%a@ %a@]" o#dot_expr x
-                                     o#dot_expr y
+                                   pp f "@[<2>%a@ %a@]" o#apply_expr x
+                                     o#apply_expr y
                                | al ->
-                                   pp f "@[<2>%a@ (%a)@]" o#dot_expr a
+                                   pp f "@[<2>%a@ (%a)@]" o#apply_expr a
                                      (list o#under_pipe#expr ",@ ") al)
                             else
-                              pp f "@[<2>%a@]" (list o#dot_expr "@ ")
+                              pp f "@[<2>%a@]" (list o#apply_expr "@ ")
                                 (a :: al)
                       | Ast.ExAss (_,
                           (Ast.ExAcc (_, e1,
@@ -14817,10 +15530,18 @@ module Printers =
                           pp f "@[<0>@[<hv2>try@ %a@]@ @[<0>with%a@]@]"
                             o#expr e o#match_case a
                       | Ast.ExAsf _ -> pp f "@[<2>assert@ false@]"
-                      | Ast.ExAsr (_, e) -> pp f "@[<2>assert@ %a@]" o#expr e
+                      | Ast.ExAsr (_, e) ->
+                          pp f "@[<2>assert@ %a@]" o#dot_expr e
                       | Ast.ExLmd (_, s, me, e) ->
                           pp f "@[<2>let module %a =@ %a@]@ @[<2>in@ %a@]"
                             o#var s o#module_expr me o#expr e
+                      | e -> o#apply_expr f e
+                method apply_expr =
+                  fun f e ->
+                    let () = o#node f e Ast.loc_of_expr
+                    in
+                      match e with
+                      | Ast.ExNew (_, i) -> pp f "@[<2>new@ %a@]" o#ident i
                       | e -> o#dot_expr f e
                 method dot_expr =
                   fun f e ->
@@ -14874,10 +15595,9 @@ module Printers =
                       | Ast.ExChr (_, s) -> pp f "'%s'" (ocaml_char s)
                       | Ast.ExId (_, i) -> o#var_ident f i
                       | Ast.ExRec (_, b, (Ast.ExNil _)) ->
-                          pp f "@[<hv0>@[<hv2>{@ %a@]@ }@]" o#record_binding
-                            b
+                          pp f "@[<hv0>@[<hv2>{%a@]@ }@]" o#record_binding b
                       | Ast.ExRec (_, b, e) ->
-                          pp f "@[<hv0>@[<hv2>{@ (%a)@ with@ %a@]@ }@]"
+                          pp f "@[<hv0>@[<hv2>{@ (%a)@ with%a@]@ }@]" 
                             o#expr e o#record_binding b
                       | Ast.ExStr (_, s) -> pp f "\"%s\"" s
                       | Ast.ExWhi (_, e1, e2) ->
@@ -14891,8 +15611,8 @@ module Printers =
                           pp f "@[<2>?%s:@ %a@]" s o#dot_expr e
                       | Ast.ExVrn (_, s) -> pp f "`%a" o#var s
                       | Ast.ExOvr (_, b) ->
-                          pp f "@[<hv0>@[<hv2>{<@ %a@]@ >}@]"
-                            o#record_binding b
+                          pp f "@[<hv0>@[<hv2>{<%a@]@ >}@]" o#record_binding
+                            b
                       | Ast.ExObj (_, (Ast.PaNil _), cst) ->
                           pp f "@[<hv0>@[<hv2>object@ %a@]@ end@]"
                             o#class_str_item cst
@@ -14904,7 +15624,6 @@ module Printers =
                           pp f
                             "@[<hv0>@[<hv2>object @[<2>(%a)@]@ %a@]@ end@]"
                             o#patt p o#class_str_item cst
-                      | Ast.ExNew (_, i) -> pp f "@[<2>new@ %a@]" o#ident i
                       | Ast.ExCom (_, e1, e2) ->
                           pp f "%a,@ %a" o#simple_expr e1 o#simple_expr e2
                       | Ast.ExSem (_, e1, e2) ->
@@ -14915,8 +15634,8 @@ module Printers =
                           Ast.ExFun (_, _) | Ast.ExMat (_, _, _) |
                           Ast.ExTry (_, _, _) | Ast.ExIfe (_, _, _, _) |
                           Ast.ExLet (_, _, _, _) | Ast.ExLmd (_, _, _, _) |
-                          Ast.ExAsr (_, _) | Ast.ExAsf _ | Ast.ExLaz (_, _)
-                          -> pp f "(%a)" o#reset#expr e
+                          Ast.ExAsr (_, _) | Ast.ExAsf _ | Ast.ExLaz (_, _) |
+                          Ast.ExNew (_, _) -> pp f "(%a)" o#reset#expr e
                 method direction_flag =
                   fun f b ->
                     match b with
@@ -14930,8 +15649,8 @@ module Printers =
                       match p with
                       | Ast.PaAli (_, p1, p2) ->
                           pp f "@[<1>(%a@ as@ %a)@]" o#patt p1 o#patt p2
-                      | Ast.PaEq (_, p1, p2) ->
-                          pp f "@[<2>%a =@ %a@]" o#patt p1 o#patt p2
+                      | Ast.PaEq (_, i, p) ->
+                          pp f "@[<2>%a =@ %a@]" o#var_ident i o#patt p
                       | Ast.PaSem (_, p1, p2) ->
                           pp f "%a;@ %a" o#patt p1 o#patt p2
                       | p -> o#patt1 f p
@@ -15052,7 +15771,7 @@ module Printers =
                       | Ast.TyObj (_, (Ast.TyNil _), Ast.BTrue) ->
                           pp f "< .. >"
                       | Ast.TyObj (_, t, Ast.BTrue) ->
-                          pp f "@[<0>@[<2><@ %a@ ..@]@ >@]" o#ctyp t
+                          pp f "@[<0>@[<2><@ %a;@ ..@]@ >@]" o#ctyp t
                       | Ast.TyObj (_, t, Ast.BFalse) ->
                           pp f "@[<0>@[<2><@ %a@]@ >@]" o#ctyp t
                       | Ast.TyQuo (_, s) -> pp f "'%a" o#var s
@@ -15110,14 +15829,7 @@ module Printers =
                       | Ast.TyDcl (_, tn, tp, te, cl) ->
                           (pp f "@[<2>%a%a@]" o#type_params tp o#var tn;
                            (match te with
-                            | Ast.TyQuo (_, s) when
-                                not
-                                  (List.exists
-                                     (function
-                                      | Ast.TyQuo (_, s') -> s = s'
-                                      | _ -> false)
-                                     tp)
-                                -> ()
+                            | Ast.TyNil _ -> ()
                             | _ -> pp f " =@ %a" o#ctyp te);
                            if cl <> []
                            then pp f "@ %a" (list o#constrain "@ ") cl
@@ -15182,6 +15894,8 @@ module Printers =
                       | Ast.SgMod (_, s, mt) ->
                           pp f "@[<2>module %a :@ %a%s@]" o#var s
                             o#module_type mt semisep
+                      | Ast.SgMty (_, s, (Ast.MtNil _)) ->
+                          pp f "@[<2>module type %a%s@]" o#var s semisep
                       | Ast.SgMty (_, s, mt) ->
                           pp f "@[<2>module type %a =@ %a%s@]" o#var s
                             o#module_type mt semisep
@@ -15275,6 +15989,7 @@ module Printers =
                     let () = o#node f mt Ast.loc_of_module_type
                     in
                       match mt with
+                      | Ast.MtNil _ -> assert false
                       | Ast.MtId (_, i) -> o#ident f i
                       | Ast.MtAnt (_, s) -> o#anti f s
                       | Ast.MtFun (_, s, mt1, mt2) ->
@@ -15307,6 +16022,7 @@ module Printers =
                     let () = o#node f me Ast.loc_of_module_expr
                     in
                       match me with
+                      | Ast.MeNil _ -> assert false
                       | Ast.MeId (_, i) -> o#ident f i
                       | Ast.MeAnt (_, s) -> o#anti f s
                       | Ast.MeApp (_, me1, me2) ->
@@ -15338,11 +16054,11 @@ module Printers =
                       | Ast.CeCon (_, Ast.BFalse, i, t) ->
                           pp f "@[<2>@[<1>[%a]@]@ %a@]" o#class_params t
                             o#ident i
-                      | Ast.CeCon (_, Ast.BTrue, i, (Ast.TyNil _)) ->
-                          pp f "@[<2>virtual@ %a@]" o#ident i
-                      | Ast.CeCon (_, Ast.BTrue, i, t) ->
+                      | Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
+                          (Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
+                      | Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
                           pp f "@[<2>virtual@ @[<1>[%a]@]@ %a@]"
-                            o#class_params t o#ident i
+                            o#class_params t o#var i
                       | Ast.CeFun (_, p, ce) ->
                           pp f "@[<2>fun@ %a@ ->@ %a@]" o#patt p o#class_expr
                             ce
@@ -15382,11 +16098,11 @@ module Printers =
                       | Ast.CtCon (_, Ast.BFalse, i, t) ->
                           pp f "@[<2>[@,%a@]@,]@ %a" o#class_params t 
                             o#ident i
-                      | Ast.CtCon (_, Ast.BTrue, i, (Ast.TyNil _)) ->
-                          pp f "@[<2>virtual@ %a@]" o#ident i
-                      | Ast.CtCon (_, Ast.BTrue, i, t) ->
+                      | Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
+                          (Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
+                      | Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
                           pp f "@[<2>virtual@ [@,%a@]@,]@ %a" o#class_params
-                            t o#ident i
+                            t o#var i
                       | Ast.CtFun (_, t, ct) ->
                           pp f "@[<2>%a@ ->@ %a@]" o#simple_ctyp t
                             o#class_type ct
@@ -15502,8 +16218,8 @@ module Printers =
             let print_implem ?input_file:(_) ?output_file st =
               print output_file (fun o -> o#implem) st
           end
-        module MakeMore (Syntax : Sig.Camlp4Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast =
+        module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
+          Ast).S =
           struct
             include Make(Syntax)
             let semisep = ref false
@@ -15553,7 +16269,6 @@ module Printers =
           sig
             open Format
             include Sig.Camlp4Syntax with module Loc = Syntax.Loc
-              and module Warning = Syntax.Warning
               and module Token = Syntax.Token and module Ast = Syntax.Ast
               and module Gram = Syntax.Gram
             class printer :
@@ -15565,15 +16280,9 @@ module Printers =
             val print :
               string option ->
                 (printer -> formatter -> 'a -> unit) -> 'a -> unit
-            val print_interf :
-              ?input_file: string ->
-                ?output_file: string -> Ast.sig_item -> unit
-            val print_implem :
-              ?input_file: string ->
-                ?output_file: string -> Ast.str_item -> unit
           end
-        module MakeMore (Syntax : Sig.Camlp4Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast
+        module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
+          Ast).S
       end =
       struct
         open Format
@@ -15581,7 +16290,7 @@ module Printers =
           struct
             let name = "Camlp4.Printers.OCamlr"
             let version =
-              "$Id: Camlp4.ml,v 1.3 2007/02/26 16:43:01 ertai Exp $"
+              "$Id: OCamlr.ml,v 1.17.4.3 2007/05/10 13:31:20 pouillar Exp $"
           end
         module Make (Syntax : Sig.Camlp4Syntax) =
           struct
@@ -15590,6 +16299,13 @@ module Printers =
             module PP_o = OCaml.Make(Syntax)
             open PP_o
             let pp = fprintf
+            let is_keyword =
+              let keywords = [ "where" ]
+              and not_keywords = [ "false"; "function"; "true"; "val" ]
+              in
+                fun s ->
+                  (not (List.mem s not_keywords)) &&
+                    ((is_keyword s) || (List.mem s keywords))
             class printer ?curry_constr:(init_curry_constr = true)
                     ?(comments = true) () =
               object (o)
@@ -15609,9 +16325,9 @@ module Printers =
                 method reset_semi = o
                 method reset = o
                 method private unset_first_match_case =
-                  {<  first_match_case = false; >}
+                  {< first_match_case = false; >}
                 method private set_first_match_case =
-                  {<  first_match_case = true; >}
+                  {< first_match_case = true; >}
                 method seq =
                   fun f e ->
                     let rec self right f e =
@@ -15646,8 +16362,8 @@ module Printers =
                     | v ->
                         (match lex_string v with
                          | LIDENT s | UIDENT s | ESCAPED_IDENT s when
-                             is_keyword s -> pp f "\\%s" s
-                         | SYMBOL s -> pp f "\\%s" s
+                             is_keyword s -> pp f "%s__" s
+                         | SYMBOL s -> pp f "( %s )" s
                          | LIDENT s | UIDENT s | ESCAPED_IDENT s ->
                              pp_print_string f s
                          | tok ->
@@ -15753,25 +16469,6 @@ module Printers =
                           (Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
                           pp f "@[<2>%a.@,val@]" o#simple_expr e
                       | e -> super#dot_expr f e
-                method simple_expr =
-                  fun f e ->
-                    let () = o#node f e Ast.loc_of_expr
-                    in
-                      match e with
-                      | Ast.ExFor (_, s, e1, e2, Ast.BTrue, e3) ->
-                          pp f
-                            "@[<hv0>@[<hv2>@[<2>for %a@ =@ %a@ to@ %a@ do {@]@ %a@]@ }@]"
-                            o#var s o#expr e1 o#expr e2 o#seq e3
-                      | Ast.ExFor (_, s, e1, e2, Ast.BFalse, e3) ->
-                          pp f
-                            "@[<hv0>@[<hv2>@[<2>for %a@ =@ %a@ downto@ %a@ do {@]@ %a@]@ }@]"
-                            o#var s o#expr e1 o#expr e2 o#seq e3
-                      | Ast.ExWhi (_, e1, e2) ->
-                          pp f "@[<2>while@ %a@ do {@ %a@ }@]" o#expr e1
-                            o#seq e2
-                      | Ast.ExSeq (_, e) ->
-                          pp f "@[<hv0>@[<hv2>do {@ %a@]@ }@]" o#seq e
-                      | e -> super#simple_expr f e
                 method ctyp =
                   fun f t ->
                     let () = o#node f t Ast.loc_of_ctyp
@@ -15780,14 +16477,7 @@ module Printers =
                       | Ast.TyDcl (_, tn, tp, te, cl) ->
                           (pp f "@[<2>%a%a@]" o#var tn o#type_params tp;
                            (match te with
-                            | Ast.TyQuo (_, s) when
-                                not
-                                  (List.exists
-                                     (function
-                                      | Ast.TyQuo (_, s') -> s = s'
-                                      | _ -> false)
-                                     tp)
-                                -> ()
+                            | Ast.TyNil _ -> ()
                             | _ -> pp f " =@ %a" o#ctyp te);
                            if cl <> []
                            then pp f "@ %a" (list o#constrain "@ ") cl
@@ -15868,10 +16558,10 @@ module Printers =
                       | Ast.CtCon (_, Ast.BFalse, i, t) ->
                           pp f "@[<2>%a [@,%a@]@,]" o#ident i o#class_params
                             t
-                      | Ast.CtCon (_, Ast.BTrue, i, (Ast.TyNil _)) ->
-                          pp f "@[<2>virtual@ %a@]" o#ident i
-                      | Ast.CtCon (_, Ast.BTrue, i, t) ->
-                          pp f "@[<2>virtual@ %a@ [@,%a@]@,]" o#ident i
+                      | Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
+                          (Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
+                      | Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
+                          pp f "@[<2>virtual@ %a@ [@,%a@]@,]" o#var i
                             o#class_params t
                       | ct -> super#class_type f ct
                 method class_expr =
@@ -15884,10 +16574,10 @@ module Printers =
                       | Ast.CeCon (_, Ast.BFalse, i, t) ->
                           pp f "@[<2>%a@ @[<1>[%a]@]@]" o#ident i
                             o#class_params t
-                      | Ast.CeCon (_, Ast.BTrue, i, (Ast.TyNil _)) ->
-                          pp f "@[<2>virtual@ %a@]" o#ident i
-                      | Ast.CeCon (_, Ast.BTrue, i, t) ->
-                          pp f "@[<2>virtual@ %a@ @[<1>[%a]@]@]" o#ident i
+                      | Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
+                          (Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
+                      | Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
+                          pp f "@[<2>virtual@ %a@ @[<1>[%a]@]@]" o#var i
                             o#ctyp t
                       | ce -> super#class_expr f ce
               end
@@ -15896,8 +16586,8 @@ module Printers =
             let print_interf = print_interf
             let print_implem = print_implem
           end
-        module MakeMore (Syntax : Sig.Camlp4Syntax) :
-          Sig.Printer with module Ast = Syntax.Ast =
+        module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
+          Ast).S =
           struct
             include Make(Syntax)
             let margin = ref 78
@@ -15933,10 +16623,9 @@ module Printers =
 module OCamlInitSyntax =
   struct
     module Make
-      (Warning : Sig.Warning)
-      (Ast : Sig.Camlp4Ast with module Loc = Warning.Loc)
+      (Ast : Sig.Camlp4Ast)
       (Gram :
-        Sig.Grammar.Static with module Loc = Warning.Loc with
+        Sig.Grammar.Static with module Loc = Ast.Loc with
           type Token.t = Sig.camlp4_token)
       (Quotation : Sig.Quotation with module Ast = Sig.Camlp4AstToAst(Ast)) :
       Sig.Camlp4Syntax with module Loc = Ast.Loc and module Ast = Ast
@@ -15944,12 +16633,16 @@ module OCamlInitSyntax =
       and module AntiquotSyntax.Ast = Sig.Camlp4AstToAst(Ast)
       and module Quotation = Quotation =
       struct
-        module Warning = Warning
         module Loc = Ast.Loc
         module Ast = Ast
         module Gram = Gram
         module Token = Gram.Token
         open Sig
+        type warning = Loc.t -> string -> unit
+        let default_warning loc txt =
+          Format.eprintf "<W> %a: %s@." Loc.print loc txt
+        let current_warning = ref default_warning
+        let print_warning loc txt = !current_warning loc txt
         let a_CHAR = Gram.Entry.mk "a_CHAR"
         let a_FLOAT = Gram.Entry.mk "a_FLOAT"
         let a_INT = Gram.Entry.mk "a_INT"
@@ -15957,7 +16650,6 @@ module OCamlInitSyntax =
         let a_INT64 = Gram.Entry.mk "a_INT64"
         let a_LABEL = Gram.Entry.mk "a_LABEL"
         let a_LIDENT = Gram.Entry.mk "a_LIDENT"
-        let a_LIDENT_or_operator = Gram.Entry.mk "a_LIDENT_or_operator"
         let a_NATIVEINT = Gram.Entry.mk "a_NATIVEINT"
         let a_OPTLABEL = Gram.Entry.mk "a_OPTLABEL"
         let a_STRING = Gram.Entry.mk "a_STRING"
@@ -16009,7 +16701,6 @@ module OCamlInitSyntax =
         let eq_expr = Gram.Entry.mk "eq_expr"
         let expr = Gram.Entry.mk "expr"
         let expr_eoi = Gram.Entry.mk "expr_eoi"
-        let field = Gram.Entry.mk "field"
         let field_expr = Gram.Entry.mk "field_expr"
         let fun_binding = Gram.Entry.mk "fun_binding"
         let fun_def = Gram.Entry.mk "fun_def"
@@ -16061,16 +16752,15 @@ module OCamlInitSyntax =
         let patt_eoi = Gram.Entry.mk "patt_eoi"
         let patt_tcon = Gram.Entry.mk "patt_tcon"
         let phrase = Gram.Entry.mk "phrase"
-        let pipe_ctyp = Gram.Entry.mk "pipe_ctyp"
         let poly_type = Gram.Entry.mk "poly_type"
         let row_field = Gram.Entry.mk "row_field"
-        let sem_ctyp = Gram.Entry.mk "sem_ctyp"
         let sem_expr = Gram.Entry.mk "sem_expr"
         let sem_expr_for_list = Gram.Entry.mk "sem_expr_for_list"
         let sem_patt = Gram.Entry.mk "sem_patt"
         let sem_patt_for_list = Gram.Entry.mk "sem_patt_for_list"
         let semi = Gram.Entry.mk "semi"
         let sequence = Gram.Entry.mk "sequence"
+        let do_sequence = Gram.Entry.mk "do_sequence"
         let sig_item = Gram.Entry.mk "sig_item"
         let sig_items = Gram.Entry.mk "sig_items"
         let star_ctyp = Gram.Entry.mk "star_ctyp"
@@ -16108,11 +16798,26 @@ module OCamlInitSyntax =
         let class_expr_quot = Gram.Entry.mk "quotation of class expression"
         let with_constr_quot = Gram.Entry.mk "quotation of with constraint"
         let binding_quot = Gram.Entry.mk "quotation of binding"
+        let rec_binding_quot = Gram.Entry.mk "quotation of record binding"
         let match_case_quot =
           Gram.Entry.mk "quotation of match_case (try/match/function case)"
         let module_binding_quot =
           Gram.Entry.mk "quotation of module rec binding"
         let ident_quot = Gram.Entry.mk "quotation of identifier"
+        let prefixop =
+          Gram.Entry.mk "prefix operator (start with '!', '?', '~')"
+        let infixop0 =
+          Gram.Entry.mk
+            "infix operator (level 0) (comparison operators, and some others)"
+        let infixop1 =
+          Gram.Entry.mk "infix operator (level 1) (start with '^', '@')"
+        let infixop2 =
+          Gram.Entry.mk "infix operator (level 2) (start with '+', '-')"
+        let infixop3 =
+          Gram.Entry.mk "infix operator (level 3) (start with '*', '/', '%')"
+        let infixop4 =
+          Gram.Entry.mk
+            "infix operator (level 4) (start with \"**\") (right assoc)"
         let _ =
           Gram.extend (top_phrase : 'top_phrase Gram.Entry.t)
             ((fun () ->
@@ -16170,33 +16875,32 @@ module OCamlInitSyntax =
             let parse_patt loc str = Gram.parse_string antiquot_patt loc str
           end
         module Quotation = Quotation
-        module Parser =
-          struct
-            module Ast = Ast
-            let wrap directive_handler pa init_loc cs =
-              let rec loop loc =
-                let (pl, stopped_at_directive) = pa loc cs
-                in
-                  match stopped_at_directive with
-                  | Some new_loc ->
-                      let pl =
-                        (match List.rev pl with
-                         | [] -> assert false
-                         | x :: xs ->
-                             (match directive_handler x with
-                              | None -> xs
-                              | Some x -> x :: xs))
-                      in (List.rev pl) @ (loop new_loc)
-                  | None -> pl
-              in loop init_loc
-            let parse_implem ?(directive_handler = fun _ -> None) _loc cs =
-              let l = wrap directive_handler (Gram.parse implem) _loc cs
-              in Ast.stSem_of_list l
-            let parse_interf ?(directive_handler = fun _ -> None) _loc cs =
-              let l = wrap directive_handler (Gram.parse interf) _loc cs
-              in Ast.sgSem_of_list l
-          end
-        module Printer = Struct.EmptyPrinter.Make(Ast)
+        let wrap directive_handler pa init_loc cs =
+          let rec loop loc =
+            let (pl, stopped_at_directive) = pa loc cs
+            in
+              match stopped_at_directive with
+              | Some new_loc ->
+                  let pl =
+                    (match List.rev pl with
+                     | [] -> assert false
+                     | x :: xs ->
+                         (match directive_handler x with
+                          | None -> xs
+                          | Some x -> x :: xs))
+                  in (List.rev pl) @ (loop new_loc)
+              | None -> pl
+          in loop init_loc
+        let parse_implem ?(directive_handler = fun _ -> None) _loc cs =
+          let l = wrap directive_handler (Gram.parse implem) _loc cs
+          in Ast.stSem_of_list l
+        let parse_interf ?(directive_handler = fun _ -> None) _loc cs =
+          let l = wrap directive_handler (Gram.parse interf) _loc cs
+          in Ast.sgSem_of_list l
+        let print_interf ?input_file:(_) ?output_file:(_) _ =
+          failwith "No interface printer"
+        let print_implem ?input_file:(_) ?output_file:(_) _ =
+          failwith "No implementation printer"
       end
   end
 module PreCast :
@@ -16213,7 +16917,6 @@ module PreCast :
         | NEWLINE | LINE_DIRECTIVE of int * string option | EOI
     module Id : Sig.Id
     module Loc : Sig.Loc
-    module Warning : Sig.Warning with module Loc = Loc
     module Ast : Sig.Camlp4Ast with module Loc = Loc
     module Token : Sig.Token with module Loc = Loc and type t = camlp4_token
     module Lexer : Sig.Lexer with module Loc = Loc and module Token = Token
@@ -16224,18 +16927,15 @@ module PreCast :
     module DynLoader : Sig.DynLoader
     module AstFilters : Sig.AstFilters with module Ast = Ast
     module Syntax : Sig.Camlp4Syntax with module Loc = Loc
-      and module Warning = Warning and module Token = Token
-      and module Ast = Ast and module Gram = Gram
+      and module Token = Token and module Ast = Ast and module Gram = Gram
       and module Quotation = Quotation
     module Printers :
       sig
-        module OCaml : Sig.Printer with module Ast = Sig.Camlp4AstToAst(Ast)
-        module OCamlr : Sig.Printer with module Ast = Sig.Camlp4AstToAst(Ast)
-        module DumpOCamlAst :
-          Sig.Printer with module Ast = Sig.Camlp4AstToAst(Ast)
-        module DumpCamlp4Ast :
-          Sig.Printer with module Ast = Sig.Camlp4AstToAst(Ast)
-        module Null : Sig.Printer with module Ast = Sig.Camlp4AstToAst(Ast)
+        module OCaml : Sig.Printer(Ast).S
+        module OCamlr : Sig.Printer(Ast).S
+        module DumpOCamlAst : Sig.Printer(Ast).S
+        module DumpCamlp4Ast : Sig.Printer(Ast).S
+        module Null : Sig.Printer(Ast).S
       end
     module MakeGram (Lexer : Sig.Lexer with module Loc = Loc) :
       Sig.Grammar.Static with module Loc = Loc and module Token = Lexer.Token
@@ -16245,7 +16945,8 @@ module PreCast :
     module Id =
       struct
         let name = "Camlp4.PreCast"
-        let version = "$Id: Camlp4.ml,v 1.3 2007/02/26 16:43:01 ertai Exp $"
+        let version =
+          "$Id: PreCast.ml,v 1.4.4.1 2007/03/30 15:50:12 pouillar Exp $"
       end
     type camlp4_token =
       Sig.camlp4_token =
@@ -16258,7 +16959,6 @@ module PreCast :
         | ANTIQUOT of string * string | COMMENT of string | BLANKS of string
         | NEWLINE | LINE_DIRECTIVE of int * string option | EOI
     module Loc = Struct.Loc
-    module Warning = Struct.Warning.Make(Loc)
     module Ast = Struct.Camlp4Ast.Make(Loc)
     module Token = Struct.Token.Make(Loc)
     module Lexer = Struct.Lexer.Make(Token)
@@ -16266,7 +16966,7 @@ module PreCast :
     module DynLoader = Struct.DynLoader
     module Quotation = Struct.Quotation.Make(Ast)
     module MakeSyntax (U : sig  end) =
-      OCamlInitSyntax.Make(Warning)(Ast)(Gram)(Quotation)
+      OCamlInitSyntax.Make(Ast)(Gram)(Quotation)
     module Syntax = MakeSyntax(struct  end)
     module AstFilters = Struct.AstFilters.Make(Ast)
     module MakeGram = Struct.Grammar.Static.Make
@@ -16303,17 +17003,14 @@ module Register :
       PreCast.Ast.str_item parser_fun ->
         PreCast.Ast.sig_item parser_fun -> unit
     module Parser
-      (Id : Sig.Id)
-      (Maker : functor (Ast : Sig.Ast) -> Sig.Parser with module Ast = Ast) :
+      (Id : Sig.Id) (Maker : functor (Ast : Sig.Ast) -> Sig.Parser(Ast).S) :
       sig  end
     module OCamlParser
       (Id : Sig.Id)
-      (Maker :
-        functor (Ast : Sig.Camlp4Ast) -> Sig.Parser with module Ast = Ast) :
+      (Maker : functor (Ast : Sig.Camlp4Ast) -> Sig.Parser(Ast).S) : 
       sig  end
     module OCamlPreCastParser
-      (Id : Sig.Id) (Parser : Sig.Parser with module Ast = PreCast.Ast) :
-      sig  end
+      (Id : Sig.Id) (Parser : Sig.Parser(PreCast.Ast).S) : sig  end
     type 'a printer_fun =
       ?input_file: string -> ?output_file: string -> 'a -> unit
     val register_str_item_printer : PreCast.Ast.str_item printer_fun -> unit
@@ -16323,25 +17020,22 @@ module Register :
         PreCast.Ast.sig_item printer_fun -> unit
     module Printer
       (Id : Sig.Id)
-      (Maker :
-        functor (Syn : Sig.Syntax) -> Sig.Printer with module Ast = Syn.Ast) :
+      (Maker : functor (Syn : Sig.Syntax) -> Sig.Printer(Syn.Ast).S) :
       sig  end
     module OCamlPrinter
       (Id : Sig.Id)
-      (Maker :
-        functor (Syn : Sig.Camlp4Syntax) ->
-          Sig.Printer with module Ast = Syn.Ast) :
+      (Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Printer(Syn.Ast).S) :
       sig  end
     module OCamlPreCastPrinter
-      (Id : Sig.Id) (Printer : Sig.Printer with module Ast = PreCast.Ast) :
-      sig  end
+      (Id : Sig.Id) (Printer : Sig.Printer(PreCast.Ast).S) : sig  end
     module AstFilter
       (Id : Sig.Id) (Maker : functor (F : Sig.AstFilters) -> sig  end) :
       sig  end
     val declare_dyn_module : string -> (unit -> unit) -> unit
     val iter_and_take_callbacks : ((string * (unit -> unit)) -> unit) -> unit
-    module CurrentParser : Sig.Parser with module Ast = PreCast.Ast
-    module CurrentPrinter : Sig.Printer with module Ast = PreCast.Ast
+    val loaded_modules : (string list) ref
+    module CurrentParser : Sig.Parser(PreCast.Ast).S
+    module CurrentPrinter : Sig.Printer(PreCast.Ast).S
     val enable_ocaml_printer : unit -> unit
     val enable_ocamlr_printer : unit -> unit
     val enable_null_printer : unit -> unit
@@ -16371,10 +17065,12 @@ module Register :
         (fun ?input_file:(_) ?output_file:(_) _ ->
            failwith "No implementation printer")
     let callbacks = Queue.create ()
+    let loaded_modules = ref []
     let iter_and_take_callbacks f =
       let rec loop () = loop (f (Queue.take callbacks))
       in try loop () with | Queue.Empty -> ()
-    let declare_dyn_module m f = Queue.add (m, f) callbacks
+    let declare_dyn_module m f =
+      (loaded_modules := m :: !loaded_modules; Queue.add (m, f) callbacks)
     let register_str_item_parser f = str_item_parser := f
     let register_sig_item_parser f = sig_item_parser := f
     let register_parser f g = (str_item_parser := f; sig_item_parser := g)
@@ -16411,8 +17107,7 @@ module Register :
       end
     module Printer
       (Id : Sig.Id)
-      (Maker :
-        functor (Syn : Sig.Syntax) -> Sig.Printer with module Ast = Syn.Ast) =
+      (Maker : functor (Syn : Sig.Syntax) -> Sig.Printer(Syn.Ast).S) =
       struct
         let _ =
           declare_dyn_module Id.name
@@ -16421,9 +17116,7 @@ module Register :
       end
     module OCamlPrinter
       (Id : Sig.Id)
-      (Maker :
-        functor (Syn : Sig.Camlp4Syntax) ->
-          Sig.Printer with module Ast = Syn.Ast) =
+      (Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Printer(Syn.Ast).S) =
       struct
         let _ =
           declare_dyn_module Id.name
@@ -16431,15 +17124,14 @@ module Register :
                in register_printer M.print_implem M.print_interf)
       end
     module OCamlPreCastPrinter
-      (Id : Sig.Id) (P : Sig.Printer with module Ast = PreCast.Ast) =
+      (Id : Sig.Id) (P : Sig.Printer(PreCast.Ast).S) =
       struct
         let _ =
           declare_dyn_module Id.name
             (fun _ -> register_printer P.print_implem P.print_interf)
       end
     module Parser
-      (Id : Sig.Id)
-      (Maker : functor (Ast : Sig.Ast) -> Sig.Parser with module Ast = Ast) =
+      (Id : Sig.Id) (Maker : functor (Ast : Sig.Ast) -> Sig.Parser(Ast).S) =
       struct
         let _ =
           declare_dyn_module Id.name
@@ -16448,16 +17140,14 @@ module Register :
       end
     module OCamlParser
       (Id : Sig.Id)
-      (Maker :
-        functor (Ast : Sig.Camlp4Ast) -> Sig.Parser with module Ast = Ast) =
+      (Maker : functor (Ast : Sig.Camlp4Ast) -> Sig.Parser(Ast).S) =
       struct
         let _ =
           declare_dyn_module Id.name
             (fun _ -> let module M = Maker(PreCast.Ast)
                in register_parser M.parse_implem M.parse_interf)
       end
-    module OCamlPreCastParser
-      (Id : Sig.Id) (P : Sig.Parser with module Ast = PreCast.Ast) =
+    module OCamlPreCastParser (Id : Sig.Id) (P : Sig.Parser(PreCast.Ast).S) =
       struct
         let _ =
           declare_dyn_module Id.name
@@ -16470,10 +17160,8 @@ module Register :
           declare_dyn_module Id.name
             (fun _ -> let module M = Maker(AstFilters) in ())
       end
-    let _ = let module M = Syntax.Parser
-      in
-        (sig_item_parser := M.parse_interf;
-         str_item_parser := M.parse_implem)
+    let _ = sig_item_parser := Syntax.parse_interf
+    let _ = str_item_parser := Syntax.parse_implem
     module CurrentParser =
       struct
         module Ast = Ast
index 597f42914a074a83df48404b3cefb7a7cc246998..d3ea1c7a0305d116cc097b88c716fef77d477362 100644 (file)
@@ -7,12 +7,12 @@ module Struct = struct
   module Loc :
     sig INCLUDE "camlp4/Camlp4/Struct/Loc.mli"; end =
     struct INCLUDE "camlp4/Camlp4/Struct/Loc.ml"; end;
-  module Warning = struct INCLUDE "camlp4/Camlp4/Struct/Warning.ml"; end;
   module Token :
     sig INCLUDE "camlp4/Camlp4/Struct/Token.mli"; end =
     struct INCLUDE "camlp4/Camlp4/Struct/Token.ml"; end;
   module Lexer = struct INCLUDE "camlp4/boot/Lexer.ml"; end;
   module Camlp4Ast = struct INCLUDE "camlp4/Camlp4/Struct/Camlp4Ast.ml"; end;
+  module DynAst = struct INCLUDE "camlp4/Camlp4/Struct/DynAst.ml"; end;
   module Quotation = struct INCLUDE "camlp4/Camlp4/Struct/Quotation.ml"; end;
   module AstFilters = struct INCLUDE "camlp4/Camlp4/Struct/AstFilters.ml"; end;
   module Camlp4Ast2OCamlAst :
index 91b3d51c521abdb06ba62f02de6a071b474f4c18..e2a77eccaab3f43794579adb967b2c6bec8e8eac 100644 (file)
@@ -40,4611 +40,10 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
     external loc_of_class_str_item : class_str_item -> Loc.t = "%field0";
     external loc_of_with_constr : with_constr -> Loc.t = "%field0";
     external loc_of_binding : binding -> Loc.t = "%field0";
+    external loc_of_rec_binding : rec_binding -> Loc.t = "%field0";
     external loc_of_module_binding : module_binding -> Loc.t = "%field0";
     external loc_of_match_case : match_case -> Loc.t = "%field0";
     external loc_of_ident : ident -> Loc.t = "%field0";
-    module Meta =
-      struct
-        module type META_LOC =
-          sig
-            (** The first location is where to put the returned pattern.
-          Generally it's _loc to match with <:patt< ... >> quotations.
-          The second location is the one to treat. *)
-            value meta_loc_patt : Loc.t -> Loc.t -> Ast.patt;
-            (** The first location is where to put the returned expression.
-          Generally it's _loc to match with <:expr< ... >> quotations.
-          The second location is the one to treat. *)
-            value meta_loc_expr : Loc.t -> Loc.t -> Ast.expr;
-          end;
-        module MetaLoc =
-          struct
-            value meta_loc_patt _loc location =
-              let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
-              in
-                Ast.PaApp _loc
-                  (Ast.PaId _loc
-                     (Ast.IdAcc _loc (Ast.IdUid _loc "Loc")
-                        (Ast.IdLid _loc "of_tuple")))
-                  (Ast.PaTup _loc
-                     (Ast.PaCom _loc
-                        (Ast.PaStr _loc (Ast.safe_string_escaped a))
-                        (Ast.PaCom _loc
-                           (Ast.PaCom _loc
-                              (Ast.PaCom _loc
-                                 (Ast.PaCom _loc
-                                    (Ast.PaCom _loc
-                                       (Ast.PaCom _loc
-                                          (Ast.PaInt _loc (string_of_int b))
-                                          (Ast.PaInt _loc (string_of_int c)))
-                                       (Ast.PaInt _loc (string_of_int d)))
-                                    (Ast.PaInt _loc (string_of_int e)))
-                                 (Ast.PaInt _loc (string_of_int f)))
-                              (Ast.PaInt _loc (string_of_int g)))
-                           (if h
-                            then Ast.PaId _loc (Ast.IdUid _loc "True")
-                            else Ast.PaId _loc (Ast.IdUid _loc "False")))));
-            value meta_loc_expr _loc location =
-              let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
-              in
-                Ast.ExApp _loc
-                  (Ast.ExId _loc
-                     (Ast.IdAcc _loc (Ast.IdUid _loc "Loc")
-                        (Ast.IdLid _loc "of_tuple")))
-                  (Ast.ExTup _loc
-                     (Ast.ExCom _loc
-                        (Ast.ExStr _loc (Ast.safe_string_escaped a))
-                        (Ast.ExCom _loc
-                           (Ast.ExCom _loc
-                              (Ast.ExCom _loc
-                                 (Ast.ExCom _loc
-                                    (Ast.ExCom _loc
-                                       (Ast.ExCom _loc
-                                          (Ast.ExInt _loc (string_of_int b))
-                                          (Ast.ExInt _loc (string_of_int c)))
-                                       (Ast.ExInt _loc (string_of_int d)))
-                                    (Ast.ExInt _loc (string_of_int e)))
-                                 (Ast.ExInt _loc (string_of_int f)))
-                              (Ast.ExInt _loc (string_of_int g)))
-                           (if h
-                            then Ast.ExId _loc (Ast.IdUid _loc "True")
-                            else Ast.ExId _loc (Ast.IdUid _loc "False")))));
-          end;
-        module MetaGhostLoc =
-          struct
-            value meta_loc_patt _loc _ =
-              Ast.PaId _loc
-                (Ast.IdAcc _loc (Ast.IdUid _loc "Loc")
-                   (Ast.IdLid _loc "ghost"));
-            value meta_loc_expr _loc _ =
-              Ast.ExId _loc
-                (Ast.IdAcc _loc (Ast.IdUid _loc "Loc")
-                   (Ast.IdLid _loc "ghost"));
-          end;
-        module MetaLocVar =
-          struct
-            value meta_loc_patt _loc _ =
-              Ast.PaId _loc (Ast.IdLid _loc Loc.name.val);
-            value meta_loc_expr _loc _ =
-              Ast.ExId _loc (Ast.IdLid _loc Loc.name.val);
-          end;
-        module Make (MetaLoc : META_LOC) =
-          struct
-            open MetaLoc;
-            value meta_acc_Loc_t = meta_loc_expr;
-            module Expr =
-              struct
-                value meta_string _loc s = Ast.ExStr _loc s;
-                value meta_int _loc s = Ast.ExInt _loc s;
-                value meta_float _loc s = Ast.ExFlo _loc s;
-                value meta_char _loc s = Ast.ExChr _loc s;
-                value meta_bool _loc =
-                  fun
-                  [ False -> Ast.ExId _loc (Ast.IdUid _loc "False")
-                  | True -> Ast.ExId _loc (Ast.IdUid _loc "True") ];
-                value rec meta_list mf_a _loc =
-                  fun
-                  [ [] -> Ast.ExId _loc (Ast.IdUid _loc "[]")
-                  | [ x :: xs ] ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc (Ast.ExId _loc (Ast.IdUid _loc "::"))
-                           (mf_a _loc x))
-                        (meta_list mf_a _loc xs) ];
-                value rec meta_binding _loc =
-                  fun
-                  [ Ast.BiAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.BiEq x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "BiEq")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.BiSem x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "BiSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_binding _loc x1))
-                        (meta_binding _loc x2)
-                  | Ast.BiAnd x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "BiAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_binding _loc x1))
-                        (meta_binding _loc x2)
-                  | Ast.BiNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "BiNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_class_expr _loc =
-                  fun
-                  [ Ast.CeAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.CeEq x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeEq")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_class_expr _loc x2)
-                  | Ast.CeAnd x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_class_expr _loc x2)
-                  | Ast.CeTyc x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeTyc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CeStr x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeStr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_class_str_item _loc x2)
-                  | Ast.CeLet x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CeLet")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_meta_bool _loc x1))
-                           (meta_binding _loc x2))
-                        (meta_class_expr _loc x3)
-                  | Ast.CeFun x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeFun")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_class_expr _loc x2)
-                  | Ast.CeCon x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CeCon")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_meta_bool _loc x1))
-                           (meta_ident _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CeApp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.CeNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "CeNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_class_sig_item _loc =
-                  fun
-                  [ Ast.CgAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.CgVir x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CgVir")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CgVal x0 x1 x2 x3 x4 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExApp _loc
-                                    (Ast.ExId _loc
-                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                          (Ast.IdUid _loc "CgVal")))
-                                    (meta_acc_Loc_t _loc x0))
-                                 (meta_string _loc x1))
-                              (meta_meta_bool _loc x2))
-                           (meta_meta_bool _loc x3))
-                        (meta_ctyp _loc x4)
-                  | Ast.CgMth x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CgMth")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CgInh x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "CgInh")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_type _loc x1)
-                  | Ast.CgSem x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CgSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_sig_item _loc x1))
-                        (meta_class_sig_item _loc x2)
-                  | Ast.CgCtr x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CgCtr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.CgNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "CgNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_class_str_item _loc =
-                  fun
-                  [ Ast.CrAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.CrVvr x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CrVvr")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CrVir x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CrVir")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CrVal x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CrVal")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.CrMth x0 x1 x2 x3 x4 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExApp _loc
-                                    (Ast.ExId _loc
-                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                          (Ast.IdUid _loc "CrMth")))
-                                    (meta_acc_Loc_t _loc x0))
-                                 (meta_string _loc x1))
-                              (meta_meta_bool _loc x2))
-                           (meta_expr _loc x3))
-                        (meta_ctyp _loc x4)
-                  | Ast.CrIni x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "CrIni")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.CrInh x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CrInh")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_string _loc x2)
-                  | Ast.CrCtr x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CrCtr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.CrSem x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CrSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_str_item _loc x1))
-                        (meta_class_str_item _loc x2)
-                  | Ast.CrNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "CrNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_class_type _loc =
-                  fun
-                  [ Ast.CtAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.CtEq x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtEq")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_type _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CtCol x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtCol")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_type _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CtAnd x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_type _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CtSig x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtSig")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_class_sig_item _loc x2)
-                  | Ast.CtFun x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtFun")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CtCon x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CtCon")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_meta_bool _loc x1))
-                           (meta_ident _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CtNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "CtNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_ctyp _loc =
-                  fun
-                  [ Ast.TyAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.TyOfAmp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyOfAmp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyAmp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyAmp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyVrnInfSup x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyVrnInfSup")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyVrnInf x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyVrnInf")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyVrnSup x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyVrnSup")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyVrnEq x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyVrnEq")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TySta x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TySta")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyTup x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyTup")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyMut x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyMut")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyPrv x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyPrv")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyOr x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyOr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyAnd x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyOf x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyOf")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TySum x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TySum")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyCom x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyCom")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TySem x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TySem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyCol x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyCol")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyRec x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyRec")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyVrn x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyVrn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.TyQuM x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyQuM")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.TyQuP x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyQuP")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.TyQuo x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyQuo")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.TyPol x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyPol")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyOlb x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyOlb")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyObj x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyObj")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_meta_bool _loc x2)
-                  | Ast.TyDcl x0 x1 x2 x3 x4 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExApp _loc
-                                    (Ast.ExId _loc
-                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                          (Ast.IdUid _loc "TyDcl")))
-                                    (meta_acc_Loc_t _loc x0))
-                                 (meta_string _loc x1))
-                              (meta_list meta_ctyp _loc x2))
-                           (meta_ctyp _loc x3))
-                        (meta_list
-                           (fun _loc (x1, x2) ->
-                              Ast.ExTup _loc
-                                (Ast.ExCom _loc (meta_ctyp _loc x1)
-                                   (meta_ctyp _loc x2)))
-                           _loc x4)
-                  | Ast.TyMan x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyMan")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyId x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.TyLab x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyLab")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyCls x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyCls")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.TyArr x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyArr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyApp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyAny x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "TyAny")))
-                        (meta_acc_Loc_t _loc x0)
-                  | Ast.TyAli x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyAli")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "TyNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_expr _loc =
-                  fun
-                  [ Ast.ExWhi x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExWhi")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExVrn x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExVrn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExTyc x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExTyc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.ExCom x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExCom")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExTup x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExTup")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExTry x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExTry")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_match_case _loc x2)
-                  | Ast.ExStr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExStr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExSte x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExSte")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExSnd x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExSnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_string _loc x2)
-                  | Ast.ExSeq x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExSeq")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExRec x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExRec")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_binding _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExOvr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExOvr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_binding _loc x1)
-                  | Ast.ExOlb x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExOlb")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExObj x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExObj")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_class_str_item _loc x2)
-                  | Ast.ExNew x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExNew")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.ExMat x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExMat")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_match_case _loc x2)
-                  | Ast.ExLmd x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "ExLmd")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_module_expr _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.ExLet x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "ExLet")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_meta_bool _loc x1))
-                           (meta_binding _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.ExLaz x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExLaz")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExLab x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExLab")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExNativeInt x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExNativeInt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExInt64 x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExInt64")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExInt32 x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExInt32")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExInt x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExInt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExIfe x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "ExIfe")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_expr _loc x1))
-                           (meta_expr _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.ExFun x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExFun")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_match_case _loc x1)
-                  | Ast.ExFor x0 x1 x2 x3 x4 x5 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExApp _loc
-                                    (Ast.ExApp _loc
-                                       (Ast.ExId _loc
-                                          (Ast.IdAcc _loc
-                                             (Ast.IdUid _loc "Ast")
-                                             (Ast.IdUid _loc "ExFor")))
-                                       (meta_acc_Loc_t _loc x0))
-                                    (meta_string _loc x1))
-                                 (meta_expr _loc x2))
-                              (meta_expr _loc x3))
-                           (meta_meta_bool _loc x4))
-                        (meta_expr _loc x5)
-                  | Ast.ExFlo x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExFlo")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExCoe x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "ExCoe")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_expr _loc x1))
-                           (meta_ctyp _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.ExChr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExChr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExAss x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExAss")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExAsr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExAsr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExAsf x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "ExAsf")))
-                        (meta_acc_Loc_t _loc x0)
-                  | Ast.ExSem x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExArr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExArr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExAre x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExAre")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExApp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.ExAcc x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExAcc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExId x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.ExNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "ExNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_ident _loc =
-                  fun
-                  [ Ast.IdAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.IdUid x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "IdUid")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.IdLid x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "IdLid")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.IdApp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "IdApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ident _loc x1))
-                        (meta_ident _loc x2)
-                  | Ast.IdAcc x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "IdAcc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ident _loc x1))
-                        (meta_ident _loc x2) ]
-                and meta_match_case _loc =
-                  fun
-                  [ Ast.McAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.McArr x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "McArr")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_patt _loc x1))
-                           (meta_expr _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.McOr x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "McOr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_match_case _loc x1))
-                        (meta_match_case _loc x2)
-                  | Ast.McNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "McNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_meta_bool _loc =
-                  fun
-                  [ Ast.BAnt x0 -> Ast.ExAnt _loc x0
-                  | Ast.BFalse ->
-                      Ast.ExId _loc
-                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                           (Ast.IdUid _loc "BFalse"))
-                  | Ast.BTrue ->
-                      Ast.ExId _loc
-                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                           (Ast.IdUid _loc "BTrue")) ]
-                and meta_meta_list mf_a _loc =
-                  fun
-                  [ Ast.LAnt x0 -> Ast.ExAnt _loc x0
-                  | Ast.LCons x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "LCons")))
-                           (mf_a _loc x0))
-                        (meta_meta_list mf_a _loc x1)
-                  | Ast.LNil ->
-                      Ast.ExId _loc
-                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                           (Ast.IdUid _loc "LNil")) ]
-                and meta_meta_option mf_a _loc =
-                  fun
-                  [ Ast.OAnt x0 -> Ast.ExAnt _loc x0
-                  | Ast.OSome x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "OSome")))
-                        (mf_a _loc x0)
-                  | Ast.ONone ->
-                      Ast.ExId _loc
-                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                           (Ast.IdUid _loc "ONone")) ]
-                and meta_module_binding _loc =
-                  fun
-                  [ Ast.MbAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.MbCol x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MbCol")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.MbColEq x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "MbColEq")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_module_type _loc x2))
-                        (meta_module_expr _loc x3)
-                  | Ast.MbAnd x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MbAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_module_binding _loc x1))
-                        (meta_module_binding _loc x2)
-                  | Ast.MbNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "MbNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_module_expr _loc =
-                  fun
-                  [ Ast.MeAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.MeTyc x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MeTyc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_module_expr _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.MeStr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MeStr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_str_item _loc x1)
-                  | Ast.MeFun x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "MeFun")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_module_type _loc x2))
-                        (meta_module_expr _loc x3)
-                  | Ast.MeApp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MeApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_module_expr _loc x1))
-                        (meta_module_expr _loc x2)
-                  | Ast.MeId x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MeId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1) ]
-                and meta_module_type _loc =
-                  fun
-                  [ Ast.MtAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.MtWit x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MtWit")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_module_type _loc x1))
-                        (meta_with_constr _loc x2)
-                  | Ast.MtSig x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MtSig")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_sig_item _loc x1)
-                  | Ast.MtQuo x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MtQuo")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.MtFun x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "MtFun")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_module_type _loc x2))
-                        (meta_module_type _loc x3)
-                  | Ast.MtId x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MtId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1) ]
-                and meta_patt _loc =
-                  fun
-                  [ Ast.PaVrn x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaVrn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaTyp x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaTyp")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.PaTyc x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaTyc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.PaTup x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaTup")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_patt _loc x1)
-                  | Ast.PaStr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaStr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaEq x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaEq")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaRec x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaRec")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_patt _loc x1)
-                  | Ast.PaRng x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaRng")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaOrp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaOrp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaOlbi x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "PaOlbi")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_patt _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.PaOlb x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaOlb")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaLab x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaLab")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaFlo x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaFlo")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaNativeInt x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaNativeInt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaInt64 x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaInt64")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaInt32 x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaInt32")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaInt x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaInt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaChr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaChr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaSem x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaCom x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaCom")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaArr x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaArr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_patt _loc x1)
-                  | Ast.PaApp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaAny x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "PaAny")))
-                        (meta_acc_Loc_t _loc x0)
-                  | Ast.PaAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.PaAli x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaAli")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaId x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.PaNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "PaNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_sig_item _loc =
-                  fun
-                  [ Ast.SgAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.SgVal x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgVal")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.SgTyp x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgTyp")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.SgOpn x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgOpn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.SgMty x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgMty")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.SgRecMod x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgRecMod")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_module_binding _loc x1)
-                  | Ast.SgMod x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgMod")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.SgInc x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgInc")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_module_type _loc x1)
-                  | Ast.SgExt x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "SgExt")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_ctyp _loc x2))
-                        (meta_meta_list meta_string _loc x3)
-                  | Ast.SgExc x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgExc")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.SgDir x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgDir")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.SgSem x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_sig_item _loc x1))
-                        (meta_sig_item _loc x2)
-                  | Ast.SgClt x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgClt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_type _loc x1)
-                  | Ast.SgCls x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgCls")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_type _loc x1)
-                  | Ast.SgNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "SgNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_str_item _loc =
-                  fun
-                  [ Ast.StAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.StVal x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StVal")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_meta_bool _loc x1))
-                        (meta_binding _loc x2)
-                  | Ast.StTyp x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StTyp")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.StOpn x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StOpn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.StMty x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StMty")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.StRecMod x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StRecMod")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_module_binding _loc x1)
-                  | Ast.StMod x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StMod")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_expr _loc x2)
-                  | Ast.StInc x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StInc")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_module_expr _loc x1)
-                  | Ast.StExt x0 x1 x2 x3 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExApp _loc
-                                 (Ast.ExId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "StExt")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_ctyp _loc x2))
-                        (meta_meta_list meta_string _loc x3)
-                  | Ast.StExp x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StExp")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.StExc x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StExc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_meta_option meta_ident _loc x2)
-                  | Ast.StDir x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StDir")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.StSem x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_str_item _loc x1))
-                        (meta_str_item _loc x2)
-                  | Ast.StClt x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StClt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_type _loc x1)
-                  | Ast.StCls x0 x1 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StCls")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_expr _loc x1)
-                  | Ast.StNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "StNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_with_constr _loc =
-                  fun
-                  [ Ast.WcAnt x0 x1 -> Ast.ExAnt x0 x1
-                  | Ast.WcAnd x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "WcAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_with_constr _loc x1))
-                        (meta_with_constr _loc x2)
-                  | Ast.WcMod x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "WcMod")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ident _loc x1))
-                        (meta_ident _loc x2)
-                  | Ast.WcTyp x0 x1 x2 ->
-                      Ast.ExApp _loc
-                        (Ast.ExApp _loc
-                           (Ast.ExApp _loc
-                              (Ast.ExId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "WcTyp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.WcNil x0 ->
-                      Ast.ExApp _loc
-                        (Ast.ExId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "WcNil")))
-                        (meta_acc_Loc_t _loc x0) ];
-              end;
-            value meta_acc_Loc_t = meta_loc_patt;
-            module Patt =
-              struct
-                value meta_string _loc s = Ast.PaStr _loc s;
-                value meta_int _loc s = Ast.PaInt _loc s;
-                value meta_float _loc s = Ast.PaFlo _loc s;
-                value meta_char _loc s = Ast.PaChr _loc s;
-                value meta_bool _loc =
-                  fun
-                  [ False -> Ast.PaId _loc (Ast.IdUid _loc "False")
-                  | True -> Ast.PaId _loc (Ast.IdUid _loc "True") ];
-                value rec meta_list mf_a _loc =
-                  fun
-                  [ [] -> Ast.PaId _loc (Ast.IdUid _loc "[]")
-                  | [ x :: xs ] ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc (Ast.PaId _loc (Ast.IdUid _loc "::"))
-                           (mf_a _loc x))
-                        (meta_list mf_a _loc xs) ];
-                value rec meta_binding _loc =
-                  fun
-                  [ Ast.BiAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.BiEq x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "BiEq")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.BiSem x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "BiSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_binding _loc x1))
-                        (meta_binding _loc x2)
-                  | Ast.BiAnd x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "BiAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_binding _loc x1))
-                        (meta_binding _loc x2)
-                  | Ast.BiNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "BiNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_class_expr _loc =
-                  fun
-                  [ Ast.CeAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.CeEq x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeEq")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_class_expr _loc x2)
-                  | Ast.CeAnd x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_class_expr _loc x2)
-                  | Ast.CeTyc x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeTyc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CeStr x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeStr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_class_str_item _loc x2)
-                  | Ast.CeLet x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CeLet")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_meta_bool _loc x1))
-                           (meta_binding _loc x2))
-                        (meta_class_expr _loc x3)
-                  | Ast.CeFun x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeFun")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_class_expr _loc x2)
-                  | Ast.CeCon x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CeCon")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_meta_bool _loc x1))
-                           (meta_ident _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CeApp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CeApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.CeNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "CeNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_class_sig_item _loc =
-                  fun
-                  [ Ast.CgAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.CgVir x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CgVir")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CgVal x0 x1 x2 x3 x4 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaApp _loc
-                                    (Ast.PaId _loc
-                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                          (Ast.IdUid _loc "CgVal")))
-                                    (meta_acc_Loc_t _loc x0))
-                                 (meta_string _loc x1))
-                              (meta_meta_bool _loc x2))
-                           (meta_meta_bool _loc x3))
-                        (meta_ctyp _loc x4)
-                  | Ast.CgMth x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CgMth")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CgInh x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "CgInh")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_type _loc x1)
-                  | Ast.CgSem x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CgSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_sig_item _loc x1))
-                        (meta_class_sig_item _loc x2)
-                  | Ast.CgCtr x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CgCtr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.CgNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "CgNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_class_str_item _loc =
-                  fun
-                  [ Ast.CrAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.CrVvr x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CrVvr")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CrVir x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CrVir")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CrVal x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CrVal")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_meta_bool _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.CrMth x0 x1 x2 x3 x4 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaApp _loc
-                                    (Ast.PaId _loc
-                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                          (Ast.IdUid _loc "CrMth")))
-                                    (meta_acc_Loc_t _loc x0))
-                                 (meta_string _loc x1))
-                              (meta_meta_bool _loc x2))
-                           (meta_expr _loc x3))
-                        (meta_ctyp _loc x4)
-                  | Ast.CrIni x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "CrIni")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.CrInh x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CrInh")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_expr _loc x1))
-                        (meta_string _loc x2)
-                  | Ast.CrCtr x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CrCtr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.CrSem x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CrSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_str_item _loc x1))
-                        (meta_class_str_item _loc x2)
-                  | Ast.CrNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "CrNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_class_type _loc =
-                  fun
-                  [ Ast.CtAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.CtEq x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtEq")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_type _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CtCol x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtCol")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_type _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CtAnd x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_class_type _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CtSig x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtSig")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_class_sig_item _loc x2)
-                  | Ast.CtFun x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "CtFun")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_class_type _loc x2)
-                  | Ast.CtCon x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "CtCon")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_meta_bool _loc x1))
-                           (meta_ident _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.CtNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "CtNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_ctyp _loc =
-                  fun
-                  [ Ast.TyAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.TyOfAmp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyOfAmp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyAmp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyAmp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyVrnInfSup x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyVrnInfSup")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyVrnInf x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyVrnInf")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyVrnSup x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyVrnSup")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyVrnEq x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyVrnEq")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TySta x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TySta")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyTup x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyTup")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyMut x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyMut")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyPrv x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyPrv")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyOr x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyOr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyAnd x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyOf x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyOf")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TySum x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TySum")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyCom x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyCom")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TySem x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TySem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyCol x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyCol")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyRec x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyRec")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.TyVrn x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyVrn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.TyQuM x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyQuM")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.TyQuP x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyQuP")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.TyQuo x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyQuo")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.TyPol x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyPol")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyOlb x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyOlb")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyObj x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyObj")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_meta_bool _loc x2)
-                  | Ast.TyDcl x0 x1 x2 x3 x4 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaApp _loc
-                                    (Ast.PaId _loc
-                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                          (Ast.IdUid _loc "TyDcl")))
-                                    (meta_acc_Loc_t _loc x0))
-                                 (meta_string _loc x1))
-                              (meta_list meta_ctyp _loc x2))
-                           (meta_ctyp _loc x3))
-                        (meta_list
-                           (fun _loc (x1, x2) ->
-                              Ast.PaTup _loc
-                                (Ast.PaCom _loc (meta_ctyp _loc x1)
-                                   (meta_ctyp _loc x2)))
-                           _loc x4)
-                  | Ast.TyMan x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyMan")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyId x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.TyLab x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyLab")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyCls x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "TyCls")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.TyArr x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyArr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyApp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyAny x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "TyAny")))
-                        (meta_acc_Loc_t _loc x0)
-                  | Ast.TyAli x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "TyAli")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.TyNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "TyNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_expr _loc =
-                  fun
-                  [ Ast.ExWhi x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExWhi")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExVrn x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExVrn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExTyc x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExTyc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.ExCom x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExCom")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExTup x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExTup")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExTry x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExTry")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_match_case _loc x2)
-                  | Ast.ExStr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExStr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExSte x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExSte")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExSnd x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExSnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_string _loc x2)
-                  | Ast.ExSeq x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExSeq")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExRec x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExRec")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_binding _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExOvr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExOvr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_binding _loc x1)
-                  | Ast.ExOlb x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExOlb")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExObj x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExObj")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_class_str_item _loc x2)
-                  | Ast.ExNew x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExNew")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.ExMat x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExMat")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_match_case _loc x2)
-                  | Ast.ExLmd x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "ExLmd")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_module_expr _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.ExLet x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "ExLet")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_meta_bool _loc x1))
-                           (meta_binding _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.ExLaz x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExLaz")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExLab x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExLab")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExNativeInt x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExNativeInt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExInt64 x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExInt64")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExInt32 x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExInt32")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExInt x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExInt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExIfe x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "ExIfe")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_expr _loc x1))
-                           (meta_expr _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.ExFun x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExFun")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_match_case _loc x1)
-                  | Ast.ExFor x0 x1 x2 x3 x4 x5 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaApp _loc
-                                    (Ast.PaApp _loc
-                                       (Ast.PaId _loc
-                                          (Ast.IdAcc _loc
-                                             (Ast.IdUid _loc "Ast")
-                                             (Ast.IdUid _loc "ExFor")))
-                                       (meta_acc_Loc_t _loc x0))
-                                    (meta_string _loc x1))
-                                 (meta_expr _loc x2))
-                              (meta_expr _loc x3))
-                           (meta_meta_bool _loc x4))
-                        (meta_expr _loc x5)
-                  | Ast.ExFlo x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExFlo")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExCoe x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "ExCoe")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_expr _loc x1))
-                           (meta_ctyp _loc x2))
-                        (meta_ctyp _loc x3)
-                  | Ast.ExChr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExChr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.ExAss x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExAss")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExAsr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExAsr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExAsf x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "ExAsf")))
-                        (meta_acc_Loc_t _loc x0)
-                  | Ast.ExSem x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExArr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExArr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.ExAre x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExAre")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExApp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.ExAcc x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "ExAcc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_expr _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.ExId x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "ExId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.ExNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "ExNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_ident _loc =
-                  fun
-                  [ Ast.IdAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.IdUid x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "IdUid")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.IdLid x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "IdLid")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.IdApp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "IdApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ident _loc x1))
-                        (meta_ident _loc x2)
-                  | Ast.IdAcc x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "IdAcc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ident _loc x1))
-                        (meta_ident _loc x2) ]
-                and meta_match_case _loc =
-                  fun
-                  [ Ast.McAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.McArr x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "McArr")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_patt _loc x1))
-                           (meta_expr _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.McOr x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "McOr")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_match_case _loc x1))
-                        (meta_match_case _loc x2)
-                  | Ast.McNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "McNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_meta_bool _loc =
-                  fun
-                  [ Ast.BAnt x0 -> Ast.PaAnt _loc x0
-                  | Ast.BFalse ->
-                      Ast.PaId _loc
-                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                           (Ast.IdUid _loc "BFalse"))
-                  | Ast.BTrue ->
-                      Ast.PaId _loc
-                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                           (Ast.IdUid _loc "BTrue")) ]
-                and meta_meta_list mf_a _loc =
-                  fun
-                  [ Ast.LAnt x0 -> Ast.PaAnt _loc x0
-                  | Ast.LCons x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "LCons")))
-                           (mf_a _loc x0))
-                        (meta_meta_list mf_a _loc x1)
-                  | Ast.LNil ->
-                      Ast.PaId _loc
-                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                           (Ast.IdUid _loc "LNil")) ]
-                and meta_meta_option mf_a _loc =
-                  fun
-                  [ Ast.OAnt x0 -> Ast.PaAnt _loc x0
-                  | Ast.OSome x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "OSome")))
-                        (mf_a _loc x0)
-                  | Ast.ONone ->
-                      Ast.PaId _loc
-                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                           (Ast.IdUid _loc "ONone")) ]
-                and meta_module_binding _loc =
-                  fun
-                  [ Ast.MbAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.MbCol x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MbCol")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.MbColEq x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "MbColEq")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_module_type _loc x2))
-                        (meta_module_expr _loc x3)
-                  | Ast.MbAnd x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MbAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_module_binding _loc x1))
-                        (meta_module_binding _loc x2)
-                  | Ast.MbNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "MbNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_module_expr _loc =
-                  fun
-                  [ Ast.MeAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.MeTyc x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MeTyc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_module_expr _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.MeStr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MeStr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_str_item _loc x1)
-                  | Ast.MeFun x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "MeFun")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_module_type _loc x2))
-                        (meta_module_expr _loc x3)
-                  | Ast.MeApp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MeApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_module_expr _loc x1))
-                        (meta_module_expr _loc x2)
-                  | Ast.MeId x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MeId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1) ]
-                and meta_module_type _loc =
-                  fun
-                  [ Ast.MtAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.MtWit x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "MtWit")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_module_type _loc x1))
-                        (meta_with_constr _loc x2)
-                  | Ast.MtSig x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MtSig")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_sig_item _loc x1)
-                  | Ast.MtQuo x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MtQuo")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.MtFun x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "MtFun")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_module_type _loc x2))
-                        (meta_module_type _loc x3)
-                  | Ast.MtId x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "MtId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1) ]
-                and meta_patt _loc =
-                  fun
-                  [ Ast.PaVrn x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaVrn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaTyp x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaTyp")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.PaTyc x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaTyc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.PaTup x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaTup")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_patt _loc x1)
-                  | Ast.PaStr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaStr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaEq x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaEq")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaRec x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaRec")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_patt _loc x1)
-                  | Ast.PaRng x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaRng")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaOrp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaOrp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaOlbi x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "PaOlbi")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_patt _loc x2))
-                        (meta_expr _loc x3)
-                  | Ast.PaOlb x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaOlb")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaLab x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaLab")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaFlo x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaFlo")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaNativeInt x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaNativeInt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaInt64 x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaInt64")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaInt32 x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaInt32")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaInt x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaInt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaChr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaChr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_string _loc x1)
-                  | Ast.PaSem x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaCom x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaCom")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaArr x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaArr")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_patt _loc x1)
-                  | Ast.PaApp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaApp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaAny x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "PaAny")))
-                        (meta_acc_Loc_t _loc x0)
-                  | Ast.PaAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.PaAli x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "PaAli")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_patt _loc x1))
-                        (meta_patt _loc x2)
-                  | Ast.PaId x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "PaId")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.PaNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "PaNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_sig_item _loc =
-                  fun
-                  [ Ast.SgAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.SgVal x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgVal")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.SgTyp x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgTyp")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.SgOpn x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgOpn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.SgMty x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgMty")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.SgRecMod x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgRecMod")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_module_binding _loc x1)
-                  | Ast.SgMod x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgMod")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.SgInc x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgInc")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_module_type _loc x1)
-                  | Ast.SgExt x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "SgExt")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_ctyp _loc x2))
-                        (meta_meta_list meta_string _loc x3)
-                  | Ast.SgExc x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgExc")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.SgDir x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgDir")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.SgSem x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "SgSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_sig_item _loc x1))
-                        (meta_sig_item _loc x2)
-                  | Ast.SgClt x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgClt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_type _loc x1)
-                  | Ast.SgCls x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "SgCls")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_type _loc x1)
-                  | Ast.SgNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "SgNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_str_item _loc =
-                  fun
-                  [ Ast.StAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.StVal x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StVal")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_meta_bool _loc x1))
-                        (meta_binding _loc x2)
-                  | Ast.StTyp x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StTyp")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ctyp _loc x1)
-                  | Ast.StOpn x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StOpn")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_ident _loc x1)
-                  | Ast.StMty x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StMty")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_type _loc x2)
-                  | Ast.StRecMod x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StRecMod")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_module_binding _loc x1)
-                  | Ast.StMod x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StMod")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_module_expr _loc x2)
-                  | Ast.StInc x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StInc")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_module_expr _loc x1)
-                  | Ast.StExt x0 x1 x2 x3 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaApp _loc
-                                 (Ast.PaId _loc
-                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                       (Ast.IdUid _loc "StExt")))
-                                 (meta_acc_Loc_t _loc x0))
-                              (meta_string _loc x1))
-                           (meta_ctyp _loc x2))
-                        (meta_meta_list meta_string _loc x3)
-                  | Ast.StExp x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StExp")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_expr _loc x1)
-                  | Ast.StExc x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StExc")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_meta_option meta_ident _loc x2)
-                  | Ast.StDir x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StDir")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_string _loc x1))
-                        (meta_expr _loc x2)
-                  | Ast.StSem x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "StSem")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_str_item _loc x1))
-                        (meta_str_item _loc x2)
-                  | Ast.StClt x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StClt")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_type _loc x1)
-                  | Ast.StCls x0 x1 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaId _loc
-                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                 (Ast.IdUid _loc "StCls")))
-                           (meta_acc_Loc_t _loc x0))
-                        (meta_class_expr _loc x1)
-                  | Ast.StNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "StNil")))
-                        (meta_acc_Loc_t _loc x0) ]
-                and meta_with_constr _loc =
-                  fun
-                  [ Ast.WcAnt x0 x1 -> Ast.PaAnt x0 x1
-                  | Ast.WcAnd x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "WcAnd")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_with_constr _loc x1))
-                        (meta_with_constr _loc x2)
-                  | Ast.WcMod x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "WcMod")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ident _loc x1))
-                        (meta_ident _loc x2)
-                  | Ast.WcTyp x0 x1 x2 ->
-                      Ast.PaApp _loc
-                        (Ast.PaApp _loc
-                           (Ast.PaApp _loc
-                              (Ast.PaId _loc
-                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                                    (Ast.IdUid _loc "WcTyp")))
-                              (meta_acc_Loc_t _loc x0))
-                           (meta_ctyp _loc x1))
-                        (meta_ctyp _loc x2)
-                  | Ast.WcNil x0 ->
-                      Ast.PaApp _loc
-                        (Ast.PaId _loc
-                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
-                              (Ast.IdUid _loc "WcNil")))
-                        (meta_acc_Loc_t _loc x0) ];
-              end;
-          end;
-      end;
-    class map =
-      object (o)
-        method string = fun x -> (x : string);
-        method int = fun x -> (x : int);
-        method float = fun x -> (x : float);
-        method bool = fun x -> (x : bool);
-        method list : ! 'a 'b. ('a -> 'b) -> list 'a -> list 'b = List.map;
-        method option : ! 'a 'b. ('a -> 'b) -> option 'a -> option 'b =
-          fun f -> fun [ None -> None | Some x -> Some (f x) ];
-        method array : ! 'a 'b. ('a -> 'b) -> array 'a -> array 'b = Array.
-          map;
-        method ref : ! 'a 'b. ('a -> 'b) -> ref 'a -> ref 'b =
-          fun f { \val = x } -> {  \val = f x; };
-        method _Loc_t : Loc.t -> Loc.t = fun x -> x;
-        method with_constr : with_constr -> with_constr =
-          fun
-          [ WcNil _x0 -> WcNil (o#_Loc_t _x0)
-          | WcTyp _x0 _x1 _x2 ->
-              WcTyp (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | WcMod _x0 _x1 _x2 ->
-              WcMod (o#_Loc_t _x0) (o#ident _x1) (o#ident _x2)
-          | WcAnd _x0 _x1 _x2 ->
-              WcAnd (o#_Loc_t _x0) (o#with_constr _x1) (o#with_constr _x2)
-          | WcAnt _x0 _x1 -> WcAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method str_item : str_item -> str_item =
-          fun
-          [ StNil _x0 -> StNil (o#_Loc_t _x0)
-          | StCls _x0 _x1 -> StCls (o#_Loc_t _x0) (o#class_expr _x1)
-          | StClt _x0 _x1 -> StClt (o#_Loc_t _x0) (o#class_type _x1)
-          | StSem _x0 _x1 _x2 ->
-              StSem (o#_Loc_t _x0) (o#str_item _x1) (o#str_item _x2)
-          | StDir _x0 _x1 _x2 ->
-              StDir (o#_Loc_t _x0) (o#string _x1) (o#expr _x2)
-          | StExc _x0 _x1 _x2 ->
-              StExc (o#_Loc_t _x0) (o#ctyp _x1) (o#meta_option o#ident _x2)
-          | StExp _x0 _x1 -> StExp (o#_Loc_t _x0) (o#expr _x1)
-          | StExt _x0 _x1 _x2 _x3 ->
-              StExt (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
-                (o#meta_list o#string _x3)
-          | StInc _x0 _x1 -> StInc (o#_Loc_t _x0) (o#module_expr _x1)
-          | StMod _x0 _x1 _x2 ->
-              StMod (o#_Loc_t _x0) (o#string _x1) (o#module_expr _x2)
-          | StRecMod _x0 _x1 ->
-              StRecMod (o#_Loc_t _x0) (o#module_binding _x1)
-          | StMty _x0 _x1 _x2 ->
-              StMty (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
-          | StOpn _x0 _x1 -> StOpn (o#_Loc_t _x0) (o#ident _x1)
-          | StTyp _x0 _x1 -> StTyp (o#_Loc_t _x0) (o#ctyp _x1)
-          | StVal _x0 _x1 _x2 ->
-              StVal (o#_Loc_t _x0) (o#meta_bool _x1) (o#binding _x2)
-          | StAnt _x0 _x1 -> StAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method sig_item : sig_item -> sig_item =
-          fun
-          [ SgNil _x0 -> SgNil (o#_Loc_t _x0)
-          | SgCls _x0 _x1 -> SgCls (o#_Loc_t _x0) (o#class_type _x1)
-          | SgClt _x0 _x1 -> SgClt (o#_Loc_t _x0) (o#class_type _x1)
-          | SgSem _x0 _x1 _x2 ->
-              SgSem (o#_Loc_t _x0) (o#sig_item _x1) (o#sig_item _x2)
-          | SgDir _x0 _x1 _x2 ->
-              SgDir (o#_Loc_t _x0) (o#string _x1) (o#expr _x2)
-          | SgExc _x0 _x1 -> SgExc (o#_Loc_t _x0) (o#ctyp _x1)
-          | SgExt _x0 _x1 _x2 _x3 ->
-              SgExt (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
-                (o#meta_list o#string _x3)
-          | SgInc _x0 _x1 -> SgInc (o#_Loc_t _x0) (o#module_type _x1)
-          | SgMod _x0 _x1 _x2 ->
-              SgMod (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
-          | SgRecMod _x0 _x1 ->
-              SgRecMod (o#_Loc_t _x0) (o#module_binding _x1)
-          | SgMty _x0 _x1 _x2 ->
-              SgMty (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
-          | SgOpn _x0 _x1 -> SgOpn (o#_Loc_t _x0) (o#ident _x1)
-          | SgTyp _x0 _x1 -> SgTyp (o#_Loc_t _x0) (o#ctyp _x1)
-          | SgVal _x0 _x1 _x2 ->
-              SgVal (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
-          | SgAnt _x0 _x1 -> SgAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method patt : patt -> patt =
-          fun
-          [ PaNil _x0 -> PaNil (o#_Loc_t _x0)
-          | PaId _x0 _x1 -> PaId (o#_Loc_t _x0) (o#ident _x1)
-          | PaAli _x0 _x1 _x2 ->
-              PaAli (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
-          | PaAnt _x0 _x1 -> PaAnt (o#_Loc_t _x0) (o#string _x1)
-          | PaAny _x0 -> PaAny (o#_Loc_t _x0)
-          | PaApp _x0 _x1 _x2 ->
-              PaApp (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
-          | PaArr _x0 _x1 -> PaArr (o#_Loc_t _x0) (o#patt _x1)
-          | PaCom _x0 _x1 _x2 ->
-              PaCom (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
-          | PaSem _x0 _x1 _x2 ->
-              PaSem (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
-          | PaChr _x0 _x1 -> PaChr (o#_Loc_t _x0) (o#string _x1)
-          | PaInt _x0 _x1 -> PaInt (o#_Loc_t _x0) (o#string _x1)
-          | PaInt32 _x0 _x1 -> PaInt32 (o#_Loc_t _x0) (o#string _x1)
-          | PaInt64 _x0 _x1 -> PaInt64 (o#_Loc_t _x0) (o#string _x1)
-          | PaNativeInt _x0 _x1 -> PaNativeInt (o#_Loc_t _x0) (o#string _x1)
-          | PaFlo _x0 _x1 -> PaFlo (o#_Loc_t _x0) (o#string _x1)
-          | PaLab _x0 _x1 _x2 ->
-              PaLab (o#_Loc_t _x0) (o#string _x1) (o#patt _x2)
-          | PaOlb _x0 _x1 _x2 ->
-              PaOlb (o#_Loc_t _x0) (o#string _x1) (o#patt _x2)
-          | PaOlbi _x0 _x1 _x2 _x3 ->
-              PaOlbi (o#_Loc_t _x0) (o#string _x1) (o#patt _x2) (o#expr _x3)
-          | PaOrp _x0 _x1 _x2 ->
-              PaOrp (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
-          | PaRng _x0 _x1 _x2 ->
-              PaRng (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
-          | PaRec _x0 _x1 -> PaRec (o#_Loc_t _x0) (o#patt _x1)
-          | PaEq _x0 _x1 _x2 -> PaEq (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
-          | PaStr _x0 _x1 -> PaStr (o#_Loc_t _x0) (o#string _x1)
-          | PaTup _x0 _x1 -> PaTup (o#_Loc_t _x0) (o#patt _x1)
-          | PaTyc _x0 _x1 _x2 ->
-              PaTyc (o#_Loc_t _x0) (o#patt _x1) (o#ctyp _x2)
-          | PaTyp _x0 _x1 -> PaTyp (o#_Loc_t _x0) (o#ident _x1)
-          | PaVrn _x0 _x1 -> PaVrn (o#_Loc_t _x0) (o#string _x1) ];
-        method module_type : module_type -> module_type =
-          fun
-          [ MtId _x0 _x1 -> MtId (o#_Loc_t _x0) (o#ident _x1)
-          | MtFun _x0 _x1 _x2 _x3 ->
-              MtFun (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
-                (o#module_type _x3)
-          | MtQuo _x0 _x1 -> MtQuo (o#_Loc_t _x0) (o#string _x1)
-          | MtSig _x0 _x1 -> MtSig (o#_Loc_t _x0) (o#sig_item _x1)
-          | MtWit _x0 _x1 _x2 ->
-              MtWit (o#_Loc_t _x0) (o#module_type _x1) (o#with_constr _x2)
-          | MtAnt _x0 _x1 -> MtAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method module_expr : module_expr -> module_expr =
-          fun
-          [ MeId _x0 _x1 -> MeId (o#_Loc_t _x0) (o#ident _x1)
-          | MeApp _x0 _x1 _x2 ->
-              MeApp (o#_Loc_t _x0) (o#module_expr _x1) (o#module_expr _x2)
-          | MeFun _x0 _x1 _x2 _x3 ->
-              MeFun (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
-                (o#module_expr _x3)
-          | MeStr _x0 _x1 -> MeStr (o#_Loc_t _x0) (o#str_item _x1)
-          | MeTyc _x0 _x1 _x2 ->
-              MeTyc (o#_Loc_t _x0) (o#module_expr _x1) (o#module_type _x2)
-          | MeAnt _x0 _x1 -> MeAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method module_binding : module_binding -> module_binding =
-          fun
-          [ MbNil _x0 -> MbNil (o#_Loc_t _x0)
-          | MbAnd _x0 _x1 _x2 ->
-              MbAnd (o#_Loc_t _x0) (o#module_binding _x1)
-                (o#module_binding _x2)
-          | MbColEq _x0 _x1 _x2 _x3 ->
-              MbColEq (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
-                (o#module_expr _x3)
-          | MbCol _x0 _x1 _x2 ->
-              MbCol (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
-          | MbAnt _x0 _x1 -> MbAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method meta_option :
-          ! 'a 'b. ('a -> 'b) -> meta_option 'a -> meta_option 'b =
-          fun _f_a ->
-            fun
-            [ ONone -> ONone
-            | OSome _x0 -> OSome (_f_a _x0)
-            | OAnt _x0 -> OAnt (o#string _x0) ];
-        method meta_list :
-          ! 'a 'b. ('a -> 'b) -> meta_list 'a -> meta_list 'b =
-          fun _f_a ->
-            fun
-            [ LNil -> LNil
-            | LCons _x0 _x1 -> LCons (_f_a _x0) (o#meta_list _f_a _x1)
-            | LAnt _x0 -> LAnt (o#string _x0) ];
-        method meta_bool : meta_bool -> meta_bool =
-          fun
-          [ BTrue -> BTrue
-          | BFalse -> BFalse
-          | BAnt _x0 -> BAnt (o#string _x0) ];
-        method match_case : match_case -> match_case =
-          fun
-          [ McNil _x0 -> McNil (o#_Loc_t _x0)
-          | McOr _x0 _x1 _x2 ->
-              McOr (o#_Loc_t _x0) (o#match_case _x1) (o#match_case _x2)
-          | McArr _x0 _x1 _x2 _x3 ->
-              McArr (o#_Loc_t _x0) (o#patt _x1) (o#expr _x2) (o#expr _x3)
-          | McAnt _x0 _x1 -> McAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method ident : ident -> ident =
-          fun
-          [ IdAcc _x0 _x1 _x2 ->
-              IdAcc (o#_Loc_t _x0) (o#ident _x1) (o#ident _x2)
-          | IdApp _x0 _x1 _x2 ->
-              IdApp (o#_Loc_t _x0) (o#ident _x1) (o#ident _x2)
-          | IdLid _x0 _x1 -> IdLid (o#_Loc_t _x0) (o#string _x1)
-          | IdUid _x0 _x1 -> IdUid (o#_Loc_t _x0) (o#string _x1)
-          | IdAnt _x0 _x1 -> IdAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method expr : expr -> expr =
-          fun
-          [ ExNil _x0 -> ExNil (o#_Loc_t _x0)
-          | ExId _x0 _x1 -> ExId (o#_Loc_t _x0) (o#ident _x1)
-          | ExAcc _x0 _x1 _x2 ->
-              ExAcc (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
-          | ExAnt _x0 _x1 -> ExAnt (o#_Loc_t _x0) (o#string _x1)
-          | ExApp _x0 _x1 _x2 ->
-              ExApp (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
-          | ExAre _x0 _x1 _x2 ->
-              ExAre (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
-          | ExArr _x0 _x1 -> ExArr (o#_Loc_t _x0) (o#expr _x1)
-          | ExSem _x0 _x1 _x2 ->
-              ExSem (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
-          | ExAsf _x0 -> ExAsf (o#_Loc_t _x0)
-          | ExAsr _x0 _x1 -> ExAsr (o#_Loc_t _x0) (o#expr _x1)
-          | ExAss _x0 _x1 _x2 ->
-              ExAss (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
-          | ExChr _x0 _x1 -> ExChr (o#_Loc_t _x0) (o#string _x1)
-          | ExCoe _x0 _x1 _x2 _x3 ->
-              ExCoe (o#_Loc_t _x0) (o#expr _x1) (o#ctyp _x2) (o#ctyp _x3)
-          | ExFlo _x0 _x1 -> ExFlo (o#_Loc_t _x0) (o#string _x1)
-          | ExFor _x0 _x1 _x2 _x3 _x4 _x5 ->
-              ExFor (o#_Loc_t _x0) (o#string _x1) (o#expr _x2) (o#expr _x3)
-                (o#meta_bool _x4) (o#expr _x5)
-          | ExFun _x0 _x1 -> ExFun (o#_Loc_t _x0) (o#match_case _x1)
-          | ExIfe _x0 _x1 _x2 _x3 ->
-              ExIfe (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2) (o#expr _x3)
-          | ExInt _x0 _x1 -> ExInt (o#_Loc_t _x0) (o#string _x1)
-          | ExInt32 _x0 _x1 -> ExInt32 (o#_Loc_t _x0) (o#string _x1)
-          | ExInt64 _x0 _x1 -> ExInt64 (o#_Loc_t _x0) (o#string _x1)
-          | ExNativeInt _x0 _x1 -> ExNativeInt (o#_Loc_t _x0) (o#string _x1)
-          | ExLab _x0 _x1 _x2 ->
-              ExLab (o#_Loc_t _x0) (o#string _x1) (o#expr _x2)
-          | ExLaz _x0 _x1 -> ExLaz (o#_Loc_t _x0) (o#expr _x1)
-          | ExLet _x0 _x1 _x2 _x3 ->
-              ExLet (o#_Loc_t _x0) (o#meta_bool _x1) (o#binding _x2)
-                (o#expr _x3)
-          | ExLmd _x0 _x1 _x2 _x3 ->
-              ExLmd (o#_Loc_t _x0) (o#string _x1) (o#module_expr _x2)
-                (o#expr _x3)
-          | ExMat _x0 _x1 _x2 ->
-              ExMat (o#_Loc_t _x0) (o#expr _x1) (o#match_case _x2)
-          | ExNew _x0 _x1 -> ExNew (o#_Loc_t _x0) (o#ident _x1)
-          | ExObj _x0 _x1 _x2 ->
-              ExObj (o#_Loc_t _x0) (o#patt _x1) (o#class_str_item _x2)
-          | ExOlb _x0 _x1 _x2 ->
-              ExOlb (o#_Loc_t _x0) (o#string _x1) (o#expr _x2)
-          | ExOvr _x0 _x1 -> ExOvr (o#_Loc_t _x0) (o#binding _x1)
-          | ExRec _x0 _x1 _x2 ->
-              ExRec (o#_Loc_t _x0) (o#binding _x1) (o#expr _x2)
-          | ExSeq _x0 _x1 -> ExSeq (o#_Loc_t _x0) (o#expr _x1)
-          | ExSnd _x0 _x1 _x2 ->
-              ExSnd (o#_Loc_t _x0) (o#expr _x1) (o#string _x2)
-          | ExSte _x0 _x1 _x2 ->
-              ExSte (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
-          | ExStr _x0 _x1 -> ExStr (o#_Loc_t _x0) (o#string _x1)
-          | ExTry _x0 _x1 _x2 ->
-              ExTry (o#_Loc_t _x0) (o#expr _x1) (o#match_case _x2)
-          | ExTup _x0 _x1 -> ExTup (o#_Loc_t _x0) (o#expr _x1)
-          | ExCom _x0 _x1 _x2 ->
-              ExCom (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
-          | ExTyc _x0 _x1 _x2 ->
-              ExTyc (o#_Loc_t _x0) (o#expr _x1) (o#ctyp _x2)
-          | ExVrn _x0 _x1 -> ExVrn (o#_Loc_t _x0) (o#string _x1)
-          | ExWhi _x0 _x1 _x2 ->
-              ExWhi (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2) ];
-        method ctyp : ctyp -> ctyp =
-          fun
-          [ TyNil _x0 -> TyNil (o#_Loc_t _x0)
-          | TyAli _x0 _x1 _x2 ->
-              TyAli (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyAny _x0 -> TyAny (o#_Loc_t _x0)
-          | TyApp _x0 _x1 _x2 ->
-              TyApp (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyArr _x0 _x1 _x2 ->
-              TyArr (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyCls _x0 _x1 -> TyCls (o#_Loc_t _x0) (o#ident _x1)
-          | TyLab _x0 _x1 _x2 ->
-              TyLab (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
-          | TyId _x0 _x1 -> TyId (o#_Loc_t _x0) (o#ident _x1)
-          | TyMan _x0 _x1 _x2 ->
-              TyMan (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyDcl _x0 _x1 _x2 _x3 _x4 ->
-              TyDcl (o#_Loc_t _x0) (o#string _x1) (o#list o#ctyp _x2)
-                (o#ctyp _x3)
-                (o#list (fun (_x0, _x1) -> ((o#ctyp _x0), (o#ctyp _x1))) _x4)
-          | TyObj _x0 _x1 _x2 ->
-              TyObj (o#_Loc_t _x0) (o#ctyp _x1) (o#meta_bool _x2)
-          | TyOlb _x0 _x1 _x2 ->
-              TyOlb (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
-          | TyPol _x0 _x1 _x2 ->
-              TyPol (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyQuo _x0 _x1 -> TyQuo (o#_Loc_t _x0) (o#string _x1)
-          | TyQuP _x0 _x1 -> TyQuP (o#_Loc_t _x0) (o#string _x1)
-          | TyQuM _x0 _x1 -> TyQuM (o#_Loc_t _x0) (o#string _x1)
-          | TyVrn _x0 _x1 -> TyVrn (o#_Loc_t _x0) (o#string _x1)
-          | TyRec _x0 _x1 -> TyRec (o#_Loc_t _x0) (o#ctyp _x1)
-          | TyCol _x0 _x1 _x2 ->
-              TyCol (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TySem _x0 _x1 _x2 ->
-              TySem (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyCom _x0 _x1 _x2 ->
-              TyCom (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TySum _x0 _x1 -> TySum (o#_Loc_t _x0) (o#ctyp _x1)
-          | TyOf _x0 _x1 _x2 -> TyOf (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyAnd _x0 _x1 _x2 ->
-              TyAnd (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyOr _x0 _x1 _x2 -> TyOr (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyPrv _x0 _x1 -> TyPrv (o#_Loc_t _x0) (o#ctyp _x1)
-          | TyMut _x0 _x1 -> TyMut (o#_Loc_t _x0) (o#ctyp _x1)
-          | TyTup _x0 _x1 -> TyTup (o#_Loc_t _x0) (o#ctyp _x1)
-          | TySta _x0 _x1 _x2 ->
-              TySta (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyVrnEq _x0 _x1 -> TyVrnEq (o#_Loc_t _x0) (o#ctyp _x1)
-          | TyVrnSup _x0 _x1 -> TyVrnSup (o#_Loc_t _x0) (o#ctyp _x1)
-          | TyVrnInf _x0 _x1 -> TyVrnInf (o#_Loc_t _x0) (o#ctyp _x1)
-          | TyVrnInfSup _x0 _x1 _x2 ->
-              TyVrnInfSup (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyAmp _x0 _x1 _x2 ->
-              TyAmp (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyOfAmp _x0 _x1 _x2 ->
-              TyOfAmp (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | TyAnt _x0 _x1 -> TyAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method class_type : class_type -> class_type =
-          fun
-          [ CtNil _x0 -> CtNil (o#_Loc_t _x0)
-          | CtCon _x0 _x1 _x2 _x3 ->
-              CtCon (o#_Loc_t _x0) (o#meta_bool _x1) (o#ident _x2)
-                (o#ctyp _x3)
-          | CtFun _x0 _x1 _x2 ->
-              CtFun (o#_Loc_t _x0) (o#ctyp _x1) (o#class_type _x2)
-          | CtSig _x0 _x1 _x2 ->
-              CtSig (o#_Loc_t _x0) (o#ctyp _x1) (o#class_sig_item _x2)
-          | CtAnd _x0 _x1 _x2 ->
-              CtAnd (o#_Loc_t _x0) (o#class_type _x1) (o#class_type _x2)
-          | CtCol _x0 _x1 _x2 ->
-              CtCol (o#_Loc_t _x0) (o#class_type _x1) (o#class_type _x2)
-          | CtEq _x0 _x1 _x2 ->
-              CtEq (o#_Loc_t _x0) (o#class_type _x1) (o#class_type _x2)
-          | CtAnt _x0 _x1 -> CtAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method class_str_item : class_str_item -> class_str_item =
-          fun
-          [ CrNil _x0 -> CrNil (o#_Loc_t _x0)
-          | CrSem _x0 _x1 _x2 ->
-              CrSem (o#_Loc_t _x0) (o#class_str_item _x1)
-                (o#class_str_item _x2)
-          | CrCtr _x0 _x1 _x2 ->
-              CrCtr (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | CrInh _x0 _x1 _x2 ->
-              CrInh (o#_Loc_t _x0) (o#class_expr _x1) (o#string _x2)
-          | CrIni _x0 _x1 -> CrIni (o#_Loc_t _x0) (o#expr _x1)
-          | CrMth _x0 _x1 _x2 _x3 _x4 ->
-              CrMth (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
-                (o#expr _x3) (o#ctyp _x4)
-          | CrVal _x0 _x1 _x2 _x3 ->
-              CrVal (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
-                (o#expr _x3)
-          | CrVir _x0 _x1 _x2 _x3 ->
-              CrVir (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
-                (o#ctyp _x3)
-          | CrVvr _x0 _x1 _x2 _x3 ->
-              CrVvr (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
-                (o#ctyp _x3)
-          | CrAnt _x0 _x1 -> CrAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method class_sig_item : class_sig_item -> class_sig_item =
-          fun
-          [ CgNil _x0 -> CgNil (o#_Loc_t _x0)
-          | CgCtr _x0 _x1 _x2 ->
-              CgCtr (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
-          | CgSem _x0 _x1 _x2 ->
-              CgSem (o#_Loc_t _x0) (o#class_sig_item _x1)
-                (o#class_sig_item _x2)
-          | CgInh _x0 _x1 -> CgInh (o#_Loc_t _x0) (o#class_type _x1)
-          | CgMth _x0 _x1 _x2 _x3 ->
-              CgMth (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
-                (o#ctyp _x3)
-          | CgVal _x0 _x1 _x2 _x3 _x4 ->
-              CgVal (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
-                (o#meta_bool _x3) (o#ctyp _x4)
-          | CgVir _x0 _x1 _x2 _x3 ->
-              CgVir (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
-                (o#ctyp _x3)
-          | CgAnt _x0 _x1 -> CgAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method class_expr : class_expr -> class_expr =
-          fun
-          [ CeNil _x0 -> CeNil (o#_Loc_t _x0)
-          | CeApp _x0 _x1 _x2 ->
-              CeApp (o#_Loc_t _x0) (o#class_expr _x1) (o#expr _x2)
-          | CeCon _x0 _x1 _x2 _x3 ->
-              CeCon (o#_Loc_t _x0) (o#meta_bool _x1) (o#ident _x2)
-                (o#ctyp _x3)
-          | CeFun _x0 _x1 _x2 ->
-              CeFun (o#_Loc_t _x0) (o#patt _x1) (o#class_expr _x2)
-          | CeLet _x0 _x1 _x2 _x3 ->
-              CeLet (o#_Loc_t _x0) (o#meta_bool _x1) (o#binding _x2)
-                (o#class_expr _x3)
-          | CeStr _x0 _x1 _x2 ->
-              CeStr (o#_Loc_t _x0) (o#patt _x1) (o#class_str_item _x2)
-          | CeTyc _x0 _x1 _x2 ->
-              CeTyc (o#_Loc_t _x0) (o#class_expr _x1) (o#class_type _x2)
-          | CeAnd _x0 _x1 _x2 ->
-              CeAnd (o#_Loc_t _x0) (o#class_expr _x1) (o#class_expr _x2)
-          | CeEq _x0 _x1 _x2 ->
-              CeEq (o#_Loc_t _x0) (o#class_expr _x1) (o#class_expr _x2)
-          | CeAnt _x0 _x1 -> CeAnt (o#_Loc_t _x0) (o#string _x1) ];
-        method binding : binding -> binding =
-          fun
-          [ BiNil _x0 -> BiNil (o#_Loc_t _x0)
-          | BiAnd _x0 _x1 _x2 ->
-              BiAnd (o#_Loc_t _x0) (o#binding _x1) (o#binding _x2)
-          | BiSem _x0 _x1 _x2 ->
-              BiSem (o#_Loc_t _x0) (o#binding _x1) (o#binding _x2)
-          | BiEq _x0 _x1 _x2 -> BiEq (o#_Loc_t _x0) (o#patt _x1) (o#expr _x2)
-          | BiAnt _x0 _x1 -> BiAnt (o#_Loc_t _x0) (o#string _x1) ];
-      end;
-    class fold =
-      object ((o : 'self_type))
-        method string = fun (_ : string) -> (o : 'self_type);
-        method int = fun (_ : int) -> (o : 'self_type);
-        method float = fun (_ : float) -> (o : 'self_type);
-        method bool = fun (_ : bool) -> (o : 'self_type);
-        method list :
-          ! 'a. ('self_type -> 'a -> 'self_type) -> list 'a -> 'self_type =
-          fun f -> List.fold_left f o;
-        method option :
-          ! 'a. ('self_type -> 'a -> 'self_type) -> option 'a -> 'self_type =
-          fun f -> fun [ None -> o | Some x -> f o x ];
-        method array :
-          ! 'a. ('self_type -> 'a -> 'self_type) -> array 'a -> 'self_type =
-          fun f -> Array.fold_left f o;
-        method ref :
-          ! 'a. ('self_type -> 'a -> 'self_type) -> ref 'a -> 'self_type =
-          fun f { \val = x } -> f o x;
-        method _Loc_t : Loc.t -> 'self_type = fun _ -> o;
-        method with_constr : with_constr -> 'self_type =
-          fun
-          [ WcNil _x0 -> o#_Loc_t _x0
-          | WcTyp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | WcMod _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ident _x1)#ident _x2
-          | WcAnd _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#with_constr _x1)#with_constr _x2
-          | WcAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method str_item : str_item -> 'self_type =
-          fun
-          [ StNil _x0 -> o#_Loc_t _x0
-          | StCls _x0 _x1 -> (o#_Loc_t _x0)#class_expr _x1
-          | StClt _x0 _x1 -> (o#_Loc_t _x0)#class_type _x1
-          | StSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#str_item _x1)#str_item _x2
-          | StDir _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#expr _x2
-          | StExc _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#ctyp _x1)#meta_option (fun o -> o#ident) _x2
-          | StExp _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
-          | StExt _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
-                (fun o -> o#string) _x3
-          | StInc _x0 _x1 -> (o#_Loc_t _x0)#module_expr _x1
-          | StMod _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_expr _x2
-          | StRecMod _x0 _x1 -> (o#_Loc_t _x0)#module_binding _x1
-          | StMty _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_type _x2
-          | StOpn _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | StTyp _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | StVal _x0 _x1 _x2 -> ((o#_Loc_t _x0)#meta_bool _x1)#binding _x2
-          | StAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method sig_item : sig_item -> 'self_type =
-          fun
-          [ SgNil _x0 -> o#_Loc_t _x0
-          | SgCls _x0 _x1 -> (o#_Loc_t _x0)#class_type _x1
-          | SgClt _x0 _x1 -> (o#_Loc_t _x0)#class_type _x1
-          | SgSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#sig_item _x1)#sig_item _x2
-          | SgDir _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#expr _x2
-          | SgExc _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | SgExt _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
-                (fun o -> o#string) _x3
-          | SgInc _x0 _x1 -> (o#_Loc_t _x0)#module_type _x1
-          | SgMod _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_type _x2
-          | SgRecMod _x0 _x1 -> (o#_Loc_t _x0)#module_binding _x1
-          | SgMty _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_type _x2
-          | SgOpn _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | SgTyp _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | SgVal _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#ctyp _x2
-          | SgAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method patt : patt -> 'self_type =
-          fun
-          [ PaNil _x0 -> o#_Loc_t _x0
-          | PaId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | PaAli _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
-          | PaAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | PaAny _x0 -> o#_Loc_t _x0
-          | PaApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
-          | PaArr _x0 _x1 -> (o#_Loc_t _x0)#patt _x1
-          | PaCom _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
-          | PaSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
-          | PaChr _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | PaInt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | PaInt32 _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | PaInt64 _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | PaNativeInt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | PaFlo _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | PaLab _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#patt _x2
-          | PaOlb _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#patt _x2
-          | PaOlbi _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#patt _x2)#expr _x3
-          | PaOrp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
-          | PaRng _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
-          | PaRec _x0 _x1 -> (o#_Loc_t _x0)#patt _x1
-          | PaEq _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
-          | PaStr _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | PaTup _x0 _x1 -> (o#_Loc_t _x0)#patt _x1
-          | PaTyc _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#ctyp _x2
-          | PaTyp _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | PaVrn _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method module_type : module_type -> 'self_type =
-          fun
-          [ MtId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | MtFun _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#module_type _x2)#module_type _x3
-          | MtQuo _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | MtSig _x0 _x1 -> (o#_Loc_t _x0)#sig_item _x1
-          | MtWit _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#module_type _x1)#with_constr _x2
-          | MtAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method module_expr : module_expr -> 'self_type =
-          fun
-          [ MeId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | MeApp _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#module_expr _x1)#module_expr _x2
-          | MeFun _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#module_type _x2)#module_expr _x3
-          | MeStr _x0 _x1 -> (o#_Loc_t _x0)#str_item _x1
-          | MeTyc _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#module_expr _x1)#module_type _x2
-          | MeAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method module_binding : module_binding -> 'self_type =
-          fun
-          [ MbNil _x0 -> o#_Loc_t _x0
-          | MbAnd _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#module_binding _x1)#module_binding _x2
-          | MbColEq _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#module_type _x2)#module_expr _x3
-          | MbCol _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_type _x2
-          | MbAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method meta_option :
-          ! 'a.
-            ('self_type -> 'a -> 'self_type) -> meta_option 'a -> 'self_type =
-          fun _f_a ->
-            fun
-            [ ONone -> o
-            | OSome _x0 -> _f_a o _x0
-            | OAnt _x0 -> o#string _x0 ];
-        method meta_list :
-          ! 'a.
-            ('self_type -> 'a -> 'self_type) -> meta_list 'a -> 'self_type =
-          fun _f_a ->
-            fun
-            [ LNil -> o
-            | LCons _x0 _x1 -> (_f_a o _x0)#meta_list (fun o -> _f_a o) _x1
-            | LAnt _x0 -> o#string _x0 ];
-        method meta_bool : meta_bool -> 'self_type =
-          fun [ BTrue -> o | BFalse -> o | BAnt _x0 -> o#string _x0 ];
-        method match_case : match_case -> 'self_type =
-          fun
-          [ McNil _x0 -> o#_Loc_t _x0
-          | McOr _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#match_case _x1)#match_case _x2
-          | McArr _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#patt _x1)#expr _x2)#expr _x3
-          | McAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method ident : ident -> 'self_type =
-          fun
-          [ IdAcc _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ident _x1)#ident _x2
-          | IdApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ident _x1)#ident _x2
-          | IdLid _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | IdUid _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | IdAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method expr : expr -> 'self_type =
-          fun
-          [ ExNil _x0 -> o#_Loc_t _x0
-          | ExId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | ExAcc _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
-          | ExAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
-          | ExAre _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
-          | ExArr _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
-          | ExSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
-          | ExAsf _x0 -> o#_Loc_t _x0
-          | ExAsr _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
-          | ExAss _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
-          | ExChr _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExCoe _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#expr _x1)#ctyp _x2)#ctyp _x3
-          | ExFlo _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExFor _x0 _x1 _x2 _x3 _x4 _x5 ->
-              (((((o#_Loc_t _x0)#string _x1)#expr _x2)#expr _x3)#meta_bool
-                 _x4)#
-                expr _x5
-          | ExFun _x0 _x1 -> (o#_Loc_t _x0)#match_case _x1
-          | ExIfe _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#expr _x1)#expr _x2)#expr _x3
-          | ExInt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExInt32 _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExInt64 _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExNativeInt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExLab _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#expr _x2
-          | ExLaz _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
-          | ExLet _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#expr _x3
-          | ExLmd _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#module_expr _x2)#expr _x3
-          | ExMat _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#match_case _x2
-          | ExNew _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | ExObj _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
-          | ExOlb _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#expr _x2
-          | ExOvr _x0 _x1 -> (o#_Loc_t _x0)#binding _x1
-          | ExRec _x0 _x1 _x2 -> ((o#_Loc_t _x0)#binding _x1)#expr _x2
-          | ExSeq _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
-          | ExSnd _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#string _x2
-          | ExSte _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
-          | ExStr _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExTry _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#match_case _x2
-          | ExTup _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
-          | ExCom _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
-          | ExTyc _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#ctyp _x2
-          | ExVrn _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | ExWhi _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2 ];
-        method ctyp : ctyp -> 'self_type =
-          fun
-          [ TyNil _x0 -> o#_Loc_t _x0
-          | TyAli _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyAny _x0 -> o#_Loc_t _x0
-          | TyApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyArr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyCls _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | TyLab _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#ctyp _x2
-          | TyId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
-          | TyMan _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyDcl _x0 _x1 _x2 _x3 _x4 ->
-              ((((o#_Loc_t _x0)#string _x1)#list (fun o -> o#ctyp) _x2)#ctyp
-                 _x3)#
-                list (fun o (_x0, _x1) -> (o#ctyp _x0)#ctyp _x1) _x4
-          | TyObj _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#meta_bool _x2
-          | TyOlb _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#ctyp _x2
-          | TyPol _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyQuo _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | TyQuP _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | TyQuM _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | TyVrn _x0 _x1 -> (o#_Loc_t _x0)#string _x1
-          | TyRec _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | TyCol _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TySem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyCom _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TySum _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | TyOf _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyAnd _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyOr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyPrv _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | TyMut _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | TyTup _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | TySta _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyVrnEq _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | TyVrnSup _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | TyVrnInf _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
-          | TyVrnInfSup _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyAmp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyOfAmp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | TyAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method class_type : class_type -> 'self_type =
-          fun
-          [ CtNil _x0 -> o#_Loc_t _x0
-          | CtCon _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
-          | CtFun _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#class_type _x2
-          | CtSig _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#class_sig_item _x2
-          | CtAnd _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
-          | CtCol _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
-          | CtEq _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
-          | CtAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method class_str_item : class_str_item -> 'self_type =
-          fun
-          [ CrNil _x0 -> o#_Loc_t _x0
-          | CrSem _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#class_str_item _x1)#class_str_item _x2
-          | CrCtr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | CrInh _x0 _x1 _x2 -> ((o#_Loc_t _x0)#class_expr _x1)#string _x2
-          | CrIni _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
-          | CrMth _x0 _x1 _x2 _x3 _x4 ->
-              ((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3)#ctyp _x4
-          | CrVal _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3
-          | CrVir _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
-          | CrVvr _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
-          | CrAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method class_sig_item : class_sig_item -> 'self_type =
-          fun
-          [ CgNil _x0 -> o#_Loc_t _x0
-          | CgCtr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
-          | CgSem _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#class_sig_item _x1)#class_sig_item _x2
-          | CgInh _x0 _x1 -> (o#_Loc_t _x0)#class_type _x1
-          | CgMth _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
-          | CgVal _x0 _x1 _x2 _x3 _x4 ->
-              ((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#meta_bool _x3)#
-                ctyp _x4
-          | CgVir _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
-          | CgAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method class_expr : class_expr -> 'self_type =
-          fun
-          [ CeNil _x0 -> o#_Loc_t _x0
-          | CeApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#class_expr _x1)#expr _x2
-          | CeCon _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
-          | CeFun _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#class_expr _x2
-          | CeLet _x0 _x1 _x2 _x3 ->
-              (((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#class_expr _x3
-          | CeStr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
-          | CeTyc _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#class_expr _x1)#class_type _x2
-          | CeAnd _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
-          | CeEq _x0 _x1 _x2 ->
-              ((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
-          | CeAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-        method binding : binding -> 'self_type =
-          fun
-          [ BiNil _x0 -> o#_Loc_t _x0
-          | BiAnd _x0 _x1 _x2 -> ((o#_Loc_t _x0)#binding _x1)#binding _x2
-          | BiSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#binding _x1)#binding _x2
-          | BiEq _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#expr _x2
-          | BiAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
-      end;
-    class c_expr f =
-      object inherit map as super; method expr = fun x -> f (super#expr x);
-      end;
-    class c_patt f =
-      object inherit map as super; method patt = fun x -> f (super#patt x);
-      end;
-    class c_ctyp f =
-      object inherit map as super; method ctyp = fun x -> f (super#ctyp x);
-      end;
-    class c_str_item f =
-      object inherit map as super;
-        method str_item = fun x -> f (super#str_item x);
-      end;
-    class c_sig_item f =
-      object inherit map as super;
-        method sig_item = fun x -> f (super#sig_item x);
-      end;
-    class c_loc f =
-      object inherit map as super;
-        method _Loc_t = fun x -> f (super#_Loc_t x);
-      end;
-    value map_patt f ast = (new c_patt f)#patt ast;
-    value map_loc f ast = (new c_loc f)#_Loc_t ast;
-    value map_sig_item f ast = (new c_sig_item f)#sig_item ast;
-    value map_str_item f ast = (new c_str_item f)#str_item ast;
-    value map_ctyp f ast = (new c_ctyp f)#ctyp ast;
-    value map_expr f ast = (new c_expr f)#expr ast;
     value ghost = Loc.ghost;
     value rec is_module_longident =
       fun
@@ -4653,6 +52,38 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
           (is_module_longident i1) && (is_module_longident i2)
       | Ast.IdUid _ _ -> True
       | _ -> False ];
+    value ident_of_expr =
+      let error () =
+        invalid_arg "ident_of_expr: this expression is not an identifier" in
+      let rec self =
+        fun
+        [ Ast.ExApp _loc e1 e2 -> Ast.IdApp _loc (self e1) (self e2)
+        | Ast.ExAcc _loc e1 e2 -> Ast.IdAcc _loc (self e1) (self e2)
+        | Ast.ExId _ (Ast.IdLid _ _) -> error ()
+        | Ast.ExId _ i -> if is_module_longident i then i else error ()
+        | _ -> error () ]
+      in
+        fun [ Ast.ExId _ i -> i | Ast.ExApp _ _ _ -> error () | t -> self t ];
+    value ident_of_ctyp =
+      let error () =
+        invalid_arg "ident_of_ctyp: this type is not an identifier" in
+      let rec self =
+        fun
+        [ Ast.TyApp _loc t1 t2 -> Ast.IdApp _loc (self t1) (self t2)
+        | Ast.TyId _ (Ast.IdLid _ _) -> error ()
+        | Ast.TyId _ i -> if is_module_longident i then i else error ()
+        | _ -> error () ]
+      in fun [ Ast.TyId _ i -> i | t -> self t ];
+    value ident_of_patt =
+      let error () =
+        invalid_arg "ident_of_patt: this pattern is not an identifier" in
+      let rec self =
+        fun
+        [ Ast.PaApp _loc p1 p2 -> Ast.IdApp _loc (self p1) (self p2)
+        | Ast.PaId _ (Ast.IdLid _ _) -> error ()
+        | Ast.PaId _ i -> if is_module_longident i then i else error ()
+        | _ -> error () ]
+      in fun [ Ast.PaId _ i -> i | p -> self p ];
     value rec is_irrefut_patt =
       fun
       [ Ast.PaId _ (Ast.IdLid _ _) -> True
@@ -4660,7 +91,7 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
       | Ast.PaAny _ -> True
       | Ast.PaAli _ x y -> (is_irrefut_patt x) && (is_irrefut_patt y)
       | Ast.PaRec _ p -> is_irrefut_patt p
-      | Ast.PaEq _ (Ast.PaId _ (Ast.IdLid _ _)) p -> is_irrefut_patt p
+      | Ast.PaEq _ (Ast.IdLid _ _) p -> is_irrefut_patt p
       | Ast.PaSem _ p1 p2 -> (is_irrefut_patt p1) && (is_irrefut_patt p2)
       | Ast.PaCom _ p1 p2 -> (is_irrefut_patt p1) && (is_irrefut_patt p2)
       | Ast.PaTyc _ p _ -> is_irrefut_patt p
@@ -4689,28 +120,6 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
           (is_expr_constructor e1) && (is_expr_constructor e2)
       | Ast.ExVrn _ _ -> True
       | _ -> False ];
-    value ident_of_expr =
-      let error () =
-        invalid_arg "ident_of_expr: this expression is not an identifier" in
-      let rec self =
-        fun
-        [ Ast.ExApp _loc e1 e2 -> Ast.IdApp _loc (self e1) (self e2)
-        | Ast.ExAcc _loc e1 e2 -> Ast.IdAcc _loc (self e1) (self e2)
-        | Ast.ExId _ (Ast.IdLid _ _) -> error ()
-        | Ast.ExId _ i -> if is_module_longident i then i else error ()
-        | _ -> error () ]
-      in
-        fun [ Ast.ExId _ i -> i | Ast.ExApp _ _ _ -> error () | t -> self t ];
-    value ident_of_ctyp =
-      let error () =
-        invalid_arg "ident_of_ctyp: this type is not an identifier" in
-      let rec self =
-        fun
-        [ Ast.TyApp _loc t1 t2 -> Ast.IdApp _loc (self t1) (self t2)
-        | Ast.TyId _ (Ast.IdLid _ _) -> error ()
-        | Ast.TyId _ i -> if is_module_longident i then i else error ()
-        | _ -> error () ]
-      in fun [ Ast.TyId _ i -> i | t -> self t ];
     value rec tyOr_of_list =
       fun
       [ [] -> Ast.TyNil ghost
@@ -4729,6 +138,24 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
       | [ t ] -> t
       | [ t :: ts ] ->
           let _loc = loc_of_ctyp t in Ast.TySem _loc t (tySem_of_list ts) ];
+    value rec tyCom_of_list =
+      fun
+      [ [] -> Ast.TyNil ghost
+      | [ t ] -> t
+      | [ t :: ts ] ->
+          let _loc = loc_of_ctyp t in Ast.TyCom _loc t (tyCom_of_list ts) ];
+    value rec tyAmp_of_list =
+      fun
+      [ [] -> Ast.TyNil ghost
+      | [ t ] -> t
+      | [ t :: ts ] ->
+          let _loc = loc_of_ctyp t in Ast.TyAmp _loc t (tyAmp_of_list ts) ];
+    value rec tySta_of_list =
+      fun
+      [ [] -> Ast.TyNil ghost
+      | [ t ] -> t
+      | [ t :: ts ] ->
+          let _loc = loc_of_ctyp t in Ast.TySta _loc t (tySta_of_list ts) ];
     value rec stSem_of_list =
       fun
       [ [] -> Ast.StNil ghost
@@ -4747,6 +174,13 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
       | [ b ] -> b
       | [ b :: bs ] ->
           let _loc = loc_of_binding b in Ast.BiAnd _loc b (biAnd_of_list bs) ];
+    value rec rbSem_of_list =
+      fun
+      [ [] -> Ast.RbNil ghost
+      | [ b ] -> b
+      | [ b :: bs ] ->
+          let _loc = loc_of_rec_binding b
+          in Ast.RbSem _loc b (rbSem_of_list bs) ];
     value rec wcAnd_of_list =
       fun
       [ [] -> Ast.WcNil ghost
@@ -4822,16 +256,10 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
           let _loc = loc_of_patt x in Ast.PaSem _loc x (paSem_of_list xs) ];
     value rec paCom_of_list =
       fun
-      [ [] -> Ast.PaNil ghost
-      | [ x ] -> x
-      | [ x :: xs ] ->
-          let _loc = loc_of_patt x in Ast.PaCom _loc x (paCom_of_list xs) ];
-    value rec biSem_of_list =
-      fun
-      [ [] -> Ast.BiNil ghost
+      [ [] -> Ast.PaNil ghost
       | [ x ] -> x
       | [ x :: xs ] ->
-          let _loc = loc_of_binding x in Ast.BiSem _loc x (biSem_of_list xs) ];
+          let _loc = loc_of_patt x in Ast.PaCom _loc x (paCom_of_list xs) ];
     value rec exSem_of_list =
       fun
       [ [] -> Ast.ExNil ghost
@@ -4864,12 +292,15 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
       fun
       [ Ast.BiAnd _ b1 b2 -> (pel_of_binding b1) @ (pel_of_binding b2)
       | Ast.BiEq _ p e -> [ (p, e) ]
-      | Ast.BiSem _ b1 b2 -> (pel_of_binding b1) @ (pel_of_binding b2)
       | _ -> assert False ];
     value rec list_of_binding x acc =
       match x with
-      [ Ast.BiAnd _ b1 b2 | Ast.BiSem _ b1 b2 ->
-          list_of_binding b1 (list_of_binding b2 acc)
+      [ Ast.BiAnd _ b1 b2 -> list_of_binding b1 (list_of_binding b2 acc)
+      | t -> [ t :: acc ] ];
+    value rec list_of_rec_binding x acc =
+      match x with
+      [ Ast.RbSem _ b1 b2 ->
+          list_of_rec_binding b1 (list_of_rec_binding b2 acc)
       | t -> [ t :: acc ] ];
     value rec list_of_with_constr x acc =
       match x with
@@ -4944,5 +375,4683 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
       [ Ast.MbAnd _ x y ->
           list_of_module_binding x (list_of_module_binding y acc)
       | x -> [ x :: acc ] ];
+    module Meta =
+      struct
+        module type META_LOC =
+          sig
+            (** The first location is where to put the returned pattern.
+          Generally it's _loc to match with <:patt< ... >> quotations.
+          The second location is the one to treat. *)
+            value meta_loc_patt : Loc.t -> Loc.t -> Ast.patt;
+            (** The first location is where to put the returned expression.
+          Generally it's _loc to match with <:expr< ... >> quotations.
+          The second location is the one to treat. *)
+            value meta_loc_expr : Loc.t -> Loc.t -> Ast.expr;
+          end;
+        module MetaLoc =
+          struct
+            value meta_loc_patt _loc location =
+              let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
+              in
+                Ast.PaApp _loc
+                  (Ast.PaId _loc
+                     (Ast.IdAcc _loc (Ast.IdUid _loc "Loc")
+                        (Ast.IdLid _loc "of_tuple")))
+                  (Ast.PaTup _loc
+                     (Ast.PaCom _loc
+                        (Ast.PaStr _loc (Ast.safe_string_escaped a))
+                        (Ast.PaCom _loc
+                           (Ast.PaCom _loc
+                              (Ast.PaCom _loc
+                                 (Ast.PaCom _loc
+                                    (Ast.PaCom _loc
+                                       (Ast.PaCom _loc
+                                          (Ast.PaInt _loc (string_of_int b))
+                                          (Ast.PaInt _loc (string_of_int c)))
+                                       (Ast.PaInt _loc (string_of_int d)))
+                                    (Ast.PaInt _loc (string_of_int e)))
+                                 (Ast.PaInt _loc (string_of_int f)))
+                              (Ast.PaInt _loc (string_of_int g)))
+                           (if h
+                            then Ast.PaId _loc (Ast.IdUid _loc "True")
+                            else Ast.PaId _loc (Ast.IdUid _loc "False")))));
+            value meta_loc_expr _loc location =
+              let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
+              in
+                Ast.ExApp _loc
+                  (Ast.ExId _loc
+                     (Ast.IdAcc _loc (Ast.IdUid _loc "Loc")
+                        (Ast.IdLid _loc "of_tuple")))
+                  (Ast.ExTup _loc
+                     (Ast.ExCom _loc
+                        (Ast.ExStr _loc (Ast.safe_string_escaped a))
+                        (Ast.ExCom _loc
+                           (Ast.ExCom _loc
+                              (Ast.ExCom _loc
+                                 (Ast.ExCom _loc
+                                    (Ast.ExCom _loc
+                                       (Ast.ExCom _loc
+                                          (Ast.ExInt _loc (string_of_int b))
+                                          (Ast.ExInt _loc (string_of_int c)))
+                                       (Ast.ExInt _loc (string_of_int d)))
+                                    (Ast.ExInt _loc (string_of_int e)))
+                                 (Ast.ExInt _loc (string_of_int f)))
+                              (Ast.ExInt _loc (string_of_int g)))
+                           (if h
+                            then Ast.ExId _loc (Ast.IdUid _loc "True")
+                            else Ast.ExId _loc (Ast.IdUid _loc "False")))));
+          end;
+        module MetaGhostLoc =
+          struct
+            value meta_loc_patt _loc _ =
+              Ast.PaId _loc
+                (Ast.IdAcc _loc (Ast.IdUid _loc "Loc")
+                   (Ast.IdLid _loc "ghost"));
+            value meta_loc_expr _loc _ =
+              Ast.ExId _loc
+                (Ast.IdAcc _loc (Ast.IdUid _loc "Loc")
+                   (Ast.IdLid _loc "ghost"));
+          end;
+        module MetaLocVar =
+          struct
+            value meta_loc_patt _loc _ =
+              Ast.PaId _loc (Ast.IdLid _loc Loc.name.val);
+            value meta_loc_expr _loc _ =
+              Ast.ExId _loc (Ast.IdLid _loc Loc.name.val);
+          end;
+        module Make (MetaLoc : META_LOC) =
+          struct
+            open MetaLoc;
+            value meta_acc_Loc_t = meta_loc_expr;
+            module Expr =
+              struct
+                value meta_string _loc s = Ast.ExStr _loc s;
+                value meta_int _loc s = Ast.ExInt _loc s;
+                value meta_float _loc s = Ast.ExFlo _loc s;
+                value meta_char _loc s = Ast.ExChr _loc s;
+                value meta_bool _loc =
+                  fun
+                  [ False -> Ast.ExId _loc (Ast.IdUid _loc "False")
+                  | True -> Ast.ExId _loc (Ast.IdUid _loc "True") ];
+                value rec meta_list mf_a _loc =
+                  fun
+                  [ [] -> Ast.ExId _loc (Ast.IdUid _loc "[]")
+                  | [ x :: xs ] ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc (Ast.ExId _loc (Ast.IdUid _loc "::"))
+                           (mf_a _loc x))
+                        (meta_list mf_a _loc xs) ];
+                value rec meta_binding _loc =
+                  fun
+                  [ Ast.BiAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.BiEq x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "BiEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.BiAnd x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "BiAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_binding _loc x1))
+                        (meta_binding _loc x2)
+                  | Ast.BiNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "BiNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_class_expr _loc =
+                  fun
+                  [ Ast.CeAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.CeEq x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_class_expr _loc x2)
+                  | Ast.CeAnd x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_class_expr _loc x2)
+                  | Ast.CeTyc x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeTyc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CeStr x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeStr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_class_str_item _loc x2)
+                  | Ast.CeLet x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CeLet")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_meta_bool _loc x1))
+                           (meta_binding _loc x2))
+                        (meta_class_expr _loc x3)
+                  | Ast.CeFun x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeFun")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_class_expr _loc x2)
+                  | Ast.CeCon x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CeCon")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_meta_bool _loc x1))
+                           (meta_ident _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CeApp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.CeNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "CeNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_class_sig_item _loc =
+                  fun
+                  [ Ast.CgAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.CgVir x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CgVir")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CgVal x0 x1 x2 x3 x4 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExApp _loc
+                                    (Ast.ExId _loc
+                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                          (Ast.IdUid _loc "CgVal")))
+                                    (meta_acc_Loc_t _loc x0))
+                                 (meta_string _loc x1))
+                              (meta_meta_bool _loc x2))
+                           (meta_meta_bool _loc x3))
+                        (meta_ctyp _loc x4)
+                  | Ast.CgMth x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CgMth")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CgInh x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "CgInh")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_type _loc x1)
+                  | Ast.CgSem x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CgSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_sig_item _loc x1))
+                        (meta_class_sig_item _loc x2)
+                  | Ast.CgCtr x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CgCtr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.CgNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "CgNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_class_str_item _loc =
+                  fun
+                  [ Ast.CrAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.CrVvr x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CrVvr")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CrVir x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CrVir")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CrVal x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CrVal")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.CrMth x0 x1 x2 x3 x4 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExApp _loc
+                                    (Ast.ExId _loc
+                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                          (Ast.IdUid _loc "CrMth")))
+                                    (meta_acc_Loc_t _loc x0))
+                                 (meta_string _loc x1))
+                              (meta_meta_bool _loc x2))
+                           (meta_expr _loc x3))
+                        (meta_ctyp _loc x4)
+                  | Ast.CrIni x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "CrIni")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.CrInh x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CrInh")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_string _loc x2)
+                  | Ast.CrCtr x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CrCtr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.CrSem x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CrSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_str_item _loc x1))
+                        (meta_class_str_item _loc x2)
+                  | Ast.CrNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "CrNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_class_type _loc =
+                  fun
+                  [ Ast.CtAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.CtEq x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_type _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CtCol x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtCol")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_type _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CtAnd x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_type _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CtSig x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtSig")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_class_sig_item _loc x2)
+                  | Ast.CtFun x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtFun")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CtCon x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CtCon")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_meta_bool _loc x1))
+                           (meta_ident _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CtNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "CtNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_ctyp _loc =
+                  fun
+                  [ Ast.TyAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.TyOfAmp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyOfAmp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyAmp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyAmp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyVrnInfSup x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyVrnInfSup")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyVrnInf x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyVrnInf")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyVrnSup x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyVrnSup")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyVrnEq x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyVrnEq")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TySta x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TySta")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyTup x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyTup")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyMut x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyMut")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyPrv x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyPrv")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyOr x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyOr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyAnd x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyOf x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyOf")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TySum x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TySum")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyCom x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyCom")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TySem x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TySem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyCol x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyCol")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyRec x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyRec")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyVrn x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyVrn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.TyQuM x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyQuM")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.TyQuP x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyQuP")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.TyQuo x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyQuo")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.TyPol x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyPol")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyOlb x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyOlb")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyObj x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyObj")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_meta_bool _loc x2)
+                  | Ast.TyDcl x0 x1 x2 x3 x4 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExApp _loc
+                                    (Ast.ExId _loc
+                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                          (Ast.IdUid _loc "TyDcl")))
+                                    (meta_acc_Loc_t _loc x0))
+                                 (meta_string _loc x1))
+                              (meta_list meta_ctyp _loc x2))
+                           (meta_ctyp _loc x3))
+                        (meta_list
+                           (fun _loc (x1, x2) ->
+                              Ast.ExTup _loc
+                                (Ast.ExCom _loc (meta_ctyp _loc x1)
+                                   (meta_ctyp _loc x2)))
+                           _loc x4)
+                  | Ast.TyMan x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyMan")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyId x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.TyLab x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyLab")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyCls x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyCls")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.TyArr x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyArr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyApp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyAny x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "TyAny")))
+                        (meta_acc_Loc_t _loc x0)
+                  | Ast.TyAli x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyAli")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "TyNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_expr _loc =
+                  fun
+                  [ Ast.ExWhi x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExWhi")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExVrn x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExVrn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExTyc x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExTyc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.ExCom x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExCom")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExTup x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExTup")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExTry x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExTry")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_match_case _loc x2)
+                  | Ast.ExStr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExStr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExSte x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExSte")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExSnd x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExSnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_string _loc x2)
+                  | Ast.ExSeq x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExSeq")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExRec x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExRec")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_rec_binding _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExOvr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExOvr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_rec_binding _loc x1)
+                  | Ast.ExOlb x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExOlb")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExObj x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExObj")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_class_str_item _loc x2)
+                  | Ast.ExNew x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExNew")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.ExMat x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExMat")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_match_case _loc x2)
+                  | Ast.ExLmd x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "ExLmd")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_module_expr _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.ExLet x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "ExLet")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_meta_bool _loc x1))
+                           (meta_binding _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.ExLaz x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExLaz")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExLab x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExLab")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExNativeInt x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExNativeInt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExInt64 x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExInt64")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExInt32 x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExInt32")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExInt x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExInt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExIfe x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "ExIfe")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_expr _loc x1))
+                           (meta_expr _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.ExFun x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExFun")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_match_case _loc x1)
+                  | Ast.ExFor x0 x1 x2 x3 x4 x5 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExApp _loc
+                                    (Ast.ExApp _loc
+                                       (Ast.ExId _loc
+                                          (Ast.IdAcc _loc
+                                             (Ast.IdUid _loc "Ast")
+                                             (Ast.IdUid _loc "ExFor")))
+                                       (meta_acc_Loc_t _loc x0))
+                                    (meta_string _loc x1))
+                                 (meta_expr _loc x2))
+                              (meta_expr _loc x3))
+                           (meta_meta_bool _loc x4))
+                        (meta_expr _loc x5)
+                  | Ast.ExFlo x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExFlo")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExCoe x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "ExCoe")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_expr _loc x1))
+                           (meta_ctyp _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.ExChr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExChr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExAss x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExAss")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExAsr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExAsr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExAsf x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "ExAsf")))
+                        (meta_acc_Loc_t _loc x0)
+                  | Ast.ExSem x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExArr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExArr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExAre x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExAre")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExApp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.ExAcc x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExAcc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExId x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.ExNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "ExNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_ident _loc =
+                  fun
+                  [ Ast.IdAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.IdUid x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "IdUid")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.IdLid x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "IdLid")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.IdApp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "IdApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_ident _loc x2)
+                  | Ast.IdAcc x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "IdAcc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_ident _loc x2) ]
+                and meta_match_case _loc =
+                  fun
+                  [ Ast.McAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.McArr x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "McArr")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_patt _loc x1))
+                           (meta_expr _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.McOr x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "McOr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_match_case _loc x1))
+                        (meta_match_case _loc x2)
+                  | Ast.McNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "McNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_meta_bool _loc =
+                  fun
+                  [ Ast.BAnt x0 -> Ast.ExAnt _loc x0
+                  | Ast.BFalse ->
+                      Ast.ExId _loc
+                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                           (Ast.IdUid _loc "BFalse"))
+                  | Ast.BTrue ->
+                      Ast.ExId _loc
+                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                           (Ast.IdUid _loc "BTrue")) ]
+                and meta_meta_list mf_a _loc =
+                  fun
+                  [ Ast.LAnt x0 -> Ast.ExAnt _loc x0
+                  | Ast.LCons x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "LCons")))
+                           (mf_a _loc x0))
+                        (meta_meta_list mf_a _loc x1)
+                  | Ast.LNil ->
+                      Ast.ExId _loc
+                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                           (Ast.IdUid _loc "LNil")) ]
+                and meta_meta_option mf_a _loc =
+                  fun
+                  [ Ast.OAnt x0 -> Ast.ExAnt _loc x0
+                  | Ast.OSome x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "OSome")))
+                        (mf_a _loc x0)
+                  | Ast.ONone ->
+                      Ast.ExId _loc
+                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                           (Ast.IdUid _loc "ONone")) ]
+                and meta_module_binding _loc =
+                  fun
+                  [ Ast.MbAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.MbCol x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MbCol")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.MbColEq x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "MbColEq")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_module_type _loc x2))
+                        (meta_module_expr _loc x3)
+                  | Ast.MbAnd x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MbAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_module_binding _loc x1))
+                        (meta_module_binding _loc x2)
+                  | Ast.MbNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "MbNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_module_expr _loc =
+                  fun
+                  [ Ast.MeAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.MeTyc x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MeTyc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_module_expr _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.MeStr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MeStr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_str_item _loc x1)
+                  | Ast.MeFun x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "MeFun")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_module_type _loc x2))
+                        (meta_module_expr _loc x3)
+                  | Ast.MeApp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MeApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_module_expr _loc x1))
+                        (meta_module_expr _loc x2)
+                  | Ast.MeId x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MeId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.MeNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "MeNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_module_type _loc =
+                  fun
+                  [ Ast.MtAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.MtWit x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MtWit")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_module_type _loc x1))
+                        (meta_with_constr _loc x2)
+                  | Ast.MtSig x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MtSig")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_sig_item _loc x1)
+                  | Ast.MtQuo x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MtQuo")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.MtFun x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "MtFun")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_module_type _loc x2))
+                        (meta_module_type _loc x3)
+                  | Ast.MtId x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MtId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.MtNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "MtNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_patt _loc =
+                  fun
+                  [ Ast.PaVrn x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaVrn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaTyp x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaTyp")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.PaTyc x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaTyc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.PaTup x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaTup")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_patt _loc x1)
+                  | Ast.PaStr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaStr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaEq x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaRec x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaRec")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_patt _loc x1)
+                  | Ast.PaRng x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaRng")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaOrp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaOrp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaOlbi x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "PaOlbi")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_patt _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.PaOlb x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaOlb")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaLab x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaLab")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaFlo x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaFlo")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaNativeInt x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaNativeInt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaInt64 x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaInt64")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaInt32 x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaInt32")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaInt x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaInt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaChr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaChr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaSem x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaCom x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaCom")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaArr x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaArr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_patt _loc x1)
+                  | Ast.PaApp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaAny x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "PaAny")))
+                        (meta_acc_Loc_t _loc x0)
+                  | Ast.PaAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.PaAli x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaAli")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaId x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.PaNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "PaNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_rec_binding _loc =
+                  fun
+                  [ Ast.RbAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.RbEq x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "RbEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.RbSem x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "RbSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_rec_binding _loc x1))
+                        (meta_rec_binding _loc x2)
+                  | Ast.RbNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "RbNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_sig_item _loc =
+                  fun
+                  [ Ast.SgAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.SgVal x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgVal")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.SgTyp x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgTyp")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.SgOpn x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgOpn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.SgMty x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgMty")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.SgRecMod x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgRecMod")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_module_binding _loc x1)
+                  | Ast.SgMod x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgMod")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.SgInc x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgInc")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_module_type _loc x1)
+                  | Ast.SgExt x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "SgExt")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_ctyp _loc x2))
+                        (meta_meta_list meta_string _loc x3)
+                  | Ast.SgExc x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgExc")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.SgDir x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgDir")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.SgSem x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_sig_item _loc x1))
+                        (meta_sig_item _loc x2)
+                  | Ast.SgClt x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgClt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_type _loc x1)
+                  | Ast.SgCls x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgCls")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_type _loc x1)
+                  | Ast.SgNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "SgNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_str_item _loc =
+                  fun
+                  [ Ast.StAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.StVal x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StVal")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_meta_bool _loc x1))
+                        (meta_binding _loc x2)
+                  | Ast.StTyp x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StTyp")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.StOpn x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StOpn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.StMty x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StMty")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.StRecMod x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StRecMod")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_module_binding _loc x1)
+                  | Ast.StMod x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StMod")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_expr _loc x2)
+                  | Ast.StInc x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StInc")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_module_expr _loc x1)
+                  | Ast.StExt x0 x1 x2 x3 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExApp _loc
+                                 (Ast.ExId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "StExt")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_ctyp _loc x2))
+                        (meta_meta_list meta_string _loc x3)
+                  | Ast.StExp x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StExp")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.StExc x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StExc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_meta_option meta_ident _loc x2)
+                  | Ast.StDir x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StDir")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.StSem x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_str_item _loc x1))
+                        (meta_str_item _loc x2)
+                  | Ast.StClt x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StClt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_type _loc x1)
+                  | Ast.StCls x0 x1 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StCls")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_expr _loc x1)
+                  | Ast.StNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "StNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_with_constr _loc =
+                  fun
+                  [ Ast.WcAnt x0 x1 -> Ast.ExAnt x0 x1
+                  | Ast.WcAnd x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "WcAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_with_constr _loc x1))
+                        (meta_with_constr _loc x2)
+                  | Ast.WcMod x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "WcMod")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_ident _loc x2)
+                  | Ast.WcTyp x0 x1 x2 ->
+                      Ast.ExApp _loc
+                        (Ast.ExApp _loc
+                           (Ast.ExApp _loc
+                              (Ast.ExId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "WcTyp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.WcNil x0 ->
+                      Ast.ExApp _loc
+                        (Ast.ExId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "WcNil")))
+                        (meta_acc_Loc_t _loc x0) ];
+              end;
+            value meta_acc_Loc_t = meta_loc_patt;
+            module Patt =
+              struct
+                value meta_string _loc s = Ast.PaStr _loc s;
+                value meta_int _loc s = Ast.PaInt _loc s;
+                value meta_float _loc s = Ast.PaFlo _loc s;
+                value meta_char _loc s = Ast.PaChr _loc s;
+                value meta_bool _loc =
+                  fun
+                  [ False -> Ast.PaId _loc (Ast.IdUid _loc "False")
+                  | True -> Ast.PaId _loc (Ast.IdUid _loc "True") ];
+                value rec meta_list mf_a _loc =
+                  fun
+                  [ [] -> Ast.PaId _loc (Ast.IdUid _loc "[]")
+                  | [ x :: xs ] ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc (Ast.PaId _loc (Ast.IdUid _loc "::"))
+                           (mf_a _loc x))
+                        (meta_list mf_a _loc xs) ];
+                value rec meta_binding _loc =
+                  fun
+                  [ Ast.BiAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.BiEq x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "BiEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.BiAnd x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "BiAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_binding _loc x1))
+                        (meta_binding _loc x2)
+                  | Ast.BiNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "BiNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_class_expr _loc =
+                  fun
+                  [ Ast.CeAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.CeEq x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_class_expr _loc x2)
+                  | Ast.CeAnd x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_class_expr _loc x2)
+                  | Ast.CeTyc x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeTyc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CeStr x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeStr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_class_str_item _loc x2)
+                  | Ast.CeLet x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CeLet")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_meta_bool _loc x1))
+                           (meta_binding _loc x2))
+                        (meta_class_expr _loc x3)
+                  | Ast.CeFun x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeFun")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_class_expr _loc x2)
+                  | Ast.CeCon x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CeCon")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_meta_bool _loc x1))
+                           (meta_ident _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CeApp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CeApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.CeNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "CeNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_class_sig_item _loc =
+                  fun
+                  [ Ast.CgAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.CgVir x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CgVir")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CgVal x0 x1 x2 x3 x4 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaApp _loc
+                                    (Ast.PaId _loc
+                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                          (Ast.IdUid _loc "CgVal")))
+                                    (meta_acc_Loc_t _loc x0))
+                                 (meta_string _loc x1))
+                              (meta_meta_bool _loc x2))
+                           (meta_meta_bool _loc x3))
+                        (meta_ctyp _loc x4)
+                  | Ast.CgMth x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CgMth")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CgInh x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "CgInh")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_type _loc x1)
+                  | Ast.CgSem x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CgSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_sig_item _loc x1))
+                        (meta_class_sig_item _loc x2)
+                  | Ast.CgCtr x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CgCtr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.CgNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "CgNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_class_str_item _loc =
+                  fun
+                  [ Ast.CrAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.CrVvr x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CrVvr")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CrVir x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CrVir")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CrVal x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CrVal")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_meta_bool _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.CrMth x0 x1 x2 x3 x4 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaApp _loc
+                                    (Ast.PaId _loc
+                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                          (Ast.IdUid _loc "CrMth")))
+                                    (meta_acc_Loc_t _loc x0))
+                                 (meta_string _loc x1))
+                              (meta_meta_bool _loc x2))
+                           (meta_expr _loc x3))
+                        (meta_ctyp _loc x4)
+                  | Ast.CrIni x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "CrIni")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.CrInh x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CrInh")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_expr _loc x1))
+                        (meta_string _loc x2)
+                  | Ast.CrCtr x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CrCtr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.CrSem x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CrSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_str_item _loc x1))
+                        (meta_class_str_item _loc x2)
+                  | Ast.CrNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "CrNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_class_type _loc =
+                  fun
+                  [ Ast.CtAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.CtEq x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_type _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CtCol x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtCol")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_type _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CtAnd x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_class_type _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CtSig x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtSig")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_class_sig_item _loc x2)
+                  | Ast.CtFun x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "CtFun")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_class_type _loc x2)
+                  | Ast.CtCon x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "CtCon")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_meta_bool _loc x1))
+                           (meta_ident _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.CtNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "CtNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_ctyp _loc =
+                  fun
+                  [ Ast.TyAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.TyOfAmp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyOfAmp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyAmp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyAmp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyVrnInfSup x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyVrnInfSup")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyVrnInf x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyVrnInf")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyVrnSup x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyVrnSup")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyVrnEq x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyVrnEq")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TySta x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TySta")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyTup x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyTup")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyMut x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyMut")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyPrv x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyPrv")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyOr x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyOr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyAnd x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyOf x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyOf")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TySum x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TySum")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyCom x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyCom")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TySem x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TySem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyCol x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyCol")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyRec x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyRec")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.TyVrn x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyVrn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.TyQuM x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyQuM")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.TyQuP x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyQuP")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.TyQuo x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyQuo")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.TyPol x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyPol")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyOlb x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyOlb")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyObj x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyObj")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_meta_bool _loc x2)
+                  | Ast.TyDcl x0 x1 x2 x3 x4 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaApp _loc
+                                    (Ast.PaId _loc
+                                       (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                          (Ast.IdUid _loc "TyDcl")))
+                                    (meta_acc_Loc_t _loc x0))
+                                 (meta_string _loc x1))
+                              (meta_list meta_ctyp _loc x2))
+                           (meta_ctyp _loc x3))
+                        (meta_list
+                           (fun _loc (x1, x2) ->
+                              Ast.PaTup _loc
+                                (Ast.PaCom _loc (meta_ctyp _loc x1)
+                                   (meta_ctyp _loc x2)))
+                           _loc x4)
+                  | Ast.TyMan x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyMan")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyId x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.TyLab x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyLab")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyCls x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "TyCls")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.TyArr x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyArr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyApp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyAny x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "TyAny")))
+                        (meta_acc_Loc_t _loc x0)
+                  | Ast.TyAli x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "TyAli")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.TyNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "TyNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_expr _loc =
+                  fun
+                  [ Ast.ExWhi x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExWhi")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExVrn x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExVrn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExTyc x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExTyc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.ExCom x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExCom")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExTup x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExTup")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExTry x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExTry")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_match_case _loc x2)
+                  | Ast.ExStr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExStr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExSte x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExSte")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExSnd x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExSnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_string _loc x2)
+                  | Ast.ExSeq x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExSeq")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExRec x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExRec")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_rec_binding _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExOvr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExOvr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_rec_binding _loc x1)
+                  | Ast.ExOlb x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExOlb")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExObj x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExObj")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_class_str_item _loc x2)
+                  | Ast.ExNew x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExNew")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.ExMat x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExMat")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_match_case _loc x2)
+                  | Ast.ExLmd x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "ExLmd")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_module_expr _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.ExLet x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "ExLet")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_meta_bool _loc x1))
+                           (meta_binding _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.ExLaz x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExLaz")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExLab x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExLab")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExNativeInt x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExNativeInt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExInt64 x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExInt64")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExInt32 x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExInt32")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExInt x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExInt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExIfe x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "ExIfe")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_expr _loc x1))
+                           (meta_expr _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.ExFun x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExFun")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_match_case _loc x1)
+                  | Ast.ExFor x0 x1 x2 x3 x4 x5 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaApp _loc
+                                    (Ast.PaApp _loc
+                                       (Ast.PaId _loc
+                                          (Ast.IdAcc _loc
+                                             (Ast.IdUid _loc "Ast")
+                                             (Ast.IdUid _loc "ExFor")))
+                                       (meta_acc_Loc_t _loc x0))
+                                    (meta_string _loc x1))
+                                 (meta_expr _loc x2))
+                              (meta_expr _loc x3))
+                           (meta_meta_bool _loc x4))
+                        (meta_expr _loc x5)
+                  | Ast.ExFlo x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExFlo")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExCoe x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "ExCoe")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_expr _loc x1))
+                           (meta_ctyp _loc x2))
+                        (meta_ctyp _loc x3)
+                  | Ast.ExChr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExChr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.ExAss x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExAss")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExAsr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExAsr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExAsf x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "ExAsf")))
+                        (meta_acc_Loc_t _loc x0)
+                  | Ast.ExSem x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExArr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExArr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.ExAre x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExAre")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExApp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.ExAcc x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "ExAcc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_expr _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.ExId x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "ExId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.ExNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "ExNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_ident _loc =
+                  fun
+                  [ Ast.IdAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.IdUid x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "IdUid")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.IdLid x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "IdLid")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.IdApp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "IdApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_ident _loc x2)
+                  | Ast.IdAcc x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "IdAcc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_ident _loc x2) ]
+                and meta_match_case _loc =
+                  fun
+                  [ Ast.McAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.McArr x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "McArr")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_patt _loc x1))
+                           (meta_expr _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.McOr x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "McOr")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_match_case _loc x1))
+                        (meta_match_case _loc x2)
+                  | Ast.McNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "McNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_meta_bool _loc =
+                  fun
+                  [ Ast.BAnt x0 -> Ast.PaAnt _loc x0
+                  | Ast.BFalse ->
+                      Ast.PaId _loc
+                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                           (Ast.IdUid _loc "BFalse"))
+                  | Ast.BTrue ->
+                      Ast.PaId _loc
+                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                           (Ast.IdUid _loc "BTrue")) ]
+                and meta_meta_list mf_a _loc =
+                  fun
+                  [ Ast.LAnt x0 -> Ast.PaAnt _loc x0
+                  | Ast.LCons x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "LCons")))
+                           (mf_a _loc x0))
+                        (meta_meta_list mf_a _loc x1)
+                  | Ast.LNil ->
+                      Ast.PaId _loc
+                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                           (Ast.IdUid _loc "LNil")) ]
+                and meta_meta_option mf_a _loc =
+                  fun
+                  [ Ast.OAnt x0 -> Ast.PaAnt _loc x0
+                  | Ast.OSome x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "OSome")))
+                        (mf_a _loc x0)
+                  | Ast.ONone ->
+                      Ast.PaId _loc
+                        (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                           (Ast.IdUid _loc "ONone")) ]
+                and meta_module_binding _loc =
+                  fun
+                  [ Ast.MbAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.MbCol x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MbCol")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.MbColEq x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "MbColEq")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_module_type _loc x2))
+                        (meta_module_expr _loc x3)
+                  | Ast.MbAnd x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MbAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_module_binding _loc x1))
+                        (meta_module_binding _loc x2)
+                  | Ast.MbNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "MbNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_module_expr _loc =
+                  fun
+                  [ Ast.MeAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.MeTyc x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MeTyc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_module_expr _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.MeStr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MeStr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_str_item _loc x1)
+                  | Ast.MeFun x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "MeFun")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_module_type _loc x2))
+                        (meta_module_expr _loc x3)
+                  | Ast.MeApp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MeApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_module_expr _loc x1))
+                        (meta_module_expr _loc x2)
+                  | Ast.MeId x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MeId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.MeNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "MeNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_module_type _loc =
+                  fun
+                  [ Ast.MtAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.MtWit x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "MtWit")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_module_type _loc x1))
+                        (meta_with_constr _loc x2)
+                  | Ast.MtSig x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MtSig")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_sig_item _loc x1)
+                  | Ast.MtQuo x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MtQuo")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.MtFun x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "MtFun")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_module_type _loc x2))
+                        (meta_module_type _loc x3)
+                  | Ast.MtId x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "MtId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.MtNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "MtNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_patt _loc =
+                  fun
+                  [ Ast.PaVrn x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaVrn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaTyp x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaTyp")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.PaTyc x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaTyc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.PaTup x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaTup")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_patt _loc x1)
+                  | Ast.PaStr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaStr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaEq x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaRec x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaRec")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_patt _loc x1)
+                  | Ast.PaRng x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaRng")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaOrp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaOrp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaOlbi x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "PaOlbi")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_patt _loc x2))
+                        (meta_expr _loc x3)
+                  | Ast.PaOlb x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaOlb")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaLab x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaLab")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaFlo x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaFlo")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaNativeInt x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaNativeInt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaInt64 x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaInt64")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaInt32 x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaInt32")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaInt x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaInt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaChr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaChr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_string _loc x1)
+                  | Ast.PaSem x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaCom x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaCom")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaArr x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaArr")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_patt _loc x1)
+                  | Ast.PaApp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaApp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaAny x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "PaAny")))
+                        (meta_acc_Loc_t _loc x0)
+                  | Ast.PaAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.PaAli x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "PaAli")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_patt _loc x1))
+                        (meta_patt _loc x2)
+                  | Ast.PaId x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "PaId")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.PaNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "PaNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_rec_binding _loc =
+                  fun
+                  [ Ast.RbAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.RbEq x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "RbEq")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.RbSem x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "RbSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_rec_binding _loc x1))
+                        (meta_rec_binding _loc x2)
+                  | Ast.RbNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "RbNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_sig_item _loc =
+                  fun
+                  [ Ast.SgAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.SgVal x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgVal")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.SgTyp x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgTyp")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.SgOpn x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgOpn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.SgMty x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgMty")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.SgRecMod x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgRecMod")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_module_binding _loc x1)
+                  | Ast.SgMod x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgMod")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.SgInc x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgInc")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_module_type _loc x1)
+                  | Ast.SgExt x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "SgExt")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_ctyp _loc x2))
+                        (meta_meta_list meta_string _loc x3)
+                  | Ast.SgExc x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgExc")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.SgDir x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgDir")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.SgSem x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "SgSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_sig_item _loc x1))
+                        (meta_sig_item _loc x2)
+                  | Ast.SgClt x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgClt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_type _loc x1)
+                  | Ast.SgCls x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "SgCls")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_type _loc x1)
+                  | Ast.SgNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "SgNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_str_item _loc =
+                  fun
+                  [ Ast.StAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.StVal x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StVal")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_meta_bool _loc x1))
+                        (meta_binding _loc x2)
+                  | Ast.StTyp x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StTyp")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ctyp _loc x1)
+                  | Ast.StOpn x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StOpn")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_ident _loc x1)
+                  | Ast.StMty x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StMty")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_type _loc x2)
+                  | Ast.StRecMod x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StRecMod")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_module_binding _loc x1)
+                  | Ast.StMod x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StMod")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_module_expr _loc x2)
+                  | Ast.StInc x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StInc")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_module_expr _loc x1)
+                  | Ast.StExt x0 x1 x2 x3 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaApp _loc
+                                 (Ast.PaId _loc
+                                    (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                       (Ast.IdUid _loc "StExt")))
+                                 (meta_acc_Loc_t _loc x0))
+                              (meta_string _loc x1))
+                           (meta_ctyp _loc x2))
+                        (meta_meta_list meta_string _loc x3)
+                  | Ast.StExp x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StExp")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_expr _loc x1)
+                  | Ast.StExc x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StExc")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_meta_option meta_ident _loc x2)
+                  | Ast.StDir x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StDir")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_string _loc x1))
+                        (meta_expr _loc x2)
+                  | Ast.StSem x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "StSem")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_str_item _loc x1))
+                        (meta_str_item _loc x2)
+                  | Ast.StClt x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StClt")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_type _loc x1)
+                  | Ast.StCls x0 x1 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaId _loc
+                              (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                 (Ast.IdUid _loc "StCls")))
+                           (meta_acc_Loc_t _loc x0))
+                        (meta_class_expr _loc x1)
+                  | Ast.StNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "StNil")))
+                        (meta_acc_Loc_t _loc x0) ]
+                and meta_with_constr _loc =
+                  fun
+                  [ Ast.WcAnt x0 x1 -> Ast.PaAnt x0 x1
+                  | Ast.WcAnd x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "WcAnd")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_with_constr _loc x1))
+                        (meta_with_constr _loc x2)
+                  | Ast.WcMod x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "WcMod")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ident _loc x1))
+                        (meta_ident _loc x2)
+                  | Ast.WcTyp x0 x1 x2 ->
+                      Ast.PaApp _loc
+                        (Ast.PaApp _loc
+                           (Ast.PaApp _loc
+                              (Ast.PaId _loc
+                                 (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                                    (Ast.IdUid _loc "WcTyp")))
+                              (meta_acc_Loc_t _loc x0))
+                           (meta_ctyp _loc x1))
+                        (meta_ctyp _loc x2)
+                  | Ast.WcNil x0 ->
+                      Ast.PaApp _loc
+                        (Ast.PaId _loc
+                           (Ast.IdAcc _loc (Ast.IdUid _loc "Ast")
+                              (Ast.IdUid _loc "WcNil")))
+                        (meta_acc_Loc_t _loc x0) ];
+              end;
+          end;
+      end;
+    class map =
+      object (o)
+        method string = fun x -> (x : string);
+        method int = fun x -> (x : int);
+        method float = fun x -> (x : float);
+        method bool = fun x -> (x : bool);
+        method list : ! 'a 'b. ('a -> 'b) -> list 'a -> list 'b = List.map;
+        method option : ! 'a 'b. ('a -> 'b) -> option 'a -> option 'b =
+          fun f -> fun [ None -> None | Some x -> Some (f x) ];
+        method array : ! 'a 'b. ('a -> 'b) -> array 'a -> array 'b = Array.
+          map;
+        method ref : ! 'a 'b. ('a -> 'b) -> ref 'a -> ref 'b =
+          fun f { val = x } -> { val = f x; };
+        method _Loc_t : Loc.t -> Loc.t = fun x -> x;
+        method with_constr : with_constr -> with_constr =
+          fun
+          [ WcNil _x0 -> WcNil (o#_Loc_t _x0)
+          | WcTyp _x0 _x1 _x2 ->
+              WcTyp (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | WcMod _x0 _x1 _x2 ->
+              WcMod (o#_Loc_t _x0) (o#ident _x1) (o#ident _x2)
+          | WcAnd _x0 _x1 _x2 ->
+              WcAnd (o#_Loc_t _x0) (o#with_constr _x1) (o#with_constr _x2)
+          | WcAnt _x0 _x1 -> WcAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method str_item : str_item -> str_item =
+          fun
+          [ StNil _x0 -> StNil (o#_Loc_t _x0)
+          | StCls _x0 _x1 -> StCls (o#_Loc_t _x0) (o#class_expr _x1)
+          | StClt _x0 _x1 -> StClt (o#_Loc_t _x0) (o#class_type _x1)
+          | StSem _x0 _x1 _x2 ->
+              StSem (o#_Loc_t _x0) (o#str_item _x1) (o#str_item _x2)
+          | StDir _x0 _x1 _x2 ->
+              StDir (o#_Loc_t _x0) (o#string _x1) (o#expr _x2)
+          | StExc _x0 _x1 _x2 ->
+              StExc (o#_Loc_t _x0) (o#ctyp _x1) (o#meta_option o#ident _x2)
+          | StExp _x0 _x1 -> StExp (o#_Loc_t _x0) (o#expr _x1)
+          | StExt _x0 _x1 _x2 _x3 ->
+              StExt (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
+                (o#meta_list o#string _x3)
+          | StInc _x0 _x1 -> StInc (o#_Loc_t _x0) (o#module_expr _x1)
+          | StMod _x0 _x1 _x2 ->
+              StMod (o#_Loc_t _x0) (o#string _x1) (o#module_expr _x2)
+          | StRecMod _x0 _x1 ->
+              StRecMod (o#_Loc_t _x0) (o#module_binding _x1)
+          | StMty _x0 _x1 _x2 ->
+              StMty (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
+          | StOpn _x0 _x1 -> StOpn (o#_Loc_t _x0) (o#ident _x1)
+          | StTyp _x0 _x1 -> StTyp (o#_Loc_t _x0) (o#ctyp _x1)
+          | StVal _x0 _x1 _x2 ->
+              StVal (o#_Loc_t _x0) (o#meta_bool _x1) (o#binding _x2)
+          | StAnt _x0 _x1 -> StAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method sig_item : sig_item -> sig_item =
+          fun
+          [ SgNil _x0 -> SgNil (o#_Loc_t _x0)
+          | SgCls _x0 _x1 -> SgCls (o#_Loc_t _x0) (o#class_type _x1)
+          | SgClt _x0 _x1 -> SgClt (o#_Loc_t _x0) (o#class_type _x1)
+          | SgSem _x0 _x1 _x2 ->
+              SgSem (o#_Loc_t _x0) (o#sig_item _x1) (o#sig_item _x2)
+          | SgDir _x0 _x1 _x2 ->
+              SgDir (o#_Loc_t _x0) (o#string _x1) (o#expr _x2)
+          | SgExc _x0 _x1 -> SgExc (o#_Loc_t _x0) (o#ctyp _x1)
+          | SgExt _x0 _x1 _x2 _x3 ->
+              SgExt (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
+                (o#meta_list o#string _x3)
+          | SgInc _x0 _x1 -> SgInc (o#_Loc_t _x0) (o#module_type _x1)
+          | SgMod _x0 _x1 _x2 ->
+              SgMod (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
+          | SgRecMod _x0 _x1 ->
+              SgRecMod (o#_Loc_t _x0) (o#module_binding _x1)
+          | SgMty _x0 _x1 _x2 ->
+              SgMty (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
+          | SgOpn _x0 _x1 -> SgOpn (o#_Loc_t _x0) (o#ident _x1)
+          | SgTyp _x0 _x1 -> SgTyp (o#_Loc_t _x0) (o#ctyp _x1)
+          | SgVal _x0 _x1 _x2 ->
+              SgVal (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
+          | SgAnt _x0 _x1 -> SgAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method rec_binding : rec_binding -> rec_binding =
+          fun
+          [ RbNil _x0 -> RbNil (o#_Loc_t _x0)
+          | RbSem _x0 _x1 _x2 ->
+              RbSem (o#_Loc_t _x0) (o#rec_binding _x1) (o#rec_binding _x2)
+          | RbEq _x0 _x1 _x2 ->
+              RbEq (o#_Loc_t _x0) (o#ident _x1) (o#expr _x2)
+          | RbAnt _x0 _x1 -> RbAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method patt : patt -> patt =
+          fun
+          [ PaNil _x0 -> PaNil (o#_Loc_t _x0)
+          | PaId _x0 _x1 -> PaId (o#_Loc_t _x0) (o#ident _x1)
+          | PaAli _x0 _x1 _x2 ->
+              PaAli (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
+          | PaAnt _x0 _x1 -> PaAnt (o#_Loc_t _x0) (o#string _x1)
+          | PaAny _x0 -> PaAny (o#_Loc_t _x0)
+          | PaApp _x0 _x1 _x2 ->
+              PaApp (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
+          | PaArr _x0 _x1 -> PaArr (o#_Loc_t _x0) (o#patt _x1)
+          | PaCom _x0 _x1 _x2 ->
+              PaCom (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
+          | PaSem _x0 _x1 _x2 ->
+              PaSem (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
+          | PaChr _x0 _x1 -> PaChr (o#_Loc_t _x0) (o#string _x1)
+          | PaInt _x0 _x1 -> PaInt (o#_Loc_t _x0) (o#string _x1)
+          | PaInt32 _x0 _x1 -> PaInt32 (o#_Loc_t _x0) (o#string _x1)
+          | PaInt64 _x0 _x1 -> PaInt64 (o#_Loc_t _x0) (o#string _x1)
+          | PaNativeInt _x0 _x1 -> PaNativeInt (o#_Loc_t _x0) (o#string _x1)
+          | PaFlo _x0 _x1 -> PaFlo (o#_Loc_t _x0) (o#string _x1)
+          | PaLab _x0 _x1 _x2 ->
+              PaLab (o#_Loc_t _x0) (o#string _x1) (o#patt _x2)
+          | PaOlb _x0 _x1 _x2 ->
+              PaOlb (o#_Loc_t _x0) (o#string _x1) (o#patt _x2)
+          | PaOlbi _x0 _x1 _x2 _x3 ->
+              PaOlbi (o#_Loc_t _x0) (o#string _x1) (o#patt _x2) (o#expr _x3)
+          | PaOrp _x0 _x1 _x2 ->
+              PaOrp (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
+          | PaRng _x0 _x1 _x2 ->
+              PaRng (o#_Loc_t _x0) (o#patt _x1) (o#patt _x2)
+          | PaRec _x0 _x1 -> PaRec (o#_Loc_t _x0) (o#patt _x1)
+          | PaEq _x0 _x1 _x2 ->
+              PaEq (o#_Loc_t _x0) (o#ident _x1) (o#patt _x2)
+          | PaStr _x0 _x1 -> PaStr (o#_Loc_t _x0) (o#string _x1)
+          | PaTup _x0 _x1 -> PaTup (o#_Loc_t _x0) (o#patt _x1)
+          | PaTyc _x0 _x1 _x2 ->
+              PaTyc (o#_Loc_t _x0) (o#patt _x1) (o#ctyp _x2)
+          | PaTyp _x0 _x1 -> PaTyp (o#_Loc_t _x0) (o#ident _x1)
+          | PaVrn _x0 _x1 -> PaVrn (o#_Loc_t _x0) (o#string _x1) ];
+        method module_type : module_type -> module_type =
+          fun
+          [ MtNil _x0 -> MtNil (o#_Loc_t _x0)
+          | MtId _x0 _x1 -> MtId (o#_Loc_t _x0) (o#ident _x1)
+          | MtFun _x0 _x1 _x2 _x3 ->
+              MtFun (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
+                (o#module_type _x3)
+          | MtQuo _x0 _x1 -> MtQuo (o#_Loc_t _x0) (o#string _x1)
+          | MtSig _x0 _x1 -> MtSig (o#_Loc_t _x0) (o#sig_item _x1)
+          | MtWit _x0 _x1 _x2 ->
+              MtWit (o#_Loc_t _x0) (o#module_type _x1) (o#with_constr _x2)
+          | MtAnt _x0 _x1 -> MtAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method module_expr : module_expr -> module_expr =
+          fun
+          [ MeNil _x0 -> MeNil (o#_Loc_t _x0)
+          | MeId _x0 _x1 -> MeId (o#_Loc_t _x0) (o#ident _x1)
+          | MeApp _x0 _x1 _x2 ->
+              MeApp (o#_Loc_t _x0) (o#module_expr _x1) (o#module_expr _x2)
+          | MeFun _x0 _x1 _x2 _x3 ->
+              MeFun (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
+                (o#module_expr _x3)
+          | MeStr _x0 _x1 -> MeStr (o#_Loc_t _x0) (o#str_item _x1)
+          | MeTyc _x0 _x1 _x2 ->
+              MeTyc (o#_Loc_t _x0) (o#module_expr _x1) (o#module_type _x2)
+          | MeAnt _x0 _x1 -> MeAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method module_binding : module_binding -> module_binding =
+          fun
+          [ MbNil _x0 -> MbNil (o#_Loc_t _x0)
+          | MbAnd _x0 _x1 _x2 ->
+              MbAnd (o#_Loc_t _x0) (o#module_binding _x1)
+                (o#module_binding _x2)
+          | MbColEq _x0 _x1 _x2 _x3 ->
+              MbColEq (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
+                (o#module_expr _x3)
+          | MbCol _x0 _x1 _x2 ->
+              MbCol (o#_Loc_t _x0) (o#string _x1) (o#module_type _x2)
+          | MbAnt _x0 _x1 -> MbAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method meta_option :
+          ! 'a 'b. ('a -> 'b) -> meta_option 'a -> meta_option 'b =
+          fun _f_a ->
+            fun
+            [ ONone -> ONone
+            | OSome _x0 -> OSome (_f_a _x0)
+            | OAnt _x0 -> OAnt (o#string _x0) ];
+        method meta_list :
+          ! 'a 'b. ('a -> 'b) -> meta_list 'a -> meta_list 'b =
+          fun _f_a ->
+            fun
+            [ LNil -> LNil
+            | LCons _x0 _x1 -> LCons (_f_a _x0) (o#meta_list _f_a _x1)
+            | LAnt _x0 -> LAnt (o#string _x0) ];
+        method meta_bool : meta_bool -> meta_bool =
+          fun
+          [ BTrue -> BTrue
+          | BFalse -> BFalse
+          | BAnt _x0 -> BAnt (o#string _x0) ];
+        method match_case : match_case -> match_case =
+          fun
+          [ McNil _x0 -> McNil (o#_Loc_t _x0)
+          | McOr _x0 _x1 _x2 ->
+              McOr (o#_Loc_t _x0) (o#match_case _x1) (o#match_case _x2)
+          | McArr _x0 _x1 _x2 _x3 ->
+              McArr (o#_Loc_t _x0) (o#patt _x1) (o#expr _x2) (o#expr _x3)
+          | McAnt _x0 _x1 -> McAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method ident : ident -> ident =
+          fun
+          [ IdAcc _x0 _x1 _x2 ->
+              IdAcc (o#_Loc_t _x0) (o#ident _x1) (o#ident _x2)
+          | IdApp _x0 _x1 _x2 ->
+              IdApp (o#_Loc_t _x0) (o#ident _x1) (o#ident _x2)
+          | IdLid _x0 _x1 -> IdLid (o#_Loc_t _x0) (o#string _x1)
+          | IdUid _x0 _x1 -> IdUid (o#_Loc_t _x0) (o#string _x1)
+          | IdAnt _x0 _x1 -> IdAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method expr : expr -> expr =
+          fun
+          [ ExNil _x0 -> ExNil (o#_Loc_t _x0)
+          | ExId _x0 _x1 -> ExId (o#_Loc_t _x0) (o#ident _x1)
+          | ExAcc _x0 _x1 _x2 ->
+              ExAcc (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
+          | ExAnt _x0 _x1 -> ExAnt (o#_Loc_t _x0) (o#string _x1)
+          | ExApp _x0 _x1 _x2 ->
+              ExApp (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
+          | ExAre _x0 _x1 _x2 ->
+              ExAre (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
+          | ExArr _x0 _x1 -> ExArr (o#_Loc_t _x0) (o#expr _x1)
+          | ExSem _x0 _x1 _x2 ->
+              ExSem (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
+          | ExAsf _x0 -> ExAsf (o#_Loc_t _x0)
+          | ExAsr _x0 _x1 -> ExAsr (o#_Loc_t _x0) (o#expr _x1)
+          | ExAss _x0 _x1 _x2 ->
+              ExAss (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
+          | ExChr _x0 _x1 -> ExChr (o#_Loc_t _x0) (o#string _x1)
+          | ExCoe _x0 _x1 _x2 _x3 ->
+              ExCoe (o#_Loc_t _x0) (o#expr _x1) (o#ctyp _x2) (o#ctyp _x3)
+          | ExFlo _x0 _x1 -> ExFlo (o#_Loc_t _x0) (o#string _x1)
+          | ExFor _x0 _x1 _x2 _x3 _x4 _x5 ->
+              ExFor (o#_Loc_t _x0) (o#string _x1) (o#expr _x2) (o#expr _x3)
+                (o#meta_bool _x4) (o#expr _x5)
+          | ExFun _x0 _x1 -> ExFun (o#_Loc_t _x0) (o#match_case _x1)
+          | ExIfe _x0 _x1 _x2 _x3 ->
+              ExIfe (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2) (o#expr _x3)
+          | ExInt _x0 _x1 -> ExInt (o#_Loc_t _x0) (o#string _x1)
+          | ExInt32 _x0 _x1 -> ExInt32 (o#_Loc_t _x0) (o#string _x1)
+          | ExInt64 _x0 _x1 -> ExInt64 (o#_Loc_t _x0) (o#string _x1)
+          | ExNativeInt _x0 _x1 -> ExNativeInt (o#_Loc_t _x0) (o#string _x1)
+          | ExLab _x0 _x1 _x2 ->
+              ExLab (o#_Loc_t _x0) (o#string _x1) (o#expr _x2)
+          | ExLaz _x0 _x1 -> ExLaz (o#_Loc_t _x0) (o#expr _x1)
+          | ExLet _x0 _x1 _x2 _x3 ->
+              ExLet (o#_Loc_t _x0) (o#meta_bool _x1) (o#binding _x2)
+                (o#expr _x3)
+          | ExLmd _x0 _x1 _x2 _x3 ->
+              ExLmd (o#_Loc_t _x0) (o#string _x1) (o#module_expr _x2)
+                (o#expr _x3)
+          | ExMat _x0 _x1 _x2 ->
+              ExMat (o#_Loc_t _x0) (o#expr _x1) (o#match_case _x2)
+          | ExNew _x0 _x1 -> ExNew (o#_Loc_t _x0) (o#ident _x1)
+          | ExObj _x0 _x1 _x2 ->
+              ExObj (o#_Loc_t _x0) (o#patt _x1) (o#class_str_item _x2)
+          | ExOlb _x0 _x1 _x2 ->
+              ExOlb (o#_Loc_t _x0) (o#string _x1) (o#expr _x2)
+          | ExOvr _x0 _x1 -> ExOvr (o#_Loc_t _x0) (o#rec_binding _x1)
+          | ExRec _x0 _x1 _x2 ->
+              ExRec (o#_Loc_t _x0) (o#rec_binding _x1) (o#expr _x2)
+          | ExSeq _x0 _x1 -> ExSeq (o#_Loc_t _x0) (o#expr _x1)
+          | ExSnd _x0 _x1 _x2 ->
+              ExSnd (o#_Loc_t _x0) (o#expr _x1) (o#string _x2)
+          | ExSte _x0 _x1 _x2 ->
+              ExSte (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
+          | ExStr _x0 _x1 -> ExStr (o#_Loc_t _x0) (o#string _x1)
+          | ExTry _x0 _x1 _x2 ->
+              ExTry (o#_Loc_t _x0) (o#expr _x1) (o#match_case _x2)
+          | ExTup _x0 _x1 -> ExTup (o#_Loc_t _x0) (o#expr _x1)
+          | ExCom _x0 _x1 _x2 ->
+              ExCom (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2)
+          | ExTyc _x0 _x1 _x2 ->
+              ExTyc (o#_Loc_t _x0) (o#expr _x1) (o#ctyp _x2)
+          | ExVrn _x0 _x1 -> ExVrn (o#_Loc_t _x0) (o#string _x1)
+          | ExWhi _x0 _x1 _x2 ->
+              ExWhi (o#_Loc_t _x0) (o#expr _x1) (o#expr _x2) ];
+        method ctyp : ctyp -> ctyp =
+          fun
+          [ TyNil _x0 -> TyNil (o#_Loc_t _x0)
+          | TyAli _x0 _x1 _x2 ->
+              TyAli (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyAny _x0 -> TyAny (o#_Loc_t _x0)
+          | TyApp _x0 _x1 _x2 ->
+              TyApp (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyArr _x0 _x1 _x2 ->
+              TyArr (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyCls _x0 _x1 -> TyCls (o#_Loc_t _x0) (o#ident _x1)
+          | TyLab _x0 _x1 _x2 ->
+              TyLab (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
+          | TyId _x0 _x1 -> TyId (o#_Loc_t _x0) (o#ident _x1)
+          | TyMan _x0 _x1 _x2 ->
+              TyMan (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyDcl _x0 _x1 _x2 _x3 _x4 ->
+              TyDcl (o#_Loc_t _x0) (o#string _x1) (o#list o#ctyp _x2)
+                (o#ctyp _x3)
+                (o#list (fun (_x0, _x1) -> ((o#ctyp _x0), (o#ctyp _x1))) _x4)
+          | TyObj _x0 _x1 _x2 ->
+              TyObj (o#_Loc_t _x0) (o#ctyp _x1) (o#meta_bool _x2)
+          | TyOlb _x0 _x1 _x2 ->
+              TyOlb (o#_Loc_t _x0) (o#string _x1) (o#ctyp _x2)
+          | TyPol _x0 _x1 _x2 ->
+              TyPol (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyQuo _x0 _x1 -> TyQuo (o#_Loc_t _x0) (o#string _x1)
+          | TyQuP _x0 _x1 -> TyQuP (o#_Loc_t _x0) (o#string _x1)
+          | TyQuM _x0 _x1 -> TyQuM (o#_Loc_t _x0) (o#string _x1)
+          | TyVrn _x0 _x1 -> TyVrn (o#_Loc_t _x0) (o#string _x1)
+          | TyRec _x0 _x1 -> TyRec (o#_Loc_t _x0) (o#ctyp _x1)
+          | TyCol _x0 _x1 _x2 ->
+              TyCol (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TySem _x0 _x1 _x2 ->
+              TySem (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyCom _x0 _x1 _x2 ->
+              TyCom (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TySum _x0 _x1 -> TySum (o#_Loc_t _x0) (o#ctyp _x1)
+          | TyOf _x0 _x1 _x2 -> TyOf (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyAnd _x0 _x1 _x2 ->
+              TyAnd (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyOr _x0 _x1 _x2 -> TyOr (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyPrv _x0 _x1 -> TyPrv (o#_Loc_t _x0) (o#ctyp _x1)
+          | TyMut _x0 _x1 -> TyMut (o#_Loc_t _x0) (o#ctyp _x1)
+          | TyTup _x0 _x1 -> TyTup (o#_Loc_t _x0) (o#ctyp _x1)
+          | TySta _x0 _x1 _x2 ->
+              TySta (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyVrnEq _x0 _x1 -> TyVrnEq (o#_Loc_t _x0) (o#ctyp _x1)
+          | TyVrnSup _x0 _x1 -> TyVrnSup (o#_Loc_t _x0) (o#ctyp _x1)
+          | TyVrnInf _x0 _x1 -> TyVrnInf (o#_Loc_t _x0) (o#ctyp _x1)
+          | TyVrnInfSup _x0 _x1 _x2 ->
+              TyVrnInfSup (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyAmp _x0 _x1 _x2 ->
+              TyAmp (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyOfAmp _x0 _x1 _x2 ->
+              TyOfAmp (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | TyAnt _x0 _x1 -> TyAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method class_type : class_type -> class_type =
+          fun
+          [ CtNil _x0 -> CtNil (o#_Loc_t _x0)
+          | CtCon _x0 _x1 _x2 _x3 ->
+              CtCon (o#_Loc_t _x0) (o#meta_bool _x1) (o#ident _x2)
+                (o#ctyp _x3)
+          | CtFun _x0 _x1 _x2 ->
+              CtFun (o#_Loc_t _x0) (o#ctyp _x1) (o#class_type _x2)
+          | CtSig _x0 _x1 _x2 ->
+              CtSig (o#_Loc_t _x0) (o#ctyp _x1) (o#class_sig_item _x2)
+          | CtAnd _x0 _x1 _x2 ->
+              CtAnd (o#_Loc_t _x0) (o#class_type _x1) (o#class_type _x2)
+          | CtCol _x0 _x1 _x2 ->
+              CtCol (o#_Loc_t _x0) (o#class_type _x1) (o#class_type _x2)
+          | CtEq _x0 _x1 _x2 ->
+              CtEq (o#_Loc_t _x0) (o#class_type _x1) (o#class_type _x2)
+          | CtAnt _x0 _x1 -> CtAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method class_str_item : class_str_item -> class_str_item =
+          fun
+          [ CrNil _x0 -> CrNil (o#_Loc_t _x0)
+          | CrSem _x0 _x1 _x2 ->
+              CrSem (o#_Loc_t _x0) (o#class_str_item _x1)
+                (o#class_str_item _x2)
+          | CrCtr _x0 _x1 _x2 ->
+              CrCtr (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | CrInh _x0 _x1 _x2 ->
+              CrInh (o#_Loc_t _x0) (o#class_expr _x1) (o#string _x2)
+          | CrIni _x0 _x1 -> CrIni (o#_Loc_t _x0) (o#expr _x1)
+          | CrMth _x0 _x1 _x2 _x3 _x4 ->
+              CrMth (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
+                (o#expr _x3) (o#ctyp _x4)
+          | CrVal _x0 _x1 _x2 _x3 ->
+              CrVal (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
+                (o#expr _x3)
+          | CrVir _x0 _x1 _x2 _x3 ->
+              CrVir (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
+                (o#ctyp _x3)
+          | CrVvr _x0 _x1 _x2 _x3 ->
+              CrVvr (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
+                (o#ctyp _x3)
+          | CrAnt _x0 _x1 -> CrAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method class_sig_item : class_sig_item -> class_sig_item =
+          fun
+          [ CgNil _x0 -> CgNil (o#_Loc_t _x0)
+          | CgCtr _x0 _x1 _x2 ->
+              CgCtr (o#_Loc_t _x0) (o#ctyp _x1) (o#ctyp _x2)
+          | CgSem _x0 _x1 _x2 ->
+              CgSem (o#_Loc_t _x0) (o#class_sig_item _x1)
+                (o#class_sig_item _x2)
+          | CgInh _x0 _x1 -> CgInh (o#_Loc_t _x0) (o#class_type _x1)
+          | CgMth _x0 _x1 _x2 _x3 ->
+              CgMth (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
+                (o#ctyp _x3)
+          | CgVal _x0 _x1 _x2 _x3 _x4 ->
+              CgVal (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
+                (o#meta_bool _x3) (o#ctyp _x4)
+          | CgVir _x0 _x1 _x2 _x3 ->
+              CgVir (o#_Loc_t _x0) (o#string _x1) (o#meta_bool _x2)
+                (o#ctyp _x3)
+          | CgAnt _x0 _x1 -> CgAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method class_expr : class_expr -> class_expr =
+          fun
+          [ CeNil _x0 -> CeNil (o#_Loc_t _x0)
+          | CeApp _x0 _x1 _x2 ->
+              CeApp (o#_Loc_t _x0) (o#class_expr _x1) (o#expr _x2)
+          | CeCon _x0 _x1 _x2 _x3 ->
+              CeCon (o#_Loc_t _x0) (o#meta_bool _x1) (o#ident _x2)
+                (o#ctyp _x3)
+          | CeFun _x0 _x1 _x2 ->
+              CeFun (o#_Loc_t _x0) (o#patt _x1) (o#class_expr _x2)
+          | CeLet _x0 _x1 _x2 _x3 ->
+              CeLet (o#_Loc_t _x0) (o#meta_bool _x1) (o#binding _x2)
+                (o#class_expr _x3)
+          | CeStr _x0 _x1 _x2 ->
+              CeStr (o#_Loc_t _x0) (o#patt _x1) (o#class_str_item _x2)
+          | CeTyc _x0 _x1 _x2 ->
+              CeTyc (o#_Loc_t _x0) (o#class_expr _x1) (o#class_type _x2)
+          | CeAnd _x0 _x1 _x2 ->
+              CeAnd (o#_Loc_t _x0) (o#class_expr _x1) (o#class_expr _x2)
+          | CeEq _x0 _x1 _x2 ->
+              CeEq (o#_Loc_t _x0) (o#class_expr _x1) (o#class_expr _x2)
+          | CeAnt _x0 _x1 -> CeAnt (o#_Loc_t _x0) (o#string _x1) ];
+        method binding : binding -> binding =
+          fun
+          [ BiNil _x0 -> BiNil (o#_Loc_t _x0)
+          | BiAnd _x0 _x1 _x2 ->
+              BiAnd (o#_Loc_t _x0) (o#binding _x1) (o#binding _x2)
+          | BiEq _x0 _x1 _x2 -> BiEq (o#_Loc_t _x0) (o#patt _x1) (o#expr _x2)
+          | BiAnt _x0 _x1 -> BiAnt (o#_Loc_t _x0) (o#string _x1) ];
+      end;
+    class fold =
+      object ((o : 'self_type))
+        method string = fun (_ : string) -> (o : 'self_type);
+        method int = fun (_ : int) -> (o : 'self_type);
+        method float = fun (_ : float) -> (o : 'self_type);
+        method bool = fun (_ : bool) -> (o : 'self_type);
+        method list :
+          ! 'a. ('self_type -> 'a -> 'self_type) -> list 'a -> 'self_type =
+          fun f -> List.fold_left f o;
+        method option :
+          ! 'a. ('self_type -> 'a -> 'self_type) -> option 'a -> 'self_type =
+          fun f -> fun [ None -> o | Some x -> f o x ];
+        method array :
+          ! 'a. ('self_type -> 'a -> 'self_type) -> array 'a -> 'self_type =
+          fun f -> Array.fold_left f o;
+        method ref :
+          ! 'a. ('self_type -> 'a -> 'self_type) -> ref 'a -> 'self_type =
+          fun f { val = x } -> f o x;
+        method _Loc_t : Loc.t -> 'self_type = fun _ -> o;
+        method with_constr : with_constr -> 'self_type =
+          fun
+          [ WcNil _x0 -> o#_Loc_t _x0
+          | WcTyp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | WcMod _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ident _x1)#ident _x2
+          | WcAnd _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#with_constr _x1)#with_constr _x2
+          | WcAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method str_item : str_item -> 'self_type =
+          fun
+          [ StNil _x0 -> o#_Loc_t _x0
+          | StCls _x0 _x1 -> (o#_Loc_t _x0)#class_expr _x1
+          | StClt _x0 _x1 -> (o#_Loc_t _x0)#class_type _x1
+          | StSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#str_item _x1)#str_item _x2
+          | StDir _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#expr _x2
+          | StExc _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#ctyp _x1)#meta_option (fun o -> o#ident) _x2
+          | StExp _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
+          | StExt _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
+                (fun o -> o#string) _x3
+          | StInc _x0 _x1 -> (o#_Loc_t _x0)#module_expr _x1
+          | StMod _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_expr _x2
+          | StRecMod _x0 _x1 -> (o#_Loc_t _x0)#module_binding _x1
+          | StMty _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_type _x2
+          | StOpn _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | StTyp _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | StVal _x0 _x1 _x2 -> ((o#_Loc_t _x0)#meta_bool _x1)#binding _x2
+          | StAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method sig_item : sig_item -> 'self_type =
+          fun
+          [ SgNil _x0 -> o#_Loc_t _x0
+          | SgCls _x0 _x1 -> (o#_Loc_t _x0)#class_type _x1
+          | SgClt _x0 _x1 -> (o#_Loc_t _x0)#class_type _x1
+          | SgSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#sig_item _x1)#sig_item _x2
+          | SgDir _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#expr _x2
+          | SgExc _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | SgExt _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
+                (fun o -> o#string) _x3
+          | SgInc _x0 _x1 -> (o#_Loc_t _x0)#module_type _x1
+          | SgMod _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_type _x2
+          | SgRecMod _x0 _x1 -> (o#_Loc_t _x0)#module_binding _x1
+          | SgMty _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_type _x2
+          | SgOpn _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | SgTyp _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | SgVal _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#ctyp _x2
+          | SgAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method rec_binding : rec_binding -> 'self_type =
+          fun
+          [ RbNil _x0 -> o#_Loc_t _x0
+          | RbSem _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#rec_binding _x1)#rec_binding _x2
+          | RbEq _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ident _x1)#expr _x2
+          | RbAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method patt : patt -> 'self_type =
+          fun
+          [ PaNil _x0 -> o#_Loc_t _x0
+          | PaId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | PaAli _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
+          | PaAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | PaAny _x0 -> o#_Loc_t _x0
+          | PaApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
+          | PaArr _x0 _x1 -> (o#_Loc_t _x0)#patt _x1
+          | PaCom _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
+          | PaSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
+          | PaChr _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | PaInt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | PaInt32 _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | PaInt64 _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | PaNativeInt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | PaFlo _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | PaLab _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#patt _x2
+          | PaOlb _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#patt _x2
+          | PaOlbi _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#patt _x2)#expr _x3
+          | PaOrp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
+          | PaRng _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#patt _x2
+          | PaRec _x0 _x1 -> (o#_Loc_t _x0)#patt _x1
+          | PaEq _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ident _x1)#patt _x2
+          | PaStr _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | PaTup _x0 _x1 -> (o#_Loc_t _x0)#patt _x1
+          | PaTyc _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#ctyp _x2
+          | PaTyp _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | PaVrn _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method module_type : module_type -> 'self_type =
+          fun
+          [ MtNil _x0 -> o#_Loc_t _x0
+          | MtId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | MtFun _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#module_type _x2)#module_type _x3
+          | MtQuo _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | MtSig _x0 _x1 -> (o#_Loc_t _x0)#sig_item _x1
+          | MtWit _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#module_type _x1)#with_constr _x2
+          | MtAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method module_expr : module_expr -> 'self_type =
+          fun
+          [ MeNil _x0 -> o#_Loc_t _x0
+          | MeId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | MeApp _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#module_expr _x1)#module_expr _x2
+          | MeFun _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#module_type _x2)#module_expr _x3
+          | MeStr _x0 _x1 -> (o#_Loc_t _x0)#str_item _x1
+          | MeTyc _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#module_expr _x1)#module_type _x2
+          | MeAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method module_binding : module_binding -> 'self_type =
+          fun
+          [ MbNil _x0 -> o#_Loc_t _x0
+          | MbAnd _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#module_binding _x1)#module_binding _x2
+          | MbColEq _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#module_type _x2)#module_expr _x3
+          | MbCol _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#module_type _x2
+          | MbAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method meta_option :
+          ! 'a.
+            ('self_type -> 'a -> 'self_type) -> meta_option 'a -> 'self_type =
+          fun _f_a ->
+            fun
+            [ ONone -> o
+            | OSome _x0 -> _f_a o _x0
+            | OAnt _x0 -> o#string _x0 ];
+        method meta_list :
+          ! 'a.
+            ('self_type -> 'a -> 'self_type) -> meta_list 'a -> 'self_type =
+          fun _f_a ->
+            fun
+            [ LNil -> o
+            | LCons _x0 _x1 -> (_f_a o _x0)#meta_list (fun o -> _f_a o) _x1
+            | LAnt _x0 -> o#string _x0 ];
+        method meta_bool : meta_bool -> 'self_type =
+          fun [ BTrue -> o | BFalse -> o | BAnt _x0 -> o#string _x0 ];
+        method match_case : match_case -> 'self_type =
+          fun
+          [ McNil _x0 -> o#_Loc_t _x0
+          | McOr _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#match_case _x1)#match_case _x2
+          | McArr _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#patt _x1)#expr _x2)#expr _x3
+          | McAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method ident : ident -> 'self_type =
+          fun
+          [ IdAcc _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ident _x1)#ident _x2
+          | IdApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ident _x1)#ident _x2
+          | IdLid _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | IdUid _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | IdAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method expr : expr -> 'self_type =
+          fun
+          [ ExNil _x0 -> o#_Loc_t _x0
+          | ExId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | ExAcc _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
+          | ExAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
+          | ExAre _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
+          | ExArr _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
+          | ExSem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
+          | ExAsf _x0 -> o#_Loc_t _x0
+          | ExAsr _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
+          | ExAss _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
+          | ExChr _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExCoe _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#expr _x1)#ctyp _x2)#ctyp _x3
+          | ExFlo _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExFor _x0 _x1 _x2 _x3 _x4 _x5 ->
+              (((((o#_Loc_t _x0)#string _x1)#expr _x2)#expr _x3)#meta_bool
+                 _x4)#
+                expr _x5
+          | ExFun _x0 _x1 -> (o#_Loc_t _x0)#match_case _x1
+          | ExIfe _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#expr _x1)#expr _x2)#expr _x3
+          | ExInt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExInt32 _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExInt64 _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExNativeInt _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExLab _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#expr _x2
+          | ExLaz _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
+          | ExLet _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#expr _x3
+          | ExLmd _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#module_expr _x2)#expr _x3
+          | ExMat _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#match_case _x2
+          | ExNew _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | ExObj _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
+          | ExOlb _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#expr _x2
+          | ExOvr _x0 _x1 -> (o#_Loc_t _x0)#rec_binding _x1
+          | ExRec _x0 _x1 _x2 -> ((o#_Loc_t _x0)#rec_binding _x1)#expr _x2
+          | ExSeq _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
+          | ExSnd _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#string _x2
+          | ExSte _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
+          | ExStr _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExTry _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#match_case _x2
+          | ExTup _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
+          | ExCom _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2
+          | ExTyc _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#ctyp _x2
+          | ExVrn _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | ExWhi _x0 _x1 _x2 -> ((o#_Loc_t _x0)#expr _x1)#expr _x2 ];
+        method ctyp : ctyp -> 'self_type =
+          fun
+          [ TyNil _x0 -> o#_Loc_t _x0
+          | TyAli _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyAny _x0 -> o#_Loc_t _x0
+          | TyApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyArr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyCls _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | TyLab _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#ctyp _x2
+          | TyId _x0 _x1 -> (o#_Loc_t _x0)#ident _x1
+          | TyMan _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyDcl _x0 _x1 _x2 _x3 _x4 ->
+              ((((o#_Loc_t _x0)#string _x1)#list (fun o -> o#ctyp) _x2)#ctyp
+                 _x3)#
+                list (fun o (_x0, _x1) -> (o#ctyp _x0)#ctyp _x1) _x4
+          | TyObj _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#meta_bool _x2
+          | TyOlb _x0 _x1 _x2 -> ((o#_Loc_t _x0)#string _x1)#ctyp _x2
+          | TyPol _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyQuo _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | TyQuP _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | TyQuM _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | TyVrn _x0 _x1 -> (o#_Loc_t _x0)#string _x1
+          | TyRec _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | TyCol _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TySem _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyCom _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TySum _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | TyOf _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyAnd _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyOr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyPrv _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | TyMut _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | TyTup _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | TySta _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyVrnEq _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | TyVrnSup _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | TyVrnInf _x0 _x1 -> (o#_Loc_t _x0)#ctyp _x1
+          | TyVrnInfSup _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyAmp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyOfAmp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | TyAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method class_type : class_type -> 'self_type =
+          fun
+          [ CtNil _x0 -> o#_Loc_t _x0
+          | CtCon _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
+          | CtFun _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#class_type _x2
+          | CtSig _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#class_sig_item _x2
+          | CtAnd _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
+          | CtCol _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
+          | CtEq _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#class_type _x1)#class_type _x2
+          | CtAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method class_str_item : class_str_item -> 'self_type =
+          fun
+          [ CrNil _x0 -> o#_Loc_t _x0
+          | CrSem _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#class_str_item _x1)#class_str_item _x2
+          | CrCtr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | CrInh _x0 _x1 _x2 -> ((o#_Loc_t _x0)#class_expr _x1)#string _x2
+          | CrIni _x0 _x1 -> (o#_Loc_t _x0)#expr _x1
+          | CrMth _x0 _x1 _x2 _x3 _x4 ->
+              ((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3)#ctyp _x4
+          | CrVal _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3
+          | CrVir _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
+          | CrVvr _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
+          | CrAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method class_sig_item : class_sig_item -> 'self_type =
+          fun
+          [ CgNil _x0 -> o#_Loc_t _x0
+          | CgCtr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
+          | CgSem _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#class_sig_item _x1)#class_sig_item _x2
+          | CgInh _x0 _x1 -> (o#_Loc_t _x0)#class_type _x1
+          | CgMth _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
+          | CgVal _x0 _x1 _x2 _x3 _x4 ->
+              ((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#meta_bool _x3)#
+                ctyp _x4
+          | CgVir _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
+          | CgAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method class_expr : class_expr -> 'self_type =
+          fun
+          [ CeNil _x0 -> o#_Loc_t _x0
+          | CeApp _x0 _x1 _x2 -> ((o#_Loc_t _x0)#class_expr _x1)#expr _x2
+          | CeCon _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
+          | CeFun _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#class_expr _x2
+          | CeLet _x0 _x1 _x2 _x3 ->
+              (((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#class_expr _x3
+          | CeStr _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
+          | CeTyc _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#class_expr _x1)#class_type _x2
+          | CeAnd _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
+          | CeEq _x0 _x1 _x2 ->
+              ((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
+          | CeAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+        method binding : binding -> 'self_type =
+          fun
+          [ BiNil _x0 -> o#_Loc_t _x0
+          | BiAnd _x0 _x1 _x2 -> ((o#_Loc_t _x0)#binding _x1)#binding _x2
+          | BiEq _x0 _x1 _x2 -> ((o#_Loc_t _x0)#patt _x1)#expr _x2
+          | BiAnt _x0 _x1 -> (o#_Loc_t _x0)#string _x1 ];
+      end;
+    value map_expr f =
+      object inherit map as super; method expr = fun x -> f (super#expr x);
+      end;
+    value map_patt f =
+      object inherit map as super; method patt = fun x -> f (super#patt x);
+      end;
+    value map_ctyp f =
+      object inherit map as super; method ctyp = fun x -> f (super#ctyp x);
+      end;
+    value map_str_item f =
+      object
+        inherit map as super;
+        method str_item = fun x -> f (super#str_item x);
+      end;
+    value map_sig_item f =
+      object
+        inherit map as super;
+        method sig_item = fun x -> f (super#sig_item x);
+      end;
+    value map_loc f =
+      object
+        inherit map as super;
+        method _Loc_t = fun x -> f (super#_Loc_t x);
+      end;
   end;
 
index 195057186f26e18b50d11b454e59c1e8ac537e6b..0985599a4f6a56c2dfb16c10b5353ba33d84fdea 100644 (file)
@@ -23,7 +23,7 @@ module R =
       struct
         let name = "Camlp4RevisedParserParser"
         let version =
-          "$Id: camlp4boot.ml,v 1.2 2007/02/26 16:32:47 ertai Exp $"
+          "$Id: Camlp4OCamlRevisedParser.ml,v 1.2.2.17 2007/05/10 14:24:22 pouillar Exp $"
       end
     module Make (Syntax : Sig.Camlp4Syntax) =
       struct
@@ -55,7 +55,6 @@ Old (no more supported) syntax:
         let _ = Gram.Entry.clear a_INT64
         let _ = Gram.Entry.clear a_LABEL
         let _ = Gram.Entry.clear a_LIDENT
-        let _ = Gram.Entry.clear a_LIDENT_or_operator
         let _ = Gram.Entry.clear a_NATIVEINT
         let _ = Gram.Entry.clear a_OPTLABEL
         let _ = Gram.Entry.clear a_STRING
@@ -68,6 +67,7 @@ Old (no more supported) syntax:
         let _ = Gram.Entry.clear match_case_quot
         let _ = Gram.Entry.clear binding
         let _ = Gram.Entry.clear binding_quot
+        let _ = Gram.Entry.clear rec_binding_quot
         let _ = Gram.Entry.clear class_declaration
         let _ = Gram.Entry.clear class_description
         let _ = Gram.Entry.clear class_expr
@@ -109,7 +109,6 @@ Old (no more supported) syntax:
         let _ = Gram.Entry.clear expr
         let _ = Gram.Entry.clear expr_eoi
         let _ = Gram.Entry.clear expr_quot
-        let _ = Gram.Entry.clear field
         let _ = Gram.Entry.clear field_expr
         let _ = Gram.Entry.clear fun_binding
         let _ = Gram.Entry.clear fun_def
@@ -161,10 +160,8 @@ Old (no more supported) syntax:
         let _ = Gram.Entry.clear patt_quot
         let _ = Gram.Entry.clear patt_tcon
         let _ = Gram.Entry.clear phrase
-        let _ = Gram.Entry.clear pipe_ctyp
         let _ = Gram.Entry.clear poly_type
         let _ = Gram.Entry.clear row_field
-        let _ = Gram.Entry.clear sem_ctyp
         let _ = Gram.Entry.clear sem_expr
         let _ = Gram.Entry.clear sem_expr_for_list
         let _ = Gram.Entry.clear sem_patt
@@ -229,8 +226,8 @@ Old (no more supported) syntax:
         let mkassert _loc =
           function
           | Ast.ExId (_, (Ast.IdUid (_, "False"))) -> Ast.ExAsf _loc
-          | (* this case take care about
-                                  the special assert false node *)
+          | (* this case takes care about
+                                   the special assert false node *)
               e -> Ast.ExAsr (_loc, e)
         let append_eLem el e = el @ [ e ]
         let mk_anti ?(c = "") n s = "\\$" ^ (n ^ (c ^ (":" ^ s)))
@@ -239,6 +236,20 @@ Old (no more supported) syntax:
           | (Ast.ExSem (_, _, _) | Ast.ExAnt (_, _) as e) ->
               Ast.ExSeq (_loc, e)
           | e -> e
+        let mksequence' _loc =
+          function
+          | (Ast.ExSem (_, _, _) as e) -> Ast.ExSeq (_loc, e)
+          | e -> e
+        let module_type_app mt1 mt2 =
+          match (mt1, mt2) with
+          | (Ast.MtId (_loc, i1), Ast.MtId (_, i2)) ->
+              Ast.MtId (_loc, Ast.IdApp (_loc, i1, i2))
+          | _ -> raise Stream.Failure
+        let module_type_acc mt1 mt2 =
+          match (mt1, mt2) with
+          | (Ast.MtId (_loc, i1), Ast.MtId (_, i2)) ->
+              Ast.MtId (_loc, Ast.IdAcc (_loc, i1, i2))
+          | _ -> raise Stream.Failure
         let bigarray_get _loc arr arg =
           let coords =
             match arg with
@@ -280,7 +291,7 @@ Old (no more supported) syntax:
                       c1),
                     c2),
                   c3)
-            | (* | coords -> <:expr< Bigarray.Genarray.get $arr$ [| $`list:coords$ |] >> ] *)
+            | (* | coords -> <:expr< Bigarray.Genarray.get $arr$ [| $list:coords$ |] >> ] *)
                 coords ->
                 Ast.ExApp (_loc,
                   Ast.ExApp (_loc,
@@ -381,35 +392,121 @@ Old (no more supported) syntax:
                      Ast.ExArr (_loc, coords)),
                    newval))
           | _ -> None
-        let choose_tvar tpl =
-          let abs = "abstract" in
-          let rec find_alpha n =
-            let ns = if n = 0 then "" else string_of_int n in
-            let s' = abs ^ ns in
-            let rec mem =
-              function
-              | (Ast.TyQuo (_, s) | Ast.TyQuP (_, s) | Ast.TyQuM (_, s)) ::
-                  xs -> (s = s') || (mem xs)
-              | [] -> false
-              | _ -> assert false
-            in if mem tpl then find_alpha (succ n) else s'
-          in find_alpha 0
+        let test_not_left_brace_nor_do =
+          Gram.Entry.of_parser "test_not_left_brace_nor_do"
+            (fun strm ->
+               match Stream.peek strm with
+               | Some (((KEYWORD "{" | KEYWORD "do"), _)) ->
+                   raise Stream.Failure
+               | _ -> ())
         let stopped_at _loc = Some (Loc.move_line 1 _loc)
         (* FIXME be more precise *)
-        (* value list1sep symb sep one cons =
-    let rec kont al =
-      parser
-      [ [: v = sep; a = symb; s :] -> kont (cons al (one a)) s
-      | [: :] -> al ]
-    in
-    parser [: a = symb; s :] -> kont (one a) s;
-
-  value sem_expr =
-    list1sep expr ";" (fun x -> x) (fun e1 e2 -> <:expr< $e1$; $e2$ >>)    *)
+        let symbolchar =
+          let list =
+            [ '!'; '$'; '%'; '&'; '*'; '+'; '-'; '.'; '/'; ':'; '<'; '=';
+              '>'; '?'; '@'; '^'; '|'; '~' ] in
+          let rec loop s i =
+            if i == (String.length s)
+            then true
+            else if List.mem s.[i] list then loop s (i + 1) else false
+          in loop
+        let _ =
+          let list = [ '!'; '?'; '~' ] in
+          let excl = [ "!="; "??" ]
+          in
+            Gram.Entry.setup_parser prefixop
+              (fun (__strm : _ Stream.t) ->
+                 match Stream.peek __strm with
+                 | Some (((KEYWORD x | SYMBOL x), _loc)) when
+                     (not (List.mem x excl)) &&
+                       (((String.length x) >= 2) &&
+                          ((List.mem x.[0] list) && (symbolchar x 1)))
+                     ->
+                     (Stream.junk __strm;
+                      Ast.ExId (_loc, Ast.IdLid (_loc, x)))
+                 | _ -> raise Stream.Failure)
+        let _ =
+          let list_ok =
+            [ "<"; ">"; "<="; ">="; "="; "<>"; "=="; "!="; "$" ] in
+          let list_first_char_ok = [ '='; '<'; '>'; '|'; '&'; '$'; '!' ] in
+          let excl = [ "<-"; "||"; "&&" ]
+          in
+            Gram.Entry.setup_parser infixop0
+              (fun (__strm : _ Stream.t) ->
+                 match Stream.peek __strm with
+                 | Some (((KEYWORD x | SYMBOL x), _loc)) when
+                     (List.mem x list_ok) ||
+                       ((not (List.mem x excl)) &&
+                          (((String.length x) >= 2) &&
+                             ((List.mem x.[0] list_first_char_ok) &&
+                                (symbolchar x 1))))
+                     ->
+                     (Stream.junk __strm;
+                      Ast.ExId (_loc, Ast.IdLid (_loc, x)))
+                 | _ -> raise Stream.Failure)
+        let _ =
+          let list = [ '@'; '^' ]
+          in
+            Gram.Entry.setup_parser infixop1
+              (fun (__strm : _ Stream.t) ->
+                 match Stream.peek __strm with
+                 | Some (((KEYWORD x | SYMBOL x), _loc)) when
+                     ((String.length x) >= 1) &&
+                       ((List.mem x.[0] list) && (symbolchar x 1))
+                     ->
+                     (Stream.junk __strm;
+                      Ast.ExId (_loc, Ast.IdLid (_loc, x)))
+                 | _ -> raise Stream.Failure)
+        let _ =
+          let list = [ '+'; '-' ]
+          in
+            Gram.Entry.setup_parser infixop2
+              (fun (__strm : _ Stream.t) ->
+                 match Stream.peek __strm with
+                 | Some (((KEYWORD x | SYMBOL x), _loc)) when
+                     (x <> "->") &&
+                       (((String.length x) >= 1) &&
+                          ((List.mem x.[0] list) && (symbolchar x 1)))
+                     ->
+                     (Stream.junk __strm;
+                      Ast.ExId (_loc, Ast.IdLid (_loc, x)))
+                 | _ -> raise Stream.Failure)
+        let _ =
+          let list = [ '*'; '/'; '%' ]
+          in
+            Gram.Entry.setup_parser infixop3
+              (fun (__strm : _ Stream.t) ->
+                 match Stream.peek __strm with
+                 | Some (((KEYWORD x | SYMBOL x), _loc)) when
+                     ((String.length x) >= 1) &&
+                       ((List.mem x.[0] list) &&
+                          (((x.[0] <> '*') ||
+                              (((String.length x) < 2) || (x.[1] <> '*')))
+                             && (symbolchar x 1)))
+                     ->
+                     (Stream.junk __strm;
+                      Ast.ExId (_loc, Ast.IdLid (_loc, x)))
+                 | _ -> raise Stream.Failure)
+        let _ =
+          Gram.Entry.setup_parser infixop4
+            (fun (__strm : _ Stream.t) ->
+               match Stream.peek __strm with
+               | Some (((KEYWORD x | SYMBOL x), _loc)) when
+                   ((String.length x) >= 2) &&
+                     ((x.[0] == '*') && ((x.[1] == '*') && (symbolchar x 2)))
+                   ->
+                   (Stream.junk __strm; Ast.ExId (_loc, Ast.IdLid (_loc, x)))
+               | _ -> raise Stream.Failure)
         (* transmit the context *)
         let _ =
           Gram.Entry.setup_parser sem_expr
-            (let symb = Gram.parse_tokens_after_filter expr in
+            (let symb1 = Gram.parse_tokens_after_filter expr in
+             let symb (__strm : _ Stream.t) =
+               match Stream.peek __strm with
+               | Some ((ANTIQUOT ((("list" as n)), s), _loc)) ->
+                   (Stream.junk __strm;
+                    Ast.ExAnt (_loc, mk_anti ~c: "expr;" n s))
+               | _ -> symb1 __strm in
              let rec kont al (__strm : _ Stream.t) =
                match Stream.peek __strm with
                | Some ((KEYWORD ";", _loc)) ->
@@ -422,17 +519,14 @@ Old (no more supported) syntax:
              in
                fun (__strm : _ Stream.t) ->
                  let a = symb __strm in kont a __strm)
-        (* sem_expr_for_list:
-      [ [ e = expr; ";"; el = SELF -> fun acc -> <:expr< [ $e$ :: $el acc$ ] >>
-        | e = expr -> fun acc -> <:expr< [ $e$ :: $acc$ ] >>
-      ] ]
-    ;
-    comma_expr:
-      [ [ e1 = SELF; ","; e2 = SELF -> <:expr< $e1$, $e2$ >>
-        | e = expr -> e ] ]
-    ;                                                                              *)
         let _ =
           let _ = (a_CHAR : 'a_CHAR Gram.Entry.t)
+          and _ = (do_sequence : 'do_sequence Gram.Entry.t)
+          and _ = (infixop4 : 'infixop4 Gram.Entry.t)
+          and _ = (infixop3 : 'infixop3 Gram.Entry.t)
+          and _ = (infixop2 : 'infixop2 Gram.Entry.t)
+          and _ = (infixop1 : 'infixop1 Gram.Entry.t)
+          and _ = (infixop0 : 'infixop0 Gram.Entry.t)
           and _ = (with_constr_quot : 'with_constr_quot Gram.Entry.t)
           and _ = (with_constr : 'with_constr Gram.Entry.t)
           and _ = (value_val : 'value_val Gram.Entry.t)
@@ -466,10 +560,8 @@ Old (no more supported) syntax:
           and _ = (sem_patt : 'sem_patt Gram.Entry.t)
           and _ = (sem_expr_for_list : 'sem_expr_for_list Gram.Entry.t)
           and _ = (sem_expr : 'sem_expr Gram.Entry.t)
-          and _ = (sem_ctyp : 'sem_ctyp Gram.Entry.t)
           and _ = (row_field : 'row_field Gram.Entry.t)
           and _ = (poly_type : 'poly_type Gram.Entry.t)
-          and _ = (pipe_ctyp : 'pipe_ctyp Gram.Entry.t)
           and _ = (phrase : 'phrase Gram.Entry.t)
           and _ = (patt_tcon : 'patt_tcon Gram.Entry.t)
           and _ = (patt_quot : 'patt_quot Gram.Entry.t)
@@ -524,7 +616,6 @@ Old (no more supported) syntax:
           and _ = (fun_def : 'fun_def Gram.Entry.t)
           and _ = (fun_binding : 'fun_binding Gram.Entry.t)
           and _ = (field_expr : 'field_expr Gram.Entry.t)
-          and _ = (field : 'field Gram.Entry.t)
           and _ = (expr_quot : 'expr_quot Gram.Entry.t)
           and _ = (expr_eoi : 'expr_eoi Gram.Entry.t)
           and _ = (expr : 'expr Gram.Entry.t)
@@ -590,7 +681,7 @@ Old (no more supported) syntax:
           and _ = (a_STRING : 'a_STRING Gram.Entry.t)
           and _ = (a_OPTLABEL : 'a_OPTLABEL Gram.Entry.t)
           and _ = (a_NATIVEINT : 'a_NATIVEINT Gram.Entry.t)
-          and _ = (a_LIDENT_or_operator : 'a_LIDENT_or_operator Gram.Entry.t)
+          and _ = (rec_binding_quot : 'rec_binding_quot Gram.Entry.t)
           and _ = (a_LIDENT : 'a_LIDENT Gram.Entry.t)
           and _ = (a_LABEL : 'a_LABEL Gram.Entry.t)
           and _ = (a_INT64 : 'a_INT64 Gram.Entry.t)
@@ -598,40 +689,19 @@ Old (no more supported) syntax:
           and _ = (a_INT : 'a_INT Gram.Entry.t)
           and _ = (a_FLOAT : 'a_FLOAT Gram.Entry.t) in
           let grammar_entry_create = Gram.Entry.mk in
-          let (* sem_expr:
-      [ [ e1 = SELF; ";"; e2 = SELF -> <:expr< $e1$; $e2$ >>
-        | e = expr -> e ] ]
-    ;                                                           *)
-            (* | i = opt_label; "("; p = patt_tcon; ")" -> *)
+          let (* Here it's LABEL and not tilde_label since ~a:b is different than ~a : b *)
+            (* Same remark for ?a:b *) infixop5 : 'infixop5 Gram.Entry.t =
+            grammar_entry_create "infixop5"
+          and (* | i = opt_label; "("; p = patt_tcon; ")" -> *)
             (* <:patt< ? $i$ : ($p$) >> *)
-            (* <:class_type< $virtual:mv$ $lid:i$ [ $t$ ] >> *)
-            (* | mv = opt_virtual; i = a_LIDENT -> *)
-            (* Ast.CeCon (_loc, mv, Ast.IdLid (_loc, i), Ast.ONone) *)
-            (* <:class_type< $lid:i$ >> *)
-            (* [ [ "virtual"; i = a_LIDENT; "["; t = comma_type_parameter; "]" ->
-            <:class_type< virtual $lid:i$ [ $t$ ] >>
-        | "virtual"; i = a_LIDENT ->
-            <:class_type< virtual $lid:i$ >>
-        | i = a_LIDENT; "["; t = comma_type_parameter; "]" ->
-            <:class_type< $lid:i$ [ $t$ ] >>
-        | i = a_LIDENT -> <:class_type< $lid:i$ >>
-      ] ]
-    ;                                                                       *)
-            (* "virtual"; i = a_LIDENT; "["; t = comma_type_parameter; "]" -> *)
-            (* <:class_expr< virtual $lid:i$ [ $t$ ] >> *)
-            (* | "virtual"; i = a_LIDENT -> *)
-            (* <:class_expr< virtual $lid:i$ >> *) (* | *)
-            (* <:class_expr< $virtual:mv$ $lid:i$ [ $t$ ] >> *)
-            (* <:class_expr< $lid:i$ [ $t$ ] >> *)
-            (* | mv = opt_virtual; i = a_LIDENT -> *)
-            (* Ast.CeCon (_loc, mv, Ast.IdLid (_loc, i), Ast.ONone) *)
-            (* <:class_expr< $lid:i$ >> *)
             (* | i = opt_label; "("; p = ipatt_tcon; ")" ->
             <:patt< ? $i$ : ($p$) >>
         | i = opt_label; "("; p = ipatt_tcon; "="; e = expr; ")" ->
             <:patt< ? $i$ : ($p$ = $e$) >>                             *)
             string_list : 'string_list Gram.Entry.t =
             grammar_entry_create "string_list"
+          and infixop6 : 'infixop6 Gram.Entry.t =
+            grammar_entry_create "infixop6"
           in
             (Gram.extend (module_expr : 'module_expr Gram.Entry.t)
                ((fun () ->
@@ -685,6 +755,18 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (i : 'module_longident) (_loc : Loc.t) ->
                                 (Ast.MeId (_loc, i) : 'module_expr))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.module_expr_tag :
+                                      'module_expr)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "mexp" | "anti" | "list"),
@@ -712,6 +794,18 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (e : 'expr) (_loc : Loc.t) ->
                                 (Ast.StExp (_loc, e) : 'str_item))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.str_item_tag :
+                                      'str_item)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "stri" | "anti" | "list"),
@@ -914,6 +1008,18 @@ Old (no more supported) syntax:
                                 (m : 'a_UIDENT) (_loc : Loc.t) ->
                                 (Ast.MbColEq (_loc, m, mt, me) :
                                   'module_binding))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.module_binding_tag :
+                                      'module_binding)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT ("", _) -> true
@@ -997,6 +1103,18 @@ Old (no more supported) syntax:
                              (fun (wc : 'with_constr) _ (mt : 'module_type)
                                 (_loc : Loc.t) ->
                                 (Ast.MtWit (_loc, mt, wc) : 'module_type)))) ]);
+                      (None, None,
+                       [ ([ Gram.Sself; Gram.Sself ],
+                          (Gram.Action.mk
+                             (fun (mt2 : 'module_type) (mt1 : 'module_type)
+                                (_loc : Loc.t) ->
+                                (module_type_app mt1 mt2 : 'module_type)))) ]);
+                      (None, None,
+                       [ ([ Gram.Sself; Gram.Skeyword "."; Gram.Sself ],
+                          (Gram.Action.mk
+                             (fun (mt2 : 'module_type) _ (mt1 : 'module_type)
+                                (_loc : Loc.t) ->
+                                (module_type_acc mt1 mt2 : 'module_type)))) ]);
                       (None, None,
                        [ ([ Gram.Skeyword "sig";
                             Gram.Snterm
@@ -1026,6 +1144,18 @@ Old (no more supported) syntax:
                              (fun (i : 'module_longident_with_app)
                                 (_loc : Loc.t) ->
                                 (Ast.MtId (_loc, i) : 'module_type))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.module_type_tag :
+                                      'module_type)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "mtyp" | "anti" | "list"),
@@ -1070,13 +1200,12 @@ Old (no more supported) syntax:
                                  (value_val : 'value_val Gram.Entry.t));
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (a_LIDENT_or_operator :
-                                   'a_LIDENT_or_operator Gram.Entry.t));
+                                 (a_LIDENT : 'a_LIDENT Gram.Entry.t));
                             Gram.Skeyword ":";
                             Gram.Snterm
                               (Gram.Entry.obj (ctyp : 'ctyp Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (t : 'ctyp) _ (i : 'a_LIDENT_or_operator) _
+                             (fun (t : 'ctyp) _ (i : 'a_LIDENT) _
                                 (_loc : Loc.t) ->
                                 (Ast.SgVal (_loc, i, t) : 'sig_item))));
                          ([ Gram.Skeyword "type";
@@ -1095,6 +1224,14 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (i : 'module_longident) _ (_loc : Loc.t) ->
                                 (Ast.SgOpn (_loc, i) : 'sig_item))));
+                         ([ Gram.Skeyword "module"; Gram.Skeyword "type";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (a_UIDENT : 'a_UIDENT Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (i : 'a_UIDENT) _ _ (_loc : Loc.t) ->
+                                (Ast.SgMty (_loc, i, Ast.MtNil _loc) :
+                                  'sig_item))));
                          ([ Gram.Skeyword "module"; Gram.Skeyword "type";
                             Gram.Snterm
                               (Gram.Entry.obj
@@ -1159,6 +1296,18 @@ Old (no more supported) syntax:
                              (fun (t : 'constructor_declaration) _
                                 (_loc : Loc.t) ->
                                 (Ast.SgExc (_loc, t) : 'sig_item))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.sig_item_tag :
+                                      'sig_item)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "sigi" | "anti" | "list"),
@@ -1223,6 +1372,18 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.MbCol (_loc, m, mt) :
                                   'module_rec_declaration))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.module_binding_tag :
+                                      'module_rec_declaration)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT
@@ -1306,6 +1467,18 @@ Old (no more supported) syntax:
                                        t) :
                                       'with_constr)
                                 | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.with_constr_tag :
+                                      'with_constr)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT
@@ -1349,44 +1522,51 @@ Old (no more supported) syntax:
                              (fun _ (cst : 'class_structure)
                                 (csp : 'opt_class_self_patt) _ (_loc : Loc.t)
                                 -> (Ast.ExObj (_loc, csp, cst) : 'expr))));
-                         ([ Gram.Skeyword "while"; Gram.Sself;
-                            Gram.Skeyword "do"; Gram.Skeyword "{";
+                         ([ Gram.Skeyword "while";
                             Gram.Snterm
                               (Gram.Entry.obj
                                  (sequence : 'sequence Gram.Entry.t));
-                            Gram.Skeyword "}" ],
+                            Gram.Skeyword "do";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (do_sequence : 'do_sequence Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (seq : 'sequence) _ _ (e : 'expr) _
+                             (fun (seq : 'do_sequence) _ (e : 'sequence) _
                                 (_loc : Loc.t) ->
-                                (Ast.ExWhi (_loc, e, seq) : 'expr))));
+                                (Ast.ExWhi (_loc, mksequence' _loc e, seq) :
+                                  'expr))));
                          ([ Gram.Skeyword "for";
                             Gram.Snterm
                               (Gram.Entry.obj
                                  (a_LIDENT : 'a_LIDENT Gram.Entry.t));
-                            Gram.Skeyword "="; Gram.Sself;
+                            Gram.Skeyword "=";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (sequence : 'sequence Gram.Entry.t));
                             Gram.Snterm
                               (Gram.Entry.obj
                                  (direction_flag :
                                    'direction_flag Gram.Entry.t));
-                            Gram.Sself; Gram.Skeyword "do";
-                            Gram.Skeyword "{";
                             Gram.Snterm
                               (Gram.Entry.obj
                                  (sequence : 'sequence Gram.Entry.t));
-                            Gram.Skeyword "}" ],
+                            Gram.Skeyword "do";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (do_sequence : 'do_sequence Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (seq : 'sequence) _ _ (e2 : 'expr)
-                                (df : 'direction_flag) (e1 : 'expr) _
+                             (fun (seq : 'do_sequence) _ (e2 : 'sequence)
+                                (df : 'direction_flag) (e1 : 'sequence) _
                                 (i : 'a_LIDENT) _ (_loc : Loc.t) ->
-                                (Ast.ExFor (_loc, i, e1, e2, df, seq) :
+                                (Ast.ExFor (_loc, i, mksequence' _loc e1,
+                                   mksequence' _loc e2, df, seq) :
                                   'expr))));
-                         ([ Gram.Skeyword "do"; Gram.Skeyword "{";
+                         ([ Gram.Skeyword "do";
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (sequence : 'sequence Gram.Entry.t));
-                            Gram.Skeyword "}" ],
+                                 (do_sequence : 'do_sequence Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (seq : 'sequence) _ _ (_loc : Loc.t) ->
+                             (fun (seq : 'do_sequence) _ (_loc : Loc.t) ->
                                 (mksequence _loc seq : 'expr))));
                          ([ Gram.Skeyword "if"; Gram.Sself;
                             Gram.Skeyword "then"; Gram.Sself;
@@ -1395,48 +1575,32 @@ Old (no more supported) syntax:
                              (fun (e3 : 'expr) _ (e2 : 'expr) _ (e1 : 'expr)
                                 _ (_loc : Loc.t) ->
                                 (Ast.ExIfe (_loc, e1, e2, e3) : 'expr))));
-                         ([ Gram.Skeyword "try"; Gram.Sself;
+                         ([ Gram.Skeyword "try";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (sequence : 'sequence Gram.Entry.t));
                             Gram.Skeyword "with";
                             Gram.Snterm
-                              (Gram.Entry.obj (ipatt : 'ipatt Gram.Entry.t));
-                            Gram.Skeyword "->"; Gram.Sself ],
+                              (Gram.Entry.obj
+                                 (match_case : 'match_case Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (p : 'ipatt) _ (e1 : 'expr)
-                                _ (_loc : Loc.t) ->
-                                (Ast.ExTry (_loc, e1,
-                                   Ast.McArr (_loc, p, Ast.ExNil _loc, e2)) :
+                             (fun (a : 'match_case) _ (e : 'sequence) _
+                                (_loc : Loc.t) ->
+                                (Ast.ExTry (_loc, mksequence' _loc e, a) :
                                   'expr))));
-                         ([ Gram.Skeyword "try"; Gram.Sself;
-                            Gram.Skeyword "with"; Gram.Skeyword "[";
+                         ([ Gram.Skeyword "match";
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (match_case : 'match_case Gram.Entry.t));
-                            Gram.Skeyword "]" ],
-                          (Gram.Action.mk
-                             (fun _ (a : 'match_case) _ _ (e : 'expr) _
-                                (_loc : Loc.t) ->
-                                (Ast.ExTry (_loc, e, a) : 'expr))));
-                         ([ Gram.Skeyword "match"; Gram.Sself;
+                                 (sequence : 'sequence Gram.Entry.t));
                             Gram.Skeyword "with";
-                            Gram.Snterm
-                              (Gram.Entry.obj (ipatt : 'ipatt Gram.Entry.t));
-                            Gram.Skeyword "->"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (p : 'ipatt) _ (e1 : 'expr)
-                                _ (_loc : Loc.t) ->
-                                (Ast.ExMat (_loc, e1,
-                                   Ast.McArr (_loc, p, Ast.ExNil _loc, e2)) :
-                                  'expr))));
-                         ([ Gram.Skeyword "match"; Gram.Sself;
-                            Gram.Skeyword "with"; Gram.Skeyword "[";
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (match_case : 'match_case Gram.Entry.t));
-                            Gram.Skeyword "]" ],
+                                 (match_case : 'match_case Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (a : 'match_case) _ _ (e : 'expr) _
+                             (fun (a : 'match_case) _ (e : 'sequence) _
                                 (_loc : Loc.t) ->
-                                (Ast.ExMat (_loc, e, a) : 'expr))));
+                                (Ast.ExMat (_loc, mksequence' _loc e, a) :
+                                  'expr))));
                          ([ Gram.Skeyword "fun";
                             Gram.Snterm
                               (Gram.Entry.obj
@@ -1452,13 +1616,17 @@ Old (no more supported) syntax:
                                    Ast.McArr (_loc, p, Ast.ExNil _loc, e)) :
                                   'expr))));
                          ([ Gram.Skeyword "fun"; Gram.Skeyword "[";
-                            Gram.Snterm
-                              (Gram.Entry.obj
-                                 (match_case : 'match_case Gram.Entry.t));
+                            Gram.Slist0sep
+                              (Gram.Snterm
+                                 (Gram.Entry.obj
+                                    (match_case0 : 'match_case0 Gram.Entry.t)),
+                              Gram.Skeyword "|");
                             Gram.Skeyword "]" ],
                           (Gram.Action.mk
-                             (fun _ (a : 'match_case) _ _ (_loc : Loc.t) ->
-                                (Ast.ExFun (_loc, a) : 'expr))));
+                             (fun _ (a : 'match_case0 list) _ _
+                                (_loc : Loc.t) ->
+                                (Ast.ExFun (_loc, Ast.mcOr_of_list a) :
+                                  'expr))));
                          ([ Gram.Skeyword "let"; Gram.Skeyword "module";
                             Gram.Snterm
                               (Gram.Entry.obj
@@ -1507,301 +1675,158 @@ Old (no more supported) syntax:
                                  | Some e -> e
                                  | None -> Ast.ExAss (_loc, e1, e2) : 'expr)))) ]);
                       ((Some "||"), (Some Camlp4.Sig.Grammar.RightA),
-                       [ ([ Gram.Sself; Gram.Skeyword "||"; Gram.Sself ],
+                       [ ([ Gram.Sself;
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (infixop6 : 'infixop6 Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "||")),
-                                     e1),
+                             (fun (e2 : 'expr) (op : 'infixop6) (e1 : 'expr)
+                                (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc, Ast.ExApp (_loc, op, e1),
                                    e2) :
                                   'expr)))) ]);
                       ((Some "&&"), (Some Camlp4.Sig.Grammar.RightA),
-                       [ ([ Gram.Sself; Gram.Skeyword "&&"; Gram.Sself ],
+                       [ ([ Gram.Sself;
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (infixop5 : 'infixop5 Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "&&")),
-                                     e1),
+                             (fun (e2 : 'expr) (op : 'infixop5) (e1 : 'expr)
+                                (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc, Ast.ExApp (_loc, op, e1),
                                    e2) :
                                   'expr)))) ]);
                       ((Some "<"), (Some Camlp4.Sig.Grammar.LeftA),
-                       [ ([ Gram.Sself; Gram.Skeyword "!="; Gram.Sself ],
+                       [ ([ Gram.Sself;
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (infixop0 : 'infixop0 Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "!=")),
-                                     e1),
+                             (fun (e2 : 'expr) (op : 'infixop0) (e1 : 'expr)
+                                (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc, Ast.ExApp (_loc, op, e1),
                                    e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "=="; Gram.Sself ],
+                                  'expr)))) ]);
+                      ((Some "^"), (Some Camlp4.Sig.Grammar.RightA),
+                       [ ([ Gram.Sself;
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (infixop1 : 'infixop1 Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "==")),
-                                     e1),
+                             (fun (e2 : 'expr) (op : 'infixop1) (e1 : 'expr)
+                                (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc, Ast.ExApp (_loc, op, e1),
                                    e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "<>"; Gram.Sself ],
+                                  'expr)))) ]);
+                      ((Some "+"), (Some Camlp4.Sig.Grammar.LeftA),
+                       [ ([ Gram.Sself;
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (infixop2 : 'infixop2 Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "<>")),
-                                     e1),
+                             (fun (e2 : 'expr) (op : 'infixop2) (e1 : 'expr)
+                                (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc, Ast.ExApp (_loc, op, e1),
                                    e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "="; Gram.Sself ],
+                                  'expr)))) ]);
+                      ((Some "*"), (Some Camlp4.Sig.Grammar.LeftA),
+                       [ ([ Gram.Sself;
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (infixop3 : 'infixop3 Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "=")),
-                                     e1),
+                             (fun (e2 : 'expr) (op : 'infixop3) (e1 : 'expr)
+                                (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc, Ast.ExApp (_loc, op, e1),
                                    e2) :
                                   'expr))));
-                         ([ Gram.Sself; Gram.Skeyword ">="; Gram.Sself ],
+                         ([ Gram.Sself; Gram.Skeyword "mod"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
                                 ->
                                 (Ast.ExApp (_loc,
                                    Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, ">=")),
+                                     Ast.ExId (_loc, Ast.IdLid (_loc, "mod")),
                                      e1),
                                    e2) :
                                   'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "<="; Gram.Sself ],
+                         ([ Gram.Sself; Gram.Skeyword "lxor"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
                                 ->
                                 (Ast.ExApp (_loc,
                                    Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "<=")),
+                                     Ast.ExId (_loc,
+                                       Ast.IdLid (_loc, "lxor")),
                                      e1),
                                    e2) :
                                   'expr))));
-                         ([ Gram.Sself; Gram.Skeyword ">"; Gram.Sself ],
+                         ([ Gram.Sself; Gram.Skeyword "lor"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
                                 ->
                                 (Ast.ExApp (_loc,
                                    Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, ">")),
+                                     Ast.ExId (_loc, Ast.IdLid (_loc, "lor")),
                                      e1),
                                    e2) :
                                   'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "<"; Gram.Sself ],
+                         ([ Gram.Sself; Gram.Skeyword "land"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
                                 ->
                                 (Ast.ExApp (_loc,
                                    Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "<")),
+                                     Ast.ExId (_loc,
+                                       Ast.IdLid (_loc, "land")),
                                      e1),
                                    e2) :
                                   'expr)))) ]);
-                      ((Some "^"), (Some Camlp4.Sig.Grammar.RightA),
-                       [ ([ Gram.Sself; Gram.Skeyword "@"; Gram.Sself ],
+                      ((Some "**"), (Some Camlp4.Sig.Grammar.RightA),
+                       [ ([ Gram.Sself;
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (infixop4 : 'infixop4 Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "@")),
-                                     e1),
+                             (fun (e2 : 'expr) (op : 'infixop4) (e1 : 'expr)
+                                (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc, Ast.ExApp (_loc, op, e1),
                                    e2) :
                                   'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "^^"; Gram.Sself ],
+                         ([ Gram.Sself; Gram.Skeyword "lsr"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
                                 ->
                                 (Ast.ExApp (_loc,
                                    Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "^^")),
+                                     Ast.ExId (_loc, Ast.IdLid (_loc, "lsr")),
                                      e1),
                                    e2) :
                                   'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "^"; Gram.Sself ],
+                         ([ Gram.Sself; Gram.Skeyword "lsl"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
                                 ->
                                 (Ast.ExApp (_loc,
                                    Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "^")),
+                                     Ast.ExId (_loc, Ast.IdLid (_loc, "lsl")),
                                      e1),
                                    e2) :
-                                  'expr)))) ]);
-                      ((Some "+"), (Some Camlp4.Sig.Grammar.LeftA),
-                       [ ([ Gram.Sself; Gram.Skeyword "-."; Gram.Sself ],
+                                  'expr))));
+                         ([ Gram.Sself; Gram.Skeyword "asr"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
                                 ->
                                 (Ast.ExApp (_loc,
                                    Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "-.")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "+."; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "+.")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "-"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "-")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "+"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "+")),
-                                     e1),
-                                   e2) :
-                                  'expr)))) ]);
-                      ((Some "*"), (Some Camlp4.Sig.Grammar.LeftA),
-                       [ ([ Gram.Sself; Gram.Skeyword "mod"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "mod")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "lxor"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc,
-                                       Ast.IdLid (_loc, "lxor")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "lor"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "lor")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "land"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc,
-                                       Ast.IdLid (_loc, "land")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "/."; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "/.")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "*."; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "*.")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "/"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "/")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "*"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "*")),
-                                     e1),
-                                   e2) :
-                                  'expr)))) ]);
-                      ((Some "**"), (Some Camlp4.Sig.Grammar.RightA),
-                       [ ([ Gram.Sself; Gram.Skeyword "lsr"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "lsr")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "lsl"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "lsl")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "asr"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "asr")),
-                                     e1),
-                                   e2) :
-                                  'expr))));
-                         ([ Gram.Sself; Gram.Skeyword "**"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (e2 : 'expr) _ (e1 : 'expr) (_loc : Loc.t)
-                                ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExApp (_loc,
-                                     Ast.ExId (_loc, Ast.IdLid (_loc, "**")),
+                                     Ast.ExId (_loc, Ast.IdLid (_loc, "asr")),
                                      e1),
                                    e2) :
                                   'expr)))) ]);
@@ -1863,13 +1888,6 @@ Old (no more supported) syntax:
                                 | OPTLABEL i ->
                                     (Ast.ExOlb (_loc, i, e) : 'expr)
                                 | _ -> assert false)));
-                         ([ Gram.Skeyword "~";
-                            Gram.Snterm
-                              (Gram.Entry.obj
-                                 (a_LIDENT : 'a_LIDENT Gram.Entry.t)) ],
-                          (Gram.Action.mk
-                             (fun (i : 'a_LIDENT) _ (_loc : Loc.t) ->
-                                (Ast.ExLab (_loc, i, Ast.ExNil _loc) : 'expr))));
                          ([ Gram.Stoken
                               (((function | LABEL _ -> true | _ -> false),
                                 "LABEL _"));
@@ -1880,6 +1898,13 @@ Old (no more supported) syntax:
                                 match __camlp4_0 with
                                 | LABEL i -> (Ast.ExLab (_loc, i, e) : 'expr)
                                 | _ -> assert false)));
+                         ([ Gram.Skeyword "~";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (a_LIDENT : 'a_LIDENT Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (i : 'a_LIDENT) _ (_loc : Loc.t) ->
+                                (Ast.ExLab (_loc, i, Ast.ExNil _loc) : 'expr))));
                          ([ Gram.Skeyword "~";
                             Gram.Snterm
                               (Gram.Entry.obj
@@ -1922,22 +1947,34 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.ExAre (_loc, e1, e2) : 'expr)))) ]);
                       ((Some "~-"), (Some Camlp4.Sig.Grammar.NonA),
-                       [ ([ Gram.Skeyword "~-."; Gram.Sself ],
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (prefixop : 'prefixop Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (e : 'expr) _ (_loc : Loc.t) ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExId (_loc, Ast.IdLid (_loc, "~-.")),
-                                   e) :
-                                  'expr))));
-                         ([ Gram.Skeyword "~-"; Gram.Sself ],
+                             (fun (e : 'expr) (f : 'prefixop) (_loc : Loc.t)
+                                -> (Ast.ExApp (_loc, f, e) : 'expr))));
+                         ([ Gram.Skeyword "!"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e : 'expr) _ (_loc : Loc.t) ->
-                                (Ast.ExApp (_loc,
-                                   Ast.ExId (_loc, Ast.IdLid (_loc, "~-")),
-                                   e) :
+                                (Ast.ExAcc (_loc, e,
+                                   Ast.ExId (_loc, Ast.IdLid (_loc, "val"))) :
                                   'expr)))) ]);
                       ((Some "simple"), None,
-                       [ ([ Gram.Skeyword "("; Gram.Sself; Gram.Skeyword ")" ],
+                       [ ([ Gram.Skeyword "begin"; Gram.Skeyword "end" ],
+                          (Gram.Action.mk
+                             (fun _ _ (_loc : Loc.t) ->
+                                (Ast.ExId (_loc, Ast.IdUid (_loc, "()")) :
+                                  'expr))));
+                         ([ Gram.Skeyword "begin";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (sequence : 'sequence Gram.Entry.t));
+                            Gram.Skeyword "end" ],
+                          (Gram.Action.mk
+                             (fun _ (seq : 'sequence) _ (_loc : Loc.t) ->
+                                (mksequence _loc seq : 'expr))));
+                         ([ Gram.Skeyword "("; Gram.Sself; Gram.Skeyword ")" ],
                           (Gram.Action.mk
                              (fun _ (e : 'expr) _ (_loc : Loc.t) ->
                                 (e : 'expr))));
@@ -1962,6 +1999,16 @@ Old (no more supported) syntax:
                              (fun _ (t2 : 'ctyp) _ (t : 'ctyp) _ (e : 'expr)
                                 _ (_loc : Loc.t) ->
                                 (Ast.ExCoe (_loc, e, t, t2) : 'expr))));
+                         ([ Gram.Skeyword "("; Gram.Sself; Gram.Skeyword ";";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (sequence : 'sequence Gram.Entry.t));
+                            Gram.Skeyword ")" ],
+                          (Gram.Action.mk
+                             (fun _ (seq : 'sequence) _ (e : 'expr) _
+                                (_loc : Loc.t) ->
+                                (mksequence _loc (Ast.ExSem (_loc, e, seq)) :
+                                  'expr))));
                          ([ Gram.Skeyword "("; Gram.Sself; Gram.Skeyword ",";
                             Gram.Snterm
                               (Gram.Entry.obj
@@ -1996,7 +2043,7 @@ Old (no more supported) syntax:
                          ([ Gram.Skeyword "{<"; Gram.Skeyword ">}" ],
                           (Gram.Action.mk
                              (fun _ _ (_loc : Loc.t) ->
-                                (Ast.ExOvr (_loc, Ast.BiNil _loc) : 'expr))));
+                                (Ast.ExOvr (_loc, Ast.RbNil _loc) : 'expr))));
                          ([ Gram.Skeyword "{"; Gram.Skeyword "("; Gram.Sself;
                             Gram.Skeyword ")"; Gram.Skeyword "with";
                             Gram.Snterm
@@ -2109,6 +2156,21 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (s : 'a_INT) (_loc : Loc.t) ->
                                 (Ast.ExInt (_loc, s) : 'expr))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("seq", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"seq\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("seq" as n)), s) ->
+                                    (Ast.ExSeq (_loc,
+                                       Ast.ExAnt (_loc,
+                                         mk_anti ~c: "expr" n s)) :
+                                      'expr)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT ("tup", _) -> true
@@ -2124,6 +2186,18 @@ Old (no more supported) syntax:
                                          mk_anti ~c: "expr" n s)) :
                                       'expr)
                                 | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("`bool", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"`bool\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("`bool" as n)), s) ->
+                                    (Ast.ExAnt (_loc, mk_anti n s) : 'expr)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("exp" | "" | "anti"), _) ->
@@ -2147,11 +2221,71 @@ Old (no more supported) syntax:
                                 ->
                                 match __camlp4_0 with
                                 | QUOTATION x ->
-                                    (Quotation.expand_expr
-                                       (Gram.parse_string expr) _loc x :
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.expr_tag :
                                       'expr)
                                 | _ -> assert false))) ]) ]))
                   ());
+             Gram.extend (do_sequence : 'do_sequence Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (test_not_left_brace_nor_do :
+                                   'test_not_left_brace_nor_do Gram.Entry.t));
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (sequence : 'sequence Gram.Entry.t));
+                            Gram.Skeyword "done" ],
+                          (Gram.Action.mk
+                             (fun _ (seq : 'sequence) _ (_loc : Loc.t) ->
+                                (seq : 'do_sequence))));
+                         ([ Gram.Skeyword "{";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (sequence : 'sequence Gram.Entry.t));
+                            Gram.Skeyword "}" ],
+                          (Gram.Action.mk
+                             (fun _ (seq : 'sequence) _ (_loc : Loc.t) ->
+                                (seq : 'do_sequence)))) ]) ]))
+                  ());
+             Gram.extend (infixop5 : 'infixop5 Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.srules infixop5
+                              [ ([ Gram.Skeyword "&&" ],
+                                 (Gram.Action.mk
+                                    (fun (x : Gram.Token.t) (_loc : Loc.t) ->
+                                       (Token.extract_string x : 'e__1))));
+                                ([ Gram.Skeyword "&" ],
+                                 (Gram.Action.mk
+                                    (fun (x : Gram.Token.t) (_loc : Loc.t) ->
+                                       (Token.extract_string x : 'e__1)))) ] ],
+                          (Gram.Action.mk
+                             (fun (x : 'e__1) (_loc : Loc.t) ->
+                                (Ast.ExId (_loc, Ast.IdLid (_loc, x)) :
+                                  'infixop5)))) ]) ]))
+                  ());
+             Gram.extend (infixop6 : 'infixop6 Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.srules infixop6
+                              [ ([ Gram.Skeyword "||" ],
+                                 (Gram.Action.mk
+                                    (fun (x : Gram.Token.t) (_loc : Loc.t) ->
+                                       (Token.extract_string x : 'e__2))));
+                                ([ Gram.Skeyword "or" ],
+                                 (Gram.Action.mk
+                                    (fun (x : Gram.Token.t) (_loc : Loc.t) ->
+                                       (Token.extract_string x : 'e__2)))) ] ],
+                          (Gram.Action.mk
+                             (fun (x : 'e__2) (_loc : Loc.t) ->
+                                (Ast.ExId (_loc, Ast.IdLid (_loc, x)) :
+                                  'infixop6)))) ]) ]))
+                  ());
              Gram.extend
                (sem_expr_for_list : 'sem_expr_for_list Gram.Entry.t)
                ((fun () ->
@@ -2193,6 +2327,20 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (e : 'expr) (_loc : Loc.t) ->
                                 (e : 'comma_expr))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.ExAnt (_loc,
+                                       mk_anti ~c: "expr," n s) :
+                                      'comma_expr)
+                                | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword ","; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (e2 : 'comma_expr) _ (e1 : 'comma_expr)
@@ -2229,6 +2377,20 @@ Old (no more supported) syntax:
                              (fun (el : 'sequence) _ (e : 'expr)
                                 (_loc : Loc.t) ->
                                 (Ast.ExSem (_loc, e, el) : 'sequence))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.ExAnt (_loc,
+                                       mk_anti ~c: "expr;" n s) :
+                                      'sequence)
+                                | _ -> assert false)));
                          ([ Gram.Skeyword "let";
                             Gram.Snterm
                               (Gram.Entry.obj
@@ -2240,11 +2402,11 @@ Old (no more supported) syntax:
                               [ ([ Gram.Skeyword ";" ],
                                  (Gram.Action.mk
                                     (fun (x : Gram.Token.t) (_loc : Loc.t) ->
-                                       (Token.extract_string x : 'e__1))));
+                                       (Token.extract_string x : 'e__3))));
                                 ([ Gram.Skeyword "in" ],
                                  (Gram.Action.mk
                                     (fun (x : Gram.Token.t) (_loc : Loc.t) ->
-                                       (Token.extract_string x : 'e__1)))) ];
+                                       (Token.extract_string x : 'e__3)))) ];
                             Gram.Sself ],
                           (Gram.Action.mk
                              (fun (el : 'sequence) _ (bi : 'binding)
@@ -2376,14 +2538,26 @@ Old (no more supported) syntax:
                ((fun () ->
                    (None,
                     [ (None, None,
-                       [ ([ Gram.Slist0sep
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj (ipatt : 'ipatt Gram.Entry.t));
+                            Gram.Skeyword "->";
+                            Gram.Snterm
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (e : 'expr) _ (p : 'ipatt) (_loc : Loc.t)
+                                ->
+                                (Ast.McArr (_loc, p, Ast.ExNil _loc, e) :
+                                  'match_case))));
+                         ([ Gram.Skeyword "[";
+                            Gram.Slist0sep
                               (Gram.Snterm
                                  (Gram.Entry.obj
                                     (match_case0 : 'match_case0 Gram.Entry.t)),
-                              Gram.Skeyword "|") ],
+                              Gram.Skeyword "|");
+                            Gram.Skeyword "]" ],
                           (Gram.Action.mk
-                             (fun (l : 'match_case0 list) (_loc : Loc.t) ->
-                                (Ast.mcOr_of_list l : 'match_case)))) ]) ]))
+                             (fun _ (l : 'match_case0 list) _ (_loc : Loc.t)
+                                -> (Ast.mcOr_of_list l : 'match_case)))) ]) ]))
                   ());
              Gram.extend (match_case0 : 'match_case0 Gram.Entry.t)
                ((fun () ->
@@ -2514,7 +2688,7 @@ Old (no more supported) syntax:
              Gram.extend (label_expr : 'label_expr Gram.Entry.t)
                ((fun () ->
                    (None,
-                    [ (None, (Some Camlp4.Sig.Grammar.LeftA),
+                    [ (None, None,
                        [ ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (label_longident :
@@ -2523,10 +2697,9 @@ Old (no more supported) syntax:
                               (Gram.Entry.obj
                                  (fun_binding : 'fun_binding Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (e : 'fun_binding) (p : 'label_longident)
+                             (fun (e : 'fun_binding) (i : 'label_longident)
                                 (_loc : Loc.t) ->
-                                (Ast.BiEq (_loc, Ast.PaId (_loc, p), e) :
-                                  'label_expr))));
+                                (Ast.RbEq (_loc, i, e) : 'label_expr))));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT ("list", _) -> true
@@ -2537,31 +2710,62 @@ Old (no more supported) syntax:
                                 ->
                                 match __camlp4_0 with
                                 | ANTIQUOT ((("list" as n)), s) ->
-                                    (Ast.BiAnt (_loc,
-                                       mk_anti ~c: "binding;" n s) :
+                                    (Ast.RbAnt (_loc,
+                                       mk_anti ~c: "rec_binding" n s) :
                                       'label_expr)
                                 | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
-                                 | ANTIQUOT (("" | "binding" | "anti"), _) ->
-                                     true
+                                 | ANTIQUOT (("" | "anti"), _) -> true
                                  | _ -> false),
-                                "ANTIQUOT ((\"\" | \"binding\" | \"anti\"), _)")) ],
+                                "ANTIQUOT ((\"\" | \"anti\"), _)"));
+                            Gram.Skeyword "=";
+                            Gram.Snterm
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (e : 'expr) _ (__camlp4_0 : Gram.Token.t)
+                                (_loc : Loc.t) ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("" | "anti" as n)), s) ->
+                                    (Ast.RbEq (_loc,
+                                       Ast.IdAnt (_loc,
+                                         mk_anti ~c: "ident" n s),
+                                       e) :
+                                      'label_expr)
+                                | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT (("" | "anti"), _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT ((\"\" | \"anti\"), _)")) ],
                           (Gram.Action.mk
                              (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
                                 ->
                                 match __camlp4_0 with
-                                | ANTIQUOT ((("" | "binding" | "anti" as n)),
-                                    s) ->
-                                    (Ast.BiAnt (_loc,
-                                       mk_anti ~c: "binding" n s) :
+                                | ANTIQUOT ((("" | "anti" as n)), s) ->
+                                    (Ast.RbAnt (_loc,
+                                       mk_anti ~c: "rec_binding" n s) :
+                                      'label_expr)
+                                | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("rec_binding", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"rec_binding\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("rec_binding" as n)), s) ->
+                                    (Ast.RbAnt (_loc,
+                                       mk_anti ~c: "rec_binding" n s) :
                                       'label_expr)
                                 | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword ";"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (b2 : 'label_expr) _ (b1 : 'label_expr)
                                 (_loc : Loc.t) ->
-                                (Ast.BiSem (_loc, b1, b2) : 'label_expr)))) ]) ]))
+                                (Ast.RbSem (_loc, b1, b2) : 'label_expr)))) ]) ]))
                   ());
              Gram.extend (fun_def : 'fun_def Gram.Entry.t)
                ((fun () ->
@@ -2765,8 +2969,8 @@ Old (no more supported) syntax:
                                 ->
                                 match __camlp4_0 with
                                 | QUOTATION x ->
-                                    (Quotation.expand_patt
-                                       (Gram.parse_string patt) _loc x :
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.patt_tag :
                                       'patt)
                                 | _ -> assert false)));
                          ([ Gram.Skeyword "_" ],
@@ -2973,6 +3177,20 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (p : 'patt) (_loc : Loc.t) ->
                                 (p : 'comma_patt))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.PaAnt (_loc,
+                                       mk_anti ~c: "patt," n s) :
+                                      'comma_patt)
+                                | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword ","; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (p2 : 'comma_patt) _ (p1 : 'comma_patt)
@@ -2988,6 +3206,20 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (p : 'patt) (_loc : Loc.t) ->
                                 (p : 'sem_patt))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.PaAnt (_loc,
+                                       mk_anti ~c: "patt;" n s) :
+                                      'sem_patt)
+                                | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword ";"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (p2 : 'sem_patt) _ (p1 : 'sem_patt)
@@ -3040,8 +3272,7 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (p : 'patt) _ (i : 'label_longident)
                                 (_loc : Loc.t) ->
-                                (Ast.PaEq (_loc, Ast.PaId (_loc, i), p) :
-                                  'label_patt))));
+                                (Ast.PaEq (_loc, i, p) : 'label_patt))));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT ("list", _) -> true
@@ -3056,6 +3287,18 @@ Old (no more supported) syntax:
                                        mk_anti ~c: "patt;" n s) :
                                       'label_patt)
                                 | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.patt_tag :
+                                      'label_patt)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "pat" | "anti"), _) ->
@@ -3125,6 +3368,18 @@ Old (no more supported) syntax:
                              (fun _ _ (_loc : Loc.t) ->
                                 (Ast.PaId (_loc, Ast.IdUid (_loc, "()")) :
                                   'ipatt))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.patt_tag :
+                                      'ipatt)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT ("tup", _) -> true
@@ -3183,6 +3438,20 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (p : 'ipatt) (_loc : Loc.t) ->
                                 (p : 'comma_ipatt))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.PaAnt (_loc,
+                                       mk_anti ~c: "patt," n s) :
+                                      'comma_ipatt)
+                                | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword ","; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (p2 : 'comma_ipatt) _ (p1 : 'comma_ipatt)
@@ -3203,8 +3472,33 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (p : 'ipatt) _ (i : 'label_longident)
                                 (_loc : Loc.t) ->
-                                (Ast.PaEq (_loc, Ast.PaId (_loc, i), p) :
-                                  'label_ipatt))));
+                                (Ast.PaEq (_loc, i, p) : 'label_ipatt))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.patt_tag :
+                                      'label_ipatt)
+                                | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.PaAnt (_loc,
+                                       mk_anti ~c: "patt;" n s) :
+                                      'label_ipatt)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "pat" | "anti"), _) ->
@@ -3245,7 +3539,7 @@ Old (no more supported) syntax:
                              (fun (cl : 'constrain list) (tk : 'opt_eq_ctyp)
                                 ((n, tpl) : 'type_ident_and_parameters)
                                 (_loc : Loc.t) ->
-                                (Ast.TyDcl (_loc, n, tpl, tk tpl, cl) :
+                                (Ast.TyDcl (_loc, n, tpl, tk, cl) :
                                   'type_declaration))));
                          ([ Gram.Sself; Gram.Skeyword "and"; Gram.Sself ],
                           (Gram.Action.mk
@@ -3253,6 +3547,18 @@ Old (no more supported) syntax:
                                 (t1 : 'type_declaration) (_loc : Loc.t) ->
                                 (Ast.TyAnd (_loc, t1, t2) :
                                   'type_declaration))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.ctyp_tag :
+                                      'type_declaration)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT ("list", _) -> true
@@ -3304,15 +3610,14 @@ Old (no more supported) syntax:
                        [ ([],
                           (Gram.Action.mk
                              (fun (_loc : Loc.t) ->
-                                (fun tpl -> Ast.TyQuo (_loc, choose_tvar tpl) :
-                                  'opt_eq_ctyp))));
+                                (Ast.TyNil _loc : 'opt_eq_ctyp))));
                          ([ Gram.Skeyword "=";
                             Gram.Snterm
                               (Gram.Entry.obj
                                  (type_kind : 'type_kind Gram.Entry.t)) ],
                           (Gram.Action.mk
                              (fun (tk : 'type_kind) _ (_loc : Loc.t) ->
-                                (fun _ -> tk : 'opt_eq_ctyp)))) ]) ]))
+                                (tk : 'opt_eq_ctyp)))) ]) ]))
                   ());
              Gram.extend (type_kind : 'type_kind Gram.Entry.t)
                ((fun () ->
@@ -3415,6 +3720,18 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (i : 'a_ident) _ (_loc : Loc.t) ->
                                 (Ast.TyQuo (_loc, i) : 'type_parameter))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.ctyp_tag :
+                                      'type_parameter)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "typ" | "anti"), _) ->
@@ -3656,6 +3973,18 @@ Old (no more supported) syntax:
                              (fun (i : 'a_LIDENT) (_loc : Loc.t) ->
                                 (Ast.TyId (_loc, Ast.IdLid (_loc, i)) :
                                   'ctyp))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.ctyp_tag :
+                                      'ctyp)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT ("id", _) -> true
@@ -3726,7 +4055,34 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (t2 : 'star_ctyp) _ (t1 : 'star_ctyp)
                                 (_loc : Loc.t) ->
-                                (Ast.TySta (_loc, t1, t2) : 'star_ctyp)))) ]) ]))
+                                (Ast.TySta (_loc, t1, t2) : 'star_ctyp))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.TyAnt (_loc,
+                                       mk_anti ~c: "ctyp*" n s) :
+                                      'star_ctyp)
+                                | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT (("" | "typ"), _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT ((\"\" | \"typ\"), _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("" | "typ" as n)), s) ->
+                                    (Ast.TyAnt (_loc, mk_anti ~c: "ctyp" n s) :
+                                      'star_ctyp)
+                                | _ -> assert false))) ]) ]))
                   ());
              Gram.extend
                (constructor_declarations :
@@ -3734,17 +4090,73 @@ Old (no more supported) syntax:
                ((fun () ->
                    (None,
                     [ (None, None,
-                       [ ([ Gram.Slist1sep
-                              (Gram.Snterm
-                                 (Gram.Entry.obj
-                                    (constructor_declaration :
-                                      'constructor_declaration Gram.Entry.t)),
-                              Gram.Skeyword "|") ],
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (a_UIDENT : 'a_UIDENT Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (s : 'a_UIDENT) (_loc : Loc.t) ->
+                                (Ast.TyId (_loc, Ast.IdUid (_loc, s)) :
+                                  'constructor_declarations))));
+                         ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (a_UIDENT : 'a_UIDENT Gram.Entry.t));
+                            Gram.Skeyword "of";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (constructor_arg_list :
+                                   'constructor_arg_list Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (l : 'constructor_declaration list)
+                             (fun (t : 'constructor_arg_list) _
+                                (s : 'a_UIDENT) (_loc : Loc.t) ->
+                                (Ast.TyOf (_loc,
+                                   Ast.TyId (_loc, Ast.IdUid (_loc, s)), t) :
+                                  'constructor_declarations))));
+                         ([ Gram.Sself; Gram.Skeyword "|"; Gram.Sself ],
+                          (Gram.Action.mk
+                             (fun (t2 : 'constructor_declarations) _
+                                (t1 : 'constructor_declarations)
                                 (_loc : Loc.t) ->
-                                (Ast.tyOr_of_list l :
-                                  'constructor_declarations)))) ]) ]))
+                                (Ast.TyOr (_loc, t1, t2) :
+                                  'constructor_declarations))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.ctyp_tag :
+                                      'constructor_declarations)
+                                | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.TyAnt (_loc,
+                                       mk_anti ~c: "ctyp|" n s) :
+                                      'constructor_declarations)
+                                | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT (("" | "typ"), _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT ((\"\" | \"typ\"), _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("" | "typ" as n)), s) ->
+                                    (Ast.TyAnt (_loc, mk_anti ~c: "ctyp" n s) :
+                                      'constructor_declarations)
+                                | _ -> assert false))) ]) ]))
                   ());
              Gram.extend
                (constructor_declaration :
@@ -3773,6 +4185,18 @@ Old (no more supported) syntax:
                                 (Ast.TyOf (_loc,
                                    Ast.TyId (_loc, Ast.IdUid (_loc, s)), t) :
                                   'constructor_declaration))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.ctyp_tag :
+                                      'constructor_declaration)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "typ"), _) -> true
@@ -3851,6 +4275,32 @@ Old (no more supported) syntax:
                                 (Ast.TyCol (_loc,
                                    Ast.TyId (_loc, Ast.IdLid (_loc, s)), t) :
                                   'label_declaration))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.ctyp_tag :
+                                      'label_declaration)
+                                | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.TyAnt (_loc,
+                                       mk_anti ~c: "ctyp;" n s) :
+                                      'label_declaration)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "typ"), _) -> true
@@ -3993,7 +4443,7 @@ Old (no more supported) syntax:
                  'module_longident_with_app Gram.Entry.t)
                ((fun () ->
                    (None,
-                    [ (None, None,
+                    [ ((Some "apply"), None,
                        [ ([ Gram.Sself; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (j : 'module_longident_with_app)
@@ -4001,7 +4451,7 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.IdApp (_loc, i, j) :
                                   'module_longident_with_app)))) ]);
-                      (None, None,
+                      ((Some "."), None,
                        [ ([ Gram.Sself; Gram.Skeyword "."; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (j : 'module_longident_with_app) _
@@ -4009,7 +4459,7 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.IdAcc (_loc, i, j) :
                                   'module_longident_with_app)))) ]);
-                      (None, None,
+                      ((Some "simple"), None,
                        [ ([ Gram.Skeyword "("; Gram.Sself; Gram.Skeyword ")" ],
                           (Gram.Action.mk
                              (fun _ (i : 'module_longident_with_app) _
@@ -4043,19 +4493,19 @@ Old (no more supported) syntax:
              Gram.extend (type_longident : 'type_longident Gram.Entry.t)
                ((fun () ->
                    (None,
-                    [ (None, None,
+                    [ ((Some "apply"), None,
                        [ ([ Gram.Sself; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (j : 'type_longident) (i : 'type_longident)
                                 (_loc : Loc.t) ->
                                 (Ast.IdApp (_loc, i, j) : 'type_longident)))) ]);
-                      (None, None,
+                      ((Some "."), None,
                        [ ([ Gram.Sself; Gram.Skeyword "."; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (j : 'type_longident) _
                                 (i : 'type_longident) (_loc : Loc.t) ->
                                 (Ast.IdAcc (_loc, i, j) : 'type_longident)))) ]);
-                      (None, None,
+                      ((Some "simple"), None,
                        [ ([ Gram.Skeyword "("; Gram.Sself; Gram.Skeyword ")" ],
                           (Gram.Action.mk
                              (fun _ (i : 'type_longident) _ (_loc : Loc.t) ->
@@ -4181,6 +4631,18 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.CeEq (_loc, ci, ce) :
                                   'class_declaration))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.class_expr_tag :
+                                      'class_declaration)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "cdcl" | "anti" | "list"),
@@ -4312,7 +4774,7 @@ Old (no more supported) syntax:
                (comma_type_parameter : 'comma_type_parameter Gram.Entry.t)
                ((fun () ->
                    (None,
-                    [ (None, (Some Camlp4.Sig.Grammar.LeftA),
+                    [ (None, None,
                        [ ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (type_parameter :
@@ -4320,6 +4782,20 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (t : 'type_parameter) (_loc : Loc.t) ->
                                 (t : 'comma_type_parameter))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.TyAnt (_loc,
+                                       mk_anti ~c: "ctyp," n s) :
+                                      'comma_type_parameter)
+                                | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword ","; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (t2 : 'comma_type_parameter) _
@@ -4354,6 +4830,20 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (t : 'ctyp) (_loc : Loc.t) ->
                                 (t : 'comma_ctyp))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.TyAnt (_loc,
+                                       mk_anti ~c: "ctyp," n s) :
+                                      'comma_ctyp)
+                                | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword ","; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (t2 : 'comma_ctyp) _ (t1 : 'comma_ctyp)
@@ -4399,14 +4889,16 @@ Old (no more supported) syntax:
                                 (Ast.CeLet (_loc, rf, bi, ce) : 'class_expr))));
                          ([ Gram.Skeyword "fun";
                             Gram.Snterm
-                              (Gram.Entry.obj (ipatt : 'ipatt Gram.Entry.t));
+                              (Gram.Entry.obj
+                                 (labeled_ipatt :
+                                   'labeled_ipatt Gram.Entry.t));
                             Gram.Snterm
                               (Gram.Entry.obj
                                  (class_fun_def :
                                    'class_fun_def Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (ce : 'class_fun_def) (p : 'ipatt) _
-                                (_loc : Loc.t) ->
+                             (fun (ce : 'class_fun_def) (p : 'labeled_ipatt)
+                                (_loc : Loc.t) ->
                                 (Ast.CeFun (_loc, p, ce) : 'class_expr)))) ]);
                       ((Some "apply"), (Some Camlp4.Sig.Grammar.NonA),
                        [ ([ Gram.Sself;
@@ -4452,6 +4944,18 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (ce : 'class_longident_and_param)
                                 (_loc : Loc.t) -> (ce : 'class_expr))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.class_expr_tag :
+                                      'class_expr)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "cexp" | "anti"), _) ->
@@ -4514,10 +5018,32 @@ Old (no more supported) syntax:
                                            (semi : 'semi Gram.Entry.t)) ],
                                     (Gram.Action.mk
                                        (fun _ (cst : 'class_str_item)
-                                          (_loc : Loc.t) -> (cst : 'e__2)))) ]) ],
+                                          (_loc : Loc.t) -> (cst : 'e__4)))) ]) ],
                           (Gram.Action.mk
-                             (fun (l : 'e__2 list) (_loc : Loc.t) ->
+                             (fun (l : 'e__4 list) (_loc : Loc.t) ->
                                 (Ast.crSem_of_list l : 'class_structure))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT (("" | "cst" | "anti" | "list"),
+                                     _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT ((\"\" | \"cst\" | \"anti\" | \"list\"), _)"));
+                            Gram.Snterm
+                              (Gram.Entry.obj (semi : 'semi Gram.Entry.t));
+                            Gram.Sself ],
+                          (Gram.Action.mk
+                             (fun (cst : 'class_structure) _
+                                (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
+                                match __camlp4_0 with
+                                | ANTIQUOT
+                                    ((("" | "cst" | "anti" | "list" as n)),
+                                    s) ->
+                                    (Ast.CrSem (_loc,
+                                       Ast.CrAnt (_loc,
+                                         mk_anti ~c: "class_str_item" n s),
+                                       cst) :
+                                      'class_structure)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "cst" | "anti" | "list"),
@@ -4603,6 +5129,22 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.CrMth (_loc, l, pf, e, topt) :
                                   'class_str_item))));
+                         ([ Gram.Skeyword "method";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (opt_private : 'opt_private Gram.Entry.t));
+                            Gram.Skeyword "virtual";
+                            Gram.Snterm
+                              (Gram.Entry.obj (label : 'label Gram.Entry.t));
+                            Gram.Skeyword ":";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (poly_type : 'poly_type Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (t : 'poly_type) _ (l : 'label) _
+                                (pf : 'opt_private) _ (_loc : Loc.t) ->
+                                (Ast.CrVir (_loc, l, pf, t) :
+                                  'class_str_item))));
                          ([ Gram.Skeyword "method"; Gram.Skeyword "virtual";
                             Gram.Snterm
                               (Gram.Entry.obj
@@ -4665,6 +5207,18 @@ Old (no more supported) syntax:
                              (fun (pb : 'opt_as_lident) (ce : 'class_expr) _
                                 (_loc : Loc.t) ->
                                 (Ast.CrInh (_loc, ce, pb) : 'class_str_item))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.class_str_item_tag :
+                                      'class_str_item)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "cst" | "anti" | "list"),
@@ -4796,6 +5350,18 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (ct : 'class_type_longident_and_param)
                                 (_loc : Loc.t) -> (ct : 'class_type))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.class_type_tag :
+                                      'class_type)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "ctyp" | "anti"), _) ->
@@ -4895,10 +5461,32 @@ Old (no more supported) syntax:
                                            (semi : 'semi Gram.Entry.t)) ],
                                     (Gram.Action.mk
                                        (fun _ (csg : 'class_sig_item)
-                                          (_loc : Loc.t) -> (csg : 'e__3)))) ]) ],
+                                          (_loc : Loc.t) -> (csg : 'e__5)))) ]) ],
                           (Gram.Action.mk
-                             (fun (l : 'e__3 list) (_loc : Loc.t) ->
+                             (fun (l : 'e__5 list) (_loc : Loc.t) ->
                                 (Ast.cgSem_of_list l : 'class_signature))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT (("" | "csg" | "anti" | "list"),
+                                     _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT ((\"\" | \"csg\" | \"anti\" | \"list\"), _)"));
+                            Gram.Snterm
+                              (Gram.Entry.obj (semi : 'semi Gram.Entry.t));
+                            Gram.Sself ],
+                          (Gram.Action.mk
+                             (fun (csg : 'class_signature) _
+                                (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
+                                match __camlp4_0 with
+                                | ANTIQUOT
+                                    ((("" | "csg" | "anti" | "list" as n)),
+                                    s) ->
+                                    (Ast.CgSem (_loc,
+                                       Ast.CgAnt (_loc,
+                                         mk_anti ~c: "class_sig_item" n s),
+                                       csg) :
+                                      'class_signature)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "csg" | "anti" | "list"),
@@ -4934,6 +5522,22 @@ Old (no more supported) syntax:
                              (fun (t2 : 'ctyp) _ (t1 : 'ctyp) _
                                 (_loc : Loc.t) ->
                                 (Ast.CgCtr (_loc, t1, t2) : 'class_sig_item))));
+                         ([ Gram.Skeyword "method";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (opt_private : 'opt_private Gram.Entry.t));
+                            Gram.Skeyword "virtual";
+                            Gram.Snterm
+                              (Gram.Entry.obj (label : 'label Gram.Entry.t));
+                            Gram.Skeyword ":";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (poly_type : 'poly_type Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (t : 'poly_type) _ (l : 'label) _
+                                (pf : 'opt_private) _ (_loc : Loc.t) ->
+                                (Ast.CgVir (_loc, l, pf, t) :
+                                  'class_sig_item))));
                          ([ Gram.Skeyword "method";
                             Gram.Snterm
                               (Gram.Entry.obj
@@ -4991,6 +5595,18 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (cs : 'class_type) _ (_loc : Loc.t) ->
                                 (Ast.CgInh (_loc, cs) : 'class_sig_item))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.class_sig_item_tag :
+                                      'class_sig_item)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "csg" | "anti" | "list"),
@@ -5013,7 +5629,10 @@ Old (no more supported) syntax:
                ((fun () ->
                    (None,
                     [ (None, None,
-                       [ ([ Gram.Skeyword "type" ],
+                       [ ([ Gram.Skeyword "constraint" ],
+                          (Gram.Action.mk
+                             (fun _ (_loc : Loc.t) -> (() : 'type_constraint))));
+                         ([ Gram.Skeyword "type" ],
                           (Gram.Action.mk
                              (fun _ (_loc : Loc.t) -> (() : 'type_constraint)))) ]) ]))
                   ());
@@ -5037,6 +5656,18 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.CtCol (_loc, ci, ct) :
                                   'class_description))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.class_type_tag :
+                                      'class_description)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "typ" | "anti" | "list"),
@@ -5081,6 +5712,18 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.CtEq (_loc, ci, ct) :
                                   'class_type_declaration))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.class_type_tag :
+                                      'class_type_declaration)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "typ" | "anti" | "list"),
@@ -5118,8 +5761,7 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (e : 'expr) _ (l : 'label) (_loc : Loc.t)
                                 ->
-                                (Ast.BiEq (_loc,
-                                   Ast.PaId (_loc, Ast.IdLid (_loc, l)), e) :
+                                (Ast.RbEq (_loc, Ast.IdLid (_loc, l), e) :
                                   'field_expr))));
                          ([ Gram.Stoken
                               (((function
@@ -5131,8 +5773,8 @@ Old (no more supported) syntax:
                                 ->
                                 match __camlp4_0 with
                                 | ANTIQUOT ((("list" as n)), s) ->
-                                    (Ast.BiAnt (_loc,
-                                       mk_anti ~c: "binding;" n s) :
+                                    (Ast.RbAnt (_loc,
+                                       mk_anti ~c: "rec_binding" n s) :
                                       'field_expr)
                                 | _ -> assert false)));
                          ([ Gram.Stoken
@@ -5146,53 +5788,20 @@ Old (no more supported) syntax:
                                 match __camlp4_0 with
                                 | ANTIQUOT ((("" | "bi" | "anti" as n)), s)
                                     ->
-                                    (Ast.BiAnt (_loc,
-                                       mk_anti ~c: "binding" n s) :
+                                    (Ast.RbAnt (_loc,
+                                       mk_anti ~c: "rec_binding" n s) :
                                       'field_expr)
                                 | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword ";"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (b2 : 'field_expr) _ (b1 : 'field_expr)
                                 (_loc : Loc.t) ->
-                                (Ast.BiSem (_loc, b1, b2) : 'field_expr)))) ]) ]))
+                                (Ast.RbSem (_loc, b1, b2) : 'field_expr)))) ]) ]))
                   ());
              Gram.extend (meth_list : 'meth_list Gram.Entry.t)
                ((fun () ->
                    (None,
-                    [ (None, None,
-                       [ ([ Gram.Snterm
-                              (Gram.Entry.obj (field : 'field Gram.Entry.t));
-                            Gram.Sopt (Gram.Skeyword ";") ],
-                          (Gram.Action.mk
-                             (fun _ (f : 'field) (_loc : Loc.t) ->
-                                (f : 'meth_list))));
-                         ([ Gram.Snterm
-                              (Gram.Entry.obj (field : 'field Gram.Entry.t));
-                            Gram.Skeyword ";"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (ml : 'meth_list) _ (f : 'field)
-                                (_loc : Loc.t) ->
-                                (Ast.TySem (_loc, f, ml) : 'meth_list)))) ]) ]))
-                  ());
-             Gram.extend (opt_meth_list : 'opt_meth_list Gram.Entry.t)
-               ((fun () ->
-                   (None,
-                    [ (None, None,
-                       [ ([],
-                          (Gram.Action.mk
-                             (fun (_loc : Loc.t) ->
-                                (Ast.TyNil _loc : 'opt_meth_list))));
-                         ([ Gram.Snterm
-                              (Gram.Entry.obj
-                                 (meth_list : 'meth_list Gram.Entry.t)) ],
-                          (Gram.Action.mk
-                             (fun (ml : 'meth_list) (_loc : Loc.t) ->
-                                (ml : 'opt_meth_list)))) ]) ]))
-                  ());
-             Gram.extend (field : 'field Gram.Entry.t)
-               ((fun () ->
-                   (None,
-                    [ (None, None,
+                    [ (None, (Some Camlp4.Sig.Grammar.LeftA),
                        [ ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (a_LIDENT : 'a_LIDENT Gram.Entry.t));
@@ -5205,7 +5814,33 @@ Old (no more supported) syntax:
                                 (_loc : Loc.t) ->
                                 (Ast.TyCol (_loc,
                                    Ast.TyId (_loc, Ast.IdLid (_loc, lab)), t) :
-                                  'field))));
+                                  'meth_list))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.ctyp_tag :
+                                      'meth_list)
+                                | _ -> assert false)));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.TyAnt (_loc,
+                                       mk_anti ~c: "ctyp;" n s) :
+                                      'meth_list)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "typ"), _) -> true
@@ -5217,8 +5852,29 @@ Old (no more supported) syntax:
                                 match __camlp4_0 with
                                 | ANTIQUOT ((("" | "typ" as n)), s) ->
                                     (Ast.TyAnt (_loc, mk_anti ~c: "ctyp" n s) :
-                                      'field)
-                                | _ -> assert false))) ]) ]))
+                                      'meth_list)
+                                | _ -> assert false)));
+                         ([ Gram.Sself; Gram.Skeyword ";"; Gram.Sself ],
+                          (Gram.Action.mk
+                             (fun (ml2 : 'meth_list) _ (ml1 : 'meth_list)
+                                (_loc : Loc.t) ->
+                                (Ast.TySem (_loc, ml1, ml2) : 'meth_list)))) ]) ]))
+                  ());
+             Gram.extend (opt_meth_list : 'opt_meth_list Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([],
+                          (Gram.Action.mk
+                             (fun (_loc : Loc.t) ->
+                                (Ast.TyNil _loc : 'opt_meth_list))));
+                         ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (meth_list : 'meth_list Gram.Entry.t));
+                            Gram.Sopt (Gram.Skeyword ";") ],
+                          (Gram.Action.mk
+                             (fun _ (ml : 'meth_list) (_loc : Loc.t) ->
+                                (ml : 'opt_meth_list)))) ]) ]))
                   ());
              Gram.extend (poly_type : 'poly_type Gram.Entry.t)
                ((fun () ->
@@ -5241,6 +5897,18 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (i : 'a_ident) _ (_loc : Loc.t) ->
                                 (Ast.TyQuo (_loc, i) : 'typevars))));
+                         ([ Gram.Stoken
+                              (((function | QUOTATION _ -> true | _ -> false),
+                                "QUOTATION _")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | QUOTATION x ->
+                                    (Quotation.expand _loc x Quotation.
+                                       DynAst.ctyp_tag :
+                                      'typevars)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "typ"), _) -> true
@@ -5307,6 +5975,20 @@ Old (no more supported) syntax:
                              (fun (t2 : 'row_field) _ (t1 : 'row_field)
                                 (_loc : Loc.t) ->
                                 (Ast.TyOr (_loc, t1, t2) : 'row_field))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.TyAnt (_loc,
+                                       mk_anti ~c: "ctyp|" n s) :
+                                      'row_field)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "typ"), _) -> true
@@ -5321,36 +6003,6 @@ Old (no more supported) syntax:
                                       'row_field)
                                 | _ -> assert false))) ]) ]))
                   ());
-             Gram.extend (sem_ctyp : 'sem_ctyp Gram.Entry.t)
-               ((fun () ->
-                   (None,
-                    [ (None, None,
-                       [ ([ Gram.Snterm
-                              (Gram.Entry.obj (ctyp : 'ctyp Gram.Entry.t)) ],
-                          (Gram.Action.mk
-                             (fun (t : 'ctyp) (_loc : Loc.t) ->
-                                (t : 'sem_ctyp))));
-                         ([ Gram.Sself; Gram.Skeyword ";"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (t2 : 'sem_ctyp) _ (t1 : 'sem_ctyp)
-                                (_loc : Loc.t) ->
-                                (Ast.TySem (_loc, t1, t2) : 'sem_ctyp)))) ]) ]))
-                  ());
-             Gram.extend (pipe_ctyp : 'pipe_ctyp Gram.Entry.t)
-               ((fun () ->
-                   (None,
-                    [ (None, None,
-                       [ ([ Gram.Snterm
-                              (Gram.Entry.obj (ctyp : 'ctyp Gram.Entry.t)) ],
-                          (Gram.Action.mk
-                             (fun (t : 'ctyp) (_loc : Loc.t) ->
-                                (t : 'pipe_ctyp))));
-                         ([ Gram.Sself; Gram.Skeyword "|"; Gram.Sself ],
-                          (Gram.Action.mk
-                             (fun (t2 : 'pipe_ctyp) _ (t1 : 'pipe_ctyp)
-                                (_loc : Loc.t) ->
-                                (Ast.TyOr (_loc, t1, t2) : 'pipe_ctyp)))) ]) ]))
-                  ());
              Gram.extend (amp_ctyp : 'amp_ctyp Gram.Entry.t)
                ((fun () ->
                    (None,
@@ -5360,6 +6012,20 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (t : 'ctyp) (_loc : Loc.t) ->
                                 (t : 'amp_ctyp))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT ("list", _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT (\"list\", _)")) ],
+                          (Gram.Action.mk
+                             (fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t)
+                                ->
+                                match __camlp4_0 with
+                                | ANTIQUOT ((("list" as n)), s) ->
+                                    (Ast.TyAnt (_loc,
+                                       mk_anti ~c: "ctyp&" n s) :
+                                      'amp_ctyp)
+                                | _ -> assert false)));
                          ([ Gram.Sself; Gram.Skeyword "&"; Gram.Sself ],
                           (Gram.Action.mk
                              (fun (t2 : 'amp_ctyp) _ (t1 : 'amp_ctyp)
@@ -5808,10 +6474,32 @@ Old (no more supported) syntax:
                                            (semi : 'semi Gram.Entry.t)) ],
                                     (Gram.Action.mk
                                        (fun _ (sg : 'sig_item) (_loc : Loc.t)
-                                          -> (sg : 'e__4)))) ]) ],
+                                          -> (sg : 'e__6)))) ]) ],
+                          (Gram.Action.mk
+                             (fun (l : 'e__6 list) (_loc : Loc.t) ->
+                                (Ast.sgSem_of_list l : 'sig_items))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT (("" | "sigi" | "anti" | "list"),
+                                     _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT ((\"\" | \"sigi\" | \"anti\" | \"list\"), _)"));
+                            Gram.Snterm
+                              (Gram.Entry.obj (semi : 'semi Gram.Entry.t));
+                            Gram.Sself ],
                           (Gram.Action.mk
-                             (fun (l : 'e__4 list) (_loc : Loc.t) ->
-                                (Ast.sgSem_of_list l : 'sig_items))));
+                             (fun (sg : 'sig_items) _
+                                (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
+                                match __camlp4_0 with
+                                | ANTIQUOT
+                                    ((("" | "sigi" | "anti" | "list" as n)),
+                                    s) ->
+                                    (Ast.SgSem (_loc,
+                                       Ast.SgAnt (_loc,
+                                         mk_anti n ~c: "sig_item" s),
+                                       sg) :
+                                      'sig_items)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "sigi" | "anti" | "list"),
@@ -5882,10 +6570,32 @@ Old (no more supported) syntax:
                                            (semi : 'semi Gram.Entry.t)) ],
                                     (Gram.Action.mk
                                        (fun _ (st : 'str_item) (_loc : Loc.t)
-                                          -> (st : 'e__5)))) ]) ],
+                                          -> (st : 'e__7)))) ]) ],
                           (Gram.Action.mk
-                             (fun (l : 'e__5 list) (_loc : Loc.t) ->
+                             (fun (l : 'e__7 list) (_loc : Loc.t) ->
                                 (Ast.stSem_of_list l : 'str_items))));
+                         ([ Gram.Stoken
+                              (((function
+                                 | ANTIQUOT (("" | "stri" | "anti" | "list"),
+                                     _) -> true
+                                 | _ -> false),
+                                "ANTIQUOT ((\"\" | \"stri\" | \"anti\" | \"list\"), _)"));
+                            Gram.Snterm
+                              (Gram.Entry.obj (semi : 'semi Gram.Entry.t));
+                            Gram.Sself ],
+                          (Gram.Action.mk
+                             (fun (st : 'str_items) _
+                                (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
+                                match __camlp4_0 with
+                                | ANTIQUOT
+                                    ((("" | "stri" | "anti" | "list" as n)),
+                                    s) ->
+                                    (Ast.StSem (_loc,
+                                       Ast.StAnt (_loc,
+                                         mk_anti n ~c: "str_item" s),
+                                       st) :
+                                      'str_items)
+                                | _ -> assert false)));
                          ([ Gram.Stoken
                               (((function
                                  | ANTIQUOT (("" | "stri" | "anti" | "list"),
@@ -6203,18 +6913,6 @@ Old (no more supported) syntax:
                                     (mk_anti n s : 'a_LIDENT)
                                 | _ -> assert false))) ]) ]))
                   ());
-             Gram.extend
-               (a_LIDENT_or_operator : 'a_LIDENT_or_operator Gram.Entry.t)
-               ((fun () ->
-                   (None,
-                    [ (None, None,
-                       [ ([ Gram.Snterm
-                              (Gram.Entry.obj
-                                 (a_LIDENT : 'a_LIDENT Gram.Entry.t)) ],
-                          (Gram.Action.mk
-                             (fun (x : 'a_LIDENT) (_loc : Loc.t) ->
-                                (x : 'a_LIDENT_or_operator)))) ]) ]))
-                  ());
              Gram.extend (a_LABEL : 'a_LABEL Gram.Entry.t)
                ((fun () ->
                    (None,
@@ -6421,7 +7119,11 @@ Old (no more supported) syntax:
                               (Gram.Entry.obj (patt : 'patt Gram.Entry.t)) ],
                           (Gram.Action.mk
                              (fun (y : 'patt) _ (x : 'patt) (_loc : Loc.t) ->
-                                (Ast.PaEq (_loc, x, y) : 'patt_quot))));
+                                (let i =
+                                   match x with
+                                   | Ast.PaAnt (loc, s) -> Ast.IdAnt (loc, s)
+                                   | p -> Ast.ident_of_patt p
+                                 in Ast.PaEq (_loc, i, y) : 'patt_quot))));
                          ([ Gram.Snterm
                               (Gram.Entry.obj (patt : 'patt Gram.Entry.t));
                             Gram.Skeyword ";";
@@ -6491,6 +7193,23 @@ Old (no more supported) syntax:
                              (fun (y : 'star_ctyp) _ (x : 'more_ctyp)
                                 (_loc : Loc.t) ->
                                 (Ast.TySta (_loc, x, y) : 'ctyp_quot))));
+                         ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (more_ctyp : 'more_ctyp Gram.Entry.t));
+                            Gram.Skeyword ":";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (more_ctyp : 'more_ctyp Gram.Entry.t));
+                            Gram.Skeyword ";";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (label_declaration :
+                                   'label_declaration Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (z : 'label_declaration) _ (y : 'more_ctyp)
+                                _ (x : 'more_ctyp) (_loc : Loc.t) ->
+                                (Ast.TySem (_loc, Ast.TyCol (_loc, x, y), z) :
+                                  'ctyp_quot))));
                          ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (more_ctyp : 'more_ctyp Gram.Entry.t));
@@ -6502,6 +7221,22 @@ Old (no more supported) syntax:
                              (fun (y : 'more_ctyp) _ (x : 'more_ctyp)
                                 (_loc : Loc.t) ->
                                 (Ast.TyCol (_loc, x, y) : 'ctyp_quot))));
+                         ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (more_ctyp : 'more_ctyp Gram.Entry.t));
+                            Gram.Skeyword "of"; Gram.Skeyword "&";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (amp_ctyp : 'amp_ctyp Gram.Entry.t));
+                            Gram.Skeyword "|";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (row_field : 'row_field Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (z : 'row_field) _ (y : 'amp_ctyp) _ _
+                                (x : 'more_ctyp) (_loc : Loc.t) ->
+                                (Ast.TyOr (_loc, Ast.TyOfAmp (_loc, x, y), z) :
+                                  'ctyp_quot))));
                          ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (more_ctyp : 'more_ctyp Gram.Entry.t));
@@ -6513,6 +7248,25 @@ Old (no more supported) syntax:
                              (fun (y : 'amp_ctyp) _ _ (x : 'more_ctyp)
                                 (_loc : Loc.t) ->
                                 (Ast.TyOfAmp (_loc, x, y) : 'ctyp_quot))));
+                         ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (more_ctyp : 'more_ctyp Gram.Entry.t));
+                            Gram.Skeyword "of";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (constructor_arg_list :
+                                   'constructor_arg_list Gram.Entry.t));
+                            Gram.Skeyword "|";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (constructor_declarations :
+                                   'constructor_declarations Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (z : 'constructor_declarations) _
+                                (y : 'constructor_arg_list) _
+                                (x : 'more_ctyp) (_loc : Loc.t) ->
+                                (Ast.TyOr (_loc, Ast.TyOf (_loc, x, y), z) :
+                                  'ctyp_quot))));
                          ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (more_ctyp : 'more_ctyp Gram.Entry.t));
@@ -6531,10 +7285,11 @@ Old (no more supported) syntax:
                             Gram.Skeyword "|";
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (pipe_ctyp : 'pipe_ctyp Gram.Entry.t)) ],
+                                 (constructor_declarations :
+                                   'constructor_declarations Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (y : 'pipe_ctyp) _ (x : 'more_ctyp)
-                                (_loc : Loc.t) ->
+                             (fun (y : 'constructor_declarations) _
+                                (x : 'more_ctyp) (_loc : Loc.t) ->
                                 (Ast.TyOr (_loc, x, y) : 'ctyp_quot))));
                          ([ Gram.Snterm
                               (Gram.Entry.obj
@@ -6542,9 +7297,10 @@ Old (no more supported) syntax:
                             Gram.Skeyword ";";
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (sem_ctyp : 'sem_ctyp Gram.Entry.t)) ],
+                                 (label_declaration :
+                                   'label_declaration Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (y : 'sem_ctyp) _ (x : 'more_ctyp)
+                             (fun (y : 'label_declaration) _ (x : 'more_ctyp)
                                 (_loc : Loc.t) ->
                                 (Ast.TySem (_loc, x, y) : 'ctyp_quot))));
                          ([ Gram.Snterm
@@ -6571,9 +7327,10 @@ Old (no more supported) syntax:
                              (fun (x : 'type_parameter) (_loc : Loc.t) ->
                                 (x : 'more_ctyp))));
                          ([ Gram.Snterm
-                              (Gram.Entry.obj (ctyp : 'ctyp Gram.Entry.t)) ],
+                              (Gram.Entry.obj
+                                 (type_kind : 'type_kind Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (x : 'ctyp) (_loc : Loc.t) ->
+                             (fun (x : 'type_kind) (_loc : Loc.t) ->
                                 (x : 'more_ctyp))));
                          ([ Gram.Skeyword "`";
                             Gram.Snterm
@@ -6663,7 +7420,11 @@ Old (no more supported) syntax:
                ((fun () ->
                    (None,
                     [ (None, None,
-                       [ ([ Gram.Snterm
+                       [ ([],
+                          (Gram.Action.mk
+                             (fun (_loc : Loc.t) ->
+                                (Ast.MtNil _loc : 'module_type_quot))));
+                         ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (module_type : 'module_type Gram.Entry.t)) ],
                           (Gram.Action.mk
@@ -6674,7 +7435,11 @@ Old (no more supported) syntax:
                ((fun () ->
                    (None,
                     [ (None, None,
-                       [ ([ Gram.Snterm
+                       [ ([],
+                          (Gram.Action.mk
+                             (fun (_loc : Loc.t) ->
+                                (Ast.MeNil _loc : 'module_expr_quot))));
+                         ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (module_expr : 'module_expr Gram.Entry.t)) ],
                           (Gram.Action.mk
@@ -6689,12 +7454,14 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (_loc : Loc.t) ->
                                 (Ast.McNil _loc : 'match_case_quot))));
-                         ([ Gram.Snterm
-                              (Gram.Entry.obj
-                                 (match_case : 'match_case Gram.Entry.t)) ],
+                         ([ Gram.Slist0sep
+                              (Gram.Snterm
+                                 (Gram.Entry.obj
+                                    (match_case0 : 'match_case0 Gram.Entry.t)),
+                              Gram.Skeyword "|") ],
                           (Gram.Action.mk
-                             (fun (x : 'match_case) (_loc : Loc.t) ->
-                                (x : 'match_case_quot)))) ]) ]))
+                             (fun (x : 'match_case0 list) (_loc : Loc.t) ->
+                                (Ast.mcOr_of_list x : 'match_case_quot)))) ]) ]))
                   ());
              Gram.extend (binding_quot : 'binding_quot Gram.Entry.t)
                ((fun () ->
@@ -6704,28 +7471,27 @@ Old (no more supported) syntax:
                           (Gram.Action.mk
                              (fun (_loc : Loc.t) ->
                                 (Ast.BiNil _loc : 'binding_quot))));
-                         ([ Gram.Snterm
-                              (Gram.Entry.obj
-                                 (label_expr : 'label_expr Gram.Entry.t)) ],
-                          (Gram.Action.mk
-                             (fun (x : 'label_expr) (_loc : Loc.t) ->
-                                (x : 'binding_quot))));
                          ([ Gram.Snterm
                               (Gram.Entry.obj
                                  (binding : 'binding Gram.Entry.t)) ],
                           (Gram.Action.mk
                              (fun (x : 'binding) (_loc : Loc.t) ->
-                                (x : 'binding_quot))));
-                         ([ Gram.Sself; Gram.Skeyword ";"; Gram.Sself ],
+                                (x : 'binding_quot)))) ]) ]))
+                  ());
+             Gram.extend (rec_binding_quot : 'rec_binding_quot Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([],
                           (Gram.Action.mk
-                             (fun (b2 : 'binding_quot) _ (b1 : 'binding_quot)
-                                (_loc : Loc.t) ->
-                                (Ast.BiSem (_loc, b1, b2) : 'binding_quot))));
-                         ([ Gram.Sself; Gram.Skeyword "and"; Gram.Sself ],
+                             (fun (_loc : Loc.t) ->
+                                (Ast.RbNil _loc : 'rec_binding_quot))));
+                         ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (label_expr : 'label_expr Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (b2 : 'binding_quot) _ (b1 : 'binding_quot)
-                                (_loc : Loc.t) ->
-                                (Ast.BiAnd (_loc, b1, b2) : 'binding_quot)))) ]) ]))
+                             (fun (x : 'label_expr) (_loc : Loc.t) ->
+                                (x : 'rec_binding_quot)))) ]) ]))
                   ());
              Gram.extend
                (module_binding_quot : 'module_binding_quot Gram.Entry.t)
@@ -6940,10 +7706,10 @@ Old (no more supported) syntax:
                                 (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
                                 match __camlp4_0 with
                                 | ANTIQUOT ((("virtual" as n)), s) ->
-                                    (Ast.CeCon (_loc,
+                                    (let anti =
                                        Ast.BAnt
-                                         (mk_anti ~c: "class_expr" n s),
-                                       i, ot) :
+                                         (mk_anti ~c: "class_expr" n s)
+                                     in Ast.CeCon (_loc, anti, i, ot) :
                                       'class_expr_quot)
                                 | _ -> assert false)));
                          ([ Gram.Skeyword "virtual";
@@ -7001,10 +7767,10 @@ Old (no more supported) syntax:
                                 (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
                                 match __camlp4_0 with
                                 | ANTIQUOT ((("virtual" as n)), s) ->
-                                    (Ast.CtCon (_loc,
+                                    (let anti =
                                        Ast.BAnt
-                                         (mk_anti ~c: "class_type" n s),
-                                       i, ot) :
+                                         (mk_anti ~c: "class_type" n s)
+                                     in Ast.CtCon (_loc, anti, i, ot) :
                                       'class_type_quot)
                                 | _ -> assert false)));
                          ([ Gram.Skeyword "virtual";
@@ -7167,7 +7933,7 @@ module Camlp4QuotationCommon =
       struct
         let name = "Camlp4QuotationCommon"
         let version =
-          "$Id: camlp4boot.ml,v 1.2 2007/02/26 16:32:47 ertai Exp $"
+          "$Id: Camlp4QuotationCommon.ml,v 1.1.4.5 2007/05/10 14:24:22 pouillar Exp $"
       end
     module Make
       (Syntax : Sig.Camlp4Syntax)
@@ -7320,6 +8086,14 @@ module Camlp4QuotationCommon =
                                      Ast.IdUid (_loc, "BiAnt"))),
                                  mloc _loc),
                                p)
+                         | "antirec_binding" ->
+                             Ast.PaApp (_loc,
+                               Ast.PaApp (_loc,
+                                 Ast.PaId (_loc,
+                                   Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                     Ast.IdUid (_loc, "RbAnt"))),
+                                 mloc _loc),
+                               p)
                          | "antimatch_case" ->
                              Ast.PaApp (_loc,
                                Ast.PaApp (_loc,
@@ -7396,6 +8170,12 @@ module Camlp4QuotationCommon =
                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Char"),
                                    Ast.IdLid (_loc, "escaped"))),
                                e)
+                         | "`bool" ->
+                             Ast.ExIfe (_loc, e,
+                               ME.meta_expr _loc
+                                 (Ast.ExId (_loc, Ast.IdUid (_loc, "True"))),
+                               ME.meta_expr _loc
+                                 (Ast.ExId (_loc, Ast.IdUid (_loc, "False"))))
                          | "liststr_item" ->
                              Ast.ExApp (_loc,
                                Ast.ExId (_loc,
@@ -7450,6 +8230,12 @@ module Camlp4QuotationCommon =
                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
                                    Ast.IdLid (_loc, "biSem_of_list"))),
                                e)
+                         | "listrec_binding" ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "rbSem_of_list"))),
+                               e)
                          | "listclass_type" ->
                              Ast.ExApp (_loc,
                                Ast.ExId (_loc,
@@ -7474,6 +8260,36 @@ module Camlp4QuotationCommon =
                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
                                    Ast.IdLid (_loc, "tyAnd_of_list"))),
                                e)
+                         | "listctyp;" ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "tySem_of_list"))),
+                               e)
+                         | "listctyp*" ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "tySta_of_list"))),
+                               e)
+                         | "listctyp|" ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "tyOr_of_list"))),
+                               e)
+                         | "listctyp," ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "tyCom_of_list"))),
+                               e)
+                         | "listctyp&" ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "tyAmp_of_list"))),
+                               e)
                          | "listwith_constr" ->
                              Ast.ExApp (_loc,
                                Ast.ExId (_loc,
@@ -7486,12 +8302,30 @@ module Camlp4QuotationCommon =
                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
                                    Ast.IdLid (_loc, "mcOr_of_list"))),
                                e)
+                         | "listpatt," ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "paCom_of_list"))),
+                               e)
                          | "listpatt;" ->
                              Ast.ExApp (_loc,
                                Ast.ExId (_loc,
                                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
                                    Ast.IdLid (_loc, "paSem_of_list"))),
                                e)
+                         | "listexpr," ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "exCom_of_list"))),
+                               e)
+                         | "listexpr;" ->
+                             Ast.ExApp (_loc,
+                               Ast.ExId (_loc,
+                                 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                   Ast.IdLid (_loc, "exSem_of_list"))),
+                               e)
                          | "antisig_item" ->
                              Ast.ExApp (_loc,
                                Ast.ExApp (_loc,
@@ -7596,6 +8430,14 @@ module Camlp4QuotationCommon =
                                      Ast.IdUid (_loc, "BiAnt"))),
                                  mloc _loc),
                                e)
+                         | "antirec_binding" ->
+                             Ast.ExApp (_loc,
+                               Ast.ExApp (_loc,
+                                 Ast.ExId (_loc,
+                                   Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
+                                     Ast.IdUid (_loc, "RbAnt"))),
+                                 mloc _loc),
+                               e)
                          | "antimatch_case" ->
                              Ast.ExApp (_loc,
                                Ast.ExApp (_loc,
@@ -7625,13 +8467,21 @@ module Camlp4QuotationCommon =
           end
         let add_quotation name entry mexpr mpatt =
           let entry_eoi = Gram.Entry.mk (Gram.Entry.name entry) in
+          let parse_quot_string entry loc s =
+            let q = !Camlp4_config.antiquotations in
+            let () = Camlp4_config.antiquotations := true in
+            let res = Gram.parse_string entry loc s in
+            let () = Camlp4_config.antiquotations := q in res in
           let expand_expr loc loc_name_opt s =
-            let ast = Gram.parse_string entry_eoi loc s in
+            let ast = parse_quot_string entry_eoi loc s in
             let () = MetaLoc.loc_name := loc_name_opt in
             let meta_ast = mexpr loc ast in
             let exp_ast = antiquot_expander#expr meta_ast in exp_ast in
+          let expand_str_item loc loc_name_opt s =
+            let exp_ast = expand_expr loc loc_name_opt s
+            in Ast.StExp (loc, exp_ast) in
           let expand_patt _loc loc_name_opt s =
-            let ast = Gram.parse_string entry_eoi _loc s in
+            let ast = parse_quot_string entry_eoi _loc s in
             let meta_ast = mpatt _loc ast in
             let exp_ast = antiquot_expander#patt meta_ast
             in
@@ -7670,8 +8520,9 @@ module Camlp4QuotationCommon =
                                 | EOI -> (x : 'entry_eoi)
                                 | _ -> assert false))) ]) ]))
                   ());
-             Quotation.add name
-               (Quotation.ExAst ((expand_expr, expand_patt))))
+             Quotation.add name Quotation.DynAst.expr_tag expand_expr;
+             Quotation.add name Quotation.DynAst.patt_tag expand_patt;
+             Quotation.add name Quotation.DynAst.str_item_tag expand_str_item)
         let _ =
           add_quotation "sig_item" sig_item_quot ME.meta_sig_item MP.
             meta_sig_item
@@ -7705,6 +8556,9 @@ module Camlp4QuotationCommon =
         let _ =
           add_quotation "binding" binding_quot ME.meta_binding MP.
             meta_binding
+        let _ =
+          add_quotation "rec_binding" rec_binding_quot ME.meta_rec_binding
+            MP.meta_rec_binding
         let _ =
           add_quotation "match_case" match_case_quot ME.meta_match_case MP.
             meta_match_case
@@ -7739,7 +8593,7 @@ module Q =
       struct
         let name = "Camlp4QuotationExpander"
         let version =
-          "$Id: camlp4boot.ml,v 1.2 2007/02/26 16:32:47 ertai Exp $"
+          "$Id: Camlp4QuotationExpander.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $"
       end
     module Make (Syntax : Sig.Camlp4Syntax) =
       struct
@@ -7773,7 +8627,7 @@ module Rp =
       struct
         let name = "Camlp4OCamlRevisedParserParser"
         let version =
-          "$Id: camlp4boot.ml,v 1.2 2007/02/26 16:32:47 ertai Exp $"
+          "$Id: Camlp4OCamlRevisedParserParser.ml,v 1.1.4.2 2007/04/05 18:06:36 pouillar Exp $"
       end
     module Make (Syntax : Sig.Camlp4Syntax) =
       struct
@@ -8157,7 +9011,11 @@ module Rp =
                           Ast.IdLid (_loc, "count"))),
                       Ast.ExId (_loc, Ast.IdLid (_loc, strm_n)))),
                   pc)
-            | None -> pc
+            | None -> pc in
+          let me =
+            match me with
+            | (Ast.ExSem (_loc, _, _) as e) -> Ast.ExSeq (_loc, e)
+            | e -> e
           in
             match me with
             | Ast.ExId (_, (Ast.IdLid (_, x))) when x = strm_n -> e
@@ -8297,7 +9155,10 @@ module Rp =
                ((fun () ->
                    ((Some (Camlp4.Sig.Grammar.Level "top")),
                     [ (None, None,
-                       [ ([ Gram.Skeyword "match"; Gram.Sself;
+                       [ ([ Gram.Skeyword "match";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (sequence : 'sequence Gram.Entry.t));
                             Gram.Skeyword "with"; Gram.Skeyword "parser";
                             Gram.Sopt
                               (Gram.Snterm
@@ -8310,8 +9171,8 @@ module Rp =
                                    'parser_case_list Gram.Entry.t)) ],
                           (Gram.Action.mk
                              (fun (pcl : 'parser_case_list)
-                                (po : 'parser_ipatt option) _ _ (e : 'expr) _
-                                (_loc : Loc.t) ->
+                                (po : 'parser_ipatt option) _ _
+                                (e : 'sequence) _ (_loc : Loc.t) ->
                                 (cparser_match _loc e po pcl : 'expr))));
                          ([ Gram.Skeyword "parser";
                             Gram.Sopt
@@ -8455,9 +9316,9 @@ module Rp =
                                              'stream_expr Gram.Entry.t)) ],
                                     (Gram.Action.mk
                                        (fun (e : 'stream_expr) _
-                                          (_loc : Loc.t) -> (e : 'e__6)))) ]) ],
+                                          (_loc : Loc.t) -> (e : 'e__8)))) ]) ],
                           (Gram.Action.mk
-                             (fun (eo : 'e__6 option)
+                             (fun (eo : 'e__8 option)
                                 (spc : 'stream_patt_comp) (_loc : Loc.t) ->
                                 ((spc, eo) : 'stream_patt_comp_err)))) ]) ]))
                   ());
@@ -8527,9 +9388,9 @@ module Rp =
                                              'stream_expr Gram.Entry.t)) ],
                                     (Gram.Action.mk
                                        (fun (e : 'stream_expr) _
-                                          (_loc : Loc.t) -> (e : 'e__7)))) ]) ],
+                                          (_loc : Loc.t) -> (e : 'e__9)))) ]) ],
                           (Gram.Action.mk
-                             (fun (eo : 'e__7 option) (p : 'patt) _
+                             (fun (eo : 'e__9 option) (p : 'patt) _
                                 (_loc : Loc.t) ->
                                 (SpTrm (_loc, p, eo) : 'stream_patt_comp)))) ]) ]))
                   ());
@@ -8670,7 +9531,7 @@ module G =
       struct
         let name = "Camlp4GrammarParser"
         let version =
-          "$Id: camlp4boot.ml,v 1.2 2007/02/26 16:32:47 ertai Exp $"
+          "$Id: Camlp4GrammarParser.ml,v 1.1.4.4 2007/04/20 14:57:28 pouillar Exp $"
       end
     module Make (Syntax : Sig.Camlp4Syntax) =
       struct
@@ -8779,7 +9640,7 @@ module G =
                (fun s (r, e) ->
                   if !r = Unused
                   then
-                    Warning.print e.name.loc
+                    print_warning e.name.loc
                       ("Unused local entry \"" ^ (s ^ "\""))
                   else ())
                ht)
@@ -8800,12 +9661,10 @@ module G =
                    prod = [ ({ pattern = None; styp = STtok _ } as s) ];
                    action = None } ->
                    {
-                     
                      prod =
                        [ {
                            (s)
                            with
-                           
                            pattern =
                              Some (Ast.PaId (_loc, Ast.IdLid (_loc, "x")));
                          } ];
@@ -8819,12 +9678,10 @@ module G =
                    }
                | { prod = [ ({ pattern = None } as s) ]; action = None } ->
                    {
-                     
                      prod =
                        [ {
                            (s)
                            with
-                           
                            pattern =
                              Some (Ast.PaId (_loc, Ast.IdLid (_loc, "x")));
                          } ];
@@ -9211,13 +10068,13 @@ module G =
               x ^ ("__" ^ (tvar_of_ident xs))
           | _ -> failwith "internal error in the Grammar extension"
         let mk_name _loc i =
-          {  expr = Ast.ExId (_loc, i); tvar = tvar_of_ident i; loc = _loc; }
+          { expr = Ast.ExId (_loc, i); tvar = tvar_of_ident i; loc = _loc; }
         let slist loc min sep symb = TXlist (loc, min, symb, sep)
         let sstoken _loc s =
           let n = mk_name _loc (Ast.IdLid (_loc, "a_" ^ s))
           in TXnterm (_loc, n, None)
         let mk_symbol p s t =
-          {  used = []; text = s; styp = t; pattern = Some p; }
+          { used = []; text = s; styp = t; pattern = Some p; }
         let sslist _loc min sep s =
           let rl =
             let r1 =
@@ -9227,7 +10084,7 @@ module G =
                   [ mk_symbol (Ast.PaId (_loc, Ast.IdLid (_loc, "a")))
                       (TXnterm (_loc, n, None)) (STquo (_loc, "a_list")) ] in
               let act = Ast.ExId (_loc, Ast.IdLid (_loc, "a"))
-              in {  prod = prod; action = Some act; } in
+              in { prod = prod; action = Some act; } in
             let r2 =
               let prod =
                 [ mk_symbol (Ast.PaId (_loc, Ast.IdLid (_loc, "a")))
@@ -9239,14 +10096,14 @@ module G =
                     Ast.IdAcc (_loc, Ast.IdUid (_loc, "Qast"),
                       Ast.IdUid (_loc, "List"))),
                   Ast.ExId (_loc, Ast.IdLid (_loc, "a")))
-              in {  prod = prod; action = Some act; }
+              in { prod = prod; action = Some act; }
             in [ r1; r2 ] in
           let used =
             match sep with | Some symb -> symb.used @ s.used | None -> s.used in
           let used = "a_list" :: used in
           let text = TXrules (_loc, srules _loc "a_list" rl "") in
           let styp = STquo (_loc, "a_list")
-          in {  used = used; text = text; styp = styp; pattern = None; }
+          in { used = used; text = text; styp = styp; pattern = None; }
         let ssopt _loc s =
           let rl =
             let r1 =
@@ -9256,19 +10113,17 @@ module G =
                   [ mk_symbol (Ast.PaId (_loc, Ast.IdLid (_loc, "a")))
                       (TXnterm (_loc, n, None)) (STquo (_loc, "a_opt")) ] in
               let act = Ast.ExId (_loc, Ast.IdLid (_loc, "a"))
-              in {  prod = prod; action = Some act; } in
+              in { prod = prod; action = Some act; } in
             let r2 =
               let s =
                 match s.text with
                 | TXkwd (_loc, _) | TXtok (_loc, _, _) ->
                     let rl =
                       [ {
-                          
                           prod =
                             [ {
                                 (s)
                                 with
-                                
                                 pattern =
                                   Some
                                     (Ast.PaId (_loc, Ast.IdLid (_loc, "x")));
@@ -9289,7 +10144,6 @@ module G =
                     let t = new_type_var ()
                     in
                       {
-                        
                         used = [];
                         text = TXrules (_loc, srules _loc t rl "");
                         styp = STquo (_loc, t);
@@ -9306,12 +10160,12 @@ module G =
                     Ast.IdAcc (_loc, Ast.IdUid (_loc, "Qast"),
                       Ast.IdUid (_loc, "Option"))),
                   Ast.ExId (_loc, Ast.IdLid (_loc, "a")))
-              in {  prod = prod; action = Some act; }
+              in { prod = prod; action = Some act; }
             in [ r1; r2 ] in
           let used = "a_opt" :: s.used in
           let text = TXrules (_loc, srules _loc "a_opt" rl "") in
           let styp = STquo (_loc, "a_opt")
-          in {  used = used; text = text; styp = styp; pattern = None; }
+          in { used = used; text = text; styp = styp; pattern = None; }
         let text_of_entry _loc e =
           let ent =
             let x = e.name in
@@ -9513,7 +10367,6 @@ module G =
               function
               | Ast.PaId (_loc, (Ast.IdLid (_, _))) -> Ast.PaAny _loc
               | Ast.PaAli (_, p, _) -> self#patt p
-              | Ast.PaEq (_loc, p1, p2) -> Ast.PaEq (_loc, p1, self#patt p2)
               | p -> super#patt p
           end
         let mk_tok _loc p t =
@@ -9533,7 +10386,7 @@ module G =
                     Ast.ExId (_loc, Ast.IdUid (_loc, "False"))))) in
           let descr = string_of_patt p' in
           let text = TXtok (_loc, match_fun, descr)
-          in {  used = []; text = text; styp = t; pattern = Some p; }
+          in { used = []; text = text; styp = t; pattern = Some p; }
         let symbol = Gram.Entry.mk "symbol"
         let check_not_tok s =
           match s with
@@ -9543,6 +10396,7 @@ module G =
                    ("Deprecated syntax, use a sub rule. " ^
                       "LIST0 STRING becomes LIST0 [ x = STRING -> x ]"))
           | _ -> ()
+        let _ = Camlp4_config.antiquotations := true
         let _ =
           let _ = (expr : 'expr Gram.Entry.t)
           and _ = (symbol : 'symbol Gram.Entry.t) in
@@ -9662,9 +10516,9 @@ module G =
                                              'semi_sep Gram.Entry.t)) ],
                                     (Gram.Action.mk
                                        (fun _ (e : 'entry) (_loc : Loc.t) ->
-                                          (e : 'e__8)))) ]) ],
+                                          (e : 'e__10)))) ]) ],
                           (Gram.Action.mk
-                             (fun (el : 'e__8 list)
+                             (fun (el : 'e__10 list)
                                 (global_list : 'global option)
                                 ((gram, g) : 'extend_header) (_loc : Loc.t)
                                 ->
@@ -9720,7 +10574,7 @@ module G =
                                     (fun (__camlp4_0 : Gram.Token.t)
                                        (_loc : Loc.t) ->
                                        match __camlp4_0 with
-                                       | UIDENT "GLOBAL" -> (() : 'e__9)
+                                       | UIDENT "GLOBAL" -> (() : 'e__11)
                                        | _ -> assert false)));
                                 ([ Gram.Stoken
                                      (((function
@@ -9731,7 +10585,7 @@ module G =
                                     (fun (__camlp4_0 : Gram.Token.t)
                                        (_loc : Loc.t) ->
                                        match __camlp4_0 with
-                                       | LIDENT ((_)) -> (() : 'e__9)
+                                       | LIDENT ((_)) -> (() : 'e__11)
                                        | _ -> assert false))) ] ],
                           (Gram.Action.mk
                              (fun _ (_loc : Loc.t) ->
@@ -9772,7 +10626,7 @@ module G =
                                     (fun (__camlp4_0 : Gram.Token.t)
                                        (_loc : Loc.t) ->
                                        match __camlp4_0 with
-                                       | UIDENT "GLOBAL" -> (() : 'e__10)
+                                       | UIDENT "GLOBAL" -> (() : 'e__12)
                                        | _ -> assert false)));
                                 ([ Gram.Stoken
                                      (((function
@@ -9783,7 +10637,7 @@ module G =
                                     (fun (__camlp4_0 : Gram.Token.t)
                                        (_loc : Loc.t) ->
                                        match __camlp4_0 with
-                                       | LIDENT ((_)) -> (() : 'e__10)
+                                       | LIDENT ((_)) -> (() : 'e__12)
                                        | _ -> assert false))) ] ],
                           (Gram.Action.mk
                              (fun _ (_loc : Loc.t) ->
@@ -9926,7 +10780,7 @@ module G =
                           (Gram.Action.mk
                              (fun (ll : 'level_list) (pos : 'position option)
                                 _ (n : 'name) (_loc : Loc.t) ->
-                                ({  name = n; pos = pos; levels = ll; } :
+                                ({ name = n; pos = pos; levels = ll; } :
                                   'entry)))) ]) ]))
                   ());
              Gram.extend (position : 'position Gram.Entry.t)
@@ -10077,7 +10931,7 @@ module G =
                                           ->
                                           (let x =
                                              Gram.Token.extract_string x
-                                           in x : 'e__11)))) ]);
+                                           in x : 'e__13)))) ]);
                             Gram.Sopt
                               (Gram.Snterm
                                  (Gram.Entry.obj
@@ -10087,9 +10941,9 @@ module G =
                                  (rule_list : 'rule_list Gram.Entry.t)) ],
                           (Gram.Action.mk
                              (fun (rules : 'rule_list) (ass : 'assoc option)
-                                (lab : 'e__11 option) (_loc : Loc.t) ->
-                                ({  label = lab; assoc = ass; rules = rules;
-                                 } : 'level)))) ]) ]))
+                                (lab : 'e__13 option) (_loc : Loc.t) ->
+                                ({ label = lab; assoc = ass; rules = rules; } :
+                                  'level)))) ]) ]))
                   ());
              Gram.extend (assoc : 'assoc Gram.Entry.t)
                ((fun () ->
@@ -10187,7 +11041,7 @@ module G =
                                    (semi_sep : 'semi_sep Gram.Entry.t))) ],
                           (Gram.Action.mk
                              (fun (psl : 'psymbol list) (_loc : Loc.t) ->
-                                ({  prod = psl; action = None; } : 'rule))));
+                                ({ prod = psl; action = None; } : 'rule))));
                          ([ Gram.Slist0sep
                               (Gram.Snterm
                                  (Gram.Entry.obj
@@ -10201,7 +11055,7 @@ module G =
                           (Gram.Action.mk
                              (fun (act : 'expr) _ (psl : 'psymbol list)
                                 (_loc : Loc.t) ->
-                                ({  prod = psl; action = Some act; } : 'rule)))) ]) ]))
+                                ({ prod = psl; action = Some act; } : 'rule)))) ]) ]))
                   ());
              Gram.extend (psymbol : 'psymbol Gram.Entry.t)
                ((fun () ->
@@ -10233,7 +11087,7 @@ module G =
                                             Ast.IdUid (_loc, u)),
                                           p))
                                        s.styp
-                                 | _ -> { (s) with  pattern = Some p; } :
+                                 | _ -> { (s) with pattern = Some p; } :
                                   'psymbol))));
                          ([ Gram.Stoken
                               (((function | LIDENT ((_)) -> true | _ -> false),
@@ -10258,10 +11112,10 @@ module G =
                                           | UIDENT "LEVEL" ->
                                               (let s =
                                                  Gram.Token.extract_string s
-                                               in s : 'e__12)
+                                               in s : 'e__14)
                                           | _ -> assert false))) ]) ],
                           (Gram.Action.mk
-                             (fun (lev : 'e__12 option) (i : Gram.Token.t)
+                             (fun (lev : 'e__14 option) (i : Gram.Token.t)
                                 (_loc : Loc.t) ->
                                 (let i = Gram.Token.extract_string i in
                                  let name =
@@ -10270,7 +11124,6 @@ module G =
                                  let styp = STquo (_loc, i)
                                  in
                                    {
-                                     
                                      used = [ i ];
                                      text = text;
                                      styp = styp;
@@ -10317,7 +11170,6 @@ module G =
                                          {
                                            (s)
                                            with
-                                           
                                            text = text;
                                            pattern = Some p';
                                          }
@@ -10325,7 +11177,6 @@ module G =
                                        {
                                          (s)
                                          with
-                                         
                                          pattern =
                                            Some
                                              (Ast.PaId (_loc,
@@ -10353,7 +11204,6 @@ module G =
                                      let text = TXopt (_loc, s.text)
                                      in
                                        {
-                                         
                                          used = s.used;
                                          text = text;
                                          styp = styp;
@@ -10382,10 +11232,10 @@ module G =
                                           (__camlp4_0 : Gram.Token.t)
                                           (_loc : Loc.t) ->
                                           match __camlp4_0 with
-                                          | UIDENT "SEP" -> (t : 'e__14)
+                                          | UIDENT "SEP" -> (t : 'e__16)
                                           | _ -> assert false))) ]) ],
                           (Gram.Action.mk
-                             (fun (sep : 'e__14 option) (s : 'symbol)
+                             (fun (sep : 'e__16 option) (s : 'symbol)
                                 (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
                                 match __camlp4_0 with
                                 | UIDENT "LIST1" ->
@@ -10400,7 +11250,6 @@ module G =
                                      let text = slist _loc true sep s
                                      in
                                        {
-                                         
                                          used = used;
                                          text = text;
                                          styp = styp;
@@ -10429,10 +11278,10 @@ module G =
                                           (__camlp4_0 : Gram.Token.t)
                                           (_loc : Loc.t) ->
                                           match __camlp4_0 with
-                                          | UIDENT "SEP" -> (t : 'e__13)
+                                          | UIDENT "SEP" -> (t : 'e__15)
                                           | _ -> assert false))) ]) ],
                           (Gram.Action.mk
-                             (fun (sep : 'e__13 option) (s : 'symbol)
+                             (fun (sep : 'e__15 option) (s : 'symbol)
                                 (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
                                 match __camlp4_0 with
                                 | UIDENT "LIST0" ->
@@ -10447,7 +11296,6 @@ module G =
                                      let text = slist _loc false sep s
                                      in
                                        {
-                                         
                                          used = used;
                                          text = text;
                                          styp = styp;
@@ -10482,13 +11330,12 @@ module G =
                                           | UIDENT "LEVEL" ->
                                               (let s =
                                                  Gram.Token.extract_string s
-                                               in s : 'e__16)
+                                               in s : 'e__18)
                                           | _ -> assert false))) ]) ],
                           (Gram.Action.mk
-                             (fun (lev : 'e__16 option) (n : 'name)
+                             (fun (lev : 'e__18 option) (n : 'name)
                                 (_loc : Loc.t) ->
                                 ({
-                                   
                                    used = [ n.tvar ];
                                    text = TXnterm (_loc, n, lev);
                                    styp = STquo (_loc, n.tvar);
@@ -10520,10 +11367,10 @@ module G =
                                           | UIDENT "LEVEL" ->
                                               (let s =
                                                  Gram.Token.extract_string s
-                                               in s : 'e__15)
+                                               in s : 'e__17)
                                           | _ -> assert false))) ]) ],
                           (Gram.Action.mk
-                             (fun (lev : 'e__15 option) (il : 'qualid) _
+                             (fun (lev : 'e__17 option) (il : 'qualid) _
                                 (i : Gram.Token.t) (_loc : Loc.t) ->
                                 (let i = Gram.Token.extract_string i in
                                  let n =
@@ -10532,7 +11379,6 @@ module G =
                                         il))
                                  in
                                    {
-                                     
                                      used = [ n.tvar ];
                                      text = TXnterm (_loc, n, lev);
                                      styp = STquo (_loc, n.tvar);
@@ -10547,7 +11393,6 @@ module G =
                                 (let s = Gram.Token.extract_string s
                                  in
                                    {
-                                     
                                      used = [];
                                      text = TXkwd (_loc, s);
                                      styp = STtok _loc;
@@ -10602,7 +11447,6 @@ module G =
                                          Ast.PaTup (_loc, Ast.PaAny _loc))
                                      in
                                        {
-                                         
                                          used = [];
                                          text = text;
                                          styp = STtok _loc;
@@ -10660,7 +11504,6 @@ module G =
                                  let t = new_type_var ()
                                  in
                                    {
-                                     
                                      used = used_of_rule_list rl;
                                      text =
                                        TXrules (_loc, srules _loc t rl "");
@@ -10679,7 +11522,6 @@ module G =
                                 match __camlp4_0 with
                                 | UIDENT "NEXT" ->
                                     ({
-                                       
                                        used = [];
                                        text = TXnext _loc;
                                        styp = STself (_loc, "NEXT");
@@ -10697,7 +11539,6 @@ module G =
                                 match __camlp4_0 with
                                 | UIDENT "SELF" ->
                                     ({
-                                       
                                        used = [];
                                        text = TXself _loc;
                                        styp = STself (_loc, "SELF");
@@ -10820,7 +11661,7 @@ module G =
                                  (fun (__camlp4_0 : Gram.Token.t)
                                     (_loc : Loc.t) ->
                                     match __camlp4_0 with
-                                    | UIDENT "SLIST1" -> (true : 'e__17)
+                                    | UIDENT "SLIST1" -> (true : 'e__19)
                                     | _ -> assert false)));
                              ([ Gram.Stoken
                                   (((function
@@ -10831,7 +11672,7 @@ module G =
                                  (fun (__camlp4_0 : Gram.Token.t)
                                     (_loc : Loc.t) ->
                                     match __camlp4_0 with
-                                    | UIDENT "SLIST0" -> (false : 'e__17)
+                                    | UIDENT "SLIST0" -> (false : 'e__19)
                                     | _ -> assert false))) ];
                          Gram.Sself;
                          Gram.Sopt
@@ -10849,11 +11690,11 @@ module G =
                                        (__camlp4_0 : Gram.Token.t)
                                        (_loc : Loc.t) ->
                                        match __camlp4_0 with
-                                       | UIDENT "SEP" -> (t : 'e__18)
+                                       | UIDENT "SEP" -> (t : 'e__20)
                                        | _ -> assert false))) ]) ],
                        (Gram.Action.mk
-                          (fun (sep : 'e__18 option) (s : 'symbol)
-                             (min : 'e__17) (_loc : Loc.t) ->
+                          (fun (sep : 'e__20 option) (s : 'symbol)
+                             (min : 'e__19) (_loc : Loc.t) ->
                              (sslist _loc min sep s : 'symbol)))) ]) ]))
                ())
         let sfold _loc n foldfun f e s =
@@ -10879,7 +11720,6 @@ module G =
               styp)
           in
             {
-              
               used = s.used;
               text = TXmeta (_loc, n, [ s.text ], e, t);
               styp = styp;
@@ -10908,7 +11748,6 @@ module G =
               styp)
           in
             {
-              
               used = s.used @ sep.used;
               text = TXmeta (_loc, n, [ s.text; sep.text ], e, t);
               styp = styp;
@@ -11072,12 +11911,14 @@ module M =
     (* Authors:
  * - Daniel de Rauglaudre: initial version
  * - Nicolas Pouillard: refactoring
+ * - Aleksey Nogin: extra features and bug fixes.
+ * - Christopher Conway: extra feature (-D<uident>=)
  *)
     module Id =
       struct
         let name = "Camlp4MacroParser"
         let version =
-          "$Id: camlp4boot.ml,v 1.2 2007/02/26 16:32:47 ertai Exp $"
+          "$Id: Camlp4MacroParser.ml,v 1.1.4.5 2007/04/26 19:51:49 pouillar Exp $"
       end
     (*
 Added statements:
@@ -11087,16 +11928,22 @@ Added statements:
      DEFINE <uident>
      DEFINE <uident> = <expression>
      DEFINE <uident> (<parameters>) = <expression>
-     IFDEF <uident> THEN <structure_items> (END | ENDIF)
-     IFDEF <uident> THEN <structure_items> ELSE <structure_items> (END | ENDIF)
-     IFNDEF <uident> THEN <structure_items> (END | ENDIF)
-     IFNDEF <uident> THEN <structure_items> ELSE <structure_items> (END | ENDIF)
+     IFDEF <uident> THEN <structure_items> [ ELSE <structure_items> ] (END | ENDIF)
+     IFNDEF <uident> THEN <structure_items> [ ELSE <structure_items> ] (END | ENDIF)
+     INCLUDE <string>
+
+  At toplevel (signature item):
+
+     DEFINE <uident>
+     IFDEF <uident> THEN <signature_items> [ ELSE <signature_items> ] (END | ENDIF)
+     IFNDEF <uident> THEN <signature_items> [ ELSE <signature_items> ] (END | ENDIF)
      INCLUDE <string>
 
   In expressions:
 
-     IFDEF <uident> THEN <expression> ELSE <expression> (END | ENDIF)
-     IFNDEF <uident> THEN <expression> ELSE <expression> (END | ENDIF)
+     IFDEF <uident> THEN <expression> [ ELSE <expression> ] (END | ENDIF)
+     IFNDEF <uident> THEN <expression> [ ELSE <expression> ] (END | ENDIF)
+     DEFINE <lident> = <expression> IN <expression>
      __FILE__
      __LOCATION__
 
@@ -11107,7 +11954,7 @@ Added statements:
 
   As Camlp4 options:
 
-     -D<uident>                      define <uident>
+     -D<uident> or -D<uident>=expr   define <uident> with optional value <expr>
      -U<uident>                      undefine it
      -I<dir>                         add <dir> to the search path for INCLUDE'd files
 
@@ -11116,7 +11963,13 @@ Added statements:
   the macro cannot be used as a pattern, there is an error message if
   it is used in a pattern.
 
+  You can also define a local macro in an expression usigng the DEFINE ... IN form.
+  Note that local macros have lowercase names and can not take parameters.
 
+  If a macro is defined to = NOTHING, and then used as an argument to a function,
+  this will be equivalent to function taking one less argument. Similarly,
+  passing NOTHING as an argument to a macro is equivalent to "erasing" the
+  corresponding parameter from the macro body.
 
   The toplevel statement INCLUDE <string> can be used to include a
   file containing macro definitions and also any other toplevel items.
@@ -11134,7 +11987,9 @@ Added statements:
         include Syntax
         type 'a item_or_def =
           | SdStr of 'a | SdDef of string * ((string list) * Ast.expr) option
-          | SdUnd of string | SdITE of string * 'a * 'a | SdInc of string
+          | SdUnd of string
+          | SdITE of string * ('a item_or_def) list * ('a item_or_def) list
+          | SdLazy of 'a Lazy.t
         let rec list_remove x =
           function
           | (y, _) :: l when y = x -> l
@@ -11142,17 +11997,6 @@ Added statements:
           | [] -> []
         let defined = ref []
         let is_defined i = List.mem_assoc i !defined
-        class reloc _loc =
-          object inherit Ast.map as super method _Loc_t = fun _ -> _loc end
-        class subst _loc env =
-          object inherit reloc _loc as super
-            method expr =
-              function
-              | (Ast.ExId (_, (Ast.IdLid (_, x))) |
-                   Ast.ExId (_, (Ast.IdUid (_, x)))
-                 as e) -> (try List.assoc x env with | Not_found -> e)
-              | e -> super#expr e
-          end
         let bad_patt _loc =
           Loc.raise _loc
             (Failure
@@ -11161,6 +12005,7 @@ Added statements:
           let rec loop =
             function
             | Ast.ExApp (_, e1, e2) -> Ast.PaApp (_loc, loop e1, loop e2)
+            | Ast.ExNil _ -> Ast.PaNil _loc
             | Ast.ExId (_, (Ast.IdLid (_, x))) ->
                 (try List.assoc x env
                  with | Not_found -> Ast.PaId (_loc, Ast.IdLid (_loc, x)))
@@ -11174,13 +12019,33 @@ Added statements:
             | Ast.ExRec (_, bi, (Ast.ExNil _)) ->
                 let rec substbi =
                   (function
-                   | Ast.BiSem (_, b1, b2) ->
+                   | Ast.RbSem (_, b1, b2) ->
                        Ast.PaSem (_loc, substbi b1, substbi b2)
-                   | Ast.BiEq (_, p, e) -> Ast.PaEq (_loc, p, loop e)
+                   | Ast.RbEq (_, i, e) -> Ast.PaEq (_loc, i, loop e)
                    | _ -> bad_patt _loc)
                 in Ast.PaRec (_loc, substbi bi)
             | _ -> bad_patt _loc
           in loop
+        class reloc _loc =
+          object inherit Ast.map as super method _Loc_t = fun _ -> _loc end
+        class subst _loc env =
+          object inherit reloc _loc as super
+            method expr =
+              function
+              | (Ast.ExId (_, (Ast.IdLid (_, x))) |
+                   Ast.ExId (_, (Ast.IdUid (_, x)))
+                 as e) ->
+                  (try List.assoc x env with | Not_found -> super#expr e)
+              | e -> super#expr e
+            method patt =
+              function
+              | (Ast.PaId (_, (Ast.IdLid (_, x))) |
+                   Ast.PaId (_, (Ast.IdUid (_, x)))
+                 as p) ->
+                  (try substp _loc [] (List.assoc x env)
+                   with | Not_found -> super#patt p)
+              | p -> super#patt p
+          end
         let incorrect_number loc l1 l2 =
           Loc.raise loc
             (Failure
@@ -11332,6 +12197,14 @@ Added statements:
                 | None -> ());
                defined := list_remove x !defined)
           with | Not_found -> ()
+        let parse_def s =
+          match Gram.parse_string expr (Loc.mk "<command line>") s with
+          | Ast.ExId (_, (Ast.IdUid (_, n))) -> define None n
+          | Ast.ExApp (_,
+              (Ast.ExApp (_, (Ast.ExId (_, (Ast.IdLid (_, "=")))),
+                 (Ast.ExId (_, (Ast.IdUid (_, n)))))),
+              e) -> define (Some (([], e))) n
+          | _ -> invalid_arg s
         (* This is a list of directories to search for INCLUDE statements. *)
         let include_dirs = ref []
         (* Add something to the above, make sure it ends with a slash. *)
@@ -11355,20 +12228,73 @@ Added statements:
               let ch = open_in file in
               let st = Stream.of_channel ch
               in Gram.parse rule (Loc.mk file) st
+        let rec execute_macro nil cons =
+          function
+          | SdStr i -> i
+          | SdDef (x, eo) -> (define eo x; nil)
+          | SdUnd x -> (undef x; nil)
+          | SdITE (i, l1, l2) ->
+              execute_macro_list nil cons (if is_defined i then l1 else l2)
+          | SdLazy l -> Lazy.force l
+        and execute_macro_list nil cons =
+          function
+          | [] -> nil
+          | hd :: tl -> (* The evaluation order is important here *)
+              let il1 = execute_macro nil cons hd in
+              let il2 = execute_macro_list nil cons tl in cons il1 il2
         let _ =
           let _ = (expr : 'expr Gram.Entry.t)
           and _ = (sig_item : 'sig_item Gram.Entry.t)
           and _ = (str_item : 'str_item Gram.Entry.t)
           and _ = (patt : 'patt Gram.Entry.t) in
           let grammar_entry_create = Gram.Entry.mk in
-          let endif : 'endif Gram.Entry.t = grammar_entry_create "endif"
+          let macro_def : 'macro_def Gram.Entry.t =
+            grammar_entry_create "macro_def"
           and uident : 'uident Gram.Entry.t = grammar_entry_create "uident"
           and opt_macro_value : 'opt_macro_value Gram.Entry.t =
             grammar_entry_create "opt_macro_value"
+          and endif : 'endif Gram.Entry.t = grammar_entry_create "endif"
+          and sglist : 'sglist Gram.Entry.t = grammar_entry_create "sglist"
+          and smlist : 'smlist Gram.Entry.t = grammar_entry_create "smlist"
+          and else_expr : 'else_expr Gram.Entry.t =
+            grammar_entry_create "else_expr"
+          and else_macro_def_sig : 'else_macro_def_sig Gram.Entry.t =
+            grammar_entry_create "else_macro_def_sig"
+          and else_macro_def : 'else_macro_def Gram.Entry.t =
+            grammar_entry_create "else_macro_def"
+          and macro_def_sig : 'macro_def_sig Gram.Entry.t =
+            grammar_entry_create "macro_def_sig"
           in
             (Gram.extend (str_item : 'str_item Gram.Entry.t)
                ((fun () ->
                    ((Some Camlp4.Sig.Grammar.First),
+                    [ (None, None,
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (macro_def : 'macro_def Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (x : 'macro_def) (_loc : Loc.t) ->
+                                (execute_macro (Ast.StNil _loc)
+                                   (fun a b -> Ast.StSem (_loc, a, b)) x :
+                                  'str_item)))) ]) ]))
+                  ());
+             Gram.extend (sig_item : 'sig_item Gram.Entry.t)
+               ((fun () ->
+                   ((Some Camlp4.Sig.Grammar.First),
+                    [ (None, None,
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (macro_def_sig :
+                                   'macro_def_sig Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (x : 'macro_def_sig) (_loc : Loc.t) ->
+                                (execute_macro (Ast.SgNil _loc)
+                                   (fun a b -> Ast.SgSem (_loc, a, b)) x :
+                                  'sig_item)))) ]) ]))
+                  ());
+             Gram.extend (macro_def : 'macro_def Gram.Entry.t)
+               ((fun () ->
+                   (None,
                     [ (None, None,
                        [ ([ Gram.Skeyword "INCLUDE";
                             Gram.Stoken
@@ -11377,103 +12303,228 @@ Added statements:
                           (Gram.Action.mk
                              (fun (fname : Gram.Token.t) _ (_loc : Loc.t) ->
                                 (let fname = Gram.Token.extract_string fname
-                                 in parse_include_file str_items fname :
-                                  'str_item))));
+                                 in
+                                   SdLazy
+                                     (lazy
+                                        (parse_include_file str_items fname)) :
+                                  'macro_def))));
                          ([ Gram.Skeyword "IFNDEF";
                             Gram.Snterm
                               (Gram.Entry.obj (uident : 'uident Gram.Entry.t));
                             Gram.Skeyword "THEN";
                             Gram.Snterm
-                              (Gram.Entry.obj
-                                 (str_items : 'str_items Gram.Entry.t));
-                            Gram.Skeyword "ELSE";
+                              (Gram.Entry.obj (smlist : 'smlist Gram.Entry.t));
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (str_items : 'str_items Gram.Entry.t));
-                            Gram.Snterm
-                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                                 (else_macro_def :
+                                   'else_macro_def Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (st2 : 'str_items) _ (st1 : 'str_items) _
+                             (fun (st1 : 'else_macro_def) (st2 : 'smlist) _
                                 (i : 'uident) _ (_loc : Loc.t) ->
-                                (if is_defined i then st2 else st1 :
-                                  'str_item))));
-                         ([ Gram.Skeyword "IFNDEF";
+                                (SdITE (i, st1, st2) : 'macro_def))));
+                         ([ Gram.Skeyword "IFDEF";
                             Gram.Snterm
                               (Gram.Entry.obj (uident : 'uident Gram.Entry.t));
                             Gram.Skeyword "THEN";
+                            Gram.Snterm
+                              (Gram.Entry.obj (smlist : 'smlist Gram.Entry.t));
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (str_items : 'str_items Gram.Entry.t));
+                                 (else_macro_def :
+                                   'else_macro_def Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (st2 : 'else_macro_def) (st1 : 'smlist) _
+                                (i : 'uident) _ (_loc : Loc.t) ->
+                                (SdITE (i, st1, st2) : 'macro_def))));
+                         ([ Gram.Skeyword "UNDEF";
                             Gram.Snterm
-                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                              (Gram.Entry.obj (uident : 'uident Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (i : 'uident) _ (_loc : Loc.t) ->
+                                (SdUnd i : 'macro_def))));
+                         ([ Gram.Skeyword "DEFINE";
+                            Gram.Snterm
+                              (Gram.Entry.obj (uident : 'uident Gram.Entry.t));
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (opt_macro_value :
+                                   'opt_macro_value Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (st : 'str_items) _ (i : 'uident) _
+                             (fun (def : 'opt_macro_value) (i : 'uident) _
                                 (_loc : Loc.t) ->
-                                (if is_defined i then Ast.StNil _loc else st :
-                                  'str_item))));
-                         ([ Gram.Skeyword "IFDEF";
+                                (SdDef (i, def) : 'macro_def)))) ]) ]))
+                  ());
+             Gram.extend (macro_def_sig : 'macro_def_sig Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.Skeyword "INCLUDE";
+                            Gram.Stoken
+                              (((function | STRING ((_)) -> true | _ -> false),
+                                "STRING _")) ],
+                          (Gram.Action.mk
+                             (fun (fname : Gram.Token.t) _ (_loc : Loc.t) ->
+                                (let fname = Gram.Token.extract_string fname
+                                 in
+                                   SdLazy
+                                     (lazy
+                                        (parse_include_file sig_items fname)) :
+                                  'macro_def_sig))));
+                         ([ Gram.Skeyword "IFNDEF";
                             Gram.Snterm
                               (Gram.Entry.obj (uident : 'uident Gram.Entry.t));
                             Gram.Skeyword "THEN";
                             Gram.Snterm
-                              (Gram.Entry.obj
-                                 (str_items : 'str_items Gram.Entry.t));
-                            Gram.Skeyword "ELSE";
+                              (Gram.Entry.obj (sglist : 'sglist Gram.Entry.t));
                             Gram.Snterm
                               (Gram.Entry.obj
-                                 (str_items : 'str_items Gram.Entry.t));
-                            Gram.Snterm
-                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                                 (else_macro_def_sig :
+                                   'else_macro_def_sig Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (st2 : 'str_items) _ (st1 : 'str_items) _
-                                (i : 'uident) _ (_loc : Loc.t) ->
-                                (if is_defined i then st1 else st2 :
-                                  'str_item))));
+                             (fun (sg1 : 'else_macro_def_sig) (sg2 : 'sglist)
+                                _ (i : 'uident) _ (_loc : Loc.t) ->
+                                (SdITE (i, sg1, sg2) : 'macro_def_sig))));
                          ([ Gram.Skeyword "IFDEF";
                             Gram.Snterm
                               (Gram.Entry.obj (uident : 'uident Gram.Entry.t));
                             Gram.Skeyword "THEN";
                             Gram.Snterm
-                              (Gram.Entry.obj
-                                 (str_items : 'str_items Gram.Entry.t));
+                              (Gram.Entry.obj (sglist : 'sglist Gram.Entry.t));
                             Gram.Snterm
-                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                              (Gram.Entry.obj
+                                 (else_macro_def_sig :
+                                   'else_macro_def_sig Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (st : 'str_items) _ (i : 'uident) _
-                                (_loc : Loc.t) ->
-                                (if is_defined i then st else Ast.StNil _loc :
-                                  'str_item))));
+                             (fun (sg2 : 'else_macro_def_sig) (sg1 : 'sglist)
+                                _ (i : 'uident) _ (_loc : Loc.t) ->
+                                (SdITE (i, sg1, sg2) : 'macro_def_sig))));
                          ([ Gram.Skeyword "UNDEF";
                             Gram.Snterm
                               (Gram.Entry.obj (uident : 'uident Gram.Entry.t)) ],
                           (Gram.Action.mk
                              (fun (i : 'uident) _ (_loc : Loc.t) ->
-                                ((undef i; Ast.StNil _loc) : 'str_item))));
+                                (SdUnd i : 'macro_def_sig))));
                          ([ Gram.Skeyword "DEFINE";
                             Gram.Snterm
-                              (Gram.Entry.obj (uident : 'uident Gram.Entry.t));
+                              (Gram.Entry.obj (uident : 'uident Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (i : 'uident) _ (_loc : Loc.t) ->
+                                (SdDef (i, None) : 'macro_def_sig)))) ]) ]))
+                  ());
+             Gram.extend (else_macro_def : 'else_macro_def Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun _ (_loc : Loc.t) -> ([] : 'else_macro_def))));
+                         ([ Gram.Skeyword "ELSE";
                             Gram.Snterm
-                              (Gram.Entry.obj
-                                 (opt_macro_value :
-                                   'opt_macro_value Gram.Entry.t)) ],
+                              (Gram.Entry.obj (smlist : 'smlist Gram.Entry.t));
+                            Gram.Snterm
+                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (def : 'opt_macro_value) (i : 'uident) _
-                                (_loc : Loc.t) ->
-                                ((define def i; Ast.StNil _loc) : 'str_item)))) ]) ]))
+                             (fun _ (st : 'smlist) _ (_loc : Loc.t) ->
+                                (st : 'else_macro_def)))) ]) ]))
                   ());
-             Gram.extend (sig_item : 'sig_item Gram.Entry.t)
+             Gram.extend
+               (else_macro_def_sig : 'else_macro_def_sig Gram.Entry.t)
                ((fun () ->
-                   ((Some Camlp4.Sig.Grammar.First),
+                   (None,
                     [ (None, None,
-                       [ ([ Gram.Skeyword "INCLUDE";
-                            Gram.Stoken
-                              (((function | STRING ((_)) -> true | _ -> false),
-                                "STRING _")) ],
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (fname : Gram.Token.t) _ (_loc : Loc.t) ->
-                                (let fname = Gram.Token.extract_string fname
-                                 in parse_include_file sig_items fname :
-                                  'sig_item)))) ]) ]))
+                             (fun _ (_loc : Loc.t) ->
+                                ([] : 'else_macro_def_sig))));
+                         ([ Gram.Skeyword "ELSE";
+                            Gram.Snterm
+                              (Gram.Entry.obj (sglist : 'sglist Gram.Entry.t));
+                            Gram.Snterm
+                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun _ (st : 'sglist) _ (_loc : Loc.t) ->
+                                (st : 'else_macro_def_sig)))) ]) ]))
+                  ());
+             Gram.extend (else_expr : 'else_expr Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.Snterm
+                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun _ (_loc : Loc.t) ->
+                                (Ast.ExId (_loc, Ast.IdUid (_loc, "()")) :
+                                  'else_expr))));
+                         ([ Gram.Skeyword "ELSE";
+                            Gram.Snterm
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t));
+                            Gram.Snterm
+                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun _ (e : 'expr) _ (_loc : Loc.t) ->
+                                (e : 'else_expr)))) ]) ]))
+                  ());
+             Gram.extend (smlist : 'smlist Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.Slist1
+                              (Gram.srules smlist
+                                 [ ([ Gram.Snterm
+                                        (Gram.Entry.obj
+                                           (str_item :
+                                             'str_item Gram.Entry.t));
+                                      Gram.Snterm
+                                        (Gram.Entry.obj
+                                           (semi : 'semi Gram.Entry.t)) ],
+                                    (Gram.Action.mk
+                                       (fun _ (si : 'str_item) (_loc : Loc.t)
+                                          -> (SdStr si : 'e__21))));
+                                   ([ Gram.Snterm
+                                        (Gram.Entry.obj
+                                           (macro_def :
+                                             'macro_def Gram.Entry.t));
+                                      Gram.Snterm
+                                        (Gram.Entry.obj
+                                           (semi : 'semi Gram.Entry.t)) ],
+                                    (Gram.Action.mk
+                                       (fun _ (d : 'macro_def) (_loc : Loc.t)
+                                          -> (d : 'e__21)))) ]) ],
+                          (Gram.Action.mk
+                             (fun (sml : 'e__21 list) (_loc : Loc.t) ->
+                                (sml : 'smlist)))) ]) ]))
+                  ());
+             Gram.extend (sglist : 'sglist Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.Slist1
+                              (Gram.srules sglist
+                                 [ ([ Gram.Snterm
+                                        (Gram.Entry.obj
+                                           (sig_item :
+                                             'sig_item Gram.Entry.t));
+                                      Gram.Snterm
+                                        (Gram.Entry.obj
+                                           (semi : 'semi Gram.Entry.t)) ],
+                                    (Gram.Action.mk
+                                       (fun _ (si : 'sig_item) (_loc : Loc.t)
+                                          -> (SdStr si : 'e__22))));
+                                   ([ Gram.Snterm
+                                        (Gram.Entry.obj
+                                           (macro_def_sig :
+                                             'macro_def_sig Gram.Entry.t));
+                                      Gram.Snterm
+                                        (Gram.Entry.obj
+                                           (semi : 'semi Gram.Entry.t)) ],
+                                    (Gram.Action.mk
+                                       (fun _ (d : 'macro_def_sig)
+                                          (_loc : Loc.t) -> (d : 'e__22)))) ]) ],
+                          (Gram.Action.mk
+                             (fun (sgl : 'e__22 list) (_loc : Loc.t) ->
+                                (sgl : 'sglist)))) ]) ]))
                   ());
              Gram.extend (endif : 'endif Gram.Entry.t)
                ((fun () ->
@@ -11512,13 +12563,13 @@ Added statements:
                                           ->
                                           (let x =
                                              Gram.Token.extract_string x
-                                           in x : 'e__19)))) ],
+                                           in x : 'e__23)))) ],
                               Gram.Skeyword ",");
                             Gram.Skeyword ")"; Gram.Skeyword "=";
                             Gram.Snterm
                               (Gram.Entry.obj (expr : 'expr Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun (e : 'expr) _ _ (pl : 'e__19 list) _
+                             (fun (e : 'expr) _ _ (pl : 'e__23 list) _
                                 (_loc : Loc.t) ->
                                 (Some ((pl, e)) : 'opt_macro_value)))) ]) ]))
                   ());
@@ -11526,26 +12577,38 @@ Added statements:
                ((fun () ->
                    ((Some (Camlp4.Sig.Grammar.Level "top")),
                     [ (None, None,
-                       [ ([ Gram.Skeyword "IFNDEF";
+                       [ ([ Gram.Skeyword "DEFINE";
+                            Gram.Stoken
+                              (((function | LIDENT ((_)) -> true | _ -> false),
+                                "LIDENT _"));
+                            Gram.Skeyword "="; Gram.Sself;
+                            Gram.Skeyword "IN"; Gram.Sself ],
+                          (Gram.Action.mk
+                             (fun (body : 'expr) _ (def : 'expr) _
+                                (i : Gram.Token.t) _ (_loc : Loc.t) ->
+                                (let i = Gram.Token.extract_string i
+                                 in (new subst _loc [ (i, def) ])#expr body :
+                                  'expr))));
+                         ([ Gram.Skeyword "IFNDEF";
                             Gram.Snterm
                               (Gram.Entry.obj (uident : 'uident Gram.Entry.t));
                             Gram.Skeyword "THEN"; Gram.Sself;
-                            Gram.Skeyword "ELSE"; Gram.Sself;
                             Gram.Snterm
-                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                              (Gram.Entry.obj
+                                 (else_expr : 'else_expr Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (e2 : 'expr) _ (e1 : 'expr) _
+                             (fun (e2 : 'else_expr) (e1 : 'expr) _
                                 (i : 'uident) _ (_loc : Loc.t) ->
                                 (if is_defined i then e2 else e1 : 'expr))));
                          ([ Gram.Skeyword "IFDEF";
                             Gram.Snterm
                               (Gram.Entry.obj (uident : 'uident Gram.Entry.t));
                             Gram.Skeyword "THEN"; Gram.Sself;
-                            Gram.Skeyword "ELSE"; Gram.Sself;
                             Gram.Snterm
-                              (Gram.Entry.obj (endif : 'endif Gram.Entry.t)) ],
+                              (Gram.Entry.obj
+                                 (else_expr : 'else_expr Gram.Entry.t)) ],
                           (Gram.Action.mk
-                             (fun _ (e2 : 'expr) _ (e1 : 'expr) _
+                             (fun (e2 : 'else_expr) (e1 : 'expr) _
                                 (i : 'uident) _ (_loc : Loc.t) ->
                                 (if is_defined i then e1 else e2 : 'expr)))) ]) ]))
                   ());
@@ -11658,7 +12721,7 @@ Added statements:
                                   'uident)))) ]) ]))
                   ()))
         let _ =
-          Options.add "-D" (Arg.String (define None))
+          Options.add "-D" (Arg.String parse_def)
             "<string> Define for IFDEF instruction."
         let _ =
           Options.add "-U" (Arg.String undef)
@@ -11668,6 +12731,22 @@ Added statements:
             "<string> Add a directory to INCLUDE search path."
       end
     let _ = let module M = Register.OCamlSyntaxExtension(Id)(Make) in ()
+    module MakeNothing (AstFilters : Camlp4.Sig.AstFilters) =
+      struct
+        open AstFilters
+        open Ast
+        let remove_nothings =
+          function
+          | Ast.ExApp (_, e, (Ast.ExId (_, (Ast.IdUid (_, "NOTHING"))))) |
+              Ast.ExFun (_,
+                (Ast.McArr (_, (Ast.PaId (_, (Ast.IdUid (_, "NOTHING")))),
+                   (Ast.ExNil _), e)))
+              -> e
+          | e -> e
+        let _ =
+          register_str_item_filter (Ast.map_expr remove_nothings)#str_item
+      end
+    let _ = let module M = Camlp4.Register.AstFilter(Id)(MakeNothing) in ()
   end
 module D =
   struct
@@ -11693,7 +12772,7 @@ module D =
       struct
         let name = "Camlp4DebugParser"
         let version =
-          "$Id: camlp4boot.ml,v 1.2 2007/02/26 16:32:47 ertai Exp $"
+          "$Id: Camlp4DebugParser.ml,v 1.1 2007/02/07 10:09:22 ertai Exp $"
       end
     module Make (Syntax : Sig.Camlp4Syntax) =
       struct
@@ -11849,6 +12928,345 @@ module D =
       end
     let _ = let module M = Register.OCamlSyntaxExtension(Id)(Make) in ()
   end
+module L =
+  struct
+    open Camlp4
+    (* -*- camlp4r -*- *)
+    (****************************************************************************)
+    (*                                                                          *)
+    (*                              Objective Caml                              *)
+    (*                                                                          *)
+    (*                            INRIA Rocquencourt                            *)
+    (*                                                                          *)
+    (*  Copyright  2007  Institut  National  de  Recherche en Informatique et   *)
+    (*  en Automatique.  All rights reserved.  This file is distributed under   *)
+    (*  the terms of the GNU Library General Public License, with the special   *)
+    (*  exception on linking described in LICENSE at the top of the Objective   *)
+    (*  Caml source tree.                                                       *)
+    (*                                                                          *)
+    (****************************************************************************)
+    (* Authors:
+ * - Nao Hirokawa: initial version
+ * - Nicolas Pouillard: revised syntax version
+ *)
+    module Id =
+      struct
+        let name = "Camlp4ListComprenhsion"
+        let version =
+          "$Id: Camlp4ListComprehension.ml,v 1.1 2007/02/27 15:50:57 pouillar Exp $"
+      end
+    module Make (Syntax : Sig.Camlp4Syntax) =
+      struct
+        open Sig
+        include Syntax
+        let rec loop n =
+          function
+          | [] -> None
+          | [ (x, _) ] -> if n = 1 then Some x else None
+          | _ :: l -> loop (n - 1) l
+        let stream_peek_nth n strm = loop n (Stream.npeek n strm)
+        (* usual trick *)
+        let test_patt_lessminus =
+          Gram.Entry.of_parser "test_patt_lessminus"
+            (fun strm ->
+               let rec skip_patt n =
+                 match stream_peek_nth n strm with
+                 | Some (KEYWORD "<-") -> n
+                 | Some (KEYWORD ("[" | "[<")) ->
+                     skip_patt ((ignore_upto "]" (n + 1)) + 1)
+                 | Some (KEYWORD "(") ->
+                     skip_patt ((ignore_upto ")" (n + 1)) + 1)
+                 | Some (KEYWORD "{") ->
+                     skip_patt ((ignore_upto "}" (n + 1)) + 1)
+                 | Some (KEYWORD ("as" | "::" | ";" | "," | "_")) |
+                     Some (LIDENT _ | UIDENT _) -> skip_patt (n + 1)
+                 | Some _ | None -> raise Stream.Failure
+               and ignore_upto end_kwd n =
+                 match stream_peek_nth n strm with
+                 | Some (KEYWORD prm) when prm = end_kwd -> n
+                 | Some (KEYWORD ("[" | "[<")) ->
+                     ignore_upto end_kwd ((ignore_upto "]" (n + 1)) + 1)
+                 | Some (KEYWORD "(") ->
+                     ignore_upto end_kwd ((ignore_upto ")" (n + 1)) + 1)
+                 | Some (KEYWORD "{") ->
+                     ignore_upto end_kwd ((ignore_upto "}" (n + 1)) + 1)
+                 | Some _ -> ignore_upto end_kwd (n + 1)
+                 | None -> raise Stream.Failure
+               in skip_patt 1)
+        let map _loc p e l =
+          match (p, e) with
+          | (Ast.PaId (_, (Ast.IdLid (_, x))),
+             Ast.ExId (_, (Ast.IdLid (_, y)))) when x = y -> l
+          | _ ->
+              if Ast.is_irrefut_patt p
+              then
+                Ast.ExApp (_loc,
+                  Ast.ExApp (_loc,
+                    Ast.ExId (_loc,
+                      Ast.IdAcc (_loc, Ast.IdUid (_loc, "List"),
+                        Ast.IdLid (_loc, "map"))),
+                    Ast.ExFun (_loc, Ast.McArr (_loc, p, Ast.ExNil _loc, e))),
+                  l)
+              else
+                Ast.ExApp (_loc,
+                  Ast.ExApp (_loc,
+                    Ast.ExApp (_loc,
+                      Ast.ExId (_loc,
+                        Ast.IdAcc (_loc, Ast.IdUid (_loc, "List"),
+                          Ast.IdLid (_loc, "fold_right"))),
+                      Ast.ExFun (_loc,
+                        Ast.McOr (_loc,
+                          Ast.McArr (_loc, p,
+                            Ast.ExId (_loc, Ast.IdUid (_loc, "True")),
+                            Ast.ExApp (_loc,
+                              Ast.ExFun (_loc,
+                                Ast.McArr (_loc,
+                                  Ast.PaId (_loc, Ast.IdLid (_loc, "x")),
+                                  Ast.ExNil _loc,
+                                  Ast.ExFun (_loc,
+                                    Ast.McArr (_loc,
+                                      Ast.PaId (_loc, Ast.IdLid (_loc, "xs")),
+                                      Ast.ExNil _loc,
+                                      Ast.ExApp (_loc,
+                                        Ast.ExApp (_loc,
+                                          Ast.ExId (_loc,
+                                            Ast.IdUid (_loc, "::")),
+                                          Ast.ExId (_loc,
+                                            Ast.IdLid (_loc, "x"))),
+                                        Ast.ExId (_loc,
+                                          Ast.IdLid (_loc, "xs"))))))),
+                              e)),
+                          Ast.McArr (_loc, Ast.PaAny _loc, Ast.ExNil _loc,
+                            Ast.ExFun (_loc,
+                              Ast.McArr (_loc,
+                                Ast.PaId (_loc, Ast.IdLid (_loc, "l")),
+                                Ast.ExNil _loc,
+                                Ast.ExId (_loc, Ast.IdLid (_loc, "l")))))))),
+                    l),
+                  Ast.ExId (_loc, Ast.IdUid (_loc, "[]")))
+        let filter _loc p b l =
+          if Ast.is_irrefut_patt p
+          then
+            Ast.ExApp (_loc,
+              Ast.ExApp (_loc,
+                Ast.ExId (_loc,
+                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "List"),
+                    Ast.IdLid (_loc, "filter"))),
+                Ast.ExFun (_loc, Ast.McArr (_loc, p, Ast.ExNil _loc, b))),
+              l)
+          else
+            Ast.ExApp (_loc,
+              Ast.ExApp (_loc,
+                Ast.ExId (_loc,
+                  Ast.IdAcc (_loc, Ast.IdUid (_loc, "List"),
+                    Ast.IdLid (_loc, "filter"))),
+                Ast.ExFun (_loc,
+                  Ast.McOr (_loc,
+                    Ast.McArr (_loc, p,
+                      Ast.ExId (_loc, Ast.IdUid (_loc, "True")), b),
+                    Ast.McArr (_loc, Ast.PaAny _loc, Ast.ExNil _loc,
+                      Ast.ExId (_loc, Ast.IdUid (_loc, "False")))))),
+              l)
+        let concat _loc l =
+          Ast.ExApp (_loc,
+            Ast.ExId (_loc,
+              Ast.IdAcc (_loc, Ast.IdUid (_loc, "List"),
+                Ast.IdLid (_loc, "concat"))),
+            l)
+        let rec compr _loc e =
+          function
+          | [ `gen ((p, l)) ] -> map _loc p e l
+          | `gen ((p, l)) :: `cond b :: items ->
+              compr _loc e ((`gen ((p, (filter _loc p b l)))) :: items)
+          | `gen ((p, l)) :: ((`gen ((_, _)) :: _ as is)) ->
+              concat _loc (map _loc p (compr _loc e is) l)
+          | _ -> raise Stream.Failure
+        let _ =
+          Gram.delete_rule expr
+            [ Gram.Skeyword "[";
+              Gram.Snterm
+                (Gram.Entry.obj
+                   (sem_expr_for_list : 'sem_expr_for_list Gram.Entry.t));
+              Gram.Skeyword "]" ]
+        let is_revised =
+          try
+            (Gram.delete_rule expr
+               [ Gram.Skeyword "[";
+                 Gram.Snterm
+                   (Gram.Entry.obj
+                      (sem_expr_for_list : 'sem_expr_for_list Gram.Entry.t));
+                 Gram.Skeyword "::";
+                 Gram.Snterm (Gram.Entry.obj (expr : 'expr Gram.Entry.t));
+                 Gram.Skeyword "]" ];
+             true)
+          with | Not_found -> false
+        let comprehension_or_sem_expr_for_list =
+          Gram.Entry.mk "comprehension_or_sem_expr_for_list"
+        let _ =
+          let _ = (expr : 'expr Gram.Entry.t)
+          and _ =
+            (comprehension_or_sem_expr_for_list :
+              'comprehension_or_sem_expr_for_list Gram.Entry.t) in
+          let grammar_entry_create = Gram.Entry.mk in
+          let item : 'item Gram.Entry.t = grammar_entry_create "item"
+          in
+            (Gram.extend (expr : 'expr Gram.Entry.t)
+               ((fun () ->
+                   ((Some (Camlp4.Sig.Grammar.Level "simple")),
+                    [ (None, None,
+                       [ ([ Gram.Skeyword "[";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (comprehension_or_sem_expr_for_list :
+                                   'comprehension_or_sem_expr_for_list Gram.
+                                     Entry.t));
+                            Gram.Skeyword "]" ],
+                          (Gram.Action.mk
+                             (fun _ (e : 'comprehension_or_sem_expr_for_list)
+                                _ (_loc : Loc.t) -> (e : 'expr)))) ]) ]))
+                  ());
+             Gram.extend
+               (comprehension_or_sem_expr_for_list :
+                 'comprehension_or_sem_expr_for_list Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.Snterml
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t),
+                              "top") ],
+                          (Gram.Action.mk
+                             (fun (e : 'expr) (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc,
+                                   Ast.ExApp (_loc,
+                                     Ast.ExId (_loc, Ast.IdUid (_loc, "::")),
+                                     e),
+                                   Ast.ExId (_loc, Ast.IdUid (_loc, "[]"))) :
+                                  'comprehension_or_sem_expr_for_list))));
+                         ([ Gram.Snterml
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t),
+                              "top");
+                            Gram.Skeyword "|";
+                            Gram.Slist1sep
+                              (Gram.Snterm
+                                 (Gram.Entry.obj (item : 'item Gram.Entry.t)),
+                              Gram.Skeyword ";") ],
+                          (Gram.Action.mk
+                             (fun (l : 'item list) _ (e : 'expr)
+                                (_loc : Loc.t) ->
+                                (compr _loc e l :
+                                  'comprehension_or_sem_expr_for_list))));
+                         ([ Gram.Snterml
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t),
+                              "top");
+                            Gram.Skeyword ";" ],
+                          (Gram.Action.mk
+                             (fun _ (e : 'expr) (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc,
+                                   Ast.ExApp (_loc,
+                                     Ast.ExId (_loc, Ast.IdUid (_loc, "::")),
+                                     e),
+                                   Ast.ExId (_loc, Ast.IdUid (_loc, "[]"))) :
+                                  'comprehension_or_sem_expr_for_list))));
+                         ([ Gram.Snterml
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t),
+                              "top");
+                            Gram.Skeyword ";";
+                            Gram.Snterm
+                              (Gram.Entry.obj
+                                 (sem_expr_for_list :
+                                   'sem_expr_for_list Gram.Entry.t)) ],
+                          (Gram.Action.mk
+                             (fun (mk : 'sem_expr_for_list) _ (e : 'expr)
+                                (_loc : Loc.t) ->
+                                (Ast.ExApp (_loc,
+                                   Ast.ExApp (_loc,
+                                     Ast.ExId (_loc, Ast.IdUid (_loc, "::")),
+                                     e),
+                                   mk
+                                     (Ast.ExId (_loc, Ast.IdUid (_loc, "[]")))) :
+                                  'comprehension_or_sem_expr_for_list)))) ]) ]))
+                  ());
+             Gram.extend (item : 'item Gram.Entry.t)
+               ((fun () ->
+                   (None,
+                    [ (None, None,
+                       [ ([ Gram.Snterml
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t),
+                              "top") ],
+                          (Gram.Action.mk
+                             (fun (e : 'expr) (_loc : Loc.t) ->
+                                (`cond e : 'item))));
+                         ([ Gram.Snterm
+                              (Gram.Entry.obj
+                                 (test_patt_lessminus :
+                                   'test_patt_lessminus Gram.Entry.t));
+                            Gram.Snterm
+                              (Gram.Entry.obj (patt : 'patt Gram.Entry.t));
+                            Gram.Skeyword "<-";
+                            Gram.Snterml
+                              (Gram.Entry.obj (expr : 'expr Gram.Entry.t),
+                              "top") ],
+                          (Gram.Action.mk
+                             (fun (e : 'expr) _ (p : 'patt) _ (_loc : Loc.t)
+                                -> (`gen ((p, e)) : 'item)))) ]) ]))
+                  ()))
+        let _ =
+          if is_revised
+          then
+            (let _ = (expr : 'expr Gram.Entry.t)
+             and _ =
+               (comprehension_or_sem_expr_for_list :
+                 'comprehension_or_sem_expr_for_list Gram.Entry.t)
+             in
+               Gram.extend
+                 (comprehension_or_sem_expr_for_list :
+                   'comprehension_or_sem_expr_for_list Gram.Entry.t)
+                 ((fun () ->
+                     (None,
+                      [ (None, None,
+                         [ ([ Gram.Snterml
+                                (Gram.Entry.obj (expr : 'expr Gram.Entry.t),
+                                "top");
+                              Gram.Skeyword "::";
+                              Gram.Snterm
+                                (Gram.Entry.obj (expr : 'expr Gram.Entry.t)) ],
+                            (Gram.Action.mk
+                               (fun (last : 'expr) _ (e : 'expr)
+                                  (_loc : Loc.t) ->
+                                  (Ast.ExApp (_loc,
+                                     Ast.ExApp (_loc,
+                                       Ast.ExId (_loc,
+                                         Ast.IdUid (_loc, "::")),
+                                       e),
+                                     last) :
+                                    'comprehension_or_sem_expr_for_list))));
+                           ([ Gram.Snterml
+                                (Gram.Entry.obj (expr : 'expr Gram.Entry.t),
+                                "top");
+                              Gram.Skeyword ";";
+                              Gram.Snterm
+                                (Gram.Entry.obj
+                                   (sem_expr_for_list :
+                                     'sem_expr_for_list Gram.Entry.t));
+                              Gram.Skeyword "::";
+                              Gram.Snterm
+                                (Gram.Entry.obj (expr : 'expr Gram.Entry.t)) ],
+                            (Gram.Action.mk
+                               (fun (last : 'expr) _
+                                  (mk : 'sem_expr_for_list) _ (e : 'expr)
+                                  (_loc : Loc.t) ->
+                                  (Ast.ExApp (_loc,
+                                     Ast.ExApp (_loc,
+                                       Ast.ExId (_loc,
+                                         Ast.IdUid (_loc, "::")),
+                                       e),
+                                     mk last) :
+                                    'comprehension_or_sem_expr_for_list)))) ]) ]))
+                    ()))
+          else ()
+      end
+    let _ = let module M = Register.OCamlSyntaxExtension(Id)(Make) in ()
+  end
 module P =
   struct
     (****************************************************************************)
@@ -11889,7 +13307,7 @@ module B =
  * - Daniel de Rauglaudre: initial version
  * - Nicolas Pouillard: refactoring
  *)
-    (* $Id: camlp4boot.ml,v 1.2 2007/02/26 16:32:47 ertai Exp $ *)
+    (* $Id: Camlp4Bin.ml,v 1.14.2.3 2007/03/30 15:50:12 pouillar Exp $ *)
     open Camlp4
     open PreCast.Syntax
     open PreCast
@@ -11897,7 +13315,7 @@ module B =
     module CleanAst = Camlp4.Struct.CleanAst.Make(Ast)
     module SSet = Set.Make(String)
     let pa_r = "Camlp4OCamlRevisedParser"
-    (* value pa_rr = "Camlp4OCamlrrParser"; *)
+    let pa_rr = "Camlp4OCamlReloadedParser"
     let pa_o = "Camlp4OCamlParser"
     let pa_rp = "Camlp4OCamlRevisedParserParser"
     let pa_op = "Camlp4OCamlParserParser"
@@ -11907,8 +13325,10 @@ module B =
     let pa_q = "Camlp4QuotationExpander"
     let pa_rq = "Camlp4OCamlRevisedQuotationExpander"
     let pa_oq = "Camlp4OCamlOriginalQuotationExpander"
+    let pa_l = "Camlp4ListComprehension"
+    open Register
     let dyn_loader =
-      ref (fun _ -> raise (Match_failure ("./camlp4/Camlp4Bin.ml", 42, 24)))
+      ref (fun _ -> raise (Match_failure ("./camlp4/Camlp4Bin.ml", 45, 24)))
     let rcall_callback = ref (fun () -> ())
     let loaded_modules = ref SSet.empty
     let add_to_loaded_modules name =
@@ -11921,7 +13341,9 @@ module B =
       let load =
         List.iter
           (fun n ->
-             if SSet.mem n !loaded_modules
+             if
+               (SSet.mem n !loaded_modules) ||
+                 (List.mem n !Register.loaded_modules)
              then ()
              else
                (add_to_loaded_modules n;
@@ -11932,10 +13354,13 @@ module B =
              ("pa_r.cmo" | "r" | "ocamlr" | "ocamlrevised" |
                 "camlp4ocamlrevisedparser.cmo"))
               -> load [ pa_r ]
-          | (* | ("Parsers"|"", "rr"  | "OCamlrr") -> load [pa_r; pa_rr] *)
-              (("Parsers" | ""),
-               ("pa_o.cmo" | "o" | "ocaml" | "camlp4ocamlparser.cmo"))
-              -> load [ pa_r; pa_o ]
+          | (("Parsers" | ""),
+             ("rr" | "reloaded" | "ocamlreloaded" |
+                "camlp4ocamlreloadedparser.cmo"))
+              -> load [ pa_rr ]
+          | (("Parsers" | ""),
+             ("pa_o.cmo" | "o" | "ocaml" | "camlp4ocamlparser.cmo")) ->
+              load [ pa_r; pa_o ]
           | (("Parsers" | ""),
              ("pa_rp.cmo" | "rp" | "rparser" |
                 "camlp4ocamlrevisedparserparser.cmo"))
@@ -11946,23 +13371,26 @@ module B =
           | (("Parsers" | ""),
              ("pa_extend.cmo" | "pa_extend_m.cmo" | "g" | "grammar" |
                 "camlp4grammarparser.cmo"))
-              -> load [ pa_r; pa_g ]
+              -> load [ pa_g ]
           | (("Parsers" | ""),
              ("pa_macro.cmo" | "m" | "macro" | "camlp4macroparser.cmo")) ->
-              load [ pa_r; pa_m ]
+              load [ pa_m ]
           | (("Parsers" | ""), ("q" | "camlp4quotationexpander.cmo")) ->
-              load [ pa_r; pa_qb; pa_q ]
+              load [ pa_qb; pa_q ]
           | (("Parsers" | ""),
-             ("q_MLast.cmo" | "rq" |
+             ("q_mlast.cmo" | "rq" |
                 "camlp4ocamlrevisedquotationexpander.cmo"))
-              -> load [ pa_r; pa_qb; pa_rq ]
+              -> load [ pa_qb; pa_rq ]
           | (("Parsers" | ""),
              ("oq" | "camlp4ocamloriginalquotationexpander.cmo")) ->
               load [ pa_r; pa_o; pa_qb; pa_oq ]
           | (("Parsers" | ""), "rf") ->
-              load [ pa_r; pa_rp; pa_qb; pa_q; pa_g; pa_m ]
+              load [ pa_r; pa_rp; pa_qb; pa_q; pa_g; pa_l; pa_m ]
           | (("Parsers" | ""), "of") ->
-              load [ pa_r; pa_o; pa_rp; pa_op; pa_qb; pa_rq; pa_g; pa_m ]
+              load
+                [ pa_r; pa_o; pa_rp; pa_op; pa_qb; pa_rq; pa_g; pa_l; pa_m ]
+          | (("Parsers" | ""), ("comp" | "camlp4listcomprehension.cmo")) ->
+              load [ pa_l ]
           | (("Filters" | ""), ("lift" | "camlp4astlifter.cmo")) ->
               load [ "Camlp4AstLifter" ]
           | (("Filters" | ""), ("exn" | "camlp4exceptiontracer.cmo")) ->
@@ -11984,11 +13412,9 @@ module B =
           | (("Printers" | ""),
              ("pr_r.cmo" | "r" | "ocamlr" | "camlp4ocamlrevisedprinter.cmo"))
               -> Register.enable_ocamlr_printer ()
-          | (* | ("Printers"|"", "rr" | "OCamlrr" | "Camlp4Printers/OCamlrr.cmo") -> *)
-              (* Register.enable_ocamlrr_printer () *)
-              (("Printers" | ""),
-               ("pr_o.cmo" | "o" | "ocaml" | "camlp4ocamlprinter.cmo"))
-              -> Register.enable_ocaml_printer ()
+          | (("Printers" | ""),
+             ("pr_o.cmo" | "o" | "ocaml" | "camlp4ocamlprinter.cmo")) ->
+              Register.enable_ocaml_printer ()
           | (("Printers" | ""),
              ("pr_dump.cmo" | "p" | "dumpocaml" | "camlp4ocamlastdumper.cmo"))
               -> Register.enable_dump_ocaml_ast_printer ()
@@ -12019,7 +13445,7 @@ module B =
              | None -> None) in
       let loc = Loc.mk name
       in
-        (Warning.current := print_warning;
+        (current_warning := print_warning;
          let ic = if name = "-" then stdin else open_in_bin name in
          let cs = Stream.of_channel ic in
          let clear () = if name = "-" then () else close_in ic in
@@ -12040,14 +13466,13 @@ module B =
       function
       | Ast.StDir (loc, n, (Ast.ExStr (_, s))) -> Some ((loc, n, s))
       | _ -> None
-    open Register
     let process_intf dyn_loader name =
       process dyn_loader name CurrentParser.parse_interf CurrentPrinter.
-        print_interf new CleanAst.clean_ast#sig_item AstFilters.
+        print_interf (new CleanAst.clean_ast)#sig_item AstFilters.
         fold_interf_filters gind
     let process_impl dyn_loader name =
       process dyn_loader name CurrentParser.parse_implem CurrentPrinter.
-        print_implem new CleanAst.clean_ast#str_item AstFilters.
+        print_implem (new CleanAst.clean_ast)#str_item AstFilters.
         fold_implem_filters gimd
     let just_print_the_version () =
       (printf "%s@." Camlp4_config.version; exit 0)
index 582ce9c27c7b46be52f7788159a0385709525147..4c4c46d145c5fb068e74166914af67b1d7872fc3 100644 (file)
@@ -5,5 +5,6 @@ module Rp = struct INCLUDE "camlp4/Camlp4Parsers/Camlp4OCamlRevisedParserParser.
 module G = struct INCLUDE "camlp4/Camlp4Parsers/Camlp4GrammarParser.ml"; end;
 module M = struct INCLUDE "camlp4/Camlp4Parsers/Camlp4MacroParser.ml"; end;
 module D = struct INCLUDE "camlp4/Camlp4Parsers/Camlp4DebugParser.ml"; end;
+module L = struct INCLUDE "camlp4/Camlp4Parsers/Camlp4ListComprehension.ml"; end;
 module P = struct INCLUDE "camlp4/Camlp4Printers/Camlp4OCamlAstDumper.ml"; end;
 module B = struct INCLUDE "camlp4/Camlp4Bin.ml"; end;
diff --git a/camlp4/camlp4fulllib.mllib b/camlp4/camlp4fulllib.mllib
new file mode 100644 (file)
index 0000000..311d478
--- /dev/null
@@ -0,0 +1,42 @@
+Camlp4
+Linenum
+Misc
+Warnings
+Location
+Config
+Camlp4_config
+Myocamlbuild_config
+Longident
+
+Camlp4Parsers/Camlp4AstLoader
+Camlp4Parsers/Camlp4DebugParser
+Camlp4Parsers/Camlp4GrammarParser
+Camlp4Parsers/Camlp4ListComprehension
+Camlp4Parsers/Camlp4MacroParser
+Camlp4Parsers/Camlp4OCamlOriginalQuotationExpander
+Camlp4Parsers/Camlp4OCamlParser
+Camlp4Parsers/Camlp4OCamlParserParser
+Camlp4Parsers/Camlp4OCamlRevisedParser
+Camlp4Parsers/Camlp4OCamlRevisedParserParser
+Camlp4Parsers/Camlp4OCamlRevisedQuotationExpander
+Camlp4Parsers/Camlp4QuotationCommon
+Camlp4Parsers/Camlp4QuotationExpander
+
+Camlp4Printers/Camlp4AstDumper
+Camlp4Printers/Camlp4AutoPrinter
+Camlp4Printers/Camlp4NullDumper
+Camlp4Printers/Camlp4OCamlAstDumper
+Camlp4Printers/Camlp4OCamlPrinter
+Camlp4Printers/Camlp4OCamlRevisedPrinter
+
+Camlp4Filters/Camlp4AstLifter
+Camlp4Filters/Camlp4ExceptionTracer
+Camlp4Filters/Camlp4FoldGenerator
+Camlp4Filters/Camlp4LocationStripper
+Camlp4Filters/Camlp4MapGenerator
+Camlp4Filters/Camlp4MetaGenerator
+Camlp4Filters/Camlp4Profiler
+Camlp4Filters/Camlp4Tracer
+Camlp4Filters/Camlp4TrashRemover
+
+Camlp4Top
diff --git a/camlp4/examples/_tags b/camlp4/examples/_tags
new file mode 100644 (file)
index 0000000..18742e4
--- /dev/null
@@ -0,0 +1,8 @@
+"apply_operator.ml" or "type_quotation.ml": camlp4rf, use_camlp4
+"lambda_quot.ml": camlp4rf, use_camlp4_full
+"lambda_quot_o.ml": camlp4of, use_camlp4_full
+"macros.ml" or "dirac.ml" or "puzzle.ml" or <arith.*>: camlp4of, use_camlp4
+"test_macros.ml": pp(camlp4of ./macros.cmo)
+"lambda_test.ml": pp(camlp4of ./lambda_quot_o.cmo)
+<parse_files.*>: camlp4of, use_camlp4_full, use_dynlink
+<{free_vars_test,poly_rec}.*>: camlp4rf, use_camlp4
diff --git a/camlp4/examples/apply_operator.ml b/camlp4/examples/apply_operator.ml
new file mode 100644 (file)
index 0000000..2d4d2cb
--- /dev/null
@@ -0,0 +1,6 @@
+open Camlp4.PreCast;
+AstFilters.register_str_item_filter
+  (Ast.map_expr
+    (fun
+     [ <:expr@loc< \& $e1$ $e2$ >> -> <:expr@loc< $e1$ $e2$ >>
+     | e -> e ]))#str_item;
diff --git a/camlp4/examples/apply_operator_test.ml b/camlp4/examples/apply_operator_test.ml
new file mode 100644 (file)
index 0000000..6644b94
--- /dev/null
@@ -0,0 +1 @@
+f& g& h x
diff --git a/camlp4/examples/lambda_quot.ml b/camlp4/examples/lambda_quot.ml
new file mode 100644 (file)
index 0000000..654511a
--- /dev/null
@@ -0,0 +1,38 @@
+open Camlp4.PreCast;
+module CamlSyntax = Camlp4OCamlParser.Make (Camlp4OCamlRevisedParser.Make Syntax);
+
+value expr_of_string = CamlSyntax.Gram.parse_string CamlSyntax.expr_eoi;
+
+module LambdaGram = MakeGram Lexer;
+
+value term = LambdaGram.Entry.mk "term";
+value term_eoi = LambdaGram.Entry.mk "lambda term quotation";
+
+Camlp4_config.antiquotations.val := True;
+
+EXTEND LambdaGram
+  GLOBAL: term term_eoi;
+  term:
+    [ "top"
+      [ "fun"; v = var; "->"; t = term -> <:expr< `Lam $v$ $t$ >> ]
+    | "app"
+      [ t1 = SELF; t2 = SELF           -> <:expr< `App $t1$ $t2$ >> ]
+    | "simple"
+      [ `ANTIQUOT (""|"term") a        -> expr_of_string _loc a
+      | v = var                        -> <:expr< `Var $v$ >>
+      | "("; t = term; ")"             -> t ]
+    ];
+  var:
+    [[ v = LIDENT             -> <:expr< $str:v$ >>
+     | `ANTIQUOT (""|"var") a -> expr_of_string _loc a
+    ]];
+  term_eoi:
+    [[ t = term; `EOI -> t ]];
+END;
+
+value expand_lambda_quot_expr loc _loc_name_opt quotation_contents =
+  LambdaGram.parse_string term_eoi loc quotation_contents;
+
+Syntax.Quotation.add "lam" Syntax.Quotation.DynAst.expr_tag expand_lambda_quot_expr;
+
+Syntax.Quotation.default.val := "lam";
diff --git a/camlp4/examples/lambda_test.ml b/camlp4/examples/lambda_test.ml
new file mode 100644 (file)
index 0000000..746aea4
--- /dev/null
@@ -0,0 +1,13 @@
+let id = << fun x -> x >>
+(* Imported and traduced from CCT *)
+let zero = << fun s -> fun z -> z >>
+let succ = << fun n -> fun s -> fun z -> s n >>
+let one = << $succ$ $zero$ >>
+let iota = << fun x -> z >>
+let rho = << fun m -> fun r -> (s m (m r iota r)) >>
+let rec_nat =
+  << fun n -> fun s -> fun z -> n $rho$ $iota$ $rho$ >>
+let plus = << fun n -> fun m -> $rec_nat$ n (fun n -> fun p -> $succ$ p) m >>
+let times = << fun n -> fun m -> $rec_nat$ n (fun n -> fun p -> $plus$ m p) $zero$ >>
+let fact = << fun n -> $rec_nat$ n (fun n -> fun p -> $times$ ($succ$ n) p) $one$ >>
+
diff --git a/camlp4/examples/macros.ml b/camlp4/examples/macros.ml
new file mode 100644 (file)
index 0000000..fe7b739
--- /dev/null
@@ -0,0 +1,67 @@
+open Camlp4.PreCast;;
+let foldr_funs = ref [];;
+let foldl_funs = ref [];;
+AstFilters.register_str_item_filter begin
+  Ast.map_expr begin function
+  | <:expr@loc< def_foldr $lid:name$ $e$ >> ->
+      foldr_funs := (name, e) :: !foldr_funs; <:expr@loc<()>>
+  | <:expr@loc< def_foldl $lid:name$ $e$ >> ->
+      foldl_funs := (name, e) :: !foldl_funs; <:expr@loc<()>>
+  | e -> e
+  end
+end#str_item;;
+AstFilters.register_str_item_filter begin
+  Ast.map_expr begin function
+  | <:expr@loc< $lid:name$($tup:e$) >> when List.mem_assoc name !foldl_funs ->
+      let op = List.assoc name !foldl_funs in
+      let rec foldl =
+        function
+        | [] -> assert false
+        | [x] -> x
+        | x :: xs -> <:expr@loc< $op$ $foldl xs$ $x$ >>
+      in foldl (List.rev (Ast.list_of_expr e []))
+  | <:expr@loc< $lid:name$($tup:e$) >> when List.mem_assoc name !foldr_funs ->
+      let op = List.assoc name !foldr_funs in
+      let rec foldr =
+        function
+        | [] -> assert false
+        | [x] -> x
+        | x :: xs -> <:expr@loc< $op$ $x$ $foldr xs$ >>
+      in foldr (Ast.list_of_expr e [])
+  | e -> e
+  end
+end#str_item;;
+(*
+
+AstFilters.register_str_item_filter begin
+  Ast.map_expr begin function
+  | <:expr@loc< foldl($lid:op$, $e$) >> ->
+      let rec foldl =
+        function
+        | [] -> assert false
+        | [x] -> x
+        | x :: xs -> <:expr@loc< $lid:op$ $foldl xs$ $x$ >>
+      in foldl (List.rev (Ast.list_of_expr e []))
+  | <:expr@loc< foldr($lid:op$, $e$) >> ->
+      let rec foldr =
+        function
+        | [] -> assert false
+        | [x] -> x
+        | x :: xs -> <:expr@loc< $lid:op$ $x$ $foldr xs$ >>
+      in foldr (Ast.list_of_expr e [])
+  | e -> e
+  end
+end#str_item;;
+
+AstFilters.register_str_item_filter begin
+  Ast.map_expr begin function
+  | <:expr@loc< \!+ ($tup:e$) >> ->
+      begin match Ast.list_of_expr e [] with
+      | [] | [_] -> assert false
+      | x :: xs -> List.fold_left (fun acc x -> <:expr@loc< $acc$ + $x$ >>) x xs
+      end
+  | <:expr< \!+ $e$ >> -> e
+  | e -> e
+  end
+end#str_item;;
+*)
diff --git a/camlp4/examples/parse_files.ml b/camlp4/examples/parse_files.ml
new file mode 100644 (file)
index 0000000..3e7e30f
--- /dev/null
@@ -0,0 +1,31 @@
+open Camlp4.PreCast;;
+
+module CamlGram = MakeGram(Lexer);;
+
+module Caml =
+  Camlp4.Printers.OCaml.Make
+    (Camlp4OCamlParser.Make
+      (Camlp4OCamlRevisedParser.Make
+        (Camlp4.OCamlInitSyntax.Make(Ast)(Gram)(Quotation))));;
+
+let parse f =
+  let ic = open_in f in
+  let strm = Stream.of_channel ic in
+  let res = Caml.parse_implem (Loc.mk f) strm in
+  close_in ic; res;;
+
+let ghost = Loc.ghost;;
+
+let main () =
+  let a = parse "apply_operator_test.ml" in
+  let b = parse "global_handler_test.ml" in
+  Caml.print_implem
+    <:str_item@ghost<
+      module Apply_operator_test = struct $a$ end;;
+      module Global_handler_test = struct $b$ end >>
+;;
+
+try main ()
+with e ->
+  Format.eprintf "error: %a@." Camlp4.ErrorHandler.print e;
+  exit 1;;
diff --git a/camlp4/examples/test_macros.ml b/camlp4/examples/test_macros.ml
new file mode 100644 (file)
index 0000000..1e1b172
--- /dev/null
@@ -0,0 +1,15 @@
+(* DEFINE F(x, y, z) = x + y * z;; *)
+(* F(F(1, 2, 3), 4, 5);; *)
+
+(* !+ (1, 2, 3, 4);; *)
+
+(* foldl(( + ), 1, 2, 3, 4);; *)
+(* foldr(cons, 1, 2, 3, []);; *)
+
+let cons x xs = x :: xs;;
+
+def_foldl ( !+ ) ( + );;
+def_foldr ( !:: ) cons;;
+
+!+ (1, 2, 3, 4);;
+!:: (1, 2, 3, []);;
diff --git a/camlp4/examples/test_type_quotation.ml b/camlp4/examples/test_type_quotation.ml
new file mode 100644 (file)
index 0000000..772dfcf
--- /dev/null
@@ -0,0 +1,3 @@
+type t1 = <:power< 6 | int >>
+type t2 = <:power< 3 | int -> int >> -> int
+type t3 = <:power< 3 | int -> <:power< 2 | int >> >> -> int
diff --git a/camlp4/examples/type_quotation.ml b/camlp4/examples/type_quotation.ml
new file mode 100644 (file)
index 0000000..5dae046
--- /dev/null
@@ -0,0 +1,18 @@
+open Camlp4.PreCast;
+
+value rec mk_tuple _loc t n =
+  if n <= 1 then t else <:ctyp< $t$ * $mk_tuple _loc t (n - 1)$ >>;
+
+value ctyp_eoi = Gram.Entry.mk "ctyp eoi";
+
+EXTEND Gram
+  ctyp_eoi: [[ t = Syntax.ctyp; `EOI -> t ]];
+END;
+
+value exp _loc _ s =
+  Scanf.sscanf s " %d | %[^!]" begin fun n s ->
+    let t = Syntax.Gram.parse_string ctyp_eoi _loc(* not accurate *) s in
+    <:ctyp< $tup:mk_tuple _loc t n$ >>
+  end;
+
+Quotation.add "power" Quotation.DynAst.ctyp_tag exp;
index e8aae0b3728541b96907789c3ee12236f194fe0a..2e794134c1efd344e5fb47ee90066dffc1366b28 100644 (file)
@@ -11,7 +11,7 @@
 #                                                                       #
 #########################################################################
 
-# $Id: Makefile.msvc,v 1.21 2007/03/01 14:20:33 xleroy Exp $
+# $Id: Makefile.msvc,v 1.21.2.2 2007/05/12 13:50:20 pouillar Exp $
 
 # Configuration for Windows, Visual C++ compiler
 
@@ -92,17 +92,21 @@ NATIVECCLIBS=advapi32.lib
 ### How to invoke the C preprocessor
 CPP=cl /nologo /EP
 
-### How to merge a .manifest (if any) in a .exe or .dll
-MERGEMANIFEST=test ! -f $(1).manifest || mt -nologo -outputresource:$(1) -manifest $(1).manifest && rm -f $(1).manifest
-#ml let mergemanifest out = Printf.sprintf "test ! -f %s.manifest || mt -nologo -outputresource:%s -manifest %s.manifest && rm -f %s.manifest" out out out out;;
+### How to merge a .manifest (if any) in a .exe
+MERGEMANIFESTEXE=test ! -f $(1).manifest || mt -nologo -outputresource:$(1) -manifest $(1).manifest && rm -f $(1).manifest
+#ml let mergemanifestexe out = Printf.sprintf "test ! -f %s.manifest || mt -nologo -outputresource:%s -manifest %s.manifest && rm -f %s.manifest" out out out out;;
 
 ### How to build an EXE
-MKEXE=$(BYTECC) /Fe$(1) $(2) && ($(MERGEMANIFEST))
-#ml let mkexe out files opts = Printf.sprintf "%s /Fe%s %s %s && (%s)" bytecc out opts files (mergemanifest out);;
+MKEXE=$(BYTECC) /Fe$(1) $(2) && ($(MERGEMANIFESTEXE))
+#ml let mkexe out files opts = Printf.sprintf "%s /Fe%s %s %s && (%s)" bytecc out opts files (mergemanifestexe out);;
+
+### How to merge a .manifest (if any) in a .dll
+MERGEMANIFESTDLL=test ! -f $(1).manifest || mt -nologo -outputresource:"$(1);\#2" -manifest $(1).manifest && rm -f $(1).manifest
+#ml let mergemanifestdll out = Printf.sprintf "test ! -f %s.manifest || mt -nologo -outputresource:\"%s;\\#2\" -manifest %s.manifest && rm -f %s.manifest" out out out out;;
 
 ### How to build a DLL
-MKDLL=link /nologo /dll /out:$(1) /implib:$(2) $(3) && ($(MERGEMANIFEST))
-#ml let mkdll out implib files opts = Printf.sprintf "link /nologo /dll /out:%s /implib:%s %s %s && (%s)" out implib opts files (mergemanifest out);;
+MKDLL=link /nologo /dll /out:$(1) /implib:$(2) $(3) && ($(MERGEMANIFESTDLL))
+#ml let mkdll out implib files opts = Printf.sprintf "link /nologo /dll /out:%s /implib:%s %s %s && (%s)" out implib opts files (mergemanifestdll out);;
 
 ### How to build a static library
 MKLIB=link /lib /nologo /out:$(1) $(2)
index 15272f768d0076f9957b1d3226bb84d97f023dfd..13ddcedbb03436315ee51acc309405e09aee145f 100755 (executable)
--- a/configure
+++ b/configure
@@ -13,7 +13,7 @@
 #                                                                       #
 #########################################################################
 
-# $Id: configure,v 1.244.4.1 2007/03/06 16:02:09 xleroy Exp $
+# $Id: configure,v 1.244.4.2 2007/05/03 12:49:56 xleroy Exp $
 
 configure_options="$*"
 prefix=/usr/local
@@ -488,7 +488,7 @@ mksharedlibrpath=''
 
 if test $withsharedlibs = "yes"; then
   case "$host" in
-    *-*-linux-gnu|*-*-linux|*-*-freebsd[3-9]*|*-*-gnu*)
+    *-*-linux-gnu|*-*-linux|*-*-freebsd[3-9]*|*-*-netbsd*|*-*-gnu*)
       sharedcccompopts="-fPIC"
       mksharedlib="$bytecc -shared -o"
       bytecclinkopts="$bytecclinkopts -Wl,-E"
index 7f7e5a644542d5f47f8dfb6e1be6a30c12bf3d48..47c263a7f0a4ebb94eeab4c4c42ba97a614955cf 100644 (file)
@@ -25,7 +25,7 @@ The
 command is the toplevel system for Objective Caml,
 that permits interactive use of the Objective Caml system through a
 read-eval-print loop. In this mode, the system repeatedly reads Caml
-phrases from the input, then typechecks, compile and evaluate
+phrases from the input, then typechecks, compiles and evaluates
 them, then prints the inferred type and result value, if any. The
 system prints a # (sharp) prompt before reading each phrase.
 
index d5c1719209da8713ce6517a34bb30eca6622f8b2..0e522f0e254cf62e1c18b2245b562ab4dc3fac2b 100644 (file)
@@ -826,7 +826,7 @@ dep ["ocaml"; "compile"; "file:camlp4/Camlp4/Sig.ml"]
 
 mk_camlp4_bin "camlp4" [];;
 mk_camlp4 "camlp4boot" ~unix:false
-  [pa_r; pa_qc; pa_q; pa_rp; pa_g; pa_macro; pa_debug] [pr_dump] [top_rprint];;
+  [pa_r; pa_qc; pa_q; pa_rp; pa_g; pa_macro; pa_debug; pa_l] [pr_dump] [top_rprint];;
 mk_camlp4 "camlp4r"
   [pa_r; pa_rp] [pr_a] [top_rprint];;
 mk_camlp4 "camlp4rf"
@@ -861,7 +861,7 @@ Pathname.define_context "otherlibs/labltk/browser"
 file_rule "otherlibs/labltk/compiler/copyright"
   ~dep:"otherlibs/labltk/compiler/copyright"
   ~prod:"otherlibs/labltk/compiler/copyright.ml"
-  ~cache:(fun _ -> "0.1")
+  ~cache:(fun _ -> "0.1")
   begin fun _ oc ->
     Printf.fprintf oc "let copyright = \"%a\";;\n\
                        let write ~w = w copyright;;"
@@ -1036,7 +1036,7 @@ rule "labltktop"
 let labltk_installdir = C.libdir/"labltk" in
 file_rule "labltk"
   ~prod:"otherlibs/labltk/lib/labltk"
-  ~cache:(fun _ -> labltk_installdir)
+  ~cache:(fun _ -> labltk_installdir)
   begin fun _ oc ->
     Printf.fprintf oc
       "#!/bin/sh\n\
index 2992ecf04a734244e006c37d6010b03ee75813d4..a844e38b8507cdaaaf4e8562476ad7f56f477fcd 100644 (file)
@@ -1,3 +1,86 @@
+2007-03-22  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       Allow to receive the build function in {custom,file}_rule.
+
+       * rule.ml,
+       * rule.mli,
+       * signatures.mli: Ditto.
+       * ocaml_specific.ml: Update.
+
+       * command.ml,
+       * command.mli: Add a function to get string and tags.
+
+       * ocamldep.ml,
+       * ocamldep.mli: Make tag based dependencies.
+
+       * ocaml_compiler.ml: Do the pack as one command to be sure running the
+       remove.
+
+       * test/test8/myocamlbuild.ml,
+       * test/good-output: Update.
+
+2007-03-21  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       Fix the previous fix.
+
+       * ocaml_compiler.ml: Remove the empty file.
+       * test/good-output: Update.
+
+2007-03-21  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       [native pack] use touch instead of mv and cmp.
+
+       * ocaml_compiler.ml: This version is will force ocamlopt to do the
+       right thing.
+       * test/good-output: Update.
+
+2007-03-20  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       Two bugs, two fixes.
+
+       * ocaml_tools.ml: Add pp flags to interface inference.
+       * ocaml_specific.ml: Add a rule for packing with a cmi that already
+       exists.
+       * test/good-output: Update.
+       * Makefile: Change the default location.
+
+2007-03-13  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       Fix a bug in expand_module.
+
+       * ocaml_utils.ml: Handle correctly pathnames instead of just basenames.
+
+2007-03-13  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       Use sys_file_exists instead of Sys.file_exists.
+
+       * my_unix.ml: Since Sys.file_exists don't treat well captial letters.
+       * my_std.ml: Fix a bug.
+       * pathname.ml: Here is a an exception to the previous rule so, put a
+       comment.
+
+2007-03-11  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       Fix the List.union order.
+
+       * my_std.ml: Fix and improve List.union.
+       * pathname.ml: Use it and fix merge_include_dirs.
+       * test/good-output: Update since the union order was wrong.
+
+2007-03-11  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       Re fix menhir and include dirs.
+
+       * ocaml_tools.ml: Specifiy ocamlc and -I with --ocamlc.
+
+2007-03-11  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
+
+       Fix a bug: Add include directories to menhir.
+
+       * ocaml_tools.ml: Ditto.
+       * my_std.ml,
+       * signatures.mli: Specification typo.
+
 2007-03-07  Nicolas Pouillard  <nicolas.pouillard@gmail.com>
 
        Handle specially archives files during an import.
index b8d780ada1e53a73ef709c73533944871c7b853d..e2cb570b63c53430b0832b7021863837e83a043c 100644 (file)
@@ -1,7 +1,7 @@
 .PHONY: all byte native profile debug ppcache doc
 
 ifndef INSTALL_PREFIX
-INSTALL_PREFIX := /usr/local
+INSTALL_PREFIX := $(PWD)/_install
 endif
 
 ifndef INSTALL_LIB
@@ -25,7 +25,7 @@ OCAMLBUILD_OPTIONS := $(OCAMLBUILD_OPTIONS) $(O)
 endif
 
 ifeq ($(wildcard ./boot/oc*build),./boot/ocamlbuild)
-OCAMLBUILD=INSTALL_LIB=$(INSTALL_LIB) $(OCAMLBUILDCMD) -build-dir $(BUILDDIR) -no-links $(OCAMLBUILD_OPTIONS)
+OCAMLBUILD=INSTALL_LIB=$(INSTALL_LIB) INSTALL_BIN=$(INSTALL_BIN) $(OCAMLBUILDCMD) -build-dir $(BUILDDIR) -no-links $(OCAMLBUILD_OPTIONS)
 LIBS=ocamlbuildlib ocamlbuildlightlib
 PROGRAMS=ocamlbuild ocamlbuildlight
 BYTE=$(LIBS:=.cma) $(PROGRAMS:=.byte)
index 22256e4191a3d709680321ddcad4dd8f7e4d3053..97755693dc2630a213f17517b78a808d83e3726c 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: command.ml,v 1.1 2007/02/07 08:59:13 ertai Exp $ *)
+(* $Id: command.ml,v 1.1.4.1 2007/03/23 16:34:48 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 (* Command *)
 
@@ -151,12 +151,16 @@ let rec string_of_command_spec_with_calls call_with_tags call_with_target resolv
 
 let string_of_command_spec x = string_of_command_spec_with_calls ignore ignore false x
 
-let string_print_of_command_spec spec =
+let string_target_and_tags_of_command_spec spec =
   let rtags = ref Tags.empty in
   let rtarget = ref "" in
   let s = string_of_command_spec_with_calls ((:=) rtags) ((:=) rtarget) true spec in
   let target = if !rtarget = "" then s else !rtarget in
-  (s, (fun quiet pretend () -> if not quiet then Log.event ~pretend s target !rtags))
+  s, target, !rtags
+
+let string_print_of_command_spec spec =
+  let s, target, tags = string_target_and_tags_of_command_spec spec in
+  (s, (fun quiet pretend () -> if not quiet then Log.event ~pretend s target tags))
 (* ***)
 
 let rec print f =
index 0a12f9385484c2ca6b4df81d14e3211c261bafe4..8fc6da75d03841e8e8551101c0a3ddeecd4c4704 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: command.mli,v 1.1 2007/02/07 08:59:13 ertai Exp $ *)
+(* $Id: command.mli,v 1.1.4.1 2007/03/23 16:34:48 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 (* Command *)
 
@@ -19,6 +19,8 @@ include Signatures.COMMAND with type tags = Tags.t
 
 (** {6 For system use only, not for the casual user} *)
 
+val string_target_and_tags_of_command_spec : spec -> string * string * Tags.t
+
 (** Same as [to_string]. *)
 val to_string_for_digest : t -> string
 
diff --git a/ocamlbuild/examples/example_with_C/_tags b/ocamlbuild/examples/example_with_C/_tags
new file mode 100644 (file)
index 0000000..769cb46
--- /dev/null
@@ -0,0 +1 @@
+<*caml.o>: output_obj
diff --git a/ocamlbuild/examples/example_with_C/fib.ml b/ocamlbuild/examples/example_with_C/fib.ml
new file mode 100644 (file)
index 0000000..ef6dbd4
--- /dev/null
@@ -0,0 +1,5 @@
+let x = X.x
+
+let rec fib n = if n <= 1 then 1 else fib (n - 1) + fib (n - 2)
+
+let () = Callback.register "fib" fib
diff --git a/ocamlbuild/examples/example_with_C/fibwrap.c b/ocamlbuild/examples/example_with_C/fibwrap.c
new file mode 100644 (file)
index 0000000..cc2104b
--- /dev/null
@@ -0,0 +1,7 @@
+                                                            /* -*- C -*- */
+#include <caml/mlvalues.h>
+#include <caml/callback.h>
+int fib(int n)
+{
+  return Int_val(caml_callback(*caml_named_value("fib"), Val_int(n)));
+}
diff --git a/ocamlbuild/examples/example_with_C/main.c b/ocamlbuild/examples/example_with_C/main.c
new file mode 100644 (file)
index 0000000..c7f6bb5
--- /dev/null
@@ -0,0 +1,10 @@
+                                                            /* -*- C -*- */
+#include <stdio.h>
+#include <caml/callback.h>
+extern int fib(int);
+int main(int argc, char** argv)
+{
+  caml_startup(argv);
+  printf("fib(12) = %d\n", fib(12));
+  return 0;
+}
diff --git a/ocamlbuild/examples/example_with_C/myocamlbuild.ml b/ocamlbuild/examples/example_with_C/myocamlbuild.ml
new file mode 100644 (file)
index 0000000..f53df7e
--- /dev/null
@@ -0,0 +1,35 @@
+open Ocamlbuild_plugin;;
+open Command;;
+
+let cc = A"cc";;
+let ar = A"ar";;
+
+dispatch begin function
+| After_rules ->
+    let libasmrun = !*Ocamlbuild_pack.Ocaml_utils.stdlib_dir/"libasmrun.a" in
+
+    flag ["ocaml"; "link"; "output_obj"] (A"-output-obj");
+
+    rule "output C obj"
+      ~deps:["%.cmx"; "%.o"]
+      ~prod:"%caml.o"
+      (Ocamlbuild_pack.Ocaml_compiler.native_link "%.cmx" "%caml.o");
+
+    rule "build C lib"
+      ~deps:["%wrap.o"; "%caml.o"]
+      ~prod:"lib%.a"
+      begin fun env _ ->
+        let wrap_o = env "%wrap.o" and caml_o = env "%caml.o"
+        and lib_a = env "lib%.a" in
+        Seq[cp libasmrun lib_a;
+            Cmd(S[ar; A"r"; Px lib_a; P caml_o; P wrap_o])]
+      end;
+    rule "build main"
+      ~deps:["libfib.a"; "main.o"]
+      ~prod:"main"
+      begin fun _ _ ->
+        Cmd(S[cc; P"main.o"; P"libfib.a"; A"-o"; Px"main"])
+      end;
+| _ -> ()
+end
+
diff --git a/ocamlbuild/examples/example_with_C/x.ml b/ocamlbuild/examples/example_with_C/x.ml
new file mode 100644 (file)
index 0000000..7fecab1
--- /dev/null
@@ -0,0 +1 @@
+let x = 42
index 2c54e9f20c4a681b906f583000c318732839df25..07370453cd2923b8ae7f0be8a5418a524241c04c 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: main.ml,v 1.8 2007/03/01 14:40:11 pouillar Exp $ *)
+(* $Id: main.ml,v 1.8.2.1 2007/04/12 13:19:02 pouillar Exp $ *)
 (* Original author: Berke Durak *)
 open My_std
 open Log
@@ -134,6 +134,8 @@ let proceed () =
   dprintf 3 "include directories are:@ %a" print_string_list !Options.include_dirs;
   Options.entry := Some entry;
 
+  List.iter Configuration.parse_string !Options.tag_lines;
+
   Hooks.call_hook Hooks.Before_rules;
   Ocaml_specific.init ();
   Hooks.call_hook Hooks.After_rules;
index 5bfeefd33fe3b41f9de8495d28382e720c2c2168..dcb91053bc393a54409857521f8abf710bd45a65 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: my_std.ml,v 1.2 2007/02/22 16:51:39 ertai Exp $ *)
+(* $Id: my_std.ml,v 1.2.2.2 2007/03/13 10:28:53 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open Format
 
@@ -109,15 +109,16 @@ module List = struct
       | None -> acc
     end xs []
 
+  let rec rev_append_uniq acc =
+    function
+    | [] -> acc
+    | x :: xs ->
+        if mem x acc then rev_append_uniq acc xs
+        else rev_append_uniq (x :: acc) xs
+
   let union a b =
-    let rec self a b =
-      if a = [] then b else
-      match b with
-      | [] -> a
-      | x :: xs ->
-          if mem x a then self a xs
-          else self (x :: a) xs
-    in rev (self (rev a) b)
+    rev (rev_append_uniq (rev_append_uniq [] a) b)
+
 end
 
 module String = struct
@@ -169,7 +170,7 @@ module String = struct
       end
     in loop 0; text
 
-  (*** is_prefix : is v a prefix of u ? *)
+  (*** is_prefix : is u a prefix of v ? *)
   let is_prefix u v =
     let m = String.length u
     and n = String.length v
@@ -215,10 +216,12 @@ let sys_readdir, reset_readdir_cache, reset_readdir_cache_for =
 let sys_file_exists x =
   let dirname = Filename.dirname x in
   let basename = Filename.basename x in
-  if basename = Filename.current_dir_name then true else
   match sys_readdir dirname with
   | Outcome.Bad _ -> false
-  | Outcome.Good a -> try Array.iter (fun x -> if x = basename then raise Exit) a; false with Exit -> true
+  | Outcome.Good a ->
+      if basename = Filename.current_dir_name then true else
+      try Array.iter (fun x -> if x = basename then raise Exit) a; false
+      with Exit -> true
 
 let sys_command =
   match Sys.os_type with
index ef64b7983c0704167d662e6a109310ed89666ef4..3d403c7bc0eb6533a8902d758cf9322c808d89ad 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: my_unix.ml,v 1.2 2007/02/26 16:36:33 ertai Exp $ *)
+(* $Id: my_unix.ml,v 1.2.2.1 2007/03/13 10:28:53 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Format
@@ -51,7 +51,7 @@ let is_degraded = true
 let stat f =
   { stat_key = f;
     stat_file_kind =
-      if Sys.file_exists f then
+      if sys_file_exists f then
         if Sys.is_directory f then
           FK_dir
         else
index 7a408bf45da118568925dc20dfb2c38d89951bc4..0aaa1f369c2a5cb945dec35a80cdd4cfbb0fdee8 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: ocaml_compiler.ml,v 1.5.2.2 2007/03/04 15:36:20 pouillar Exp $ *)
+(* $Id: ocaml_compiler.ml,v 1.5.2.3 2007/04/27 07:20:50 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Format
@@ -78,11 +78,16 @@ let ocamlopt_link_prog = ocamlopt_link N
 let ocamlopt_p tags deps out =
   let dirnames = List.union [] (List.map Pathname.dirname deps) in
   let include_flags = List.fold_right ocaml_add_include_flag dirnames [] in
-  let cmi = cmi_of out and cmitmp = Pathname.update_extensions "cmitmp" out in
-  Seq[mv cmi cmitmp;
-      Cmd (S [!Options.ocamlopt; A"-pack"; forpack_flags out tags; T tags; S include_flags;
-              atomize_paths deps; flags_of_pathname out; (* FIXME: P (cmi_of out);*) A"-o"; Px out]);
-      cmp cmitmp cmi]
+  let mli = Pathname.update_extensions "mli" out in
+  let cmd =
+    S [!Options.ocamlopt; A"-pack"; forpack_flags out tags; T tags;
+       S include_flags; atomize_paths deps; flags_of_pathname out;
+       A"-o"; Px out] in
+  if (*FIXME true ||*) Pathname.exists mli then Cmd cmd
+  else
+    let rm = S[A"rm"; A"-f"; P mli] in
+    Cmd(S[A"touch"; P mli; Sh" ; if "; cmd; Sh" ; then "; rm; Sh" ; else ";
+          rm; Sh" ; exit 1; fi"])
 
 let native_lib_linker tags =
   if Tags.mem "ocamlmklib" tags then
index 99721c293610d50780f1196e9e2a8e07f66e4115..e5d451447f9b855ce37619b4fb92d11e7e27797b 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: ocaml_specific.ml,v 1.6.2.1 2007/03/04 16:13:53 pouillar Exp $ *)
+(* $Id: ocaml_specific.ml,v 1.6.2.8 2007/05/10 13:32:07 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Format
@@ -79,6 +79,12 @@ rule "ocaml: mlpack & d.cmo* -> d.cmo & cmi"
   ~deps:["%.mlpack"; "%.cmi"]
   (Ocaml_compiler.byte_debug_pack_mlpack "%.mlpack" "%.d.cmo");;
 
+rule "ocaml: mlpack & cmo* & cmi -> cmo"
+  ~tags:["ocaml"; "byte"]
+  ~prod:"%.cmo"
+  ~deps:["%.mli"; "%.cmi"; "%.mlpack"]
+  (Ocaml_compiler.byte_pack_mlpack "%.mlpack" "%.cmo");;
+
 rule "ocaml: mlpack & cmo* -> cmo & cmi"
   ~tags:["ocaml"; "byte"]
   ~prods:["%.cmo"; "%.cmi"]
@@ -308,6 +314,7 @@ flag ["ocaml"; "link"] begin
 end;;
 
 flag ["ocaml"; "ocamlyacc"] (atomize !Options.ocaml_yaccflags);;
+flag ["ocaml"; "menhir"] (atomize !Options.ocaml_yaccflags);;
 
 flag ["ocaml"; "ocamllex"] (atomize !Options.ocaml_lexflags);;
 
@@ -326,6 +333,14 @@ let camlp4_flags camlp4s =
 
 camlp4_flags ["camlp4o"; "camlp4r"; "camlp4of"; "camlp4rf"; "camlp4orf"];;
 
+let camlp4_flags' camlp4s =
+  List.iter begin fun (camlp4, flags) ->
+    flag ["ocaml"; "pp"; camlp4] flags
+  end camlp4s;;
+
+camlp4_flags' ["camlp4orr", S[A"camlp4of"; A"-parser"; A"reloaded"];
+               "camlp4rrr", S[A"camlp4rf"; A"-parser"; A"reloaded"]];;
+
 ocaml_lib ~extern:true ~native:false "dynlink";;
 ocaml_lib ~extern:true "unix";;
 ocaml_lib ~extern:true "str";;
@@ -333,11 +348,18 @@ ocaml_lib ~extern:true "bigarray";;
 ocaml_lib ~extern:true "nums";;
 ocaml_lib ~extern:true "dbm";;
 ocaml_lib ~extern:true "graphics";;
+ocaml_lib ~extern:true ~tag_name:"use_toplevel" "toplevellib";;
 ocaml_lib ~extern:true ~dir:"+labltk" "labltk";;
+ocaml_lib ~extern:true ~dir:"+ocamldoc" "ocamldoc";;
+ocaml_lib ~extern:true ~dir:"+ocamlbuild" ~tag_name:"use_ocamlbuild" "ocamlbuildlib";;
+
 ocaml_lib ~extern:true ~dir:"+camlp4" ~tag_name:"use_camlp4" "camlp4lib";;
 ocaml_lib ~extern:true ~dir:"+camlp4" ~tag_name:"use_old_camlp4" "camlp4";;
-ocaml_lib ~extern:true ~dir:"+ocamldoc" "ocamldoc";;
-ocaml_lib ~extern:true ~dir:"+ocamlbuild" "ocamlbuild";;
+ocaml_lib ~extern:true ~dir:"+camlp4" ~tag_name:"use_camlp4_full" "camlp4fulllib";;
+flag ["ocaml"; "compile"; "use_camlp4_full"]
+     (S[A"-I"; A"+camlp4/Camlp4Parsers";
+        A"-I"; A"+camlp4/Camlp4Printers";
+        A"-I"; A"+camlp4/Camlp4Filters"]);;
 
 flag ["ocaml"; "debug"; "compile"; "byte"] (A "-g");;
 flag ["ocaml"; "debug"; "link"; "byte"; "program"] (A "-g");;
@@ -345,8 +367,11 @@ flag ["ocaml"; "debug"; "pack"; "byte"] (A "-g");;
 flag ["ocaml"; "debug"; "compile"; "native"] (A "-g");;
 flag ["ocaml"; "debug"; "link"; "native"; "program"] (A "-g");;
 flag ["ocaml"; "debug"; "pack"; "native"] (A "-g");;
+flag ["ocaml"; "link"; "native"; "output_obj"] (A"-output-obj");;
+flag ["ocaml"; "link"; "byte"; "output_obj"] (A"-output-obj");;
 flag ["ocaml"; "dtypes"; "compile"] (A "-dtypes");;
 flag ["ocaml"; "rectypes"; "compile"] (A "-rectypes");;
+flag ["ocaml"; "rectypes"; "infer_interface"] (A "-rectypes");;
 flag ["ocaml"; "linkall"; "link"] (A "-linkall");;
 flag ["ocaml"; "link"; "profile"; "native"] (A "-p");;
 flag ["ocaml"; "link"; "program"; "custom"; "byte"] (A "-custom");;
@@ -385,7 +410,7 @@ let install_lib = lazy (try Sys.getenv "INSTALL_LIB" with Not_found -> !*stdlib_
 let install_bin = lazy (My_std.getenv ~default:"/usr/local/bin" "INSTALL_BIN") in
 file_rule "ocamlbuild_where.ml"
   ~prod:"%ocamlbuild_where.ml"
-  ~cache:(fun _ -> Printf.sprintf "lib:%S, bin:%S" !*install_lib !*install_bin)
+  ~cache:(fun _ -> Printf.sprintf "lib:%S, bin:%S" !*install_lib !*install_bin)
   begin fun _ oc ->
     Printf.fprintf oc "let bindir = ref %S;;\n" !*install_bin;
     Printf.fprintf oc "let libdir = ref %S;;\n" !*install_lib
index b72fa688378bfc80998414dd42cc8061c19cd773..e60a3158985f3a3bb1661ef61fb5e121cd90ae8c 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: ocaml_tools.ml,v 1.2 2007/02/08 16:53:39 ertai Exp $ *)
+(* $Id: ocaml_tools.ml,v 1.2.4.3 2007/04/04 18:08:59 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Pathname.Operators
@@ -20,7 +20,8 @@ open Ocaml_utils
 
 let ocamlyacc mly env _build =
   let mly = env mly in
-  Cmd(S[!Options.ocamlyacc; T(tags_of_pathname mly++"ocaml"++"parser"++"ocamlyacc");
+  let ocamlyacc = if !Options.ocamlyacc = N then V"OCAMLYACC" else !Options.ocamlyacc in
+  Cmd(S[ocamlyacc; T(tags_of_pathname mly++"ocaml"++"parser"++"ocamlyacc");
         flags_of_pathname mly; Px mly])
 
 let ocamllex mll env _build =
@@ -30,14 +31,18 @@ let ocamllex mll env _build =
 
 let infer_interface ml mli env build =
   let ml = env ml and mli = env mli in
+  let tags = tags_of_pathname ml++"ocaml" in
   Ocaml_compiler.prepare_compile build ml;
-  Cmd(S[!Options.ocamlc; ocaml_include_flags ml; A"-i";
-        T(tags_of_pathname ml++"ocaml"++"infer_interface"); P ml; Sh">"; Px mli])
+  Cmd(S[!Options.ocamlc; ocaml_ppflags tags; ocaml_include_flags ml; A"-i";
+        T(tags++"infer_interface"); P ml; Sh">"; Px mli])
 
 let menhir mly env build =
   let mly = env mly in
+  let menhir = if !Options.ocamlyacc = N then V"MENHIR" else !Options.ocamlyacc in
   Ocaml_compiler.prepare_compile build mly;
-  Cmd(S[!Options.ocamlyacc; T(tags_of_pathname mly++"ocaml"++"parser"++"menhir");
+  Cmd(S[menhir;
+        A"--ocamlc"; Quote(S[!Options.ocamlc; ocaml_include_flags mly]);
+        T(tags_of_pathname mly++"ocaml"++"parser"++"menhir");
         A"--infer"; flags_of_pathname mly; Px mly])
 
 let ocamldoc_c tags arg odoc =
index 0e71dc69e5ce3abe5576cd01cb152e808281eed3..f122007be0a2c74f9113335dfc6d2eb5c66163c4 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: ocaml_utils.ml,v 1.3.2.1 2007/03/02 17:10:27 pouillar Exp $ *)
+(* $Id: ocaml_utils.ml,v 1.3.2.2 2007/03/13 10:28:53 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Format
@@ -52,11 +52,14 @@ let module_importance modpath x =
   else if ignore_stdlib x then `just_try else `mandatory
 
 let expand_module include_dirs module_name exts =
+  let dirname = Pathname.dirname module_name in
+  let basename = Pathname.basename module_name in
+  let module_name_cap = dirname/(String.capitalize basename) in
+  let module_name_uncap = dirname/(String.uncapitalize basename) in
   List.fold_right begin fun include_dir ->
     List.fold_right begin fun ext acc ->
-      let module_name_ext = module_name-.-ext in
-      include_dir/(String.uncapitalize module_name_ext) ::
-      include_dir/(String.capitalize module_name_ext) :: acc
+      include_dir/(module_name_uncap-.-ext) ::
+      include_dir/(module_name_cap-.-ext) :: acc
     end exts
   end include_dirs []
 
index 7773b4ce7b9ad0c6c28adafdf24e8d0ccc19a722..ad650c886ed676358e238f47d489d6f45c92cad2 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: ocamldep.ml,v 1.2 2007/02/08 16:53:39 ertai Exp $ *)
+(* $Id: ocamldep.ml,v 1.2.4.2 2007/04/04 18:08:59 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Log
@@ -27,13 +27,14 @@ let ocamldep_command arg =
      flags_of_pathname arg; A "-modules"]
 
 let menhir_ocamldep_command arg out =
+  let menhir = if !Options.ocamlyacc = N then V"MENHIR" else !Options.ocamlyacc in
   let tags = tags_of_pathname arg++"ocaml"++"menhir_ocamldep" in
-  Cmd (S [!Options.ocamlyacc; T tags; A"--raw-depend";
-          A"--ocamldep"; Quote (ocamldep_command arg);
-          P arg; Sh ">"; Px out])
+  S [menhir; T tags; A"--raw-depend";
+     A"--ocamldep"; Quote (ocamldep_command arg);
+     P arg; Sh ">"; Px out]
 
 let ocamldep_command arg out =
-  Cmd (S[ocamldep_command arg; P arg; Sh ">"; Px out])
+  S[ocamldep_command arg; P arg; Sh ">"; Px out]
 
 let module_dependencies = Hashtbl.create 103
 let module_dependencies_of module_path =
@@ -49,11 +50,16 @@ let register_module_dependencies module_path deps =
 
 let depends name ?tags ~prod ~dep ?insert ?(ocamldep_command=ocamldep_command) () =
   Rule.custom_rule name ?tags ~prod ~dep ?insert
-    ~cache:(fun env -> Command.to_string (ocamldep_command (env dep) (env prod)))
+    ~cache: begin fun env build ->
+      let cmd = ocamldep_command (env dep) (env prod) in
+      let str, _, tags = Command.string_target_and_tags_of_command_spec cmd in
+      let _ = Rule.build_deps_of_tags build (tags++"dont_link_with") in
+      str
+    end
     begin fun env ~cached ->
       let arg = env dep in
       let out = env prod in
-      let cmd = ocamldep_command arg out in
+      let cmd = Cmd (ocamldep_command arg out) in
       let () = dprintf 6 "ocamldep: %a %a" Pathname.print arg Command.print cmd in
       if not (Pathname.exists arg) then
         raise (Error(sbprintf "Ocamldep.ocamldep: no input file (%a)" Pathname.print arg))
index 791f518a98908530c7104df8b56ea9b0227087bb..f396ba9a3c998a5e44228ad68f7530c531ec0f59 100644 (file)
@@ -9,11 +9,11 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: ocamldep.mli,v 1.2 2007/02/08 16:53:39 ertai Exp $ *)
+(* $Id: ocamldep.mli,v 1.2.4.1 2007/03/23 16:34:48 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 exception Error of string
-val ocamldep_command : Pathname.t -> Pathname.t -> Command.t
-val menhir_ocamldep_command : Pathname.t -> Pathname.t -> Command.t
+val ocamldep_command : Pathname.t -> Pathname.t -> Command.spec
+val menhir_ocamldep_command : Pathname.t -> Pathname.t -> Command.spec
 val module_dependencies_of : Pathname.t -> ([ `mandatory | `just_try ] * string) list
 val register_module_dependencies : Pathname.t -> string list -> unit
 val depends :
@@ -22,5 +22,5 @@ val depends :
   prod:string ->
   dep:string ->
   ?insert:[`top | `before of string | `after of string | `bottom] ->
-  ?ocamldep_command:(Pathname.t -> Pathname.t -> Command.t) ->
+  ?ocamldep_command:(Pathname.t -> Pathname.t -> Command.spec) ->
   unit -> unit
index 602e0c3a64177dc16425ae86c3aef07c0efa5891..ab536c8c21bada6347a0d1bbc72ec3be03011913 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: options.ml,v 1.7.2.2 2007/03/04 16:13:53 pouillar Exp $ *)
+(* $Id: options.ml,v 1.7.2.4 2007/04/12 13:19:02 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 
 let version = "ocamlbuild 0.1";;
@@ -62,12 +62,12 @@ let mk_virtual_solvers =
 let () =
   mk_virtual_solvers
     ["ocamlc"; "ocamlopt"; "ocamldep"; "ocamldoc";
-     "ocamlyacc"; "ocamllex"; "ocamlmklib"; "ocamlmktop"]
+    "ocamlyacc"; "menhir"; "ocamllex"; "ocamlmklib"; "ocamlmktop"]
 let ocamlc = ref (V"OCAMLC")
 let ocamlopt = ref (V"OCAMLOPT")
 let ocamldep = ref (V"OCAMLDEP")
 let ocamldoc = ref (V"OCAMLDOC")
-let ocamlyacc = ref (V"OCAMLYACC")
+let ocamlyacc = ref N
 let ocamllex = ref (V"OCAMLLEX")
 let ocamlmklib = ref (V"OCAMLMKLIB")
 let ocamlmktop = ref (V"OCAMLMKTOP")
@@ -89,6 +89,7 @@ let ocaml_lexflags_internal = ref []
 let program_args_internal = ref []
 let ignore_list_internal = ref []
 let tags_internal = ref [["quiet"]]
+let tag_lines_internal = ref []
 let show_tags_internal = ref []
 
 let my_include_dirs = ref [[Filename.current_dir_name]]
@@ -150,6 +151,7 @@ let spec =
    "-pp", String (add_to ocaml_ppflags_internal), "<flag,...> (idem)";
    "-tag", String (add_to' tags_internal), "<tag> Add to default tags";
    "-tags", String (add_to tags_internal), "<tag,...> (idem)";
+   "-tag-line", String (add_to' tag_lines_internal), "<tag> Use this line of tags (as in _tags)";
    "-show-tags", String (add_to' show_tags_internal), "<path> Show tags that applies on that pathname";
 
    "-ignore", String (add_to ignore_list_internal), "<module,...> Don't try to build these modules";
@@ -165,8 +167,7 @@ let spec =
    "-no-sanitize", Clear sanitize, " Do not generate sanitization script";
    "-nothing-should-be-rebuilt", Set nothing_should_be_rebuilt, " Fail if something needs to be rebuilt";
    "-classic-display", Set Log.classic_display, " Display executed commands the old-fashioned way";
-   "-use-menhir", Unit(fun () -> use_menhir := true; ocamlyacc := A"menhir"),
-                  " Use menhir instead of ocamlyacc";
+   "-use-menhir", Set use_menhir, " Use menhir instead of ocamlyacc";
 
    "-j", Set_int Command.jobs, "<N> Allow N jobs at once (0 for unlimited)";
 
@@ -200,6 +201,7 @@ let ocaml_lexflags = ref []
 let program_args = ref []
 let ignore_list = ref []
 let tags = ref []
+let tag_lines = ref []
 let show_tags = ref []
 
 let init () =
@@ -218,6 +220,7 @@ let init () =
   reorder ocaml_lexflags ocaml_lexflags_internal;
   reorder program_args program_args_internal;
   reorder tags tags_internal;
+  reorder tag_lines tag_lines_internal;
   reorder ignore_list ignore_list_internal;
   reorder show_tags show_tags_internal;
 
index af13359c2c33fbd55b05130d0024b70b016a6db6..36f8ee440135d1cdcbda6362359e27b2aef03989 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: pathname.ml,v 1.1 2007/02/07 08:59:14 ertai Exp $ *)
+(* $Id: pathname.ml,v 1.1.4.2 2007/03/13 10:28:53 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Format
@@ -103,6 +103,7 @@ let clean_up_links entry =
     let pathname = in_source_dir (path/name) in
     if link_to_dir pathname !Options.build_dir then
       let z = readlink pathname in
+      (* Here is one exception where one can use Sys.file_exists directly *)
       (if not (Sys.file_exists z) then
         Shell.rm pathname; false)
     else true
@@ -145,25 +146,6 @@ let root = mk "__root__"
 
 let context_table = Hashtbl.create 107
 
-let merge_include_dirs a b =
-  let rec aux a b =
-    match a, b with
-    | [], _ -> b
-    | _, [] -> a
-    | _, x::xs ->
-        if List.mem x a then aux a xs
-        else aux (x :: a) xs
-  in List.rev (aux (List.rev a) b)
-
-let define_context dir context =
-  let dir = if dir = "" then current_dir_name else dir in
-  try
-    let context = merge_include_dirs context (Hashtbl.find context_table dir) in
-    Hashtbl.replace context_table dir context
-  with Not_found ->
-    let context = merge_include_dirs context (!Options.include_dirs) in
-    Hashtbl.add context_table dir context
-
 let rec include_dirs_of dir =
   try Hashtbl.find context_table dir
   with Not_found -> dir :: List.filter (fun dir' -> dir <> dir') !Options.include_dirs
@@ -175,6 +157,10 @@ let include_dirs_of s =
   in res
 *)
 
+let define_context dir context =
+  let dir = if dir = "" then current_dir_name else dir in
+  Hashtbl.replace context_table dir& List.union context& include_dirs_of dir
+
 let in_build_dir p =
   if is_relative p then p
   else
index 83de289a1050a0f2070429c23fa08127b95ad116..a9ffe2586f28fce07742264c4d5495c0d5bbf708 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: rule.ml,v 1.2.2.1 2007/03/07 10:36:34 pouillar Exp $ *)
+(* $Id: rule.ml,v 1.2.2.3 2007/04/04 18:08:13 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Format
@@ -97,9 +97,10 @@ let exists2 find p rs =
 let all_deps_of_tags = ref []
 
 let cons deps acc =
-  List.fold_left begin fun acc dep ->
-    if List.mem dep acc then acc else dep :: acc
-  end acc deps
+  List.rev&
+    List.fold_left begin fun acc dep ->
+      if List.mem dep acc then acc else dep :: acc
+    end acc deps
 
 let deps_of_tags tags =
   List.fold_left begin fun acc (xtags, xdeps) ->
@@ -270,15 +271,15 @@ let rule name ?(tags=[]) ?(prods=[]) ?(deps=[]) ?prod ?dep ?(insert = `bottom) c
     code  = code }
 
 let file_rule name ?tags ~prod ?deps ?dep ?insert ~cache action =
-  rule name ?tags ~prod ?dep ?deps ?insert begin fun env _ ->
-    raise (Code_digest (cache env, (fun cached ->
+  rule name ?tags ~prod ?dep ?deps ?insert begin fun env build ->
+    raise (Code_digest (cache env build, (fun cached ->
       if not cached then
         with_output_file (env prod) (action env))))
   end
 
 let custom_rule name ?tags ?prods ?prod ?deps ?dep ?insert ~cache action =
-  rule name ?tags ?prods ?prod ?dep ?deps ?insert begin fun env _ ->
-    raise (Code_digest (cache env, fun cached -> action env ~cached))
+  rule name ?tags ?prods ?prod ?dep ?deps ?insert begin fun env build ->
+    raise (Code_digest (cache env build, fun cached -> action env ~cached))
   end
 
 module Common_commands = struct
index f88aceb0e1cdc321f3a26082a6e7cf18379fe300..660f335e9cd79e3b709b41857d4abcaf9dbaa478 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: rule.mli,v 1.2.2.1 2007/03/07 10:36:34 pouillar Exp $ *)
+(* $Id: rule.mli,v 1.2.2.2 2007/03/23 16:34:48 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 open My_std
 open Resource
@@ -40,7 +40,7 @@ val file_rule : string ->
   ?deps:string list ->
   ?dep:string ->
   ?insert:[`top | `before of string | `after of string | `bottom] ->
-  cache:(env -> string) ->
+  cache:(env -> builder -> string) ->
   (env -> out_channel -> unit) -> unit
 
 val custom_rule : string ->
@@ -50,7 +50,7 @@ val custom_rule : string ->
   ?deps:string list ->
   ?dep:string ->
   ?insert:[`top | `before of string | `after of string | `bottom] ->
-  cache:(env -> string) ->
+  cache:(env -> builder -> string) ->
   (env -> cached:bool -> unit) -> unit
 
 (** [copy_rule name ?insert source destination] *)
index 521e5f8cf0758d4788e02f760f7d4a78641127d1..ca1f8c04255fb1302c2a0678155c7f969b08c992 100644 (file)
@@ -9,7 +9,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: signatures.mli,v 1.8 2007/02/26 17:05:30 ertai Exp $ *)
+(* $Id: signatures.mli,v 1.8.2.3 2007/04/12 13:19:02 pouillar Exp $ *)
 (* Original author: Nicolas Pouillard *)
 (** This module contains all module signatures that the user
     could use to build an ocamlbuild plugin. *)
@@ -64,7 +64,7 @@ module type STRING = sig
 
   val eq_sub_strings : string -> int -> string -> int -> int -> bool
 
-  (** [is_prefix u v] is v a prefix of u ? *)
+  (** [is_prefix u v] is u a prefix of v ? *)
   val is_prefix : string -> string -> bool
   (** [is_suffix u v] : is v a suffix of u ? *)
   val is_suffix : string -> string -> bool
@@ -372,6 +372,7 @@ module type OPTIONS = sig
   val program_args : string list ref
   val ignore_list : string list ref
   val tags : string list ref
+  val tag_lines : string list ref
   val show_tags : string list ref
 
   val ext_obj : string ref
@@ -452,7 +453,7 @@ module type PLUGIN = sig
     ?deps:string list ->
     ?dep:string ->
     ?insert:[`top | `before of string | `after of string | `bottom] ->
-    cache:(env -> string) ->
+    cache:(env -> builder -> string) ->
     (env -> out_channel -> unit) -> unit
 
   val custom_rule : string ->
@@ -462,7 +463,7 @@ module type PLUGIN = sig
     ?deps:string list ->
     ?dep:string ->
     ?insert:[`top | `before of string | `after of string | `bottom] ->
-    cache:(env -> string) ->
+    cache:(env -> builder -> string) ->
     (env -> cached:bool -> unit) -> unit
 
   (** [copy_rule name ?insert source destination] *)
index 1fb848bc24e5fdce00af9adf51d59cb729ef82bd..3e315bfc3acc339461bf6cfb56159fa4a3d7d184 100644 (file)
@@ -34,9 +34,9 @@ install: lib$(LIBNAME).a $(PUB)
 installopt: opt
        @if test -d $(INSTALLDIR); then : ; else mkdir $(INSTALLDIR); fi
        cp $(PUBMLI:.mli=.cmx) $(INSTALLDIR)
-       if test -f tkthread.o; then \
-         cp tkthread.o $(INSTALLDIR); \
-         chmod 644 $(INSTALLDIR)/tkthread.o; \
+       if test -f tkthread.cmx; then \
+         cp tkthread.cmx tkthread.o $(INSTALLDIR); \
+         chmod 644 $(INSTALLDIR)/tkthread.cmx $(INSTALLDIR)/tkthread.o; \
        fi
 
 clean : 
index c106cdf42a2c233b0f23cda458ac49b77c4e9aed..0c3c151542e4867db1f074699fdbac4fb9241274 100644 (file)
@@ -12,7 +12,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: tkthread.ml,v 1.1 2004/10/18 02:42:50 garrigue Exp $ *)
+(* $Id: tkthread.ml,v 1.1.16.1 2007/04/10 03:29:46 garrigue Exp $ *)
 
 let jobs : (unit -> unit) Queue.t = Queue.create ()
 let m = Mutex.create ()
@@ -26,7 +26,7 @@ let cannot_sync () =
   | Some id -> Thread.id (Thread.self ()) = id
 
 let gui_safe () =
-  not (Sys.os_type = "Win32") || !loop_id = Some(Thread.id (Thread.self ()))
+  !loop_id = Some(Thread.id (Thread.self ()))
 
 let has_jobs () = not (with_jobs Queue.is_empty)
 let n_jobs () = with_jobs Queue.length
@@ -52,9 +52,9 @@ let rec job_timer () =
 
 let thread_main () =
   try
+    loop_id := Some (Thread.id (Thread.self ()));
     ignore (Protocol.openTk());
     job_timer();
-    loop_id := Some (Thread.id (Thread.self ()));
     Protocol.mainLoop();
     loop_id := None;
   with exn ->
index dce3eaa0ee26497a0ddb6165e1061175d4736f74..3e4d6151d066cd8c9c1899989f9c501bfc6f5843 100644 (file)
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: tkthread.mli,v 1.2 2004/10/18 02:59:33 garrigue Exp $ *)
+(* $Id: tkthread.mli,v 1.2.16.1 2007/04/10 03:29:46 garrigue Exp $ *)
 
-(* Basic functions *)
+(* Helper functions for using LablTk with threads.
+   To use, add tkthread.cmo or tkthread.cmx to your command line *)
 
 (** Start the main loop in a new GUI thread. Do not use recursively. *) 
 val start : unit -> Thread.t
@@ -24,8 +25,8 @@ val thread_main : unit -> unit
 val top : Widget.toplevel Widget.widget
 
 (* Jobs are needed for Windows, as you cannot do GUI work from
-   another thread.
-   Even under Unix some calls need to come from the main thread.
+   another thread. This is apparently true on OSX/Aqua too.
+   And even using X11 some calls need to come from the main thread.
    The basic idea is to either use async (if you don't need a result)
    or sync whenever you call a Tk related function from another thread
    (for instance with the threaded toplevel).
@@ -36,6 +37,7 @@ val top : Widget.toplevel Widget.widget
 val async : ('a -> unit) -> 'a -> unit
 (** Add a synchronous job (to do in the main thread) *)
 val sync : ('a -> 'b) -> 'a -> 'b
-(** Whether it is safe to call most Tk functions directly from
-    the current thread *)
+(** Whether the current thread is the GUI thread.
+    Note that when using X11 it is generally safe to call
+    most Tk functions from other threads too. *)
 val gui_safe : unit -> bool
index 51f5e405df4f27860f6eeb70a94675c664261a5b..754e65df0d49c3752cb8ad13a20e20caf1c6d173 100644 (file)
@@ -10,7 +10,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: printast.ml,v 1.30 2006/04/05 02:28:13 garrigue Exp $ *)
+(* $Id: printast.ml,v 1.30.8.1 2007/04/25 19:59:29 doligez Exp $ *)
 
 open Asttypes;;
 open Format;;
@@ -89,7 +89,14 @@ let line i f s (*...*) =
   fprintf f s (*...*)
 ;;
 
-let list i f ppf l = List.iter (f i ppf) l;;
+let list i f ppf l =
+  match l with
+  | [] -> line i ppf "[]\n";
+  | h::t ->
+     line i ppf "[\n";
+     List.iter (f (i+1) ppf) l;
+     line i ppf "]\n";
+;;
 
 let option i f ppf x =
   match x with
@@ -361,9 +368,11 @@ and class_type_field i ppf x =
   | Pctf_virt (s, pf, ct, loc) ->
       line i ppf
         "Pctf_virt \"%s\" %a %a\n" s fmt_private_flag pf fmt_location loc;
+      core_type (i+1) ppf ct;
   | Pctf_meth (s, pf, ct, loc) ->
       line i ppf
         "Pctf_meth \"%s\" %a %a\n" s fmt_private_flag pf fmt_location loc;
+      core_type (i+1) ppf ct;
   | Pctf_cstr (ct1, ct2, loc) ->
       line i ppf "Pctf_cstr %a\n" fmt_location loc;
       core_type i ppf ct1;
@@ -619,11 +628,11 @@ and core_type_x_core_type_x_location i ppf (ct1, ct2, l) =
   core_type (i+1) ppf ct2;
 
 and string_x_core_type_list_x_location i ppf (s, l, loc) =
-  string i ppf s;
+  line i ppf "\"%s\" %a\n" s fmt_location loc;
   list (i+1) core_type ppf l;
 
 and string_x_mutable_flag_x_core_type_x_location i ppf (s, mf, ct, loc) =
-  line i ppf "\"%s\" %a\n" s fmt_mutable_flag mf;
+  line i ppf "\"%s\" %a %a\n" s fmt_mutable_flag mf fmt_location loc;
   core_type (i+1) ppf ct;
 
 and string_list_x_location i ppf (l, loc) =
index 8882cf9f0914baea294b7b6c91b011c63c7953f5..1c393481cdd267f6d5b15d56c9378d350e7f4775 100644 (file)
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: scanf.mli,v 1.69 2007/01/22 08:51:29 weis Exp $ *)
+(* $Id: scanf.mli,v 1.69.4.1 2007/04/26 16:57:37 doligez Exp $ *)
 
 (** Formatted input functions. *)
 
 (** {6 Functional input with format strings.} *)
 
 (** The formatted input functions provided by module [Scanf] are functionals
-    that apply the values they read in the input to their function argument.
+    that apply their function argument to the values they read in the input.
     The specification of the values to read is simply given by a format string
     (the same format strings as those used to print material using module
     {!Printf} or module {!Format}).
     As an example, consider the formatted input function [scanf] that reads
     from standard input; a typical call to [scanf] is simply [scanf fmt f],
     meaning that [f] should be applied to the arguments read according to the
-    format string [fmt]. For instance, if [f] is defined as [let f x = x + 1], then
-    [scanf "%d" f] will read a decimal integer [i] from [stdin] and return
-    [f i]; thus, if we enter [41] at the keyboard, [scanf "%d" f] evaluates to [42].
+    format string [fmt]. For instance, if [f] is defined as [let f x = x + 1],
+    then [scanf "%d" f] will read a decimal integer [i] from [stdin] and return
+    [f i]; thus, if we enter [41] at the keyboard, [scanf "%d" f] evaluates to
+    [42].
 
-    This module provides general formatted input functions that reads from any
+    This module provides general formatted input functions that read from any
     kind of input, including strings, files, or anything that can return
     characters.
     Hence, a typical call to a formatted input function [bscan] is
@@ -54,20 +55,20 @@ module Scanning : sig
 
 type scanbuf;;
 (** The type of scanning buffers. A scanning buffer is the source from which a
-    formatted input function gets characters. The scanning buffer holds the current
-    state of the scan, plus a function to get the next char from the input, and
-    a token buffer to store the string matched so far.
+    formatted input function gets characters. The scanning buffer holds the
+    current state of the scan, plus a function to get the next char from the
+    input, and a token buffer to store the string matched so far.
 
-   Note: a scan may often require to examine one character in advance;
-   when this ``lookahead'' character does not belong to the token read, 
-   it is stored back in the scanning buffer and becomes the next
-   character read. *)
+    Note: a scan may often require to examine one character in advance;
+    when this ``lookahead'' character does not belong to the token read,
+    it is stored back in the scanning buffer and becomes the next
+    character read. *)
 
 val stdib : scanbuf;;
 (** The scanning buffer reading from [stdin].
     [stdib] is equivalent to [Scanning.from_channel stdin].
 
-    Note: when input is read interactively from [stdin], the carriage return
+    Note: when input is read interactively from [stdin], the newline character
     that triggers the evaluation is incorporated in the input; thus, scanning
     specifications must properly skip this character (simply add a ['\n']
     as the last character of the format string). *)
@@ -118,7 +119,7 @@ val name_of_input : scanbuf -> string;;
 end;;
 
 exception Scan_failure of string;;
-(** The exception that formatted input functions raise when the input cannot be
+(** The exception raised by formatted input functions when the input cannot be
     read according to the given format. *)
 
 type ('a, 'b, 'c, 'd) scanner =
@@ -147,7 +148,7 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;;
 (** [bscanf ib fmt r1 ... rN f] reads arguments for the function [f] from the
    scanning buffer [ib] according to the format string [fmt], and applies [f]
    to these values.
-   This application of [f] is the result of the whole construct.
+   The result of this call to [f] is returned as the result of [bscanf].
    For instance, if [f] is the function [fun s i -> i + 1], then
    [Scanf.sscanf "x = 1" "%s = %i" f] returns [2].
 
@@ -164,7 +165,7 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;;
 
    Among plain characters the space character (ASCII code 32) has a
    special meaning: it matches ``whitespace'', that is any number of tab,
-   space, newline and carriage return characters. Hence, a space in the format
+   space, line feed and carriage return characters. Hence, a space in the format
    matches any amount of whitespace in the input.
 
    Conversion specifications consist in the [%] character, followed by
@@ -210,7 +211,7 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;;
    - [\[ range \]]: reads characters that matches one of the characters
      mentioned in the range of characters [range] (or not mentioned in
      it, if the range starts with [^]). Reads a [string] that can be
-     empty, if no character in the input matches the range. The set of
+     empty, if the next input character does not match the range. The set of
      characters from [c1] to [c2] (inclusively) is denoted by [c1-c2].
      Hence, [%\[0-9\]] returns a string representing a decimal number
      or an empty string if no decimal digit is found; similarly,
@@ -238,18 +239,18 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;;
    - [!]: matches the end of input condition.
    - [%]: matches one [%] character in the input.
 
-   Following the [%] character introducing a conversion, there may be
+   Following the [%] character that introduces a conversion, there may be
    the special flag [_]: the conversion that follows occurs as usual,
    but the resulting value is discarded.
    For instance, if [f] is the function [fun i -> i + 1], then
    [Scanf.sscanf "x = 1" "%_s = %i" f] returns [2].
 
-   The field widths are composed of an optional integer literal
+   The field width is composed of an optional integer literal
    indicating the maximal width of the token to read.
    For instance, [%6d] reads an integer, having at most 6 decimal digits;
    [%4f] reads a float with at most 4 characters; and [%8\[\\000-\\255\]]
    returns the next 8 characters (or all the characters still available,
-   if less than 8 characters are available in the input).
+   if fewer than 8 characters are available in the input).
 
    Scanning indications appear just after the string conversions [%s]
    and [%\[ range \]] to delimit the end of the token. A scanning
@@ -258,7 +259,7 @@ val bscanf : Scanning.scanbuf -> ('a, 'b, 'c, 'd) scanner;;
    just before the next matching [c] (which is skipped). If no [c]
    character is encountered, the string token spreads as much as
    possible. For instance, ["%s@\t"] reads a string up to the next
-   tabulation character or to the end of input. If a scanning
+   tab character or to the end of input. If a scanning
    indication [\@c] does not follow a string conversion, it is treated
    as a plain [c] character.
 
@@ -302,8 +303,8 @@ val fscanf : in_channel -> ('a, 'b, 'c, 'd) scanner;;
 
     Warning: since all formatted input functions operate from a scanning
     buffer, be aware that each [fscanf] invocation must allocate a new
-    fresh scanning buffer (unless careful use of partial evaluation in
-    the program). Hence, there are chances that some characters seem
+    fresh scanning buffer (unless you make careful use of partial
+    application). Hence, there are chances that some characters seem
     to be skipped (in fact they are pending in the previously used
     scanning buffer). This happens in particular when calling [fscanf] again
     after a scan involving a format that necessitated some look ahead
@@ -314,7 +315,7 @@ val fscanf : in_channel -> ('a, 'b, 'c, 'd) scanner;;
     to allocate the scanning buffer reading from file [f].
 
     This method is not only clearer it is also faster, since scanning
-    buffers to files are optimized for fast bufferized reading. *)
+    buffers to files are optimized for fast buffered reading. *)
 
 val sscanf : string -> ('a, 'b, 'c, 'd) scanner;;
 (** Same as {!Scanf.bscanf}, but reads from the given string. *)
@@ -328,8 +329,8 @@ val kscanf :
     ('a, 'b, 'c, 'd) scanner;;
 (** Same as {!Scanf.bscanf}, but takes an additional function argument
   [ef] that is called in case of error: if the scanning process or
-  some conversion fails, the scanning function aborts and applies the
-  error handling function [ef] to the scanning buffer and the
+  some conversion fails, the scanning function aborts and calls the
+  error handling function [ef] with the scanning buffer and the
   exception that aborted the scanning process. *)
 
 val bscanf_format :
@@ -338,8 +339,8 @@ val bscanf_format :
 (** [bscanf_format ib fmt f] reads a format string token from the scannning
   buffer [ib], according to the given format string [fmt], and applies [f] to
   the resulting format string value.
-  Raises [Scan_failure] if the format string value read has not the same type
-  as [fmt]. *)
+  Raise [Scan_failure] if the format string value read doesn't have the
+  same type as [fmt]. *)
 
 val sscanf_format :
   string -> ('a, 'b, 'c, 'd, 'e, 'f) format6 ->
@@ -351,5 +352,5 @@ val format_from_string :
     ('a, 'b, 'c, 'd, 'e, 'f) format6 -> ('a, 'b, 'c, 'd, 'e, 'f) format6;;
 (** [format_from_string s fmt] converts a string argument to a format string,
   according to the given format string [fmt].
-  Raises [Scan_failure] if [s], considered as a format string, has not the same
-  type as [fmt]. *)
+  Raise [Scan_failure] if [s], considered as a format string, doesn't
+  have the same type as [fmt]. *)
index a08c67f2c0c5b1ef6537758204b3aa6fbfcbd21b..6605da19e65c0da72f1fd2976e4203280c3506d2 100644 (file)
@@ -10,7 +10,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: oprint.ml,v 1.24 2006/04/21 06:17:30 garrigue Exp $ *)
+(* $Id: oprint.ml,v 1.24.8.1 2007/04/26 14:34:50 doligez Exp $ *)
 
 open Format
 open Outcometree
@@ -391,20 +391,20 @@ and print_out_type_decl kwd ppf (name, args, ty, priv, constraints) =
     | _ -> ty
   in
   let print_private ppf = function
-    Asttypes.Private -> fprintf ppf "private "
+    Asttypes.Private -> fprintf ppf " private"
   | Asttypes.Public -> () in
   let rec print_out_tkind ppf = function
   | Otyp_abstract -> ()
   | Otyp_record lbls ->
-      fprintf ppf " = %a{%a@;<1 -2>}"
+      fprintf ppf " =%a {%a@;<1 -2>}"
         print_private priv
         (print_list_init print_out_label (fun ppf -> fprintf ppf "@ ")) lbls
   | Otyp_sum constrs ->
-      fprintf ppf " =@;<1 2>%a%a"
+      fprintf ppf " =%a@;<1 2>%a"
         print_private priv
         (print_list print_out_constr (fun ppf -> fprintf ppf "@ | ")) constrs
   | ty ->
-      fprintf ppf " =@;<1 2>%a%a"
+      fprintf ppf " =%a@;<1 2>%a"
         print_private priv
         !out_type ty
   in
index 4d8ac8074f56beeb88379ca268ec8dff6d1e8724..691eb494b5426a338fd148b2cea1064c4108e296 100644 (file)
@@ -10,7 +10,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: typecore.ml,v 1.190 2007/02/27 04:54:05 garrigue Exp $ *)
+(* $Id: typecore.ml,v 1.190.2.1 2007/05/02 02:10:54 garrigue Exp $ *)
 
 (* Typechecking for the core language *)
 
@@ -1812,10 +1812,16 @@ and type_expect ?in_function env sexp ty_expected =
               raise(Error(loc,
                           Too_many_arguments (in_function <> None, ty_fun)))
       in
-      if is_optional l then begin
-        try unify env ty_arg (type_option(newvar()))
-        with Unify _ -> assert false
-      end;
+      let ty_arg =
+        if is_optional l then
+          let tv = newvar() in
+          begin
+            try unify env ty_arg (type_option tv)
+            with Unify _ -> assert false
+          end;
+          type_option tv
+        else ty_arg
+      in
       let cases, partial =
         type_cases ~in_function:(loc,ty_fun) env ty_arg ty_res
           (Some sexp.pexp_loc) caselist in
index 0346d7b1ae3cca516c928b29c02ae76666519819..e552b0165a020832bf3eb11aa4af59536623edf8 100644 (file)
@@ -10,7 +10,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: typedecl.ml,v 1.76.6.1 2007/03/05 01:24:10 garrigue Exp $ *)
+(* $Id: typedecl.ml,v 1.76.6.2 2007/03/12 13:14:26 garrigue Exp $ *)
 
 (**** Typing of type definitions ****)
 
@@ -369,6 +369,7 @@ let check_recursion env loc path decl to_check =
         Ctype.correct_abbrev env path decl.type_params body
       with Ctype.Recursive_abbrev ->
         raise(Error(loc, Recursive_abbrev (Path.name path)))
+      | Ctype.Unify trace -> raise(Error(loc, Type_clash trace))
       end;
       (* Check that recursion is regular *)
       if decl.type_params = [] then () else
index 5bd3921d4db92e41ef6a00d9b3c9f5f3856be10c..6c8e8eec26cbd89836290084ea3b14e150a090b9 100644 (file)
@@ -10,7 +10,7 @@
 (*                                                                     *)
 (***********************************************************************)
 
-(* $Id: typemod.ml,v 1.78 2007/02/23 13:44:51 ertai Exp $ *)
+(* $Id: typemod.ml,v 1.78.2.1 2007/04/26 09:43:13 xleroy Exp $ *)
 
 (* Type-checking of the module language *)
 
@@ -788,30 +788,33 @@ let type_implementation sourcefile outputprefix modulename initial_env ast =
     Misc.try_finally (fun () -> type_structure initial_env ast)
                      (fun () -> Stypes.dump (outputprefix ^ ".annot"))
   in
+  let simple_sg = simplify_signature sg in
   Typecore.force_delayed_checks ();
   if !Clflags.print_types then begin
-    fprintf std_formatter "%a@." Printtyp.signature (simplify_signature sg);
-    (str, Tcoerce_none)
+    fprintf std_formatter "%a@." Printtyp.signature simple_sg;
+    (str, Tcoerce_none)   (* result is ignored by Compile.implementation *)
   end else begin
-    let coercion =
-      let sourceintf =
-        Misc.chop_extension_if_any sourcefile ^ !Config.interface_suffix in
-      if Sys.file_exists sourceintf then begin
-        let intf_file =
-          try
-            find_in_path_uncap !Config.load_path (modulename ^ ".cmi")
-          with Not_found ->
-            raise(Error(Location.none, Interface_not_compiled sourceintf)) in
-        let dclsig = Env.read_signature modulename intf_file in
-        Includemod.compunit sourcefile sg intf_file dclsig
-      end else begin
-        check_nongen_schemes finalenv str;
-        normalize_signature finalenv sg;
-        if not !Clflags.dont_write_files then
-          Env.save_signature sg modulename (outputprefix ^ ".cmi");
-        Tcoerce_none
-      end in
-    (str, coercion)
+    let sourceintf =
+      Misc.chop_extension_if_any sourcefile ^ !Config.interface_suffix in
+    if Sys.file_exists sourceintf then begin
+      let intf_file =
+        try
+          find_in_path_uncap !Config.load_path (modulename ^ ".cmi")
+        with Not_found ->
+          raise(Error(Location.none, Interface_not_compiled sourceintf)) in
+      let dclsig = Env.read_signature modulename intf_file in
+      let coercion = Includemod.compunit sourcefile sg intf_file dclsig in
+      (str, coercion)
+    end else begin
+      check_nongen_schemes finalenv str;
+      normalize_signature finalenv sg;
+      let coercion =
+        Includemod.compunit sourcefile sg
+                            "(inferred signature)" simple_sg in
+      if not !Clflags.dont_write_files then
+        Env.save_signature simple_sg modulename (outputprefix ^ ".cmi");
+      (str, coercion)
+    end
   end
 
 (* "Packaging" of several compilation units into one unit
index 7d60b33b309b11f571ca66f8e7ff883422e87f3d..4f615abbdf521d002f488625bcabf65b24304ff4 100644 (file)
@@ -271,8 +271,9 @@ let rec transl_type env policy styp =
         try
           let f' = List.assoc l fields in
           let ty = mkfield l f and ty' = mkfield l f' in
-          if equal env false [ty] [ty'] then fields
-          else raise(Error(loc, Constructor_mismatch (ty,ty')))
+          if equal env false [ty] [ty'] then fields else
+          try unify env ty ty'; fields
+          with Unify trace -> raise(Error(loc, Constructor_mismatch (ty,ty')))
         with Not_found ->
           (l, f) :: fields
       in
index 22223aa2f060510054c257ff4a6457fabf21961e..fc1e7e590868a436602856c2b62792d01f106115 100644 (file)
@@ -10,7 +10,7 @@
 /*                                                                     */
 /***********************************************************************/
 
-/* $Id: inria.h,v 1.5 2004/06/17 07:33:44 xleroy Exp $ */
+/* $Id: inria.h,v 1.5.18.1 2007/05/12 09:20:51 xleroy Exp $ */
 
 /*------------------------------------------------------------------------
  Module:        D:\lcc\inria\inria.h
 #include "editbuffer.h"
 #include "history.h"
 
+#if _MSC_VER <= 1200
+#define GetWindowLongPtr GetWindowLong
+#define SetWindowLongPtr SetWindowLong
+#define DWLP_USER DWL_USER
+#define GWLP_WNDPROC GWL_WNDPROC
+#define LONG_PTR DWORD
+#endif
+
 // In this structure should go eventually all global variables scattered
 // through the program.
 typedef struct _programParams {