From 8a6c3b24e2e598c95a9cc7e76707755d72832c4b Mon Sep 17 00:00:00 2001 From: doligez Date: Mon, 8 Oct 2007 14:19:34 +0000 Subject: [PATCH] fusion de la version 3.10.0 git-svn-id: svn+ssh://yquem.inria.fr/net/yquem/devel/caml/svn/ocaml/trunk@8416 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02 --- Changes | 15 +- Makefile | 15 +- Makefile.nt | 12 +- VERSION | 2 +- _tags | 22 +- asmcomp/i386/emit.mlp | 2 +- asmcomp/power/emit.mlp | 35 +- boot/myocamlbuild.boot | Bin 1647177 -> 1667336 bytes boot/ocamlc | Bin 1021065 -> 1021647 bytes boot/ocamldep | Bin 284189 -> 286557 bytes boot/ocamllex | Bin 162155 -> 162155 bytes build/boot-c-parts-windows.sh | 12 +- build/boot-c-parts.sh | 19 +- build/boot.sh | 21 +- build/buildbot | 109 + build/camlp4-bootstrap.sh | 6 + build/camlp4-byte-only.sh | 6 +- build/camlp4-native-only.sh | 6 +- build/camlp4-targets.sh | 7 +- build/distclean.sh | 21 +- build/fastworld.sh | 3 +- build/install.sh | 373 +- build/mkconfig.sh | 9 +- build/mkmyocamlbuild_config.sh | 1 + build/mkruntimedef.sh | 9 + build/myocamlbuild.sh | 16 +- build/ocamlbuild-byte-only.sh | 6 +- build/ocamlbuild-native-only.sh | 6 +- build/otherlibs-targets.sh | 1 + build/partial-boot.sh | 4 +- build/partial-install.sh | 43 +- build/targets.sh | 15 +- build/world.all.sh | 1 + build/world.byte.sh | 1 + build/world.native.sh | 1 + build/world.sh | 1 + byterun/config.h | 2 +- byterun/globroots.c | 10 +- byterun/globroots.h | 4 +- camlp4/Camlp4/Camlp4Ast.partial.ml | 21 +- camlp4/Camlp4/ErrorHandler.ml | 4 +- camlp4/Camlp4/OCamlInitSyntax.ml | 86 +- camlp4/Camlp4/PreCast.ml | 3 +- camlp4/Camlp4/PreCast.mli | 13 +- camlp4/Camlp4/Printers/DumpCamlp4Ast.ml | 2 +- camlp4/Camlp4/Printers/DumpCamlp4Ast.mli | 3 +- camlp4/Camlp4/Printers/DumpOCamlAst.ml | 2 +- camlp4/Camlp4/Printers/DumpOCamlAst.mli | 3 +- camlp4/Camlp4/Printers/Null.mli | 2 +- camlp4/Camlp4/Printers/OCaml.ml | 95 +- camlp4/Camlp4/Printers/OCaml.mli | 13 +- camlp4/Camlp4/Printers/OCamlr.ml | 51 +- camlp4/Camlp4/Printers/OCamlr.mli | 10 +- camlp4/Camlp4/Register.ml | 27 +- camlp4/Camlp4/Register.mli | 17 +- camlp4/Camlp4/Sig.ml | 291 +- camlp4/Camlp4/Struct.mlpack | 2 +- camlp4/Camlp4/Struct/Camlp4Ast.mlast | 276 +- camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml | 62 +- camlp4/Camlp4/Struct/CleanAst.ml | 11 +- camlp4/Camlp4/Struct/CommentFilter.mli | 2 +- camlp4/Camlp4/Struct/DynAst.ml | 91 + camlp4/Camlp4/Struct/EmptyPrinter.ml | 2 - camlp4/Camlp4/Struct/EmptyPrinter.mli | 2 +- camlp4/Camlp4/Struct/FreeVars.ml | 5 +- camlp4/Camlp4/Struct/Grammar/Context.ml | 6 +- camlp4/Camlp4/Struct/Grammar/Parser.mli | 70 + camlp4/Camlp4/Struct/Grammar/Print.ml | 4 +- camlp4/Camlp4/Struct/Lexer.mll | 89 +- camlp4/Camlp4/Struct/Quotation.ml | 72 +- camlp4/Camlp4/Struct/Token.ml | 2 +- camlp4/Camlp4/Struct/Warning.ml | 26 - camlp4/Camlp4Bin.ml | 29 +- camlp4/Camlp4Filters/Camlp4FoldGenerator.ml | 39 +- .../Camlp4Filters/Camlp4LocationStripper.ml | 2 +- camlp4/Camlp4Filters/Camlp4MapGenerator.ml | 44 +- camlp4/Camlp4Filters/Camlp4Tracer.ml | 2 +- camlp4/Camlp4Filters/Camlp4TrashRemover.ml | 2 +- camlp4/Camlp4Parsers/Camlp4GrammarParser.ml | 7 +- camlp4/Camlp4Parsers/Camlp4MacroParser.ml | 186 +- .../Camlp4OCamlOriginalQuotationExpander.ml | 2 +- camlp4/Camlp4Parsers/Camlp4OCamlParser.ml | 335 +- .../Camlp4OCamlReloadedParser.ml | 94 + .../Camlp4Parsers/Camlp4OCamlRevisedParser.ml | 520 +- .../Camlp4OCamlRevisedParserParser.ml | 7 +- .../Camlp4OCamlRevisedQuotationExpander.ml | 2 +- camlp4/Camlp4Parsers/Camlp4QuotationCommon.ml | 32 +- camlp4/Camlp4Top/Rprint.ml | 2 +- camlp4/Camlp4Top/Top.ml | 4 +- camlp4/Camlp4_config.ml | 1 + camlp4/Camlp4_config.mli | 1 + camlp4/boot/Camlp4.ml | 15178 ++++++++-------- camlp4/boot/Camlp4.ml4 | 2 +- camlp4/boot/Camlp4Ast.ml | 9381 +++++----- camlp4/boot/camlp4boot.ml | 2905 ++- camlp4/boot/camlp4boot.ml4 | 1 + camlp4/camlp4fulllib.mllib | 42 + camlp4/examples/_tags | 8 + camlp4/examples/apply_operator.ml | 6 + camlp4/examples/apply_operator_test.ml | 1 + camlp4/examples/lambda_quot.ml | 38 + camlp4/examples/lambda_test.ml | 13 + camlp4/examples/macros.ml | 67 + camlp4/examples/parse_files.ml | 31 + camlp4/examples/test_macros.ml | 15 + camlp4/examples/test_type_quotation.ml | 3 + camlp4/examples/type_quotation.ml | 18 + camlp4/test/fixtures/macrotest.ml | 15 + config/Makefile.msvc | 18 +- configure | 16 +- man/ocaml.m | 2 +- myocamlbuild.ml | 164 +- ocamlbuild/ChangeLog | 145 + ocamlbuild/Makefile | 5 +- ocamlbuild/TODO | 1 + ocamlbuild/command.ml | 8 +- ocamlbuild/command.mli | 2 + ocamlbuild/examples/example_with_C/_tags | 1 + ocamlbuild/examples/example_with_C/fib.ml | 5 + ocamlbuild/examples/example_with_C/fibwrap.c | 7 + ocamlbuild/examples/example_with_C/main.c | 10 + .../examples/example_with_C/myocamlbuild.ml | 35 + ocamlbuild/examples/example_with_C/x.ml | 1 + ocamlbuild/executor.ml | 16 +- ocamlbuild/main.ml | 2 + ocamlbuild/manual/manual.tex | 15 +- ocamlbuild/my_std.ml | 25 +- ocamlbuild/my_unix.ml | 2 +- ocamlbuild/my_unix_with_unix.ml | 4 +- ocamlbuild/ocaml_compiler.ml | 31 +- ocamlbuild/ocaml_specific.ml | 35 +- ocamlbuild/ocaml_tools.ml | 13 +- ocamlbuild/ocaml_utils.ml | 22 +- ocamlbuild/ocamlbuild-presentation.rslide | 1 + ocamlbuild/ocamlbuild_where.mli | 5 +- ocamlbuild/ocamldep.ml | 18 +- ocamlbuild/ocamldep.mli | 6 +- ocamlbuild/options.ml | 54 +- ocamlbuild/pathname.ml | 24 +- ocamlbuild/plugin.ml | 2 +- ocamlbuild/rule.ml | 18 +- ocamlbuild/rule.mli | 5 +- ocamlbuild/shell.ml | 26 +- ocamlbuild/signatures.mli | 7 +- ocamlbuild/start.sh | 2 +- ocamlbuild/test/good-output | 193 +- ocamlbuild/test/test7/test.sh | 5 +- ocamlbuild/test/test8/myocamlbuild.ml | 2 +- ocamldoc/odoc_args.ml | 1 + ocamldoc/odoc_config.ml | 6 +- ocamldoc/odoc_config.mli | 3 + ocamldoc/odoc_info.ml | 1 + ocamldoc/odoc_info.mli | 3 + ocamldoc/odoc_messages.ml | 3 +- otherlibs/labltk/support/Makefile | 6 +- otherlibs/labltk/support/tkthread.ml | 4 +- otherlibs/labltk/support/tkthread.mli | 12 +- otherlibs/num/.depend | 2 +- otherlibs/systhreads/Makefile | 4 +- parsing/printast.ml | 15 +- stdlib/scanf.mli | 46 +- typing/ctype.ml | 14 +- typing/oprint.ml | 8 +- typing/typecore.ml | 14 +- typing/typedecl.ml | 5 +- typing/typemod.ml | 50 +- typing/typetexp.ml | 20 +- win32caml/inria.h | 8 + 168 files changed, 17988 insertions(+), 14406 deletions(-) create mode 100755 build/buildbot create mode 100755 build/mkruntimedef.sh create mode 100644 camlp4/Camlp4/Struct/DynAst.ml create mode 100644 camlp4/Camlp4/Struct/Grammar/Parser.mli delete mode 100644 camlp4/Camlp4/Struct/Warning.ml create mode 100644 camlp4/Camlp4Parsers/Camlp4OCamlReloadedParser.ml create mode 100644 camlp4/camlp4fulllib.mllib create mode 100644 camlp4/examples/_tags create mode 100644 camlp4/examples/apply_operator.ml create mode 100644 camlp4/examples/apply_operator_test.ml create mode 100644 camlp4/examples/lambda_quot.ml create mode 100644 camlp4/examples/lambda_test.ml create mode 100644 camlp4/examples/macros.ml create mode 100644 camlp4/examples/parse_files.ml create mode 100644 camlp4/examples/test_macros.ml create mode 100644 camlp4/examples/test_type_quotation.ml create mode 100644 camlp4/examples/type_quotation.ml create mode 100644 ocamlbuild/examples/example_with_C/_tags create mode 100644 ocamlbuild/examples/example_with_C/fib.ml create mode 100644 ocamlbuild/examples/example_with_C/fibwrap.c create mode 100644 ocamlbuild/examples/example_with_C/main.c create mode 100644 ocamlbuild/examples/example_with_C/myocamlbuild.ml create mode 100644 ocamlbuild/examples/example_with_C/x.ml diff --git a/Changes b/Changes index 546650ba..154b9c67 100644 --- a/Changes +++ b/Changes @@ -8,21 +8,23 @@ Standard library: Objective Caml 3.10.0: ---------------------- +(Changes that can break existing programs are marked with a "*" ) + Language features: - Added virtual instance variables in classes "val virtual v : t" -- Changed the behaviour of instance variable overriding; the new +* Changed the behaviour of instance variable overriding; the new definition replaces the old one, rather than creating a new variable. New tools: - ocamlbuild: compilation manager for OCaml applications and libraries. - See description in reference manual. -- Camlp4: heavily revised implementation, new API. + See draft documentation at http://gallium.inria.fr/~pouillar/ +* Camlp4: heavily revised implementation, new API. New ports: -- MacOSX PowerPC 64 bits. -- MS Windows 32 bits using the Visual Studio 2005 toolchain. +- MacOS X PowerPC 64 bits. - MS Windows 64 bits (x64) using the Microsoft PSDK toolchain. +- MS Windows 32 bits using the Visual Studio 2005 toolchain. Compilers: - Faster type-checking of functor applications. @@ -72,8 +74,9 @@ Other libraries: better handling of channels opened on sockets (PR#4098); fixed GC bug in Unix.system (PR#4112). -OCamldoc: +Documentation generator (OCamldoc): - correctly handle '?' in value names (PR#4215) +- new option -hide-warnings not to print ocamldoc warnings Lexer generator (ocamllex): improved error reporting. diff --git a/Makefile b/Makefile index f33abeb0..2f1c047b 100644 --- a/Makefile +++ b/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: @@ -609,8 +610,6 @@ camlp4out: ocamlc otherlibraries ocamlbuild-partial-boot ocamlbuild.byte ./build/camlp4-byte-only.sh camlp4opt: ocamlopt otherlibrariesopt ocamlbuild-partial-boot ocamlbuild.native ./build/camlp4-native-only.sh -partialclean:: - rm -rf _build/camlp4 # Ocamlbuild @@ -618,12 +617,12 @@ ocamlbuild.byte: ocamlc otherlibraries ocamlbuild-partial-boot ./build/ocamlbuild-byte-only.sh ocamlbuild.native: ocamlopt otherlibrariesopt ocamlbuild-partial-boot ./build/ocamlbuild-native-only.sh -partialclean:: - rm -rf _build/ocamlbuild .PHONY: ocamlbuild-partial-boot ocamlbuild-partial-boot: ./build/partial-boot.sh +partialclean:: + rm -rf _build # Check that the stack limit is reasonable. diff --git a/Makefile.nt b/Makefile.nt index 60d8db6f..ec8b91b1 100644 --- a/Makefile.nt +++ b/Makefile.nt @@ -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: @@ -568,8 +570,6 @@ camlp4out: ocamlc otherlibraries ocamlbuild-partial-boot ocamlbuild.byte ./build/camlp4-byte-only.sh camlp4opt: ocamlopt otherlibrariesopt ocamlbuild-partial-boot ocamlbuild.native ./build/camlp4-native-only.sh -partialclean:: - rm -rf _build/camlp4 # Ocamlbuild @@ -577,12 +577,12 @@ ocamlbuild.byte: ocamlc otherlibraries ocamlbuild-partial-boot ./build/ocamlbuild-byte-only.sh ocamlbuild.native: ocamlopt otherlibrariesopt ocamlbuild-partial-boot ./build/ocamlbuild-native-only.sh -partialclean:: - rm -rf _build/ocamlbuild .PHONY: ocamlbuild-partial-boot ocamlbuild-partial-boot: ./build/partial-boot.sh +partialclean:: + rm -rf _build # The Win32 toplevel GUI diff --git a/VERSION b/VERSION index ae4108de..2fa41a2d 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ -3.11+dev3 (2007-10-04) +3.11+dev4 (2007-10-08) # The version string is the first line of this file. # It must be in the format described in stdlib/sys.mli diff --git a/_tags b/_tags index 6856ef9a..6dd67f0e 100644 --- a/_tags +++ b/_tags @@ -3,31 +3,41 @@ true: -traverse # Traverse only these directories -<{bytecomp,driver,stdlib,tools,asmcomp,camlp4,ocamlbuild,toplevel,ocamldoc,typing,otherlibs,utils,debugger,lex,parsing,byterun}/**>: traverse +<{bytecomp,driver,stdlib,tools,asmcomp,camlp4,ocamlbuild,toplevel,ocamldoc,typing,otherlibs,utils,debugger,lex,parsing,byterun,asmrun}/**>: traverse -"boot" or "byterun": not_hygienic +"boot" or "byterun" or "asmrun": not_hygienic # These should not be required but it fails on *BSD and Windows... -"yacc" or "asmrun" or "win32caml": not_hygienic +"yacc" or "win32caml": not_hygienic + +# We want -g everywhere it's possible +true: debug + +# By default everything we link needs the stdlib +true: use_stdlib + +# The stdlib don't require the stdlib +: -use_stdlib <**/*.ml*>: warn_Alez "toplevel/topstart.byte": linkall +: -debug : ocamldoc_sources : include_unix, include_str, include_dynlink "ocamldoc/odoc.byte": use_unix, use_str, use_dynlink "ocamldoc/odoc_opt.native": use_unix, use_str -: debug : camlp4boot, -warn_Alez, warn_Ale : -camlp4boot - or or "camlp4/Camlp4/Struct/Lexer.ml": -camlp4boot, -warn_Ale, warn_a, -debug + or or "camlp4/Camlp4/Struct/Lexer.ml": -camlp4boot, -warn_Ale, warn_a "camlp4/Camlp4Bin.byte" or "camlp4/mkcamlp4.byte" or "camlp4/camlp4lib.cma": use_dynlink "camlp4/Camlp4/Printers/OCaml.ml" or "camlp4/Camlp4/Printers/OCamlr.ml": warn_Alezv : include_unix "camlp4/Camlp4/Struct/DynLoader.ml": include_dynlink : include_toplevel +: -debug : -warn_Alez, include_unix @@ -52,8 +62,6 @@ true: -traverse # See the remark about static linking of threads.cmxa in myocamlbuild.ml : ocamlmklib -<**/*.ml{,i}>: include_stdlib -"otherlibs/threads/unix.ml" or "otherlibs/threads/marshal.ml": -include_stdlib, include_threads_stdlib "otherlibs/threads/pervasives.ml": include_unix : otherlibs diff --git a/asmcomp/i386/emit.mlp b/asmcomp/i386/emit.mlp index b8191771..b50ecff2 100644 --- a/asmcomp/i386/emit.mlp +++ b/asmcomp/i386/emit.mlp @@ -979,7 +979,7 @@ let end_assembly() = efa_word = (fun n -> ` .long {emit_int n}\n`); efa_align = emit_align; efa_label_rel = (fun lbl ofs -> - ` .long ({emit_label lbl} - .) + {emit_int32 ofs}\n`); + ` .long {emit_label lbl} - . + {emit_int32 ofs}\n`); efa_def_label = (fun l -> `{emit_label l}:\n`); efa_string = (fun s -> let s = s ^ "\000" in diff --git a/asmcomp/power/emit.mlp b/asmcomp/power/emit.mlp index 46702e37..81a1894e 100644 --- a/asmcomp/power/emit.mlp +++ b/asmcomp/power/emit.mlp @@ -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; diff --git a/boot/myocamlbuild.boot b/boot/myocamlbuild.boot index e868dfe980091dfd4e69390855b0733cd4a94c32..3187433c9466bb17f1000eeeae1ca41232793dc0 100755 GIT binary patch delta 473199 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

FZ1WJ2FXW| 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%0D-nNenypq9%4e66?33)Dtjmahl5u!3vL2@i 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≈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 z%0D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 diff --git a/boot/ocamlc b/boot/ocamlc index 71250fa9f6f6d38e22bc936b453cd567c6409850..7c34fd6226268f4e71c5b1e292169a0833178850 100755 GIT binary patch delta 63248 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 delta 62728 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

    H{(1 z7w}a~#A!|7%@!-MmIFF8b>_Y7XB(Yl#D)*{ZV7t-GF*6OH5=7cKji9QvWH_=UU2T` z0ekY`j`nj(-F!Me$WiO9abeTA_RP->>gV$_*5n6p*dC}E?Yr{#7mV%o%#$;I=`?50 zo;*6sKXvK-xg=1FX9VQfCfn~GI8`^cgw^wHcFZUV9!N9F_vU;mdaQRmbgF z6Qj=##Hah_)#*G=VnydQ0XvP|)ftN!|L}t4KwDn<{|EFxFJnI9teqR+gxhkU@#Xme zIegf)FAw$kxQzK_&H275Wbwy$58ngPuWRqf?#vNhmC>##@yS`{2Mo>)mJ$_&E*<1Hp+V*8*fA7C+>||KVRsapZ&6|-4lop z`{g9BjnfzpI>$NRweth<0~{9FIydX(Q!S4oa5*G+!$lF@LCSE>gOLFxYMo2 z#r-HR=g9DbE!^iaQJ8MlmmIIAm>(>OImw|ft^WfA#oB#I-{GHMDS?~VO zWqwBH|1GF*e6dfjf1emXI{(_t)mZ0m%v>%ye`V%-Gk^5Yf72I^c3zV8ael#U{+!I& z6<50CW&N~P-TynELbHeeFBr-#g~Mj6V2p9#pq@yBqy%)YGA_Uu!e|X#W1A zGu5ScR^Ri++XGzG-@nMe%p%=`bm8=-=o)?BJL#@3WWID-tFISiF3)oF--EqD!m$$T zO&Qz6yX(stYs)MD|2N+=#yC7>X5&BQ?|atAV{(pdT>izhF0OoB7uZ`9+%)Z#=M9;Q z8#&+atK&IYAJ@d_bEh>wr}g~rI_$K;6w6|^8yJ*@gpK)(%_C}jenq={%=P84p|C7HMH`eYS&*r~1oBzAn{9n)JKb|=o z&z)@W@jJ4HkM#{f<96G$ZcgsTnXcWLi&g7IOir4~JbpG`H=FkN*DT zZ2ldy`9GS?-#DAUHgmr9{_@dhkbcM1UpDoAR>Q;F{Dhp_n|?!}e^KCj+XaE92I<`% zhz-0uf2q)U?XUBPXSLhUjx|~T=(Jvce>(G{v)=jlX3n0XX79zuX-h%%8QW9;?w0tE zYwi}C)*chs=dUyD;Bj;8*t33GK(=pe=RMbX->}XK%2l%Y)S?{p5Glwew@VRk1muKjRpB>iKFn!j)cXs}3Cpk8IuX_KhxA(Vq zv3KoNIm7OrslRUOUp@8s*njQRzj5ksnfkX({adI0Yo`9|rv4r2@pc!VKJjc^ej$G; zm+qq{8L|DBSsUlym3e(QXOa_xcTRH7kLz#EdVM@^kiTitQ`>toZw%O@=fX+eJAK|v z{%M($d3vBW+?N*yO99@EZ{Jut<)U2bL*@ET-W3^o+g~}&ubTSZQ~%1TSEJ-_nEKaD z{p+Uw%cuSgQ$Nq&eEv@-xo@8OZ=L#YpZaf^`hPg<@0jN0{ngX_Yp4DltMqT5*4uym zG_Sq(@0r%WbL!ta>wk2b|M=8@VCv`RzI$4K-_(Ea)Zae!t>dqnt=GT$y>HsDpD&x{ zyQY3Vf5o(Z_0;#Cec3dB`K)iAyMFhy|Bt4Ap0_tm>u;X=Tc`dlQ(xZSIL-gb)X(#M zu=Dl%&gp!4ecd!~{+jP^nAxel_VfCB_ay%vQ{Q~GfB&@ped)b{;-L8spf;Wz{8eyC z@ViI;?cbqYmUXi3=#Id>l(Wwc_@+H7u)j0d5A}fC)F1Mn!Om^^p1}Ub z0H;saW>l=`@s1o9;7R{z=hDoN3N*g(Q4p6I1edupw3&U!S}(dVoWD(qTOECA%(Q?@0mO=L8zQYXW=xU>_H@7s)*< z>wG^u(5?vTE1uvS9@_(Y>Ho+Ae{o@tzuxiMt}cPC(b z9%bF|OOv(fW7QHEYQSGv;L^X(Vkq2ofwig=24uq%9VBOm<1a7a-dnGX2c(#4<`gm)#YDI z1Ei%=90lDF{qk4J>$xob2!F8uK7X+zrQxX@;r53R?5rvMSG4hNb7x~LyShh#PZ01?dmq^ zyjkqe4#Z5n)Pr%=P@Ow@+7@VHppNF%P3b-Lr#{^

    LR;h#vgWy*{(J&ozHBvwf$MQU!3Kma?gH#+&|bH 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 aO;5lBdT9k%MtksJIB)6FrDr*vOa32xGT7w+ diff --git a/boot/ocamllex b/boot/ocamllex index 1f74727b883f222a1bdfcf960c04a931fe7c132e..6c31d1dd98d8f502aa7c9748b6cb8176d8f88ffb 100755 GIT binary patch delta 46 ycmaF;iSzX*&W0AoEll67xJ(o@j0_CSbqx)+Gg>n#vT|}eUSI%&?b;4Z4we9O)C_X~ delta 46 ycmaF;iSzX*&W0AoEll67xQrAuj0_CSbq!3nGg>n#vU2h;fWZaF?b;4Z4we9JCk%D~ diff --git a/build/boot-c-parts-windows.sh b/build/boot-c-parts-windows.sh index f028c952..45193d33 100755 --- a/build/boot-c-parts-windows.sh +++ b/build/boot-c-parts-windows.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ cd `dirname $0`/.. set -ex @@ -10,7 +11,9 @@ set -ex (cd win32caml && make) mkdir -p _build/boot -cp -f byterun/{ocamlrun.exe,libcamlrun.$A,ocamlrun.dll} \ +cp -f byterun/ocamlrun.exe \ + byterun/libcamlrun.$A \ + byterun/ocamlrun.dll \ asmrun/libasmrun.$A \ yacc/ocamlyacc.exe \ boot/ocamlc \ @@ -20,10 +23,3 @@ cp -f byterun/{ocamlrun.exe,libcamlrun.$A,ocamlrun.dll} \ mkdir -p _build/byterun cp -f byterun/ocamlrun.exe byterun/ocamlrun.dll boot cp -f byterun/ocamlrun.$A _build/byterun -mkdir -p _build/stdlib -cp -f byterun/libcamlrun.$A \ - asmrun/libasmrun.$A \ - _build/stdlib -mkdir -p _build/asmrun -cp -f asmrun/{meta,dynlink}.$O \ - _build/asmrun diff --git a/build/boot-c-parts.sh b/build/boot-c-parts.sh index 5146a4fd..a38c1641 100755 --- a/build/boot-c-parts.sh +++ b/build/boot-c-parts.sh @@ -1,24 +1,21 @@ #!/bin/sh +# $Id$ cd `dirname $0`/.. set -ex -# Create a bunch of symlinks to _build/{boot,stdlib,asmrun} +# Create a bunch of symlinks to _build/boot mkdir -p _build/boot -ln -sf ../../byterun/{ocamlrun,libcamlrun.a} \ - ../../asmrun/libasmrun{,p}.a \ +ln -sf ../../byterun/ocamlrun \ + ../../byterun/libcamlrun.a \ + ../../asmrun/libasmrun.a \ + ../../asmrun/libasmrunp.a \ ../../yacc/ocamlyacc \ ../../boot/ocamlc \ ../../boot/ocamllex \ ../../boot/ocamldep \ _build/boot -ln -sf ../byterun/ocamlrun boot -mkdir -p _build/stdlib -ln -sf ../../byterun/libcamlrun.a \ - ../../asmrun/libasmrun{,p}.a \ - _build/stdlib -mkdir -p _build/asmrun -ln -sf ../../asmrun/{meta,dynlink}.o \ - _build/asmrun + +[ -f boot/ocamlrun ] || ln -sf ../byterun/ocamlrun boot (cd byterun && make) (cd asmrun && make all meta.o dynlink.o) diff --git a/build/boot.sh b/build/boot.sh index 91eb4203..7329d20b 100755 --- a/build/boot.sh +++ b/build/boot.sh @@ -1,12 +1,23 @@ #!/bin/sh +# $Id$ 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-dir _build/ocamlbuild -byte-plugin + -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 diff --git a/build/buildbot b/build/buildbot new file mode 100755 index 00000000..c755852f --- /dev/null +++ b/build/buildbot @@ -0,0 +1,109 @@ +#!/bin/sh + +usage() { + echo "Usage: $0 (make|ocb|ocamlbuild) (win (mingw|msvc|msvc64) | *)" + exit 1 +} + +logfile="buildbot.log" + +finish() { + curl -s -0 -F "log=@$logfile" \ + -F "host=`hostname`" \ + -F "mode=$mode-$opt_win-$opt_win2" \ + http://weblog.feydakins.org/dropbox || : +} + +rm -f buildbot.failed +rm -f $logfile + +bad() { + touch buildbot.failed +} + +finish_if_bad() { + if [ -f buildbot.failed ]; then + finish + exit 2 + fi +} + +if figlet "test" > /dev/null 2> /dev/null; then + draw="figlet" +else + draw="echo ----------- " +fi + +if echo | tee -a tee.log > /dev/null 2> /dev/null; then + tee="tee -a $logfile" +else + tee=: +fi + +rm -f tee.log + +log() { + $draw $@ + $tee +} + +mode=$1 +shift 1 + +case "$mode" in + make|ocb|ocamlbuild) : ;; + *) usage;; +esac + +case "$1" in + win) + opt_win=win + opt_win2=$2 + shift 2 + Makefile=Makefile.nt;; + *) Makefile=Makefile;; +esac + +( [ -f config/Makefile ] && make -f $Makefile clean || : ) 2>&1 | log clean + +( ./build/distclean.sh || : ) 2>&1 | log distclean + +(cvs -q up -dP -r release310 || bad) 2>&1 | log cvs up +finish_if_bad + +case "$opt_win" in +win) + + # FIXME + sed -e 's/\(OTHERLIBRARIES=.*\) labltk/\1/' \ + < "config/Makefile.$opt_win2" > config/Makefile || bad + finish_if_bad + + cp config/m-nt.h config/m.h || bad + finish_if_bad + cp config/s-nt.h config/s.h || bad + finish_if_bad + ;; + +*) + (./configure --prefix `pwd`/_install $@ || bad) 2>&1 | log configure + finish_if_bad + ;; +esac + +case "$mode" in + make) + (make -f $Makefile world opt opt.opt install || bad) 2>&1 | log build install + finish_if_bad + ;; + ocb|ocamlbuild) + (./build/fastworld.sh || bad) 2>&1 | log build + finish_if_bad + (./build/install.sh || bad) 2>&1 | log install + finish_if_bad + ;; +esac + +(cat _build/not_installed || bad) 2>&1 | log not_installed + +finish diff --git a/build/camlp4-bootstrap.sh b/build/camlp4-bootstrap.sh index e1458475..d5b448b1 100755 --- a/build/camlp4-bootstrap.sh +++ b/build/camlp4-bootstrap.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ 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 diff --git a/build/camlp4-byte-only.sh b/build/camlp4-byte-only.sh index 4085b9b2..1b2e3599 100755 --- a/build/camlp4-byte-only.sh +++ b/build/camlp4-byte-only.sh @@ -1,7 +1,9 @@ #!/bin/sh +# $Id$ set -e -export OCAMLBUILD_PARTIAL="true" +OCAMLBUILD_PARTIAL="true" +export OCAMLBUILD_PARTIAL cd `dirname $0`/.. . build/targets.sh set -x -$OCAMLBUILD $@ $OCAMLC_BYTE $OCAMLLEX_BYTE $CAMLP4_BYTE +$OCAMLBUILD $@ byte_stdlib_partial_mode $OCAMLC_BYTE $OCAMLLEX_BYTE $CAMLP4_BYTE diff --git a/build/camlp4-native-only.sh b/build/camlp4-native-only.sh index 59cbec37..638aba98 100755 --- a/build/camlp4-native-only.sh +++ b/build/camlp4-native-only.sh @@ -1,7 +1,9 @@ #!/bin/sh +# $Id$ set -e -export OCAMLBUILD_PARTIAL="true" +OCAMLBUILD_PARTIAL="true" +export OCAMLBUILD_PARTIAL cd `dirname $0`/.. . build/targets.sh set -x -$OCAMLBUILD $@ $OCAMLOPT_BYTE $OCAMLLEX_BYTE $CAMLP4_NATIVE +$OCAMLBUILD $@ native_stdlib_partial_mode $OCAMLOPT_BYTE $OCAMLLEX_BYTE $CAMLP4_NATIVE diff --git a/build/camlp4-targets.sh b/build/camlp4-targets.sh index 32b55db6..7c68906a 100644 --- a/build/camlp4-targets.sh +++ b/build/camlp4-targets.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ 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" diff --git a/build/distclean.sh b/build/distclean.sh index 606ebb5e..e9db9393 100755 --- a/build/distclean.sh +++ b/build/distclean.sh @@ -1,9 +1,10 @@ #!/bin/sh +# $Id$ cd `dirname $0`/.. set -ex -(cd byterun && make clean) -(cd asmrun && make clean) -(cd yacc && make clean) +(cd byterun && make clean) || : +(cd asmrun && make clean) || : +(cd yacc && make clean) || : rm -rf _build rm -f boot/ocamlrun boot/ocamlrun.exe boot/camlheader \ boot/myocamlbuild boot/myocamlbuild.native boot/myocamlbuild.native.exe \ @@ -12,13 +13,17 @@ rm -f boot/ocamlrun boot/ocamlrun.exe boot/camlheader \ # from partial boot rm -f driver/main.byte driver/optmain.byte lex/main.byte \ - tools/ocamlmklib.byte camlp4/build/location.ml{,i} \ - tools/myocamlbuild_config.ml camlp4/build/linenum.ml{i,l} \ - camlp4/build/terminfo.ml{i,} + tools/ocamlmklib.byte camlp4/build/location.ml \ + camlp4/build/location.mli \ + tools/myocamlbuild_config.ml camlp4/build/linenum.mli \ + camlp4/build/linenum.mll \ + camlp4/build/terminfo.mli camlp4/build/terminfo.ml # from ocamlbuild bootstrap -rm -f ocamlbuild/{_log,ocamlbuild.byte.start,boot/ocamlbuild} -rm -rf ocamlbuild/{_build,_start} +rm -f ocamlbuild/_log ocamlbuild/,ocamlbuild.byte.start \ + ocamlbuild/boot/ocamlbuild ocamlbuild/myocamlbuild_config.ml \ + ocamlbuild/myocamlbuild_config.mli +rm -rf ocamlbuild/_build ocamlbuild/_start # from the old build system rm -f camlp4/build/camlp4_config.ml camlp4/**/*.cm* diff --git a/build/fastworld.sh b/build/fastworld.sh index 16b4b9b3..59e093a1 100755 --- a/build/fastworld.sh +++ b/build/fastworld.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ cd `dirname $0` set -e ./mkconfig.sh @@ -21,7 +22,7 @@ $OCAMLBUILD $@ -log _boot_fast_log \ rm -f _build/myocamlbuild boot/ocamlrun boot/myocamlbuild \ - -just-plugin -install-dir _build/ocamlbuild \ + -just-plugin -install-lib-dir _build/ocamlbuild \ -ocamlopt "../_build/ocamlopt.opt -nostdlib -I boot -I stdlib -I $UNIXDIR" cp _build/myocamlbuild boot/myocamlbuild.native diff --git a/build/install.sh b/build/install.sh index 5a640ebf..12f32607 100755 --- a/build/install.sh +++ b/build/install.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ 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,p.$A} \ - asmrun/libasmrun.{$A,p.$A} \ - asmrun/libasmrunp.{$A,p.$A} \ +installlibdir byterun/libcamlrun.$A asmrun/libasmrun.$A asmrun/libasmrunp.$A \ $LIBDIR PUBLIC_INCLUDES="\ @@ -110,13 +114,20 @@ for i in $PUBLIC_INCLUDES; do done cd .. -installdir otherlibs/{win32,}unix/unixsupport.h $LIBDIR/caml +WIN32="" +if [ "x$EXE" = "x.exe" ]; then + installbin win32caml/ocamlwin.exe $PREFIX/OCamlWin.exe + installdir byterun/ocamlrun.dll $BINDIR + WIN32=win32 +fi -installdir byterun/ocamlrun.dll yacc/ocamlyacc byterun/ocamlrun $BINDIR +installdir otherlibs/"$WIN32"unix/unixsupport.h \ + otherlibs/bigarray/bigarray.h \ + $LIBDIR/caml -installdir byterun/ld.conf $LIBDIR +installdir yacc/ocamlyacc byterun/ocamlrun $BINDIR -installbin win32caml/ocamlwin.exe $PREFIX/OCamlWin.exe +installdir byterun/ld.conf $LIBDIR cd _build @@ -132,101 +143,101 @@ set=set # coloration workaround echo "Installing the standard library..." installdir \ stdlib/stdlib.cma \ - stdlib/stdlib{,.p}.cmxa \ + stdlib/stdlib.cmxa stdlib/stdlib.p.cmxa \ stdlib/camlheader \ stdlib/camlheader_ur \ stdlib/std_exit.cm[io] \ - stdlib/arg.{cmi,mli} \ - stdlib/array.{cmi,mli} \ - stdlib/arrayLabels.{cmi,mli} \ - stdlib/buffer.{cmi,mli} \ - stdlib/callback.{cmi,mli} \ - stdlib/camlinternalMod.{cmi,mli} \ - stdlib/camlinternalOO.{cmi,mli} \ - stdlib/char.{cmi,mli} \ - stdlib/complex.{cmi,mli} \ - stdlib/digest.{cmi,mli} \ - stdlib/filename.{cmi,mli} \ - stdlib/format.{cmi,mli} \ - stdlib/gc.{cmi,mli} \ - stdlib/genlex.{cmi,mli} \ - stdlib/hashtbl.{cmi,mli} \ - stdlib/int32.{cmi,mli} \ - stdlib/int64.{cmi,mli} \ - stdlib/lazy.{cmi,mli} \ - stdlib/lexing.{cmi,mli} \ - stdlib/list.{cmi,mli} \ - stdlib/listLabels.{cmi,mli} \ - stdlib/map.{cmi,mli} \ - stdlib/marshal.{cmi,mli} \ - stdlib/moreLabels.{cmi,mli} \ - stdlib/nativeint.{cmi,mli} \ - stdlib/obj.{cmi,mli} \ - stdlib/oo.{cmi,mli} \ - stdlib/parsing.{cmi,mli} \ - stdlib/pervasives.{cmi,mli} \ - stdlib/printexc.{cmi,mli} \ - stdlib/printf.{cmi,mli} \ - stdlib/queue.{cmi,mli} \ - stdlib/random.{cmi,mli} \ - stdlib/scanf.{cmi,mli} \ - stdlib/sort.{cmi,mli} \ - stdlib/stack.{cmi,mli} \ - stdlib/stdLabels.{cmi,mli} \ - stdlib/stream.{cmi,mli} \ - stdlib/string.{cmi,mli} \ - stdlib/stringLabels.{cmi,mli} \ - stdlib/sys.{cmi,mli} \ - stdlib/weak.{cmi,mli} \ - stdlib/$set.{cmi,mli} \ - stdlib/arg{,.p}.{cmx,$O} \ - stdlib/array{,.p}.{cmx,$O} \ - stdlib/arrayLabels{,.p}.{cmx,$O} \ - stdlib/buffer{,.p}.{cmx,$O} \ - stdlib/callback{,.p}.{cmx,$O} \ - stdlib/camlinternalMod{,.p}.{cmx,$O} \ - stdlib/camlinternalOO{,.p}.{cmx,$O} \ - stdlib/char{,.p}.{cmx,$O} \ - stdlib/complex{,.p}.{cmx,$O} \ - stdlib/digest{,.p}.{cmx,$O} \ - stdlib/filename{,.p}.{cmx,$O} \ - stdlib/format{,.p}.{cmx,$O} \ - stdlib/gc{,.p}.{cmx,$O} \ - stdlib/genlex{,.p}.{cmx,$O} \ - stdlib/hashtbl{,.p}.{cmx,$O} \ - stdlib/int32{,.p}.{cmx,$O} \ - stdlib/int64{,.p}.{cmx,$O} \ - stdlib/lazy{,.p}.{cmx,$O} \ - stdlib/lexing{,.p}.{cmx,$O} \ - stdlib/list{,.p}.{cmx,$O} \ - stdlib/listLabels{,.p}.{cmx,$O} \ - stdlib/map{,.p}.{cmx,$O} \ - stdlib/marshal{,.p}.{cmx,$O} \ - stdlib/moreLabels{,.p}.{cmx,$O} \ - stdlib/nativeint{,.p}.{cmx,$O} \ - stdlib/obj{,.p}.{cmx,$O} \ - stdlib/oo{,.p}.{cmx,$O} \ - stdlib/parsing{,.p}.{cmx,$O} \ - stdlib/pervasives{,.p}.{cmx,$O} \ - stdlib/printexc{,.p}.{cmx,$O} \ - stdlib/printf{,.p}.{cmx,$O} \ - stdlib/queue{,.p}.{cmx,$O} \ - stdlib/random{,.p}.{cmx,$O} \ - stdlib/scanf{,.p}.{cmx,$O} \ - stdlib/sort{,.p}.{cmx,$O} \ - stdlib/stack{,.p}.{cmx,$O} \ - stdlib/stdLabels{,.p}.{cmx,$O} \ - stdlib/std_exit{,.p}.{cmx,$O} \ - stdlib/stream{,.p}.{cmx,$O} \ - stdlib/string{,.p}.{cmx,$O} \ - stdlib/stringLabels{,.p}.{cmx,$O} \ - stdlib/sys{,.p}.{cmx,$O} \ - stdlib/weak{,.p}.{cmx,$O} \ - stdlib/$set{,.p}.{cmx,$O} \ + stdlib/arg.cmi stdlib/arg.mli \ + stdlib/array.cmi stdlib/array.mli \ + stdlib/arrayLabels.cmi stdlib/arrayLabels.mli \ + stdlib/buffer.cmi stdlib/buffer.mli \ + stdlib/callback.cmi stdlib/callback.mli \ + stdlib/camlinternalMod.cmi stdlib/camlinternalMod.mli \ + stdlib/camlinternalOO.cmi stdlib/camlinternalOO.mli \ + stdlib/char.cmi stdlib/char.mli \ + stdlib/complex.cmi stdlib/complex.mli \ + stdlib/digest.cmi stdlib/digest.mli \ + stdlib/filename.cmi stdlib/filename.mli \ + stdlib/format.cmi stdlib/format.mli \ + stdlib/gc.cmi stdlib/gc.mli \ + stdlib/genlex.cmi stdlib/genlex.mli \ + stdlib/hashtbl.cmi stdlib/hashtbl.mli \ + stdlib/int32.cmi stdlib/int32.mli \ + stdlib/int64.cmi stdlib/int64.mli \ + stdlib/lazy.cmi stdlib/lazy.mli \ + stdlib/lexing.cmi stdlib/lexing.mli \ + stdlib/list.cmi stdlib/list.mli \ + stdlib/listLabels.cmi stdlib/listLabels.mli \ + stdlib/map.cmi stdlib/map.mli \ + stdlib/marshal.cmi stdlib/marshal.mli \ + stdlib/moreLabels.cmi stdlib/moreLabels.mli \ + stdlib/nativeint.cmi stdlib/nativeint.mli \ + stdlib/obj.cmi stdlib/obj.mli \ + stdlib/oo.cmi stdlib/oo.mli \ + stdlib/parsing.cmi stdlib/parsing.mli \ + stdlib/pervasives.cmi stdlib/pervasives.mli \ + stdlib/printexc.cmi stdlib/printexc.mli \ + stdlib/printf.cmi stdlib/printf.mli \ + stdlib/queue.cmi stdlib/queue.mli \ + stdlib/random.cmi stdlib/random.mli \ + stdlib/scanf.cmi stdlib/scanf.mli \ + stdlib/sort.cmi stdlib/sort.mli \ + stdlib/stack.cmi stdlib/stack.mli \ + stdlib/stdLabels.cmi stdlib/stdLabels.mli \ + stdlib/stream.cmi stdlib/stream.mli \ + stdlib/string.cmi stdlib/string.mli \ + stdlib/stringLabels.cmi stdlib/stringLabels.mli \ + stdlib/sys.cmi stdlib/sys.mli \ + stdlib/weak.cmi stdlib/weak.mli \ + stdlib/$set.cmi stdlib/$set.mli \ + 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,p.$A} \ + stdlib/stdlib.$A stdlib/stdlib.p.$A \ $LIBDIR echo "Installing ocamllex, ocamldebug..." @@ -256,16 +267,16 @@ installdir \ otherlibs/bigarray/bigarray.cma \ otherlibs/dbm/dbm.cma \ otherlibs/dynlink/dynlink.cma \ - otherlibs/{,win32}graph/graphics.cma \ + otherlibs/"$WIN32"graph/graphics.cma \ otherlibs/num/nums.cma \ otherlibs/str/str.cma \ - otherlibs/{,win32}unix/unix.cma \ - otherlibs/bigarray/bigarray{,.p}.cmxa \ - otherlibs/dbm/dbm{,.p}.cmxa \ - otherlibs/{,win32}graph/graphics{,.p}.cmxa \ - otherlibs/num/nums{,.p}.cmxa \ - otherlibs/str/str{,.p}.cmxa \ - otherlibs/{,win32}unix/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 \ @@ -275,13 +286,27 @@ installdir \ $LIBDIR installdir \ - otherlibs/labltk/support/fileevent.{mli,cmi,cmx} \ - otherlibs/labltk/support/protocol.{mli,cmi,cmx} \ - otherlibs/labltk/support/textvariable.{mli,cmi,cmx} \ - otherlibs/labltk/support/timer.{mli,cmi,cmx} \ - otherlibs/labltk/support/rawwidget.{mli,cmi,cmx} \ - otherlibs/labltk/support/widget.{mli,cmi,cmx} \ - otherlibs/labltk/support/tkthread.{mli,cmi,cmo} \ + otherlibs/labltk/support/fileevent.mli \ + otherlibs/labltk/support/fileevent.cmi \ + otherlibs/labltk/support/fileevent.cmx \ + otherlibs/labltk/support/protocol.mli \ + otherlibs/labltk/support/protocol.cmi \ + otherlibs/labltk/support/protocol.cmx \ + otherlibs/labltk/support/textvariable.mli \ + otherlibs/labltk/support/textvariable.cmi \ + otherlibs/labltk/support/textvariable.cmx \ + otherlibs/labltk/support/timer.mli \ + otherlibs/labltk/support/timer.cmi \ + otherlibs/labltk/support/timer.cmx \ + otherlibs/labltk/support/rawwidget.mli \ + otherlibs/labltk/support/rawwidget.cmi \ + otherlibs/labltk/support/rawwidget.cmx \ + otherlibs/labltk/support/widget.mli \ + otherlibs/labltk/support/widget.cmi \ + otherlibs/labltk/support/widget.cmx \ + otherlibs/labltk/support/tkthread.mli \ + otherlibs/labltk/support/tkthread.cmi \ + otherlibs/labltk/support/tkthread.cmo \ otherlibs/labltk/support/tkthread.$O \ otherlibs/labltk/labltk/*.mli \ otherlibs/labltk/labltk/*.cmi \ @@ -309,7 +334,7 @@ installdir \ installdir \ otherlibs/systhreads/threads.cma \ - otherlibs/systhreads/threads{,.p}.cmxa \ + otherlibs/systhreads/threads.cmxa \ otherlibs/systhreads/thread.cmi \ otherlibs/systhreads/mutex.cmi \ otherlibs/systhreads/condition.cmi \ @@ -320,11 +345,11 @@ installdir \ installdir \ otherlibs/bigarray/dllbigarray$EXT_DLL \ otherlibs/dbm/dllmldbm$EXT_DLL \ - otherlibs/{,win32}graph/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/{,win32}unix/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 \ @@ -335,11 +360,16 @@ installlibdir \ $LIBDIR/vmthreads installdir \ - otherlibs/threads/thread.{cmi,mli} \ - otherlibs/threads/mutex.{cmi,mli} \ - otherlibs/threads/condition.{cmi,mli} \ - otherlibs/threads/event.{cmi,mli} \ - otherlibs/threads/threadUnix.{cmi,mli} \ + otherlibs/threads/thread.cmi \ + otherlibs/threads/thread.mli \ + otherlibs/threads/mutex.cmi \ + otherlibs/threads/mutex.mli \ + otherlibs/threads/condition.cmi \ + otherlibs/threads/condition.mli \ + otherlibs/threads/event.cmi \ + otherlibs/threads/event.mli \ + otherlibs/threads/threadUnix.cmi \ + otherlibs/threads/threadUnix.mli \ otherlibs/threads/threads.cma \ otherlibs/threads/stdlib.cma \ otherlibs/threads/unix.cma \ @@ -355,25 +385,25 @@ installlibdir \ $LIBDIR/labltk installlibdir \ - otherlibs/bigarray/libbigarray.{$A,p.$A} \ - otherlibs/dbm/libmldbm.{$A,p.$A} \ - otherlibs/{,win32}graph/libgraphics.{$A,p.$A} \ - otherlibs/num/libnums.{$A,p.$A} \ - otherlibs/str/libstr.{$A,p.$A} \ - otherlibs/systhreads/libthreads.{$A,p.$A} \ - otherlibs/systhreads/libthreadsnat.{$A,p.$A} \ - otherlibs/{,win32}unix/libunix.{$A,p.$A} \ + otherlibs/bigarray/libbigarray.$A \ + otherlibs/dbm/libmldbm.$A \ + otherlibs/"$WIN32"graph/libgraphics.$A \ + otherlibs/num/libnums.$A \ + otherlibs/str/libstr.$A \ + otherlibs/systhreads/libthreads.$A \ + otherlibs/systhreads/libthreadsnat.$A \ + otherlibs/"$WIN32"unix/libunix.$A \ $LIBDIR echo "Installing object files and interfaces..." installdir \ - tools/profiling.cm{o,i} \ + tools/profiling.cm[oi] \ toplevel/topstart.cmo \ toplevel/toploop.cmi \ toplevel/topdirs.cmi \ toplevel/topmain.cmi \ typing/outcometree.cmi \ - otherlibs/{,win32}graph/graphicsX11.cmi \ + otherlibs/graph/graphicsX11.cmi \ otherlibs/dynlink/dynlink.cmi \ otherlibs/num/arith_status.cmi \ otherlibs/num/big_int.cmi \ @@ -382,37 +412,50 @@ installdir \ otherlibs/num/ratio.cmi \ otherlibs/bigarray/bigarray.cmi \ otherlibs/dbm/dbm.cmi \ - otherlibs/{,win32}graph/graphics.cmi \ + otherlibs/"$WIN32"graph/graphics.cmi \ otherlibs/str/str.cmi \ - otherlibs/{,win32}unix/unix.cmi \ - otherlibs/{,win32}unix/unixLabels.cmi \ - otherlibs/num/arith_flags{,.p}.{cmx,$O} \ - otherlibs/num/int_misc{,.p}.{cmx,$O} \ - otherlibs/num/arith_status{,.p}.{cmx,$O} \ - otherlibs/num/big_int{,.p}.{cmx,$O} \ - otherlibs/num/nat{,.p}.{cmx,$O} \ - otherlibs/num/num{,.p}.{cmx,$O} \ - otherlibs/num/ratio{,.p}.{cmx,$O} \ - otherlibs/bigarray/bigarray{,.p}.{cmx,$O} \ - otherlibs/dbm/dbm{,.p}.{cmx,$O} \ - otherlibs/{,win32}graph/graphics{,.p}.{cmx,$O} \ - otherlibs/str/str{,.p}.{cmx,$O} \ - otherlibs/{,win32}unix/unix{,.p}.{cmx,$O} \ - otherlibs/{,win32}unix/unixLabels{,.p}.{cmx,$O} \ + otherlibs/"$WIN32"unix/unix.cmi \ + otherlibs/"$WIN32"unix/unixLabels.cmi \ + otherlibs/num/arith_flags.cmx \ + otherlibs/num/arith_flags.$O \ + otherlibs/num/int_misc.cmx \ + otherlibs/num/int_misc.$O \ + otherlibs/num/arith_status.cmx \ + otherlibs/num/arith_status.$O \ + otherlibs/num/big_int.cmx \ + otherlibs/num/big_int.$O \ + otherlibs/num/nat.cmx \ + otherlibs/num/nat.$O \ + otherlibs/num/num.cmx \ + otherlibs/num/num.$O \ + otherlibs/num/ratio.cmx \ + otherlibs/num/ratio.$O \ + otherlibs/bigarray/bigarray.cmx \ + otherlibs/bigarray/bigarray.$O \ + otherlibs/dbm/dbm.cmx \ + otherlibs/dbm/dbm.$O \ + otherlibs/"$WIN32"graph/graphics.cmx \ + otherlibs/"$WIN32"graph/graphics.$O \ + otherlibs/str/str.cmx \ + 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,p.$A} \ - otherlibs/dbm/dbm.{$A,p.$A} \ - otherlibs/{,win32}graph/graphics.{$A,p.$A} \ - otherlibs/num/nums.{$A,p.$A} \ - otherlibs/str/str.{$A,p.$A} \ - otherlibs/{,win32}unix/unix.{$A,p.$A} \ - stdlib/stdlib.{$A,p.$A} \ + otherlibs/bigarray/bigarray.$A \ + otherlibs/dbm/dbm.$A \ + otherlibs/"$WIN32"graph/graphics.$A \ + otherlibs/num/nums.$A \ + otherlibs/str/str.$A \ + otherlibs/"$WIN32"unix/unix.$A \ + stdlib/stdlib.$A \ $LIBDIR installlibdir \ - otherlibs/systhreads/threads.{$A,p.$A} \ + otherlibs/systhreads/threads.$A \ $LIBDIR/threads echo "Installing manuals..." @@ -425,7 +468,8 @@ installbin ocamldoc/ocamldoc.opt$EXE $BINDIR/ocamldoc.opt$EXE installdir \ ../ocamldoc/ocamldoc.hva \ ocamldoc/*.cmi \ - ocamldoc/odoc_info.{mli,cm[ia],cmxa,$A} \ + ocamldoc/odoc_info.mli ocamldoc/odoc_info.cm[ia] ocamldoc/odoc_info.cmxa \ + ocamldoc/odoc_info.$A \ $LIBDIR/ocamldoc installdir \ @@ -458,15 +502,17 @@ for dir in Camlp4Parsers Camlp4Printers Camlp4Filters Camlp4Top; do installdir \ $dir/*.cm* \ $dir/*.$O \ - $dir/*.p.$O \ $CAMLP4DIR/$dir done installdir \ - camlp4lib.{cma,cmxa} Camlp4.cmi \ - {camlp4o,camlp4of,camlp4oof,camlp4orf,camlp4r,camlp4rf}.cma \ - Camlp4Bin.{cm[iox],$O,p.$O} Camlp4Top.cm[io] \ + 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 Camlp4Top.cm[io] \ + Camlp4_config.cmi camlp4prof.cm[iox] camlp4prof.$O \ $CAMLP4DIR -installlibdir camlp4lib.{$A,p.$A} $CAMLP4DIR +installlibdir camlp4lib.$A camlp4fulllib.$A $CAMLP4DIR cd .. echo "Installing ocamlbuild..." @@ -476,16 +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,p.$A} \ + ocamlbuild/ocamlbuildlib.$A \ $LIBDIR/ocamlbuild installdir \ - ocamlbuild/ocamlbuildlib{,.p}.cmxa \ + ocamlbuild/ocamlbuildlib.cmxa \ ocamlbuild/ocamlbuildlib.cma \ ocamlbuild/ocamlbuild_plugin.cmi \ ocamlbuild/ocamlbuild_pack.cmi \ ocamlbuild/ocamlbuild.cmo \ - ocamlbuild/ocamlbuild{,.p}.{cmx,$O} \ + ocamlbuild/ocamlbuild.cmx \ + ocamlbuild/ocamlbuild.$O \ $LIBDIR/ocamlbuild installdir \ diff --git a/build/mkconfig.sh b/build/mkconfig.sh index 7d786d8a..591bebc6 100755 --- a/build/mkconfig.sh +++ b/build/mkconfig.sh @@ -1,8 +1,11 @@ #!/bin/sh +# $Id$ 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 + + diff --git a/build/mkmyocamlbuild_config.sh b/build/mkmyocamlbuild_config.sh index 0b8137f2..158e13d5 100755 --- a/build/mkmyocamlbuild_config.sh +++ b/build/mkmyocamlbuild_config.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ cd `dirname $0`/.. diff --git a/build/mkruntimedef.sh b/build/mkruntimedef.sh new file mode 100755 index 00000000..54f7cc5c --- /dev/null +++ b/build/mkruntimedef.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# $Id$ +echo 'let builtin_exceptions = [|'; \ +sed -n -e 's|.*/\* \("[A-Za-z_]*"\) \*/$| \1;|p' byterun/fail.h | \ +sed -e '$s/;$//'; \ +echo '|]'; \ +echo 'let builtin_primitives = [|'; \ +sed -e 's/.*/ "&";/' -e '$s/;$//' byterun/primitives; \ +echo '|]' diff --git a/build/myocamlbuild.sh b/build/myocamlbuild.sh index f7571801..dc129a84 100755 --- a/build/myocamlbuild.sh +++ b/build/myocamlbuild.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ cd `dirname $0`/.. set -xe if [ ! -x _build/ocamlbuild/ocamlbuildlight.byte ]; then @@ -6,16 +7,13 @@ if [ ! -x _build/ocamlbuild/ocamlbuildlight.byte ]; then (cd ocamlbuild && make) fi mkdir -p _build/ocamlbuild - cp ocamlbuild/_build/ocamlbuild{light{.cmo,.byte,lib.cma},_plugin.cmi,_pack.cmi} _build/ocamlbuild + for i in "light.cmo" "light.byte" "lightlib.cma" "_plugin.cmi" "_pack.cmi" + do + cp ocamlbuild/_build/ocamlbuild$i _build/ocamlbuild + done fi +rm -f ocamlbuild/myocamlbuild_config.ml ocamlbuild/myocamlbuild_config.mli rm -rf _build/myocamlbuild boot/myocamlbuild boot/myocamlbuild.native ./boot/ocamlrun _build/ocamlbuild/ocamlbuildlight.byte -no-hygiene \ - -tag debug -install-dir _build/ocamlbuild -byte-plugin -just-plugin + -tag debug -install-lib-dir _build/ocamlbuild -byte-plugin -just-plugin cp _build/myocamlbuild boot/myocamlbuild.boot -# cp boot/myocamlbuild boot/myocamlbuild.boot -# rm -f boot/myocamlbuild.boot -# boot/myocamlbuild.native -# ocamlbuildlight -build-dir _build_myocamlbuild_boot -byte-plugin -no-hygiene -# cp _build_myocamlbuild_boot/myocamlbuild boot/myocamlbuild.boot -# ocamlbuild -build-dir _build_myocamlbuild_native -no-hygiene -# cp _build_myocamlbuild_native/myocamlbuild boot/myocamlbuild.native diff --git a/build/ocamlbuild-byte-only.sh b/build/ocamlbuild-byte-only.sh index 0e5046f5..87e7ba3a 100755 --- a/build/ocamlbuild-byte-only.sh +++ b/build/ocamlbuild-byte-only.sh @@ -1,7 +1,9 @@ #!/bin/sh +# $Id$ set -e -export OCAMLBUILD_PARTIAL="true" +OCAMLBUILD_PARTIAL="true" +export OCAMLBUILD_PARTIAL cd `dirname $0`/.. . build/targets.sh set -x -$OCAMLBUILD $@ $OCAMLC_BYTE $OCAMLLEX_BYTE $OCAMLBUILD_BYTE +$OCAMLBUILD $@ byte_stdlib_partial_mode $OCAMLC_BYTE $OCAMLLEX_BYTE $OCAMLBUILD_BYTE diff --git a/build/ocamlbuild-native-only.sh b/build/ocamlbuild-native-only.sh index ac4cc8ad..03d93edc 100755 --- a/build/ocamlbuild-native-only.sh +++ b/build/ocamlbuild-native-only.sh @@ -1,7 +1,9 @@ #!/bin/sh +# $Id$ set -e -export OCAMLBUILD_PARTIAL="true" +OCAMLBUILD_PARTIAL="true" +export OCAMLBUILD_PARTIAL cd `dirname $0`/.. . build/targets.sh set -x -$OCAMLBUILD $@ $OCAMLOPT_BYTE $OCAMLLEX_BYTE $OCAMLBUILD_NATIVE +$OCAMLBUILD $@ native_stdlib_partial_mode $OCAMLOPT_BYTE $OCAMLLEX_BYTE $OCAMLBUILD_NATIVE diff --git a/build/otherlibs-targets.sh b/build/otherlibs-targets.sh index b71eb4b0..77542fad 100644 --- a/build/otherlibs-targets.sh +++ b/build/otherlibs-targets.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ OTHERLIBS_BYTE="" OTHERLIBS_NATIVE="" OTHERLIBS_UNIX_NATIVE="" diff --git a/build/partial-boot.sh b/build/partial-boot.sh index e4e96a0b..e2b8097b 100755 --- a/build/partial-boot.sh +++ b/build/partial-boot.sh @@ -1,7 +1,9 @@ #!/bin/sh +# $Id$ set -ex cd `dirname $0`/.. -export OCAMLBUILD_PARTIAL="true" +OCAMLBUILD_PARTIAL="true" +export OCAMLBUILD_PARTIAL mkdir -p _build cp -rf boot _build/ cp parsing/location.ml parsing/location.mli camlp4/build diff --git a/build/partial-install.sh b/build/partial-install.sh index 67ee23f0..e5a6c393 100755 --- a/build/partial-install.sh +++ b/build/partial-install.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ ###################################### ######### 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,35 +126,39 @@ for dir in Camlp4Parsers Camlp4Printers Camlp4Filters Camlp4Top; do installdir \ $dir/*.cm* \ $dir/*.$O \ - $dir/*.p.$O \ $CAMLP4DIR/$dir done installdir \ - camlp4lib.{cma,cmxa} Camlp4.cmi \ - {camlp4o,camlp4of,camlp4oof,camlp4orf,camlp4r,camlp4rf}.cma \ - Camlp4Bin.{cm[iox],$O,p.$O} Camlp4Top.cm[io] \ + 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 Camlp4Top.cm[io] \ + Camlp4_config.cmi camlp4prof.cm[iox] camlp4prof.$O \ $CAMLP4DIR -installlibdir camlp4lib.{$A,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,p.$A} \ + ocamlbuildlib.$A \ $LIBDIR/ocamlbuild installdir \ - ocamlbuild/ocamlbuildlib{,.p}.cmxa \ - ocamlbuild/ocamlbuildlib.cma \ - ocamlbuild/ocamlbuild_plugin.cmi \ - ocamlbuild/ocamlbuild_pack.cmi \ - ocamlbuild/ocamlbuild.cmo \ - ocamlbuild/ocamlbuild{,.p}.{cmx,$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 \ diff --git a/build/targets.sh b/build/targets.sh index ee5b0f9c..90041aaa 100644 --- a/build/targets.sh +++ b/build/targets.sh @@ -1,8 +1,13 @@ +# $Id$ . config/config.sh . build/otherlibs-targets.sh . build/camlp4-targets.sh -STDLIB_BYTE="stdlib/stdlib.cma stdlib/std_exit.cmo \ - stdlib/camlheader stdlib/camlheader_ur" + +INSTALL_BIN="$BINDIR" +export INSTALL_BIN + +STDLIB_BYTE="stdlib/libcamlrun.$A stdlib/stdlib.cma \ + stdlib/std_exit.cmo stdlib/camlheader stdlib/camlheader_ur" OCAMLLEX_BYTE=lex/ocamllex$EXE OCAMLC_BYTE=ocamlc$EXE OCAMLOPT_BYTE=ocamlopt$EXE @@ -20,9 +25,11 @@ if [ ! -z "$DEBUGGER" ]; then DEBUGGER=debugger/ocamldebug$EXE fi OCAMLDOC_BYTE="ocamldoc/ocamldoc$EXE ocamldoc/odoc_info.cma" -STDLIB_NATIVE="stdlib/stdlib.cmxa stdlib/std_exit.cmx" +STDLIB_NATIVE="stdlib/stdlib.cmxa stdlib/std_exit.cmx asmrun/libasmrun.$A" case $PROFILING in -prof) STDLIB_NATIVE="$STDLIB_NATIVE stdlib/stdlib.p.cmxa stdlib/std_exit.p.cmx";; +prof) + STDLIB_NATIVE="$STDLIB_NATIVE asmrun/libasmrunp.$A \ + stdlib/stdlib.p.cmxa stdlib/std_exit.p.cmx";; noprof) ;; *) echo "unexpected PROFILING value $PROFILING"; exit 1;; esac diff --git a/build/world.all.sh b/build/world.all.sh index b84bf8a1..d8a18abb 100755 --- a/build/world.all.sh +++ b/build/world.all.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ set -e cd `dirname $0`/.. . build/targets.sh diff --git a/build/world.byte.sh b/build/world.byte.sh index 56b3de5f..d3e96dc4 100755 --- a/build/world.byte.sh +++ b/build/world.byte.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ set -e cd `dirname $0`/.. . build/targets.sh diff --git a/build/world.native.sh b/build/world.native.sh index 88f74033..ac4a1832 100755 --- a/build/world.native.sh +++ b/build/world.native.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ set -e cd `dirname $0`/.. . build/targets.sh diff --git a/build/world.sh b/build/world.sh index bb0c813c..1acf2b59 100755 --- a/build/world.sh +++ b/build/world.sh @@ -1,4 +1,5 @@ #!/bin/sh +# $Id$ cd `dirname $0` set -ex ./mkconfig.sh diff --git a/byterun/config.h b/byterun/config.h index 9a52c552..25681e7f 100644 --- a/byterun/config.h +++ b/byterun/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 diff --git a/byterun/globroots.c b/byterun/globroots.c index 792da34d..b59b8ed9 100644 --- a/byterun/globroots.c +++ b/byterun/globroots.c @@ -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; diff --git a/byterun/globroots.h b/byterun/globroots.h index 51fa8e65..684860ab 100644 --- a/byterun/globroots.h +++ b/byterun/globroots.h @@ -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 */ }; diff --git a/camlp4/Camlp4/Camlp4Ast.partial.ml b/camlp4/Camlp4/Camlp4Ast.partial.ml index d9356c8e..7a902376 100644 --- a/camlp4/Camlp4/Camlp4Ast.partial.ml +++ b/camlp4/Camlp4/Camlp4Ast.partial.ml @@ -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) *) @@ -128,9 +128,9 @@ (* ?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 *) @@ -152,8 +152,9 @@ (* 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 *) @@ -205,11 +206,16 @@ [ 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 *) @@ -227,8 +233,9 @@ | 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 *) diff --git a/camlp4/Camlp4/ErrorHandler.ml b/camlp4/Camlp4/ErrorHandler.ml index 7c68bd4f..231efed9 100644 --- a/camlp4/Camlp4/ErrorHandler.ml +++ b/camlp4/Camlp4/ErrorHandler.ml @@ -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 (); diff --git a/camlp4/Camlp4/OCamlInitSyntax.ml b/camlp4/Camlp4/OCamlInitSyntax.ml index b28c40e0..21862359 100644 --- a/camlp4/Camlp4/OCamlInitSyntax.ml +++ b/camlp4/Camlp4/OCamlInitSyntax.ml @@ -16,26 +16,30 @@ * - 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 " %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; diff --git a/camlp4/Camlp4/PreCast.ml b/camlp4/Camlp4/PreCast.ml index 8c29bb1d..06adf42b 100644 --- a/camlp4/Camlp4/PreCast.ml +++ b/camlp4/Camlp4/PreCast.ml @@ -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; diff --git a/camlp4/Camlp4/PreCast.mli b/camlp4/Camlp4/PreCast.mli index fd64e6d1..1c6eb2e9 100644 --- a/camlp4/Camlp4/PreCast.mli +++ b/camlp4/Camlp4/PreCast.mli @@ -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) diff --git a/camlp4/Camlp4/Printers/DumpCamlp4Ast.ml b/camlp4/Camlp4/Printers/DumpCamlp4Ast.ml index 40b59792..11bfcc7f 100644 --- a/camlp4/Camlp4/Printers/DumpCamlp4Ast.ml +++ b/camlp4/Camlp4/Printers/DumpCamlp4Ast.ml @@ -23,7 +23,7 @@ module Id = struct end; module Make (Syntax : Sig.Syntax) -: Sig.Printer with module Ast = Syntax.Ast +: (Sig.Printer Syntax.Ast).S = struct include Syntax; diff --git a/camlp4/Camlp4/Printers/DumpCamlp4Ast.mli b/camlp4/Camlp4/Printers/DumpCamlp4Ast.mli index 0af1fa1a..d35642ab 100644 --- a/camlp4/Camlp4/Printers/DumpCamlp4Ast.mli +++ b/camlp4/Camlp4/Printers/DumpCamlp4Ast.mli @@ -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; diff --git a/camlp4/Camlp4/Printers/DumpOCamlAst.ml b/camlp4/Camlp4/Printers/DumpOCamlAst.ml index ee35d514..952fce9f 100644 --- a/camlp4/Camlp4/Printers/DumpOCamlAst.ml +++ b/camlp4/Camlp4/Printers/DumpOCamlAst.ml @@ -23,7 +23,7 @@ module Id : Sig.Id = struct 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; diff --git a/camlp4/Camlp4/Printers/DumpOCamlAst.mli b/camlp4/Camlp4/Printers/DumpOCamlAst.mli index b97898b1..3233557d 100644 --- a/camlp4/Camlp4/Printers/DumpOCamlAst.mli +++ b/camlp4/Camlp4/Printers/DumpOCamlAst.mli @@ -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; diff --git a/camlp4/Camlp4/Printers/Null.mli b/camlp4/Camlp4/Printers/Null.mli index 562c2c02..d7715117 100644 --- a/camlp4/Camlp4/Printers/Null.mli +++ b/camlp4/Camlp4/Printers/Null.mli @@ -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; diff --git a/camlp4/Camlp4/Printers/OCaml.ml b/camlp4/Camlp4/Printers/OCaml.ml index b9cd23a9..a203ae7a 100644 --- a/camlp4/Camlp4/Printers/OCaml.ml +++ b/camlp4/Camlp4/Printers/OCaml.ml @@ -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>@[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 "@[@[{@ %a@]@ }@]" o#record_binding b + pp f "@[@[{%a@]@ }@]" o#record_binding b | <:expr< { ($e$) with $b$ } >> -> - pp f "@[@[{@ (%a)@ with@ %a@]@ }@]" + pp f "@[@[{@ (%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 "@[@[{<@ %a@]@ >}@]" o#record_binding b + pp f "@[@[{<%a@]@ >}@]" o#record_binding b | <:expr< object $cst$ end >> -> pp f "@[@[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 "@[@[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; diff --git a/camlp4/Camlp4/Printers/OCaml.mli b/camlp4/Camlp4/Printers/OCaml.mli index ba930cf9..a856529d 100644 --- a/camlp4/Camlp4/Printers/OCaml.mli +++ b/camlp4/Camlp4/Printers/OCaml.mli @@ -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; diff --git a/camlp4/Camlp4/Printers/OCamlr.ml b/camlp4/Camlp4/Printers/OCamlr.ml index 66a089c1..6c2232c6 100644 --- a/camlp4/Camlp4/Printers/OCamlr.ml +++ b/camlp4/Camlp4/Printers/OCamlr.ml @@ -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 "@[@[@[<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 "@[@[@[<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 "@[@[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; diff --git a/camlp4/Camlp4/Printers/OCamlr.mli b/camlp4/Camlp4/Printers/OCamlr.mli index c09bf6eb..f1db176a 100644 --- a/camlp4/Camlp4/Printers/OCamlr.mli +++ b/camlp4/Camlp4/Printers/OCamlr.mli @@ -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; diff --git a/camlp4/Camlp4/Register.ml b/camlp4/Camlp4/Register.ml index e491f4c1..6044b0d9 100644 --- a/camlp4/Camlp4/Register.ml +++ b/camlp4/Camlp4/Register.ml @@ -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; diff --git a/camlp4/Camlp4/Register.mli b/camlp4/Camlp4/Register.mli index 337ca55d..df1180ff 100644 --- a/camlp4/Camlp4/Register.mli +++ b/camlp4/Camlp4/Register.mli @@ -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; diff --git a/camlp4/Camlp4/Sig.ml b/camlp4/Camlp4/Sig.ml index a9ee50e1..afa425ed 100644 --- a/camlp4/Camlp4/Sig.ml +++ b/camlp4/Camlp4/Sig.ml @@ -19,13 +19,13 @@ *) 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; @@ -44,7 +44,7 @@ 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 diff --git a/camlp4/Camlp4/Struct.mlpack b/camlp4/Camlp4/Struct.mlpack index bd8c40a1..a939fe77 100644 --- a/camlp4/Camlp4/Struct.mlpack +++ b/camlp4/Camlp4/Struct.mlpack @@ -11,5 +11,5 @@ Lexer Loc Quotation Token -Warning Grammar +DynAst diff --git a/camlp4/Camlp4/Struct/Camlp4Ast.mlast b/camlp4/Camlp4/Struct/Camlp4Ast.mlast index 95bccdb5..b7a8b4ff 100644 --- a/camlp4/Camlp4/Struct/Camlp4Ast.mlast +++ b/camlp4/Camlp4/Struct/Camlp4Ast.mlast @@ -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 diff --git a/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml b/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml index f4881a39..98237ffd 100644 --- a/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml +++ b/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml @@ -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 = diff --git a/camlp4/Camlp4/Struct/CleanAst.ml b/camlp4/Camlp4/Struct/CleanAst.ml index 0374ae28..bd1cac2f 100644 --- a/camlp4/Camlp4/Struct/CleanAst.ml +++ b/camlp4/Camlp4/Struct/CleanAst.ml @@ -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<>> $ >> -> diff --git a/camlp4/Camlp4/Struct/CommentFilter.mli b/camlp4/Camlp4/Struct/CommentFilter.mli index c1789c6c..79ece6a4 100644 --- a/camlp4/Camlp4/Struct/CommentFilter.mli +++ b/camlp4/Camlp4/Struct/CommentFilter.mli @@ -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 index 00000000..2161e1c9 --- /dev/null +++ b/camlp4/Camlp4/Struct/DynAst.ml @@ -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; diff --git a/camlp4/Camlp4/Struct/EmptyPrinter.ml b/camlp4/Camlp4/Struct/EmptyPrinter.ml index 2cde4dde..5886809b 100644 --- a/camlp4/Camlp4/Struct/EmptyPrinter.ml +++ b/camlp4/Camlp4/Struct/EmptyPrinter.ml @@ -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; diff --git a/camlp4/Camlp4/Struct/EmptyPrinter.mli b/camlp4/Camlp4/Struct/EmptyPrinter.mli index 186d9301..f8bf907a 100644 --- a/camlp4/Camlp4/Struct/EmptyPrinter.mli +++ b/camlp4/Camlp4/Struct/EmptyPrinter.mli @@ -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; diff --git a/camlp4/Camlp4/Struct/FreeVars.ml b/camlp4/Camlp4/Struct/FreeVars.ml index ffeae02f..78c33ef4 100644 --- a/camlp4/Camlp4/Struct/FreeVars.ml +++ b/camlp4/Camlp4/Struct/FreeVars.ml @@ -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; diff --git a/camlp4/Camlp4/Struct/Grammar/Context.ml b/camlp4/Camlp4/Struct/Grammar/Context.ml index fbd24134..75d731c6 100644 --- a/camlp4/Camlp4/Struct/Grammar/Context.ml +++ b/camlp4/Camlp4/Struct/Grammar/Context.ml @@ -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 index 00000000..a782445e --- /dev/null +++ b/camlp4/Camlp4/Struct/Grammar/Parser.mli @@ -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$ *) + +(* 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; + diff --git a/camlp4/Camlp4/Struct/Grammar/Print.ml b/camlp4/Camlp4/Struct/Grammar/Print.ml index dadf4aed..f5a97230 100644 --- a/camlp4/Camlp4/Struct/Grammar/Print.ml +++ b/camlp4/Camlp4/Struct/Grammar/Print.ml @@ -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 { diff --git a/camlp4/Camlp4/Struct/Lexer.mll b/camlp4/Camlp4/Struct/Lexer.mll index 87cb362a..658ea88d 100644 --- a/camlp4/Camlp4/Struct/Lexer.mll +++ b/camlp4/Camlp4/Struct/Lexer.mll @@ -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 diff --git a/camlp4/Camlp4/Struct/Quotation.ml b/camlp4/Camlp4/Struct/Quotation.ml index b27f53c3..3ba79151 100644 --- a/camlp4/Camlp4/Struct/Quotation.ml +++ b/camlp4/Camlp4/Struct/Quotation.ml @@ -18,24 +18,29 @@ * - Nicolas Pouillard: refactoring *) - (* $Id$ *) 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 "@ @[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; diff --git a/camlp4/Camlp4/Struct/Token.ml b/camlp4/Camlp4/Struct/Token.ml index 7037888a..4dbdacac 100644 --- a/camlp4/Camlp4/Struct/Token.ml +++ b/camlp4/Camlp4/Struct/Token.ml @@ -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 a 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 index dbb04008..00000000 --- a/camlp4/Camlp4/Struct/Warning.ml +++ /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 " %a: %s@." Loc.print loc txt; - value current = ref default; - value print loc txt = current.val loc txt; -end; diff --git a/camlp4/Camlp4Bin.ml b/camlp4/Camlp4Bin.ml index ac893b40..9464e65c 100644 --- a/camlp4/Camlp4Bin.ml +++ b/camlp4/Camlp4Bin.ml @@ -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 diff --git a/camlp4/Camlp4Filters/Camlp4FoldGenerator.ml b/camlp4/Camlp4Filters/Camlp4FoldGenerator.ml index ad6ed45a..aa634043 100644 --- a/camlp4/Camlp4Filters/Camlp4FoldGenerator.ml +++ b/camlp4/Camlp4Filters/Camlp4FoldGenerator.ml @@ -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 diff --git a/camlp4/Camlp4Filters/Camlp4LocationStripper.ml b/camlp4/Camlp4Filters/Camlp4LocationStripper.ml index c57e6867..594b0fc1 100644 --- a/camlp4/Camlp4Filters/Camlp4LocationStripper.ml +++ b/camlp4/Camlp4Filters/Camlp4LocationStripper.ml @@ -29,7 +29,7 @@ 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; diff --git a/camlp4/Camlp4Filters/Camlp4MapGenerator.ml b/camlp4/Camlp4Filters/Camlp4MapGenerator.ml index 2270f52b..ec45872d 100644 --- a/camlp4/Camlp4Filters/Camlp4MapGenerator.ml +++ b/camlp4/Camlp4Filters/Camlp4MapGenerator.ml @@ -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 diff --git a/camlp4/Camlp4Filters/Camlp4Tracer.ml b/camlp4/Camlp4Filters/Camlp4Tracer.ml index a7cf5ca5..61c8c902 100644 --- a/camlp4/Camlp4Filters/Camlp4Tracer.ml +++ b/camlp4/Camlp4Filters/Camlp4Tracer.ml @@ -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; diff --git a/camlp4/Camlp4Filters/Camlp4TrashRemover.ml b/camlp4/Camlp4Filters/Camlp4TrashRemover.ml index b5b1a862..baeec6c9 100644 --- a/camlp4/Camlp4Filters/Camlp4TrashRemover.ml +++ b/camlp4/Camlp4Filters/Camlp4TrashRemover.ml @@ -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<>> diff --git a/camlp4/Camlp4Parsers/Camlp4GrammarParser.ml b/camlp4/Camlp4Parsers/Camlp4GrammarParser.ml index 8bae3c38..e00b72da 100644 --- a/camlp4/Camlp4Parsers/Camlp4GrammarParser.ml +++ b/camlp4/Camlp4Parsers/Camlp4GrammarParser.ml @@ -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" diff --git a/camlp4/Camlp4Parsers/Camlp4MacroParser.ml b/camlp4/Camlp4Parsers/Camlp4MacroParser.ml index 3015da99..33594fef 100644 --- a/camlp4/Camlp4Parsers/Camlp4MacroParser.ml +++ b/camlp4/Camlp4Parsers/Camlp4MacroParser.ml @@ -16,6 +16,8 @@ open Camlp4; (* -*- camlp4r -*- *) (* Authors: * - Daniel de Rauglaudre: initial version * - Nicolas Pouillard: refactoring + * - Aleksey Nogin: extra features and bug fixes. + * - Christopher Conway: extra feature (-D=) *) module Id = struct @@ -31,16 +33,22 @@ Added statements: DEFINE DEFINE = DEFINE () = - IFDEF THEN (END | ENDIF) - IFDEF THEN ELSE (END | ENDIF) - IFNDEF THEN (END | ENDIF) - IFNDEF THEN ELSE (END | ENDIF) + IFDEF THEN [ ELSE ] (END | ENDIF) + IFNDEF THEN [ ELSE ] (END | ENDIF) + INCLUDE + + At toplevel (signature item): + + DEFINE + IFDEF THEN [ ELSE ] (END | ENDIF) + IFNDEF THEN [ ELSE ] (END | ENDIF) INCLUDE In expressions: - IFDEF THEN ELSE (END | ENDIF) - IFNDEF THEN ELSE (END | ENDIF) + IFDEF THEN [ ELSE ] (END | ENDIF) + IFNDEF THEN [ ELSE ] (END | ENDIF) + DEFINE = IN __FILE__ __LOCATION__ @@ -51,7 +59,7 @@ Added statements: As Camlp4 options: - -D define + -D or -D=expr define with optional value -U undefine it -I add 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 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 "") 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) " Define for IFDEF instruction."; Options.add "-U" (Arg.String undef) " 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 (); diff --git a/camlp4/Camlp4Parsers/Camlp4OCamlOriginalQuotationExpander.ml b/camlp4/Camlp4Parsers/Camlp4OCamlOriginalQuotationExpander.ml index b5b120ba..c033a22c 100644 --- a/camlp4/Camlp4Parsers/Camlp4OCamlOriginalQuotationExpander.ml +++ b/camlp4/Camlp4Parsers/Camlp4OCamlOriginalQuotationExpander.ml @@ -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 (); diff --git a/camlp4/Camlp4Parsers/Camlp4OCamlParser.ml b/camlp4/Camlp4Parsers/Camlp4OCamlParser.ml index fdc6d7eb..9dba583f 100644 --- a/camlp4/Camlp4Parsers/Camlp4OCamlParser.ml +++ b/camlp4/Camlp4Parsers/Camlp4OCamlParser.ml @@ -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,30 +198,44 @@ 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; clear poly_type; clear class_name_and_param; - clear class_fun_def; clear class_longident_and_param; 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; @@ -361,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 @@ -373,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 @@ -384,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$ >> @@ -402,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$ ] >> @@ -420,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" -> @@ -460,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: @@ -568,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$ >> @@ -597,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$ >> @@ -627,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$ >> ] ] @@ -664,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 -> @@ -736,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$ >> @@ -760,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 ] ] ; @@ -805,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 @@ -816,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$ >> @@ -867,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 @@ -878,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 index 00000000..de2e9e3c --- /dev/null +++ b/camlp4/Camlp4Parsers/Camlp4OCamlReloadedParser.ml @@ -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$"; +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 (); diff --git a/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml b/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml index 47a299f5..23fc58f1 100644 --- a/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml +++ b/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml @@ -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 ] ] ; @@ -1070,7 +1175,7 @@ Old (no more supported) syntax: ; class_expr: [ "top" - [ "fun"; p = ipatt; ce = class_fun_def -> + [ "fun"; p = labeled_ipatt; ce = class_fun_def -> <:class_expr< fun $p$ -> $ce$ >> | "let"; rf = opt_rec; bi = binding; "in"; ce = SELF -> <:class_expr< let $rec:rf$ $bi$ in $ce$ >> ] @@ -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<>> ] ] diff --git a/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParserParser.ml b/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParserParser.ml index 069ee52c..103519c9 100644 --- a/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParserParser.ml +++ b/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParserParser.ml @@ -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$ >> ] ] diff --git a/camlp4/Camlp4Parsers/Camlp4OCamlRevisedQuotationExpander.ml b/camlp4/Camlp4Parsers/Camlp4OCamlRevisedQuotationExpander.ml index b013be25..07d2a01e 100644 --- a/camlp4/Camlp4Parsers/Camlp4OCamlRevisedQuotationExpander.ml +++ b/camlp4/Camlp4Parsers/Camlp4OCamlRevisedQuotationExpander.ml @@ -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 (); diff --git a/camlp4/Camlp4Parsers/Camlp4QuotationCommon.ml b/camlp4/Camlp4Parsers/Camlp4QuotationCommon.ml index efac02f7..28e9bf6b 100644 --- a/camlp4/Camlp4Parsers/Camlp4QuotationCommon.ml +++ b/camlp4/Camlp4Parsers/Camlp4QuotationCommon.ml @@ -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>$ + else $ME.meta_expr _loc <:expr>$ >> | "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; diff --git a/camlp4/Camlp4Top/Rprint.ml b/camlp4/Camlp4Top/Rprint.ml index 4a95770f..cb9e6a7b 100644 --- a/camlp4/Camlp4Top/Rprint.ml +++ b/camlp4/Camlp4Top/Rprint.ml @@ -198,7 +198,7 @@ and print_simple_out_type ppf = | Otyp_record lbls -> fprintf ppf "@[{ %a }@]" (print_list print_out_label (fun ppf -> fprintf ppf ";@ ")) lbls - | Otyp_abstract -> fprintf ppf "'abstract" + | Otyp_abstract -> fprintf ppf "" | Otyp_alias _ _ | Otyp_poly _ _ | Otyp_arrow _ _ _ | Otyp_constr _ [_ :: _] as ty -> fprintf ppf "@[<1>(%a)@]" print_out_type ty ] diff --git a/camlp4/Camlp4Top/Top.ml b/camlp4/Camlp4Top/Top.ml index 9a514136..e706efdc 100644 --- a/camlp4/Camlp4Top/Top.ml +++ b/camlp4/Camlp4Top/Top.ml @@ -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 ()); diff --git a/camlp4/Camlp4_config.ml b/camlp4/Camlp4_config.ml index 36284849..03fa1f7c 100644 --- a/camlp4/Camlp4_config.ml +++ b/camlp4/Camlp4_config.ml @@ -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";; diff --git a/camlp4/Camlp4_config.mli b/camlp4/Camlp4_config.mli index c2647b89..17592084 100644 --- a/camlp4/Camlp4_config.mli +++ b/camlp4/Camlp4_config.mli @@ -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;; diff --git a/camlp4/boot/Camlp4.ml b/camlp4/boot/Camlp4.ml index 5944147b..067a0993 100644 --- a/camlp4/boot/Camlp4.ml +++ b/camlp4/boot/Camlp4.ml @@ -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.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.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 " %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 a 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 "@ @[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.2 2007/02/26 16:32:46 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.2 2007/02/26 16:32:46 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.2 2007/02/26 16:32:46 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.2 2007/02/26 16:32:46 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>@[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 "@[@[{@ %a@]@ }@]" o#record_binding - b + pp f "@[@[{%a@]@ }@]" o#record_binding b | Ast.ExRec (_, b, e) -> - pp f "@[@[{@ (%a)@ with@ %a@]@ }@]" + pp f "@[@[{@ (%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 "@[@[{<@ %a@]@ >}@]" - o#record_binding b + pp f "@[@[{<%a@]@ >}@]" o#record_binding + b | Ast.ExObj (_, (Ast.PaNil _), cst) -> pp f "@[@[object@ %a@]@ end@]" o#class_str_item cst @@ -14904,7 +15624,6 @@ module Printers = pp f "@[@[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.2 2007/02/26 16:32:46 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 - "@[@[@[<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 - "@[@[@[<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 "@[@[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 " %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.2 2007/02/26 16:32:46 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 diff --git a/camlp4/boot/Camlp4.ml4 b/camlp4/boot/Camlp4.ml4 index 597f4291..d3ea1c7a 100644 --- a/camlp4/boot/Camlp4.ml4 +++ b/camlp4/boot/Camlp4.ml4 @@ -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 : diff --git a/camlp4/boot/Camlp4Ast.ml b/camlp4/boot/Camlp4Ast.ml index 91b3d51c..e2a77ecc 100644 --- a/camlp4/boot/Camlp4Ast.ml +++ b/camlp4/boot/Camlp4Ast.ml @@ -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; diff --git a/camlp4/boot/camlp4boot.ml b/camlp4/boot/camlp4boot.ml index ba9a83a8..0985599a 100644 --- a/camlp4/boot/camlp4boot.ml +++ b/camlp4/boot/camlp4boot.ml @@ -23,7 +23,7 @@ module R = struct let name = "Camlp4RevisedParserParser" let version = - "$Id: Camlp4OCamlRevisedParser.ml,v 1.1 2007/02/07 10:09:22 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: Camlp4QuotationCommon.ml,v 1.1 2007/02/07 10:09:22 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 @@ -7773,7 +8627,7 @@ module Rp = struct let name = "Camlp4OCamlRevisedParserParser" let version = - "$Id: Camlp4OCamlRevisedParserParser.ml,v 1.1 2007/02/07 10:09:22 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: Camlp4GrammarParser.ml,v 1.1 2007/02/07 10:09:22 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=) *) module Id = struct let name = "Camlp4MacroParser" let version = - "$Id: Camlp4MacroParser.ml,v 1.1 2007/02/07 10:09:22 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 DEFINE = DEFINE () = - IFDEF THEN (END | ENDIF) - IFDEF THEN ELSE (END | ENDIF) - IFNDEF THEN (END | ENDIF) - IFNDEF THEN ELSE (END | ENDIF) + IFDEF THEN [ ELSE ] (END | ENDIF) + IFNDEF THEN [ ELSE ] (END | ENDIF) + INCLUDE + + At toplevel (signature item): + + DEFINE + IFDEF THEN [ ELSE ] (END | ENDIF) + IFNDEF THEN [ ELSE ] (END | ENDIF) INCLUDE In expressions: - IFDEF THEN ELSE (END | ENDIF) - IFNDEF THEN ELSE (END | ENDIF) + IFDEF THEN [ ELSE ] (END | ENDIF) + IFNDEF THEN [ ELSE ] (END | ENDIF) + DEFINE = IN __FILE__ __LOCATION__ @@ -11107,7 +11954,7 @@ Added statements: As Camlp4 options: - -D define + -D or -D=expr define with optional value -U undefine it -I add 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 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 "") 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) " Define for IFDEF instruction." let _ = Options.add "-U" (Arg.String undef) @@ -11668,6 +12731,22 @@ Added statements: " 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 @@ -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: Camlp4Bin.ml,v 1.13 2007/02/07 10:09:21 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) diff --git a/camlp4/boot/camlp4boot.ml4 b/camlp4/boot/camlp4boot.ml4 index 582ce9c2..4c4c46d1 100644 --- a/camlp4/boot/camlp4boot.ml4 +++ b/camlp4/boot/camlp4boot.ml4 @@ -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 index 00000000..311d478b --- /dev/null +++ b/camlp4/camlp4fulllib.mllib @@ -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 index 00000000..18742e40 --- /dev/null +++ b/camlp4/examples/_tags @@ -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 : camlp4of, use_camlp4 +"test_macros.ml": pp(camlp4of ./macros.cmo) +"lambda_test.ml": pp(camlp4of ./lambda_quot_o.cmo) +: 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 index 00000000..2d4d2cb0 --- /dev/null +++ b/camlp4/examples/apply_operator.ml @@ -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 index 00000000..6644b943 --- /dev/null +++ b/camlp4/examples/apply_operator_test.ml @@ -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 index 00000000..654511af --- /dev/null +++ b/camlp4/examples/lambda_quot.ml @@ -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 index 00000000..746aea44 --- /dev/null +++ b/camlp4/examples/lambda_test.ml @@ -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 index 00000000..fe7b7392 --- /dev/null +++ b/camlp4/examples/macros.ml @@ -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 index 00000000..3e7e30fb --- /dev/null +++ b/camlp4/examples/parse_files.ml @@ -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 index 00000000..1e1b172b --- /dev/null +++ b/camlp4/examples/test_macros.ml @@ -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 index 00000000..772dfcfc --- /dev/null +++ b/camlp4/examples/test_type_quotation.ml @@ -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 index 00000000..5dae046f --- /dev/null +++ b/camlp4/examples/type_quotation.ml @@ -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; diff --git a/camlp4/test/fixtures/macrotest.ml b/camlp4/test/fixtures/macrotest.ml index 55545734..023a5b42 100644 --- a/camlp4/test/fixtures/macrotest.ml +++ b/camlp4/test/fixtures/macrotest.ml @@ -51,5 +51,20 @@ value f = print_int (A * a_should_be_present + 5) ENDIF; +IFDEF A THEN + DEFINE Z = "ok"; +ELSE + DEFINE Z = "ko"; +ENDIF; + +Z; + +IFDEF DNE THEN + DEFINE Z = "ko2"; +ELSE + DEFINE Z = "ok2"; +ENDIF; + +Z; pouet; diff --git a/config/Makefile.msvc b/config/Makefile.msvc index 24ed4a3d..6825586d 100644 --- a/config/Makefile.msvc +++ b/config/Makefile.msvc @@ -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) diff --git a/configure b/configure index 518ed08c..77810bb1 100755 --- a/configure +++ b/configure @@ -488,7 +488,7 @@ mksharedlibrpath='' if test $withsharedlibs = "yes"; then case "$host" in - *-*-linux-gnu|*-*-linux|*-*-freebsd[3-9]*|*-*-openbsd[3-9]*|*-*-netbsd[3-9]*|*-*-gnu*) + *-*-linux-gnu|*-*-linux|*-*-freebsd[3-9]*|*-*-openbsd*|*-*-netbsd*|*-*-gnu*) sharedcccompopts="-fPIC" mksharedlib="$bytecc -shared -o" bytecclinkopts="$bytecclinkopts -Wl,-E" @@ -1066,10 +1066,14 @@ systhread_support=false if test "$pthread_wanted" = "yes"; then case "$host" in - *-*-solaris*) pthread_link="-lpthread -lposix4";; - *-*-freebsd*) pthread_link="-pthread";; - *-*-openbsd*) pthread_link="-pthread";; - *) pthread_link="-lpthread";; + *-*-solaris*) pthread_link="-lpthread -lposix4" + pthread_caml_link="-cclib -lpthread -cclib -lposix4";; + *-*-freebsd*) pthread_link="-pthread" + pthread_caml_link="-cclib -pthread";; + *-*-openbsd*) pthread_link="-pthread" + pthread_caml_link="-cclib -pthread";; + *) pthread_link="-lpthread" + pthread_caml_link="-cclib -lpthread";; esac if ./hasgot -i pthread.h $pthread_link pthread_self; then echo "POSIX threads library supported." @@ -1098,7 +1102,7 @@ if test "$pthread_wanted" = "yes"; then else pthread_link="" fi -echo "PTHREAD_LINK=$pthread_link" >> Makefile +echo "PTHREAD_LINK=$pthread_caml_link" >> Makefile # Determine if the bytecode thread library is supported diff --git a/man/ocaml.m b/man/ocaml.m index 7f7e5a64..47c263a7 100644 --- a/man/ocaml.m +++ b/man/ocaml.m @@ -25,7 +25,7 @@ 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. diff --git a/myocamlbuild.ml b/myocamlbuild.ml index a9e14aa3..0e522f0e 100644 --- a/myocamlbuild.ml +++ b/myocamlbuild.ml @@ -110,21 +110,24 @@ let threads_dir = if_partial_dir "otherlibs/threads";; let systhreads_dir = if_partial_dir "otherlibs/systhreads";; let dynlink_dir = if_partial_dir "otherlibs/dynlink";; let str_dir = if_partial_dir "otherlibs/str";; -let stdlib_dir = if_partial_dir "stdlib";; let toplevel_dir = if_partial_dir "toplevel";; -let ocamlc_solver () = - if Pathname.exists "ocamlc.opt" && Pathname.exists (stdlib_dir/"stdlib.cmxa") then - S[A"./ocamlc.opt"; A"-nostdlib"] - else if Pathname.exists "ocamlc" && Pathname.exists (stdlib_dir/"stdlib.cma") then - S[ocamlrun; A"./ocamlc"; A"-nostdlib"] - else boot_ocamlc;; +let ocamlc_solver = + let native_deps = ["ocamlc.opt"; "stdlib/stdlib.cmxa"; + "stdlib/std_exit.cmx"; "stdlib/std_exit"-.-C.o] in + let byte_deps = ["ocamlc"; "stdlib/stdlib.cma"; "stdlib/std_exit.cmo"] in + fun () -> + if List.for_all Pathname.exists native_deps then + S[A"./ocamlc.opt"; A"-nostdlib"] + else if List.for_all Pathname.exists byte_deps then + S[ocamlrun; A"./ocamlc"; A"-nostdlib"] + else boot_ocamlc;; Command.setup_virtual_command_solver "OCAMLC" ocamlc_solver;; Command.setup_virtual_command_solver "OCAMLCWIN" (convert_for_windows_shell ocamlc_solver);; let ocamlopt_solver () = - S[if Pathname.exists "ocamlopt.opt" && Pathname.exists (stdlib_dir/"stdlib.cmxa") + S[if Pathname.exists "ocamlopt.opt" && Pathname.exists ("stdlib/stdlib.cmxa") then A"./ocamlopt.opt" else S[ocamlrun; A"./ocamlopt"]; A"-nostdlib"];; @@ -207,13 +210,15 @@ use_lib "otherlibs/dynlink/extract_crc" "otherlibs/dynlink/dynlink";; hide_package_contents "otherlibs/dynlink/dynlinkaux";; flag ["ocaml"; "link"; "file:driver/main.native"; "native"] begin - S[A("asmrun/meta"-.-C.o); A("asmrun/dynlink"-.-C.o); - A"-ccopt"; A C.bytecclinkopts; A"-cclib"; A C.bytecclibs] + S[A"-ccopt"; A C.bytecclinkopts; A"-cclib"; A C.bytecclibs] end;; -flag ["ocaml"; "link"] (S[A"-I"; P stdlib_dir]);; -flag ["ocaml"; "compile"; "include_stdlib"] (S[A"-I"; P stdlib_dir]);; -flag ["ocaml"; "compile"; "include_threads_stdlib"] (S[A"-I"; P threads_dir; A"-I"; P stdlib_dir]);; +dep ["ocaml"; "link"; "file:driver/main.native"; "native"] + ["asmrun/meta"-.-C.o; "asmrun/dynlink"-.-C.o];; + +dep ["ocaml"; "compile"; "native"] ["stdlib/libasmrun"-.-C.a];; + +flag ["ocaml"; "link"] (S[A"-I"; P "stdlib"]);; flag ["ocaml"; "compile"; "include_unix"] (S[A"-I"; P unix_dir]);; flag ["ocaml"; "compile"; "include_str"] (S[A"-I"; P str_dir]);; flag ["ocaml"; "compile"; "include_dynlink"] (S[A"-I"; P dynlink_dir]);; @@ -233,6 +238,7 @@ let setup_arch arch = let camlp4_arch = dir "" [ + dir "stdlib" []; dir "utils" []; dir "parsing" []; dir "camlp4" [ @@ -249,26 +255,36 @@ let camlp4_arch = setup_arch camlp4_arch;; -Pathname.define_context "utils" [Pathname.current_dir_name];; -Pathname.define_context "camlp4" ["camlp4/build"; "utils"];; -Pathname.define_context "camlp4/boot" ["camlp4/build"; "utils"; "parsing"; "camlp4"];; -Pathname.define_context "camlp4/Camlp4Parsers" ["camlp4"; "camlp4/build"];; -Pathname.define_context "camlp4/Camlp4Printers" ["camlp4"; "camlp4/build"];; -Pathname.define_context "camlp4/Camlp4Filters" ["camlp4"; "camlp4/build"];; -Pathname.define_context "camlp4/Camlp4Top" ["typing"];; -Pathname.define_context "typing" ["typing"; "parsing"; "utils"];; -Pathname.define_context "ocamldoc" ["typing"; "parsing"; "utils"; "tools"; "bytecomp"];; -Pathname.define_context "bytecomp" ["bytecomp"; "parsing"; "typing"; "utils"];; -Pathname.define_context "tools" ["tools"; (* "toplevel"; *) "parsing"; "utils"; "driver"; "bytecomp"; "asmcomp"; "typing"];; -Pathname.define_context "toplevel" ["toplevel"; "parsing"; "typing"; "bytecomp"; "utils"; "driver"];; -Pathname.define_context "driver" ["driver"; "asmcomp"; "bytecomp"; "typing"; "utils"; "parsing"];; -Pathname.define_context "debugger" ["bytecomp"; "utils"; "typing"; "parsing"; "toplevel"];; -Pathname.define_context "otherlibs/dynlink" ["otherlibs/dynlink"; "bytecomp"; "utils"; "typing"; "parsing"];; -Pathname.define_context "asmcomp" ["asmcomp"; "bytecomp"; "parsing"; "typing"; "utils"];; +Pathname.define_context "" ["stdlib"];; +Pathname.define_context "utils" [Pathname.current_dir_name; "stdlib"];; +Pathname.define_context "camlp4" ["camlp4/build"; "utils"; "stdlib"];; +Pathname.define_context "camlp4/boot" ["camlp4/build"; "utils"; "parsing"; "camlp4"; "stdlib"];; +Pathname.define_context "camlp4/Camlp4Parsers" ["camlp4"; "camlp4/build"; "stdlib"];; +Pathname.define_context "camlp4/Camlp4Printers" ["camlp4"; "camlp4/build"; "stdlib"];; +Pathname.define_context "camlp4/Camlp4Filters" ["camlp4"; "camlp4/build"; "stdlib"];; +Pathname.define_context "camlp4/Camlp4Top" ["typing"; "stdlib"];; +Pathname.define_context "typing" ["typing"; "parsing"; "utils"; "stdlib"];; +Pathname.define_context "ocamldoc" ["typing"; "parsing"; "utils"; "tools"; "bytecomp"; "stdlib"];; +Pathname.define_context "bytecomp" ["bytecomp"; "parsing"; "typing"; "utils"; "stdlib"];; +Pathname.define_context "tools" ["tools"; (* "toplevel"; *) "parsing"; "utils"; "driver"; "bytecomp"; "asmcomp"; "typing"; "stdlib"];; +Pathname.define_context "toplevel" ["toplevel"; "parsing"; "typing"; "bytecomp"; "utils"; "driver"; "stdlib"];; +Pathname.define_context "driver" ["driver"; "asmcomp"; "bytecomp"; "typing"; "utils"; "parsing"; "stdlib"];; +Pathname.define_context "debugger" ["bytecomp"; "utils"; "typing"; "parsing"; "toplevel"; "stdlib"];; +Pathname.define_context "otherlibs/dynlink" ["otherlibs/dynlink"; "bytecomp"; "utils"; "typing"; "parsing"; "stdlib"];; +Pathname.define_context "asmcomp" ["asmcomp"; "bytecomp"; "parsing"; "typing"; "utils"; "stdlib"];; +Pathname.define_context "ocamlbuild" ["ocamlbuild"; "stdlib"; "."];; +Pathname.define_context "lex" ["lex"; "stdlib"];; + +List.iter (fun x -> let x = "otherlibs"/x in Pathname.define_context x [x; "stdlib"]) + ["bigarray"; "dbm"; "graph"; "num"; "str"; "systhreads"; "unix"; "win32graph"; "win32unix"];; (* The bootstrap standard library *) copy_rule "The bootstrap standard library" "stdlib/%" "boot/%";; +(* About the standard library *) +copy_rule "stdlib asmrun" ("asmrun/%"-.-C.a) ("stdlib/%"-.-C.a);; +copy_rule "stdlib byterun" ("byterun/%"-.-C.a) ("stdlib/%"-.-C.a);; + (* The thread specific standard library *) copy_rule "The thread specific standard library (mllib)" ~insert:`bottom "stdlib/%.mllib" "otherlibs/threads/%.mllib";; copy_rule "The thread specific standard library (cmo)" ~insert:`bottom "stdlib/%.cmo" "otherlibs/threads/%.cmo";; @@ -316,6 +332,52 @@ copy_rule' "otherlibs/dynlink/extract_crc.byte" "otherlibs/dynlink/extract_crc"; copy_rule' ~insert:`bottom "%" "%.exe";; +ocaml_lib "stdlib/stdlib";; + +let stdlib_mllib_contents = + lazy (string_list_of_file "stdlib/stdlib.mllib");; + +let import_stdlib_contents build exts = + let l = + List.fold_right begin fun x -> + List.fold_right begin fun ext acc -> + ["stdlib"/(String.uncapitalize x)-.-ext] :: acc + end exts + end !*stdlib_mllib_contents [] + in + let res = build l in + List.iter Outcome.ignore_good res +;; + +rule "byte stdlib in partial mode" + ~prod:"byte_stdlib_partial_mode" + ~deps:["stdlib/stdlib.mllib"; "stdlib/stdlib.cma"; + "stdlib/std_exit.cmo"; "stdlib/libcamlrun"-.-C.a; + "stdlib/camlheader"; "stdlib/camlheader_ur"] + begin fun env build -> + let (_ : Command.t) = + Ocamlbuild_pack.Ocaml_compiler.byte_library_link_mllib + "stdlib/stdlib.mllib" "stdlib/stdlib.cma" env build + in + import_stdlib_contents build ["cmi"]; + touch "byte_stdlib_partial_mode" + end;; + +rule "native stdlib in partial mode" + ~prod:"native_stdlib_partial_mode" + ~deps:["stdlib/stdlib.mllib"; "stdlib/stdlib.cmxa"; + "stdlib/stdlib"-.-C.a; "stdlib/std_exit.cmx"; + "stdlib/std_exit"-.-C.o; "stdlib/libasmrun"-.-C.a; + "stdlib/camlheader"; "stdlib/camlheader_ur"] + begin fun env build -> + let (_ : Command.t) = + Ocamlbuild_pack.Ocaml_compiler.native_library_link_mllib + "stdlib/stdlib.mllib" "stdlib/stdlib.cmxa" env build + in + import_stdlib_contents build ["cmi"]; + touch "native_stdlib_partial_mode" + end;; + rule "C files" ~prod:("%"-.-C.o) ~dep:"%.c" @@ -378,7 +440,7 @@ rule "Standard library manual" begin fun _ _ -> Seq[Cmd(S[A"mkdir"; A"-p"; P"ocamldoc/stdlib_man"]); Cmd(S[ocamldoc; A"-man"; A"-d"; P"ocamldoc/stdlib_man"; - A"-I"; P"stdlib"; A"-I"; P"otherlibs/unix"; A"-I"; P"otherlibs/num"; + A"-I"; P "stdlib"; A"-I"; P"otherlibs/unix"; A"-I"; P"otherlibs/num"; A"-t"; A"Ocaml library"; A"-man-mini"; atomize stdlib_mlis])] end;; @@ -464,7 +526,7 @@ rule "libthreadsnat.a" (* See remark above: force static linking of libthreadsnat.a *) flag ["ocaml"; "link"; "library"; "otherlibs_systhreads"; "native"] begin - S[A"-cclib"; syscamllib "threadsnat"; (* A"-cclib"; syscamllib "unix"; seems to be useless and can be dangerous during bootstrap *) A"-cclib"; A C.pthread_link] + S[A"-cclib"; syscamllib "threadsnat"; (* A"-cclib"; syscamllib "unix"; seems to be useless and can be dangerous during bootstrap *) Sh C.pthread_link] end; end;; @@ -518,8 +580,11 @@ rule "stdlib/sys.ml" ~prod:"stdlib/sys.ml" ~deps:["stdlib/sys.mlp"; "VERSION"] begin fun _ _ -> + let version = with_input_file "VERSION" input_line in Seq [rm_f "stdlib/sys.ml"; - Cmd (Sh"sed -e\"s|%%VERSION%%|`head -1 VERSION`|\" stdlib/sys.mlp >stdlib/sys.ml"); + Cmd (S[A"sed"; A"-e"; + A(sprintf "s,%%%%VERSION%%%%,%s," version); + Sh"<"; P"stdlib/sys.mlp"; Sh">"; Px"stdlib/sys.ml"]); chmod (A"-w") "stdlib/sys.ml"] end;; @@ -583,14 +648,8 @@ rule "bytecomp/runtimedef.ml" ~prod:"bytecomp/runtimedef.ml" ~deps:["byterun/primitives"; "byterun/fail.h"] begin fun _ _ -> - Cmd(Sh"(echo 'let builtin_exceptions = [|'; \ - sed -n -e 's|.*/\\* \\(\"[A-Za-z_]*\"\\) \\*/$| \\1;|p' byterun/fail.h | \ - sed -e '$s/;$//'; \ - echo '|]'; \ - echo 'let builtin_primitives = [|'; \ - sed -e 's/.*/ \"&\";/' -e '$s/;$//' byterun/primitives; \ - echo '|]') > bytecomp/runtimedef.ml") - end;; + Cmd(S[A"../build/mkruntimedef.sh";Sh">"; Px"bytecomp/runtimedef.ml"]) + end;; (* Choose the right machine-dependent files *) @@ -767,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" @@ -784,24 +843,25 @@ mk_camlp4 "camlp4orf" (* Labltk *) -Pathname.define_context "otherlibs/labltk/compiler" ["otherlibs/labltk/compiler"; "otherlibs/labltk/support"];; -Pathname.define_context "otherlibs/labltk/labltk" ["otherlibs/labltk/labltk"; "otherlibs/labltk/support"];; -Pathname.define_context "otherlibs/labltk/camltk" ["otherlibs/labltk/camltk"; "otherlibs/labltk/support"];; +Pathname.define_context "otherlibs/labltk/support" ["otherlibs/labltk/support"; "stdlib"];; +Pathname.define_context "otherlibs/labltk/compiler" ["otherlibs/labltk/compiler"; "otherlibs/labltk/support"; "stdlib"];; +Pathname.define_context "otherlibs/labltk/labltk" ["otherlibs/labltk/labltk"; "otherlibs/labltk/support"; "stdlib"];; +Pathname.define_context "otherlibs/labltk/camltk" ["otherlibs/labltk/camltk"; "otherlibs/labltk/support"; "stdlib"];; Pathname.define_context "otherlibs/labltk/lib" - ["otherlibs/labltk/labltk"; "otherlibs/labltk/camltk"; "otherlibs/labltk/support"];; + ["otherlibs/labltk/labltk"; "otherlibs/labltk/camltk"; "otherlibs/labltk/support"; "stdlib"];; Pathname.define_context "otherlibs/labltk/jpf" - ["otherlibs/labltk/jpf"; "otherlibs/labltk/labltk"; "otherlibs/labltk/support"];; + ["otherlibs/labltk/jpf"; "otherlibs/labltk/labltk"; "otherlibs/labltk/support"; "stdlib"];; Pathname.define_context "otherlibs/labltk/frx" - ["otherlibs/labltk/frx"; "otherlibs/labltk/camltk"; "otherlibs/labltk/support"];; + ["otherlibs/labltk/frx"; "otherlibs/labltk/camltk"; "otherlibs/labltk/support"; "stdlib"];; Pathname.define_context "otherlibs/labltk/tkanim" - ["otherlibs/labltk/tkanim"; "otherlibs/labltk/camltk"; "otherlibs/labltk/support"];; + ["otherlibs/labltk/tkanim"; "otherlibs/labltk/camltk"; "otherlibs/labltk/support"; "stdlib"];; Pathname.define_context "otherlibs/labltk/browser" - ["otherlibs/labltk/browser"; "otherlibs/labltk/labltk"; "otherlibs/labltk/support"; "parsing"; "utils"; "typing"];; + ["otherlibs/labltk/browser"; "otherlibs/labltk/labltk"; "otherlibs/labltk/support"; "parsing"; "utils"; "typing"; "stdlib"];; 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;;" @@ -970,13 +1030,13 @@ rule "labltktop" A"-I"; P"otherlibs/labltk/support"; A"-I"; P"toplevel"; P"toplevellib.cma"; A"-I"; P"otherlibs/labltk/labltk"; A"-I"; P"otherlibs/labltk/camltk"; A"-I"; P"otherlibs/labltk/lib"; P"labltk.cma"; A"-I"; P unix_dir; P"unix.cma"; - A"-I"; P"otherlibs/str"; A"-I"; P"stdlib"; P"str.cma"; P"topstart.cmo"]) + A"-I"; P"otherlibs/str"; A"-I"; P "stdlib"; P"str.cma"; P"topstart.cmo"]) end;; 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\ diff --git a/ocamlbuild/ChangeLog b/ocamlbuild/ChangeLog index 9fb7d067..a844e38b 100644 --- a/ocamlbuild/ChangeLog +++ b/ocamlbuild/ChangeLog @@ -1,3 +1,148 @@ +2007-03-22 Nicolas Pouillard + + 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 + + Fix the previous fix. + + * ocaml_compiler.ml: Remove the empty file. + * test/good-output: Update. + +2007-03-21 Nicolas Pouillard + + [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 + + 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 + + Fix a bug in expand_module. + + * ocaml_utils.ml: Handle correctly pathnames instead of just basenames. + +2007-03-13 Nicolas Pouillard + + 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 + + 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 + + Re fix menhir and include dirs. + + * ocaml_tools.ml: Specifiy ocamlc and -I with --ocamlc. + +2007-03-11 Nicolas Pouillard + + Fix a bug: Add include directories to menhir. + + * ocaml_tools.ml: Ditto. + * my_std.ml, + * signatures.mli: Specification typo. + +2007-03-07 Nicolas Pouillard + + Handle specially archives files during an import. + + * shell.ml: Ditto. + +2007-03-07 Nicolas Pouillard + + Use cp -p in copy_rule, and fix some typos in the manual. + + * manual/manual.tex: Typos. + * rule.ml, + * rule.mli: Add cp_p and use it for copy_rule. + +2007-03-05 Nicolas Pouillard + + Relaxe executor on exception condition. + + Patch from Berke. + * executor.ml: Ignore Not_found and exceptional conditions. + * TODO: Add an entry (needs to better understand POSIX). + +2007-03-04 Nicolas Pouillard + + Split where in bindir and libdir. + + * ocamlbuild_where.mli: Ditto. + * ocaml_specific.ml: Update. + * options.ml: Use bindir. + * plugin.ml: Update. + * start.sh: Update. + +2007-03-04 Nicolas Pouillard + + Virtual solvers for ocaml tools. + + * options.ml: Setup virtual command solver for commands like ocamlc, + ocamlopt... This allow to have full pathname but let also failback to + classic search path. + * ocaml_compiler.ml: Add a tag to differentiate dependencies at link + time. + * ocamlbuild-presentation.rslide: Add an item as suggested by a friend. + +2007-03-02 Nicolas Pouillard + + Same thing for the second link function. + + * ocaml_compiler.ml: Ignore stdlib. + +2007-03-02 Nicolas Pouillard + + Move the stdlib hack. + + * ocaml_compiler.ml: Should works better. + +2007-03-02 Nicolas Pouillard + + Little fix about library linking. + + * ocaml_utils.ml: Avoid linking twice in some cases. + * ocaml_compiler.ml: Handle specially the OCaml stdlib. + 2007-03-01 Nicolas Pouillard Remove a rec. diff --git a/ocamlbuild/Makefile b/ocamlbuild/Makefile index 01fd55a7..e2cb570b 100644 --- a/ocamlbuild/Makefile +++ b/ocamlbuild/Makefile @@ -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) @@ -46,6 +46,7 @@ doc: ln -sf $(BUILDDIR)/ocamlbuild.docdir doc else all byte native: ocamlbuild.byte.start + mkdir -p boot cp ocamlbuild.byte.start boot/ocamlbuild $(MAKE) $(MFLAGS) $(MAKECMDGOALS) cp $(BUILDDIR)/ocamlbuild.native boot/ocamlbuild diff --git a/ocamlbuild/TODO b/ocamlbuild/TODO index 65f270f5..3b634f6b 100644 --- a/ocamlbuild/TODO +++ b/ocamlbuild/TODO @@ -1,4 +1,5 @@ To do: +* Executor: exceptional conditions and Not_found * Fix report * Design a nice, friendly, future-proof plugin (myocamlbuild) API * Ocamlbuild should keep track of files removed from the source directory, e.g., diff --git a/ocamlbuild/command.ml b/ocamlbuild/command.ml index 593b1f8d..61c305d4 100644 --- a/ocamlbuild/command.ml +++ b/ocamlbuild/command.ml @@ -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 = diff --git a/ocamlbuild/command.mli b/ocamlbuild/command.mli index 5ad5302d..de4537aa 100644 --- a/ocamlbuild/command.mli +++ b/ocamlbuild/command.mli @@ -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 index 00000000..769cb463 --- /dev/null +++ b/ocamlbuild/examples/example_with_C/_tags @@ -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 index 00000000..ef6dbd43 --- /dev/null +++ b/ocamlbuild/examples/example_with_C/fib.ml @@ -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 index 00000000..cc2104b6 --- /dev/null +++ b/ocamlbuild/examples/example_with_C/fibwrap.c @@ -0,0 +1,7 @@ + /* -*- C -*- */ +#include +#include +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 index 00000000..c7f6bb5d --- /dev/null +++ b/ocamlbuild/examples/example_with_C/main.c @@ -0,0 +1,10 @@ + /* -*- C -*- */ +#include +#include +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 index 00000000..f53df7e1 --- /dev/null +++ b/ocamlbuild/examples/example_with_C/myocamlbuild.ml @@ -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 index 00000000..7fecab12 --- /dev/null +++ b/ocamlbuild/examples/example_with_C/x.ml @@ -0,0 +1 @@ +let x = 42 diff --git a/ocamlbuild/executor.ml b/ocamlbuild/executor.ml index 1890c98f..300e1a6a 100644 --- a/ocamlbuild/executor.ml +++ b/ocamlbuild/executor.ml @@ -304,18 +304,22 @@ let execute begin fun (fdlist, hook) -> List.iter begin fun fd -> - let job = FDM.find fd !outputs in - ticker (); - hook fd job + try + let job = FDM.find fd !outputs in + ticker (); + hook fd job + with + | Not_found -> () (* XXX *) end fdlist end [chrfds, do_read ~loop:false; chwfds, (fun _ _ -> ()); chxfds, - begin fun _ job -> - display (fun oc -> fp oc "Exceptional condition on command %S\n%!" job.job_command); - exit Exit_codes.rc_exceptional_condition + begin fun _ _job -> + (*display (fun oc -> fp oc "Exceptional condition on command %S\n%!" job.job_command); + exit Exit_codes.rc_exceptional_condition*) + () (* FIXME *) end]; loop () end diff --git a/ocamlbuild/main.ml b/ocamlbuild/main.ml index 967c7c37..07f493b0 100644 --- a/ocamlbuild/main.ml +++ b/ocamlbuild/main.ml @@ -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; diff --git a/ocamlbuild/manual/manual.tex b/ocamlbuild/manual/manual.tex index 99b76d7e..6cb32536 100644 --- a/ocamlbuild/manual/manual.tex +++ b/ocamlbuild/manual/manual.tex @@ -73,7 +73,7 @@ \section{Limitations} functions or values directly from the core \ocb modules. We ask you to report such usage to the authors so that we may make the necessary changes to the API; you may also want to isolate calls to the non-API parts of the \ocb library -from the rest of your plugin to to be able to keep the later when incompatible +from the rest of your plugin to be able to keep the later when incompatible changes arise. The way that \ocb handles the command-line options, the \tags file, @@ -174,9 +174,9 @@ \subsection{Executing my code} You can execute your code the old-fashioned way (\texttt{./hello.native}). You may also type \begin{verbatim} -ocamlbuild main.native -- Caesar +ocamlbuild hello.native -- Caesar \end{verbatim} -and it will compile and then run \texttt{main.native} with the arguments following \texttt{-{}-}, +and it will compile and then run \texttt{hello.native} with the arguments following \texttt{-{}-}, which should display: \begin{verbatim} % ocamlbuild hello.native -- Caesar @@ -257,14 +257,14 @@ \subsection{Dependencies} Printf.printf "My name is %s\n" Sys.argv.(0) ;; \end{verbatim} -Then the module \texttt{Main} depends on the module \texttt{Greet} and \ocb can +Then the module \texttt{Hello} depends on the module \texttt{Greet} and \ocb can figure this out for himself -- we still only have to invoke \texttt{\ocb -main.native}. Needless to say, this works for any number of modules. +hello.native}. Needless to say, this works for any number of modules. %***) %(*** Native and byte code \subsection{Native and byte-code} If we want to compile byte-code instead of native, we just a target name of -\texttt{main.byte} instead of \texttt{main.native}, i.e., we type +\texttt{hello.byte} instead of \texttt{hello.native}, i.e., we type \texttt{\ocb hello.byte}. %***) %(*** Compile flags @@ -536,7 +536,8 @@ \subsection{Subdirectories} \texttt{Baz} exist elsewhere in the project, then you are done. Just use \texttt{Foo}, \texttt{Foo.Bar} and \texttt{Foo.Baz} in your code. Otherwise, you will need to use the plugin mechanism and define the mutual -visibility of the subdirectories using the XXX function. +visibility of the subdirectories using the \texttt{Pathname.define\_context} +function. %***) %(*** Grouping targets \subsection{Grouping targets with \texttt{.itarget}} diff --git a/ocamlbuild/my_std.ml b/ocamlbuild/my_std.ml index 6a035160..9d74a189 100644 --- a/ocamlbuild/my_std.ml +++ b/ocamlbuild/my_std.ml @@ -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 diff --git a/ocamlbuild/my_unix.ml b/ocamlbuild/my_unix.ml index 0c8d4e9c..b914bbb9 100644 --- a/ocamlbuild/my_unix.ml +++ b/ocamlbuild/my_unix.ml @@ -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 diff --git a/ocamlbuild/my_unix_with_unix.ml b/ocamlbuild/my_unix_with_unix.ml index 1c0dd1e6..2bca1f9d 100644 --- a/ocamlbuild/my_unix_with_unix.ml +++ b/ocamlbuild/my_unix_with_unix.ml @@ -57,9 +57,7 @@ let run_and_open s kont = with e -> (close (); raise e) let stdout_isatty () = - (* 3.10 - Unix.isatty Unix.stdout *) - true + Unix.isatty Unix.stdout let setup () = implem.is_degraded <- false; diff --git a/ocamlbuild/ocaml_compiler.ml b/ocamlbuild/ocaml_compiler.ml index cf17c45d..e875d9bc 100644 --- a/ocamlbuild/ocaml_compiler.ml +++ b/ocamlbuild/ocaml_compiler.ml @@ -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 @@ -175,7 +180,7 @@ let caml_transitive_closure = Ocaml_dependencies.caml_transitive_closure let link_gen cmX_ext cma_ext a_ext extensions linker tagger cmX out env build = let cmX = env cmX and out = env out in let tags = tagger (tags_of_pathname out) in - let dyndeps = Rule.build_deps_of_tags build tags in + let dyndeps = Rule.build_deps_of_tags build (tags++"link_with") in let cmi = Pathname.update_extensions "cmi" cmX in prepare_link cmX cmi extensions build; let libs = prepare_libs cma_ext a_ext out build in @@ -185,9 +190,15 @@ let link_gen cmX_ext cma_ext a_ext extensions linker tagger cmX out env build = ~caml_obj_ext:cmX_ext ~caml_lib_ext:cma_ext ~used_libraries:libs ~hidden_packages (cmX :: dyndeps) in let deps = (List.filter (fun l -> not (List.mem l deps)) libs) @ deps in + + (* Hack to avoid linking twice with the standard library. *) + let stdlib = "stdlib/stdlib"-.-cma_ext in + let is_not_stdlib x = x <> stdlib in + let deps = List.filter is_not_stdlib deps in + if deps = [] then failwith "Link list cannot be empty"; let () = dprintf 6 "link: %a -o %a" print_string_list deps Pathname.print out in - linker tags deps out + linker (tags++"dont_link_with") deps out let byte_link_gen = link_gen "cmo" "cma" "cma" ["cmo"; "cmi"] @@ -258,6 +269,12 @@ let link_units table extensions cmX_ext cma_ext a_ext linker tagger contents_lis let full_contents = libs @ module_paths in let deps = List.filter (fun x -> List.mem x full_contents) deps in let deps = (List.filter (fun l -> not (List.mem l deps)) libs) @ deps in + + (* Hack to avoid linking twice with the standard library. *) + let stdlib = "stdlib/stdlib"-.-cma_ext in + let is_not_stdlib x = x <> stdlib in + let deps = List.filter is_not_stdlib deps in + linker tags deps cmX let link_modules = link_units library_index diff --git a/ocamlbuild/ocaml_specific.ml b/ocamlbuild/ocaml_specific.ml index 7c4c91b1..973f610d 100644 --- a/ocamlbuild/ocaml_specific.ml +++ b/ocamlbuild/ocaml_specific.ml @@ -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");; @@ -382,11 +407,13 @@ flag ["ocaml"; "doc"; "docfile"; "extension:texi"] (A"-texi");; (** Ocamlbuild plugin for it's own building *) let install_lib = lazy (try Sys.getenv "INSTALL_LIB" with Not_found -> !*stdlib_dir/"ocamlbuild" (* not My_std.getenv since it's lazy*)) in +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 _ -> !*install_lib) + ~cache:(fun _ _ -> Printf.sprintf "lib:%S, bin:%S" !*install_lib !*install_bin) begin fun _ oc -> - Printf.fprintf oc "let where = ref %S;;\n" !*install_lib + Printf.fprintf oc "let bindir = ref %S;;\n" !*install_bin; + Printf.fprintf oc "let libdir = ref %S;;\n" !*install_lib end;; ocaml_lib "ocamlbuildlib";; ocaml_lib "ocamlbuildlightlib";; diff --git a/ocamlbuild/ocaml_tools.ml b/ocamlbuild/ocaml_tools.ml index 365d3de4..2a17b128 100644 --- a/ocamlbuild/ocaml_tools.ml +++ b/ocamlbuild/ocaml_tools.ml @@ -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 = diff --git a/ocamlbuild/ocaml_utils.ml b/ocamlbuild/ocaml_utils.ml index 6eaff007..3174819c 100644 --- a/ocamlbuild/ocaml_utils.ml +++ b/ocamlbuild/ocaml_utils.ml @@ -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 [] @@ -96,10 +99,15 @@ let ocaml_lib ?(extern=false) ?(byte=true) ?(native=true) ?dir ?tag_name libpath | None -> "use_" ^ Pathname.basename libpath in Hashtbl.replace info_libraries tag_name (libpath, extern); - if byte then - flag ["ocaml"; tag_name; "link"; "byte"] (add_dir (A (libpath^".cma"))); - if native then - flag ["ocaml"; tag_name; "link"; "native"] (add_dir (A (libpath^".cmxa"))); + if extern then begin + if byte then + flag ["ocaml"; tag_name; "link"; "byte"] (add_dir (A (libpath^".cma"))); + if native then + flag ["ocaml"; tag_name; "link"; "native"] (add_dir (A (libpath^".cmxa"))); + end else begin + if not byte && not native then + invalid_arg "ocaml_lib: ~byte:false or ~native:false only works with ~extern:true"; + end; match dir with | None -> () | Some dir -> flag ["ocaml"; tag_name; "compile"] (S[A"-I"; P dir]) diff --git a/ocamlbuild/ocamlbuild-presentation.rslide b/ocamlbuild/ocamlbuild-presentation.rslide index 547cd687..4dc529f8 100644 --- a/ocamlbuild/ocamlbuild-presentation.rslide +++ b/ocamlbuild/ocamlbuild-presentation.rslide @@ -66,6 +66,7 @@ slide "What does ocamlbuild provide?" do * Supports multiple build directories * Automatic and safe cleaning * A source directory uncluttered by object files + * A portable tool shipped with OCaml end overlay 2 do * Saves time and money! diff --git a/ocamlbuild/ocamlbuild_where.mli b/ocamlbuild/ocamlbuild_where.mli index ba8b3a72..157536f7 100644 --- a/ocamlbuild/ocamlbuild_where.mli +++ b/ocamlbuild/ocamlbuild_where.mli @@ -10,5 +10,8 @@ (***********************************************************************) (* $Id$ *) + (* Original author: Nicolas Pouillard *) -val where : string ref + +val bindir : string ref +val libdir : string ref diff --git a/ocamlbuild/ocamldep.ml b/ocamlbuild/ocamldep.ml index 86d420dc..bbabc5e8 100644 --- a/ocamlbuild/ocamldep.ml +++ b/ocamlbuild/ocamldep.ml @@ -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)) diff --git a/ocamlbuild/ocamldep.mli b/ocamlbuild/ocamldep.mli index 05fce25a..c0796c67 100644 --- a/ocamlbuild/ocamldep.mli +++ b/ocamlbuild/ocamldep.mli @@ -12,8 +12,8 @@ (* $Id$ *) (* 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 diff --git a/ocamlbuild/options.ml b/ocamlbuild/options.ml index c7395e33..ed42a6a1 100644 --- a/ocamlbuild/options.ml +++ b/ocamlbuild/options.ml @@ -37,14 +37,40 @@ let make_links = ref true let nostdlib = ref false let use_menhir = ref false let catch_errors = ref true -let ocamlc = ref (A"ocamlc.opt") -let ocamlopt = ref (A"ocamlopt.opt") -let ocamldep = ref (A"ocamldep.opt") -let ocamldoc = ref (A"ocamldoc.opt") -let ocamlyacc = ref (A"ocamlyacc") -let ocamllex = ref (A"ocamllex") -let ocamlmklib = ref (A"ocamlmklib") -let ocamlmktop = ref (A"ocamlmktop") + +let mk_virtual_solvers = + let dir = Ocamlbuild_where.bindir in + List.iter begin fun cmd -> + let opt = cmd ^ ".opt" in + let a_opt = A opt in + let a_cmd = A cmd in + let search_in_path = memo Command.search_in_path in + let solver () = + if sys_file_exists !dir then + let long = filename_concat !dir cmd in + let long_opt = long ^ ".opt" in + if sys_file_exists long_opt then A long_opt + else if sys_file_exists long then A long + else try let _ = search_in_path opt in a_opt + with Not_found -> a_cmd + else + try let _ = search_in_path opt in a_opt + with Not_found -> a_cmd + in Command.setup_virtual_command_solver (String.uppercase cmd) solver + end + +let () = + mk_virtual_solvers + ["ocamlc"; "ocamlopt"; "ocamldep"; "ocamldoc"; + "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 N +let ocamllex = ref (V"OCAMLLEX") +let ocamlmklib = ref (V"OCAMLMKLIB") +let ocamlmktop = ref (V"OCAMLMKTOP") let ocamlrun = ref N let program_to_execute = ref false let must_clean = ref false @@ -63,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]] @@ -124,6 +151,7 @@ let spec = "-pp", String (add_to ocaml_ppflags_internal), " (idem)"; "-tag", String (add_to' tags_internal), " Add to default tags"; "-tags", String (add_to tags_internal), " (idem)"; + "-tag-line", String (add_to' tag_lines_internal), " Use this line of tags (as in _tags)"; "-show-tags", String (add_to' show_tags_internal), " Show tags that applies on that pathname"; "-ignore", String (add_to ignore_list_internal), " Don't try to build these modules"; @@ -139,14 +167,14 @@ 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, " Allow N jobs at once (0 for unlimited)"; "-build-dir", Set_string build_dir, " Set build directory"; - "-install-dir", Set_string Ocamlbuild_where.where, " Set the install directory"; - "-where", Unit (fun () -> print_endline !Ocamlbuild_where.where; raise Exit_OK), " Display the install directory"; + "-install-lib-dir", Set_string Ocamlbuild_where.libdir, " Set the install library directory"; + "-install-bin-dir", Set_string Ocamlbuild_where.bindir, " Set the install binary directory"; + "-where", Unit (fun () -> print_endline !Ocamlbuild_where.libdir; raise Exit_OK), " Display the install library directory"; "-ocamlc", set_cmd ocamlc, " Set the OCaml bytecode compiler"; "-ocamlopt", set_cmd ocamlopt, " Set the OCaml native compiler"; @@ -173,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 () = @@ -191,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; diff --git a/ocamlbuild/pathname.ml b/ocamlbuild/pathname.ml index 24793ddf..f2c2d85a 100644 --- a/ocamlbuild/pathname.ml +++ b/ocamlbuild/pathname.ml @@ -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 diff --git a/ocamlbuild/plugin.ml b/ocamlbuild/plugin.ml index 88516d51..bc10a3e2 100644 --- a/ocamlbuild/plugin.ml +++ b/ocamlbuild/plugin.ml @@ -76,7 +76,7 @@ module Make(U:sig end) = in let ocamlbuildlib = ocamlbuildlib-.-cma in let ocamlbuild = ocamlbuild-.-cmo in - let dir = !Ocamlbuild_where.where in + let dir = !Ocamlbuild_where.libdir in if not (sys_file_exists (dir/ocamlbuildlib)) then failwith (sprintf "Cannot found %S in ocamlbuild -where directory" ocamlbuildlib); let dir = if Pathname.is_implicit dir then Pathname.pwd/dir else dir in diff --git a/ocamlbuild/rule.ml b/ocamlbuild/rule.ml index e8fc50dc..e14083cb 100644 --- a/ocamlbuild/rule.ml +++ b/ocamlbuild/rule.ml @@ -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,21 +271,22 @@ 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 open Command let mv src dest = Cmd (S [A"mv"; P src; Px dest]) let cp src dest = Cmd (S [A"cp"; P src; Px dest]) + let cp_p src dest = Cmd (S [A"cp"; A"-p"; P src; Px dest]) let ln_f pointed pointer = Cmd (S [A"ln"; A"-f"; P pointed; Px pointer]) let ln_s pointed pointer = Cmd (S[A"ln"; A"-s"; P pointed; Px pointer]) let rm_f x = Cmd (S [A"rm"; A"-f"; Px x]) @@ -296,5 +298,5 @@ open Common_commands let copy_rule name ?insert src dest = rule name ?insert ~prod:dest ~dep:src - (fun env _ -> cp (env src) (env dest)) + (fun env _ -> cp_p (env src) (env dest)) diff --git a/ocamlbuild/rule.mli b/ocamlbuild/rule.mli index 87206bf9..95ac6d37 100644 --- a/ocamlbuild/rule.mli +++ b/ocamlbuild/rule.mli @@ -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] *) @@ -64,6 +64,7 @@ val dep : string list -> string list -> unit module Common_commands : sig val mv : Pathname.t -> Pathname.t -> Command.t val cp : Pathname.t -> Pathname.t -> Command.t + val cp_p : Pathname.t -> Pathname.t -> Command.t val ln_f : Pathname.t -> Pathname.t -> Command.t val ln_s : Pathname.t -> Pathname.t -> Command.t val rm_f : Pathname.t -> Command.t diff --git a/ocamlbuild/shell.ml b/ocamlbuild/shell.ml index 9c056ff3..73deaf4b 100644 --- a/ocamlbuild/shell.ml +++ b/ocamlbuild/shell.ml @@ -27,11 +27,12 @@ let quote_filename_if_needed s = let chdir dir = reset_filesys_cache (); Sys.chdir dir -let run args = +let run args target = reset_readdir_cache (); let cmd = String.concat " " (List.map quote_filename_if_needed args) in if !*My_unix.is_degraded || Sys.os_type = "Win32" then begin + Log.event cmd target Tags.empty; let st = sys_command cmd in if st <> 0 then failwith (Printf.sprintf "Error during command `%s'.\nExit code %d.\n" cmd st) @@ -49,23 +50,32 @@ let rm_f x = let mkdir dir = reset_filesys_cache_for_file dir; (*Sys.mkdir dir (* MISSING in ocaml *) *) - run ["mkdir"; dir] + run ["mkdir"; dir] dir let try_mkdir dir = if not (sys_file_exists dir) then mkdir dir let rec mkdir_p dir = if sys_file_exists dir then () else (mkdir_p (Filename.dirname dir); mkdir dir) -let cp = copy_file (* Décret du 2007-02-01 *) -(* - let cp src dest = + +let cp_pf src dest = reset_filesys_cache_for_file dest; - run["cp";"-pf";src;dest]*) + run["cp";"-pf";src;dest] dest + +(* L'Arrêté du 2007-03-07 prend en consideration + differement les archives. Pour les autres fichiers + le décret du 2007-02-01 est toujours valable :-) *) +let cp src dst = + if Filename.check_suffix src ".a" + && Filename.check_suffix dst ".a" + then cp_pf src dst + else copy_file src dst + let readlink = My_unix.readlink let is_link = My_unix.is_link let rm_rf x = reset_filesys_cache (); - run["rm";"-Rf";x] + run["rm";"-Rf";x] x let mv src dest = reset_filesys_cache_for_file src; reset_filesys_cache_for_file dest; - run["mv"; src; dest] + run["mv"; src; dest] dest (*Sys.rename src dest*) diff --git a/ocamlbuild/signatures.mli b/ocamlbuild/signatures.mli index 59a2e72c..0cc06cbb 100644 --- a/ocamlbuild/signatures.mli +++ b/ocamlbuild/signatures.mli @@ -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] *) diff --git a/ocamlbuild/start.sh b/ocamlbuild/start.sh index e75fa1f5..d2525717 100755 --- a/ocamlbuild/start.sh +++ b/ocamlbuild/start.sh @@ -5,7 +5,7 @@ rm -rf _start mkdir _start cp *.ml* _start cd _start -echo "let where = ref \"\";;" > ocamlbuild_where.ml +echo "let bindir = ref \"\";; let libdir = bindir;;" > ocamlbuild_where.ml ocamlc -c std_signatures.mli ocamlc -c signatures.mli ocamlc -c tags.mli diff --git a/ocamlbuild/test/good-output b/ocamlbuild/test/good-output index 6d105488..553e4ef4 100644 --- a/ocamlbuild/test/good-output +++ b/ocamlbuild/test/good-output @@ -12,26 +12,26 @@ + cp vivi1.ml vivi.ml + ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -- -help ocamldep.opt -modules toto.ml > toto.ml.depends -ocamldep.opt -modules tutu.mli > tutu.mli.depends -ocamldep.opt -modules titi.ml > titi.ml.depends ocamldep.opt -modules tata.mli > tata.mli.depends -ocamlc.opt -c -o tutu.cmi tutu.mli -ocamlc.opt -c -o titi.cmo titi.ml +ocamldep.opt -modules titi.ml > titi.ml.depends +ocamldep.opt -modules tutu.mli > tutu.mli.depends ocamlc.opt -c -o tata.cmi tata.mli +ocamlc.opt -c -o titi.cmo titi.ml +ocamlc.opt -c -o tutu.cmi tutu.mli ocamlc.opt -c -o toto.cmo toto.ml +ocamldep.opt -modules tata.ml > tata.ml.depends ocamldep.opt -modules tutu.ml > tutu.ml.depends -ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends ocamldep.opt -modules tyty.mli > tyty.mli.depends -ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml +ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends ocamlc.opt -c -o tyty.cmi tyty.mli -ocamldep.opt -modules tata.ml > tata.ml.depends -ocamlc.opt -c -o tutu.cmo tutu.ml +ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml ocamlc.opt -c -o tata.cmo tata.ml +ocamlc.opt -c -o tutu.cmo tutu.ml ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml -ocamlopt.opt -c -o tutu.cmx tutu.ml -ocamlopt.opt -c -o titi.cmx titi.ml ocamlopt.opt -c -o tata.cmx tata.ml +ocamlopt.opt -c -o titi.cmx titi.ml +ocamlopt.opt -c -o tutu.cmx tutu.ml ocamlopt.opt -c -o toto.cmx toto.ml ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native Warning: Using -- only run the last target @@ -40,26 +40,26 @@ Tutu.tutu => 1 Tata.tata => "TATA2" + ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -- -help [cache hit] ocamldep.opt -modules toto.ml > toto.ml.depends -[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends -[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli -[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends -[cache hit] ocamlc.opt -c -o titi.cmo titi.ml [cache hit] ocamldep.opt -modules tata.mli > tata.mli.depends [cache hit] ocamlc.opt -c -o tata.cmi tata.mli +[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends +[cache hit] ocamlc.opt -c -o titi.cmo titi.ml +[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends +[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli [cache hit] ocamlc.opt -c -o toto.cmo toto.ml +[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends +[cache hit] ocamlc.opt -c -o tata.cmo tata.ml [cache hit] ocamldep.opt -modules tutu.ml > tutu.ml.depends -[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends -[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml [cache hit] ocamldep.opt -modules tyty.mli > tyty.mli.depends [cache hit] ocamlc.opt -c -o tyty.cmi tyty.mli +[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends +[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml [cache hit] ocamlc.opt -c -o tutu.cmo tutu.ml -[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends -[cache hit] ocamlc.opt -c -o tata.cmo tata.ml [cache hit] ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte +[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml +[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml [cache hit] ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml [cache hit] ocamlopt.opt -c -o tutu.cmx tutu.ml -[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml -[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml [cache hit] ocamlopt.opt -c -o toto.cmx toto.ml [cache hit] ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native Warning: Using -- only run the last target @@ -79,26 +79,26 @@ Tutu.tutu => 1 Tata.tata => "TATA2" + ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -- -help [cache hit] ocamldep.opt -modules toto.ml > toto.ml.depends -[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends -[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli -[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends -[cache hit] ocamlc.opt -c -o titi.cmo titi.ml [cache hit] ocamldep.opt -modules tata.mli > tata.mli.depends [cache hit] ocamlc.opt -c -o tata.cmi tata.mli +[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends +[cache hit] ocamlc.opt -c -o titi.cmo titi.ml +[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends +[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli [cache hit] ocamlc.opt -c -o toto.cmo toto.ml +[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends +[cache hit] ocamlc.opt -c -o tata.cmo tata.ml [cache hit] ocamldep.opt -modules tutu.ml > tutu.ml.depends -[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends -[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml [cache hit] ocamldep.opt -modules tyty.mli > tyty.mli.depends [cache hit] ocamlc.opt -c -o tyty.cmi tyty.mli +[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends +[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml [cache hit] ocamlc.opt -c -o tutu.cmo tutu.ml -[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends -[cache hit] ocamlc.opt -c -o tata.cmo tata.ml [cache hit] ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte +[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml +[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml [cache hit] ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml [cache hit] ocamlopt.opt -c -o tutu.cmx tutu.ml -[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml -[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml [cache hit] ocamlopt.opt -c -o toto.cmx toto.ml [cache hit] ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native Warning: Using -- only run the last target @@ -121,26 +121,26 @@ Tutu.tutu => 2 Tata.tata => "TATA2" + ../../_build/ocamlbuild.native toto.byte toto.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -- -help [cache hit] ocamldep.opt -modules toto.ml > toto.ml.depends -[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends -[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli -[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends -[cache hit] ocamlc.opt -c -o titi.cmo titi.ml [cache hit] ocamldep.opt -modules tata.mli > tata.mli.depends [cache hit] ocamlc.opt -c -o tata.cmi tata.mli +[cache hit] ocamldep.opt -modules titi.ml > titi.ml.depends +[cache hit] ocamlc.opt -c -o titi.cmo titi.ml +[cache hit] ocamldep.opt -modules tutu.mli > tutu.mli.depends +[cache hit] ocamlc.opt -c -o tutu.cmi tutu.mli [cache hit] ocamlc.opt -c -o toto.cmo toto.ml +[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends +[cache hit] ocamlc.opt -c -o tata.cmo tata.ml [cache hit] ocamldep.opt -modules tutu.ml > tutu.ml.depends -[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends -[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml [cache hit] ocamldep.opt -modules tyty.mli > tyty.mli.depends [cache hit] ocamlc.opt -c -o tyty.cmi tyty.mli +[cache hit] ocamldep.opt -pp camlp4o -modules vivi.ml > vivi.ml.depends +[cache hit] ocamlc.opt -c -pp camlp4o -o vivi.cmo vivi.ml [cache hit] ocamlc.opt -c -o tutu.cmo tutu.ml -[cache hit] ocamldep.opt -modules tata.ml > tata.ml.depends -[cache hit] ocamlc.opt -c -o tata.cmo tata.ml [cache hit] ocamlc.opt tata.cmo titi.cmo vivi.cmo tutu.cmo toto.cmo -o toto.byte +[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml +[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml [cache hit] ocamlopt.opt -c -pp camlp4o -o vivi.cmx vivi.ml [cache hit] ocamlopt.opt -c -o tutu.cmx tutu.ml -[cache hit] ocamlopt.opt -c -o titi.cmx titi.ml -[cache hit] ocamlopt.opt -c -o tata.cmx tata.ml [cache hit] ocamlopt.opt -c -o toto.cmx toto.ml [cache hit] ocamlopt.opt tata.cmx titi.cmx vivi.cmx tutu.cmx toto.cmx -o toto.native Warning: Using -- only run the last target @@ -159,9 +159,9 @@ Tata.tata => "TATA2" + BUILD2=../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt + rm -rf _build + ../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display -ocamldep.opt -modules a.ml > a.ml.depends ocamldep.opt -modules a.mli > a.mli.depends ocamlc.opt -c -o a.cmi a.mli +ocamldep.opt -modules a.ml > a.ml.depends ocamldep.opt -modules b.mli > b.mli.depends ocamlc.opt -c -o b.cmi b.mli ocamlc.opt -c -o a.cmo a.ml @@ -201,9 +201,9 @@ rm -rf proj.docdir mkdir -p proj.docdir ocamldoc.opt -load a.odoc -load b.odoc -load c.odoc -load d.odoc -load e.odoc -load f.odoc -html -d proj.docdir + ../../_build/ocamlbuild.native a.byte a.native proj.docdir/index.html -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -[cache hit] ocamldep.opt -modules a.ml > a.ml.depends [cache hit] ocamldep.opt -modules a.mli > a.mli.depends [cache hit] ocamlc.opt -c -o a.cmi a.mli +[cache hit] ocamldep.opt -modules a.ml > a.ml.depends [cache hit] ocamldep.opt -modules b.mli > b.mli.depends [cache hit] ocamlc.opt -c -o b.cmi b.mli [cache hit] ocamlc.opt -c -o a.cmo a.ml @@ -254,9 +254,9 @@ ocamldoc.opt -load a.odoc -load b.odoc -load c.odoc -load d.odoc -load e.odoc -l + BUILD2=../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt + rm -rf _build + ../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display -ocamldep.opt -modules a/aa.ml > a/aa.ml.depends ocamldep.opt -modules a/aa.mli > a/aa.mli.depends ocamlc.opt -c -I a -I b -o a/aa.cmi a/aa.mli +ocamldep.opt -modules a/aa.ml > a/aa.ml.depends ocamldep.opt -modules b/bb.ml > b/bb.ml.depends ocamlc.opt -c -I b -I a -o b/bb.cmo b/bb.ml ocamlc.opt -c -I a -I b -o a/aa.cmo a/aa.ml @@ -265,9 +265,9 @@ ocamlopt.opt -c -I b -I a -o b/bb.cmx b/bb.ml ocamlopt.opt -c -I a -I b -o a/aa.cmx a/aa.ml ocamlopt.opt str.cmxa b/bb.cmx a/aa.cmx -o a/aa.native + ../../_build/ocamlbuild.native -I a -I b aa.byte aa.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -[cache hit] ocamldep.opt -modules a/aa.ml > a/aa.ml.depends [cache hit] ocamldep.opt -modules a/aa.mli > a/aa.mli.depends [cache hit] ocamlc.opt -c -I a -I b -o a/aa.cmi a/aa.mli +[cache hit] ocamldep.opt -modules a/aa.ml > a/aa.ml.depends [cache hit] ocamldep.opt -modules b/bb.ml > b/bb.ml.depends [cache hit] ocamlc.opt -c -I b -I a -o b/bb.cmo b/bb.ml [cache hit] ocamlc.opt -c -I a -I b -o a/aa.cmo a/aa.ml @@ -288,9 +288,9 @@ ocamlopt.opt str.cmxa b/bb.cmx a/aa.cmx -o a/aa.native + rm -rf _build + ../../_build/ocamlbuild.native d.byte d.native -no-skip -classic-display ocamldep.opt -modules d.ml > d.ml.depends -ocamldep.opt -modules a.ml > a.ml.depends ocamldep.opt -modules a.mli > a.mli.depends ocamlc.opt -c -o a.cmi a.mli +ocamldep.opt -modules a.ml > a.ml.depends ocamldep.opt -modules stack.ml > stack.ml.depends ocamlc.opt -c -o stack.cmo stack.ml ocamldep.opt -modules b.ml > b.ml.depends @@ -302,16 +302,14 @@ ocamlc.opt stack.cmo c.cmo d.cmo -o d.byte ocamlopt.opt -c -o stack.cmx stack.ml ocamlopt.opt -c -for-pack C -o a.cmx a.ml ocamlopt.opt -c -for-pack C -o b.cmx b.ml -mv c.cmi c.cmitmp -ocamlopt.opt -pack a.cmx b.cmx -o c.cmx -cmp c.cmitmp c.cmi +touch c.mli ; if ocamlopt.opt -pack a.cmx b.cmx -o c.cmx ; then rm -f c.mli ; else rm -f c.mli ; exit 1; fi ocamlopt.opt -c -o d.cmx d.ml ocamlopt.opt stack.cmx c.cmx d.cmx -o d.native + ../../_build/ocamlbuild.native d.byte d.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt [cache hit] ocamldep.opt -modules d.ml > d.ml.depends -[cache hit] ocamldep.opt -modules a.ml > a.ml.depends [cache hit] ocamldep.opt -modules a.mli > a.mli.depends [cache hit] ocamlc.opt -c -o a.cmi a.mli +[cache hit] ocamldep.opt -modules a.ml > a.ml.depends [cache hit] ocamldep.opt -modules stack.ml > stack.ml.depends [cache hit] ocamlc.opt -c -o stack.cmo stack.ml [cache hit] ocamlc.opt -c -o a.cmo a.ml @@ -323,9 +321,7 @@ ocamlopt.opt stack.cmx c.cmx d.cmx -o d.native [cache hit] ocamlopt.opt -c -o stack.cmx stack.ml [cache hit] ocamlopt.opt -c -for-pack C -o a.cmx a.ml [cache hit] ocamlopt.opt -c -for-pack C -o b.cmx b.ml -[cache hit] mv c.cmi c.cmitmp -[cache hit] ocamlopt.opt -pack a.cmx b.cmx -o c.cmx -[cache hit] cmp c.cmitmp c.cmi +[cache hit] touch c.mli ; if ocamlopt.opt -pack a.cmx b.cmx -o c.cmx ; then rm -f c.mli ; else rm -f c.mli ; exit 1; fi [cache hit] ocamlopt.opt -c -o d.cmx d.ml [cache hit] ocamlopt.opt stack.cmx c.cmx d.cmx -o d.native _____ _ __ @@ -342,38 +338,38 @@ ocamlopt.opt stack.cmx c.cmx d.cmx -o d.native + cp b.mli.v1 b.mli + cp d.mli.v1 d.mli + ../../_build/ocamlbuild.native -no-skip main.byte -classic-display -ocamldep.opt -modules main.ml > main.ml.depends ocamldep.opt -modules main.mli > main.mli.depends ocamlc.opt -c -o main.cmi main.mli -ocamldep.opt -modules d.mli > d.mli.depends +ocamldep.opt -modules main.ml > main.ml.depends ocamldep.opt -modules a.mli > a.mli.depends -ocamlc.opt -c -o d.cmi d.mli +ocamldep.opt -modules d.mli > d.mli.depends ocamlc.opt -c -o a.cmi a.mli +ocamlc.opt -c -o d.cmi d.mli ocamlc.opt -c -o main.cmo main.ml -ocamldep.opt -modules d.ml > d.ml.depends ocamldep.opt -modules a.ml > a.ml.depends ocamldep.opt -modules b.mli > b.mli.depends ocamlc.opt -c -o b.cmi b.mli -ocamlc.opt -c -o d.cmo d.ml +ocamldep.opt -modules d.ml > d.ml.depends ocamlc.opt -c -o a.cmo a.ml +ocamlc.opt -c -o d.cmo d.ml ocamldep.opt -modules b.ml > b.ml.depends ocamlc.opt -c -o b.cmo b.ml ocamlc.opt d.cmo b.cmo a.cmo main.cmo -o main.byte + ../../_build/ocamlbuild.native -no-skip main.byte -classic-display -verbose 0 -nothing-should-be-rebuilt -[cache hit] ocamldep.opt -modules main.ml > main.ml.depends [cache hit] ocamldep.opt -modules main.mli > main.mli.depends [cache hit] ocamlc.opt -c -o main.cmi main.mli -[cache hit] ocamldep.opt -modules d.mli > d.mli.depends -[cache hit] ocamlc.opt -c -o d.cmi d.mli +[cache hit] ocamldep.opt -modules main.ml > main.ml.depends [cache hit] ocamldep.opt -modules a.mli > a.mli.depends [cache hit] ocamlc.opt -c -o a.cmi a.mli +[cache hit] ocamldep.opt -modules d.mli > d.mli.depends +[cache hit] ocamlc.opt -c -o d.cmi d.mli [cache hit] ocamlc.opt -c -o main.cmo main.ml -[cache hit] ocamldep.opt -modules d.ml > d.ml.depends -[cache hit] ocamlc.opt -c -o d.cmo d.ml [cache hit] ocamldep.opt -modules a.ml > a.ml.depends [cache hit] ocamldep.opt -modules b.mli > b.mli.depends [cache hit] ocamlc.opt -c -o b.cmi b.mli [cache hit] ocamlc.opt -c -o a.cmo a.ml +[cache hit] ocamldep.opt -modules d.ml > d.ml.depends +[cache hit] ocamlc.opt -c -o d.cmo d.ml [cache hit] ocamldep.opt -modules b.ml > b.ml.depends [cache hit] ocamlc.opt -c -o b.cmo b.ml [cache hit] ocamlc.opt d.cmo b.cmo a.cmo main.cmo -o main.byte @@ -396,20 +392,20 @@ ocamlc.opt -c -o d.cmo d.ml ocamlc.opt -c -o b.cmo b.ml ocamlc.opt d.cmo b.cmo a.cmo main.cmo -o main.byte + ../../_build/ocamlbuild.native -no-skip main.byte -classic-display -verbose 0 -nothing-should-be-rebuilt -[cache hit] ocamldep.opt -modules main.ml > main.ml.depends [cache hit] ocamldep.opt -modules main.mli > main.mli.depends [cache hit] ocamlc.opt -c -o main.cmi main.mli -[cache hit] ocamldep.opt -modules d.mli > d.mli.depends -[cache hit] ocamlc.opt -c -o d.cmi d.mli +[cache hit] ocamldep.opt -modules main.ml > main.ml.depends [cache hit] ocamldep.opt -modules a.mli > a.mli.depends [cache hit] ocamlc.opt -c -o a.cmi a.mli +[cache hit] ocamldep.opt -modules d.mli > d.mli.depends +[cache hit] ocamlc.opt -c -o d.cmi d.mli [cache hit] ocamlc.opt -c -o main.cmo main.ml -[cache hit] ocamldep.opt -modules d.ml > d.ml.depends -[cache hit] ocamlc.opt -c -o d.cmo d.ml [cache hit] ocamldep.opt -modules a.ml > a.ml.depends [cache hit] ocamldep.opt -modules b.mli > b.mli.depends [cache hit] ocamlc.opt -c -o b.cmi b.mli [cache hit] ocamlc.opt -c -o a.cmo a.ml +[cache hit] ocamldep.opt -modules d.ml > d.ml.depends +[cache hit] ocamlc.opt -c -o d.cmo d.ml [cache hit] ocamldep.opt -modules b.ml > b.ml.depends [cache hit] ocamlc.opt -c -o b.cmo b.ml [cache hit] ocamlc.opt d.cmo b.cmo a.cmo main.cmo -o main.byte @@ -421,22 +417,23 @@ PASS | | __/\__ \ |_ / / |_|\___||___/\__/_/ ++ svn=svk + CMDOPTS= + BUILD=../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display + BUILD1=../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display + BUILD2=../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt + rm -rf _build -+ svn revert bb.ml ++ svk revert bb.ml + ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -ocamlopt.opt -I /Users/ertai/wext/ocamlbuild/trunk2/_install/lib/ocamlbuild unix.cmxa /Users/ertai/wext/ocamlbuild/trunk2/_install/lib/ocamlbuild/ocamlbuildlib.cmxa myocamlbuild.ml /Users/ertai/wext/ocamlbuild/trunk2/_install/lib/ocamlbuild/ocamlbuild.cmx -o myocamlbuild -ocamldep.opt -modules bb.ml > bb.ml.depends +ocamlopt.opt -I /Users/ertai/w/inria/ocaml/ocaml-cvs-ocamlbuild/ocamlbuild/_install/lib/ocamlbuild unix.cmxa /Users/ertai/w/inria/ocaml/ocaml-cvs-ocamlbuild/ocamlbuild/_install/lib/ocamlbuild/ocamlbuildlib.cmxa myocamlbuild.ml /Users/ertai/w/inria/ocaml/ocaml-cvs-ocamlbuild/ocamlbuild/_install/lib/ocamlbuild/ocamlbuild.cmx -o myocamlbuild ocamldep.opt -modules bb.mli > bb.mli.depends ocamlc.opt -c -o bb.cmi bb.mli +ocamldep.opt -modules bb.ml > bb.ml.depends ocamldep.opt -modules cc.ml > cc.ml.depends -ocamldep.opt -modules c2.mli > c2.mli.depends ocamldep.opt -modules aa.ml > aa.ml.depends -ocamlc.opt -c -o c2.cmi c2.mli +ocamldep.opt -modules c2.mli > c2.mli.depends ocamlc.opt -c -o aa.cmo aa.ml +ocamlc.opt -c -o c2.cmi c2.mli ocamlc.opt -c -o bb.cmo bb.ml ocamlc.opt -c -o cc.cmo cc.ml ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma @@ -450,23 +447,23 @@ ocamldep.opt -modules c2.ml > c2.ml.depends ocamlc.opt -c -o c2.cmo c2.ml ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte ocamlopt.opt -c -o bb.cmx bb.ml -ocamlopt.opt -c -o c2.cmx c2.ml ocamlopt.opt -c -o aa.cmx aa.ml +ocamlopt.opt -c -o c2.cmx c2.ml ocamlopt.opt -c -o cc.cmx cc.ml ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa ocamlopt.opt -c -o c3.cmx c3.ml ocamlopt.opt -c -o main.cmx main.ml ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native + ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends [cache hit] ocamlc.opt -c -o bb.cmi bb.mli +[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamlc.opt -c -o bb.cmo bb.ml [cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends -[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends -[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends [cache hit] ocamlc.opt -c -o aa.cmo aa.ml +[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends +[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamlc.opt -c -o cc.cmo cc.ml [cache hit] ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma [cache hit] ocamldep.opt -modules main.ml > main.ml.depends @@ -479,8 +476,8 @@ ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native [cache hit] ocamlc.opt -c -o c2.cmo c2.ml [cache hit] ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte [cache hit] ocamlopt.opt -c -o bb.cmx bb.ml -[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml [cache hit] ocamlopt.opt -c -o aa.cmx aa.ml +[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml [cache hit] ocamlopt.opt -c -o cc.cmx cc.ml [cache hit] ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa [cache hit] ocamlopt.opt -c -o c3.cmx c3.ml @@ -488,14 +485,14 @@ ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native [cache hit] ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native + cp bb2.ml bb.ml + ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends [cache hit] ocamlc.opt -c -o bb.cmi bb.mli +ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends -[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends -[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends [cache hit] ocamlc.opt -c -o aa.cmo aa.ml +[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends +[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamlc.opt -c -o cc.cmo cc.ml ocamlc.opt -c -o bb.cmo bb.ml ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma @@ -508,24 +505,24 @@ ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma [cache hit] ocamldep.opt -modules c2.ml > c2.ml.depends [cache hit] ocamlc.opt -c -o c2.cmo c2.ml ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte -[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml -ocamlopt.opt -c -o bb.cmx bb.ml [cache hit] ocamlopt.opt -c -o aa.cmx aa.ml +ocamlopt.opt -c -o bb.cmx bb.ml +[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml ocamlopt.opt -c -o cc.cmx cc.ml ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa ocamlopt.opt -c -o c3.cmx c3.ml ocamlopt.opt -c -o main.cmx main.ml ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native + ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends [cache hit] ocamlc.opt -c -o bb.cmi bb.mli +[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamlc.opt -c -o bb.cmo bb.ml [cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends -[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends -[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends [cache hit] ocamlc.opt -c -o aa.cmo aa.ml +[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends +[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamlc.opt -c -o cc.cmo cc.ml [cache hit] ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma [cache hit] ocamldep.opt -modules main.ml > main.ml.depends @@ -538,8 +535,8 @@ ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native [cache hit] ocamlc.opt -c -o c2.cmo c2.ml [cache hit] ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte [cache hit] ocamlopt.opt -c -o bb.cmx bb.ml -[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml [cache hit] ocamlopt.opt -c -o aa.cmx aa.ml +[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml [cache hit] ocamlopt.opt -c -o cc.cmx cc.ml [cache hit] ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa [cache hit] ocamlopt.opt -c -o c3.cmx c3.ml @@ -547,14 +544,14 @@ ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native [cache hit] ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native + cp bb3.ml bb.ml + ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends [cache hit] ocamlc.opt -c -o bb.cmi bb.mli +ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends -[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends -[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends [cache hit] ocamlc.opt -c -o aa.cmo aa.ml +[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends +[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamlc.opt -c -o cc.cmo cc.ml ocamlc.opt -c -o bb.cmo bb.ml ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma @@ -567,24 +564,24 @@ ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma [cache hit] ocamldep.opt -modules c2.ml > c2.ml.depends [cache hit] ocamlc.opt -c -o c2.cmo c2.ml ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte -[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml -ocamlopt.opt -c -o bb.cmx bb.ml [cache hit] ocamlopt.opt -c -o aa.cmx aa.ml +ocamlopt.opt -c -o bb.cmx bb.ml +[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml [cache hit] ocamlopt.opt -c -o cc.cmx cc.ml ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa [cache hit] ocamlopt.opt -c -o c3.cmx c3.ml [cache hit] ocamlopt.opt -c -o main.cmx main.ml ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native + ../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt -[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamldep.opt -modules bb.mli > bb.mli.depends [cache hit] ocamlc.opt -c -o bb.cmi bb.mli +[cache hit] ocamldep.opt -modules bb.ml > bb.ml.depends [cache hit] ocamlc.opt -c -o bb.cmo bb.ml [cache hit] ocamldep.opt -modules cc.ml > cc.ml.depends -[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends -[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamldep.opt -modules aa.ml > aa.ml.depends [cache hit] ocamlc.opt -c -o aa.cmo aa.ml +[cache hit] ocamldep.opt -modules c2.mli > c2.mli.depends +[cache hit] ocamlc.opt -c -o c2.cmi c2.mli [cache hit] ocamlc.opt -c -o cc.cmo cc.ml [cache hit] ocamlc.opt -a bb.cmo cc.cmo -o bbcc.cma [cache hit] ocamldep.opt -modules main.ml > main.ml.depends @@ -597,15 +594,15 @@ ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native [cache hit] ocamlc.opt -c -o c2.cmo c2.ml [cache hit] ocamlc.opt aa.cmo c2.cmo bbcc.cma c3.cmo main.cmo cool_plugin.cmo -o main.byte [cache hit] ocamlopt.opt -c -o bb.cmx bb.ml -[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml [cache hit] ocamlopt.opt -c -o aa.cmx aa.ml +[cache hit] ocamlopt.opt -c -o c2.cmx c2.ml [cache hit] ocamlopt.opt -c -o cc.cmx cc.ml [cache hit] ocamlopt.opt -a bb.cmx cc.cmx -o bbcc.cmxa [cache hit] ocamlopt.opt -c -o c3.cmx c3.ml [cache hit] ocamlopt.opt -c -o main.cmx main.ml [cache hit] ocamlopt.opt aa.cmx c2.cmx bbcc.cmxa c3.cmx main.cmx -o main.native -+ svn revert bb.ml -Reverted 'bb.ml' ++ svk revert bb.ml +Reverted bb.ml _____ _ ___ |_ _|__ ___| |_( _ ) | |/ _ \/ __| __/ _ \ @@ -618,7 +615,7 @@ Reverted 'bb.ml' + BUILD2=../../_build/ocamlbuild.native a.byte a.native -no-skip -classic-display -verbose 0 -nothing-should-be-rebuilt + rm -rf _build + ../../_build/ocamlbuild.native a.byte a.native -no-skip -classic-display -ocamlopt.opt -I /Users/ertai/wext/ocamlbuild/trunk2/_install/lib/ocamlbuild unix.cmxa /Users/ertai/wext/ocamlbuild/trunk2/_install/lib/ocamlbuild/ocamlbuildlib.cmxa myocamlbuild.ml /Users/ertai/wext/ocamlbuild/trunk2/_install/lib/ocamlbuild/ocamlbuild.cmx -o myocamlbuild +ocamlopt.opt -I /Users/ertai/w/inria/ocaml/ocaml-cvs-ocamlbuild/ocamlbuild/_install/lib/ocamlbuild unix.cmxa /Users/ertai/w/inria/ocaml/ocaml-cvs-ocamlbuild/ocamlbuild/_install/lib/ocamlbuild/ocamlbuildlib.cmxa myocamlbuild.ml /Users/ertai/w/inria/ocaml/ocaml-cvs-ocamlbuild/ocamlbuild/_install/lib/ocamlbuild/ocamlbuild.cmx -o myocamlbuild ocamldep.opt -modules a.ml > a.ml.depends ocamldep.opt -modules myconfig.ml > myconfig.ml.depends ocamlc.opt -c -o myconfig.cmo myconfig.ml diff --git a/ocamlbuild/test/test7/test.sh b/ocamlbuild/test/test7/test.sh index 0ccb69d9..3e539a4f 100755 --- a/ocamlbuild/test/test7/test.sh +++ b/ocamlbuild/test/test7/test.sh @@ -2,12 +2,13 @@ cd `dirname $0` set -e set -x +svn=svk CMDOPTS="" # -- command args BUILD="../../_build/ocamlbuild.native bbcc.cma main.byte bbcc.cmxa main.native -no-skip -classic-display $@" BUILD1="$BUILD $CMDARGS" BUILD2="$BUILD -verbose 0 -nothing-should-be-rebuilt $CMDARGS" rm -rf _build -svn revert bb.ml +$svn revert bb.ml $BUILD1 $BUILD2 cp bb2.ml bb.ml @@ -16,4 +17,4 @@ $BUILD2 cp bb3.ml bb.ml $BUILD1 -verbose 0 $BUILD2 -svn revert bb.ml +$svn revert bb.ml diff --git a/ocamlbuild/test/test8/myocamlbuild.ml b/ocamlbuild/test/test8/myocamlbuild.ml index 4a8ae9d6..2aeb988f 100644 --- a/ocamlbuild/test/test8/myocamlbuild.ml +++ b/ocamlbuild/test/test8/myocamlbuild.ml @@ -3,7 +3,7 @@ open Ocamlbuild_plugin;; let version = "0.1";; file_rule "myconfig.ml" ~prod:"myconfig.ml" - ~cache:(fun _ -> version) + ~cache:(fun _ _ -> version) begin fun _ oc -> Printf.fprintf oc "let version = %S;;\n%!" version end;; diff --git a/ocamldoc/odoc_args.ml b/ocamldoc/odoc_args.ml index f266e99f..a1c00962 100644 --- a/ocamldoc/odoc_args.ml +++ b/ocamldoc/odoc_args.ml @@ -221,6 +221,7 @@ let options = ref [ "-rectypes", Arg.Set recursive_types, M.rectypes ; "-nolabels", Arg.Unit (fun () -> classic := true), M.nolabels ; "-warn-error", Arg.Set Odoc_global.warn_error, M.werr ; + "-hide-warnings", Arg.Clear Odoc_config.print_warnings, M.hide_warnings ; "-o", Arg.String (fun s -> out_file := s), M.out_file ; "-d", Arg.String (fun s -> target_dir := s), M.target_dir ; "-sort", Arg.Unit (fun () -> sort_modules := true), M.sort_modules ; diff --git a/ocamldoc/odoc_config.ml b/ocamldoc/odoc_config.ml index ced04ae2..71769534 100644 --- a/ocamldoc/odoc_config.ml +++ b/ocamldoc/odoc_config.ml @@ -11,6 +11,8 @@ (* $Id$ *) -let custom_generators_path = - Filename.concat Config.standard_library +let custom_generators_path = + Filename.concat Config.standard_library (Filename.concat "ocamldoc" "custom") + +let print_warnings = ref true diff --git a/ocamldoc/odoc_config.mli b/ocamldoc/odoc_config.mli index 622d8d3e..fb356084 100644 --- a/ocamldoc/odoc_config.mli +++ b/ocamldoc/odoc_config.mli @@ -15,3 +15,6 @@ (** Default path to search for custom generators and to install them. *) val custom_generators_path : string + +(** A flag to indicate whether to print ocamldoc warnings or not. *) +val print_warnings : bool ref diff --git a/ocamldoc/odoc_info.ml b/ocamldoc/odoc_info.ml index d7454c1a..a39e4ad6 100644 --- a/ocamldoc/odoc_info.ml +++ b/ocamldoc/odoc_info.ml @@ -175,6 +175,7 @@ let verbose s = () let warning s = Odoc_messages.pwarning s +let print_warnings = Odoc_config.print_warnings let errors = Odoc_global.errors diff --git a/ocamldoc/odoc_info.mli b/ocamldoc/odoc_info.mli index 3fa8ea82..613d066f 100644 --- a/ocamldoc/odoc_info.mli +++ b/ocamldoc/odoc_info.mli @@ -711,6 +711,9 @@ val verbose : string -> unit error counter is incremented. *) val warning : string -> unit +(** A flag to indicate whether ocamldoc warnings must be printed or not. *) +val print_warnings : bool ref + (** Increment this counter when an error is encountered. The ocamldoc tool will print the number of errors encountered exit with code 1 if this number is greater diff --git a/ocamldoc/odoc_messages.ml b/ocamldoc/odoc_messages.ml index 033673b5..7bd32d33 100644 --- a/ocamldoc/odoc_messages.ml +++ b/ocamldoc/odoc_messages.ml @@ -45,6 +45,7 @@ let add_load_dir = "\tAdd the given directory to the search path for custom let load_file = "\n\t\tLoad file defining a new documentation generator\n\t\t"^bytecode_only let nolabels = "\tIgnore non-optional labels in types" let werr = "\tTreat ocamldoc warnings as errors" +let hide_warnings = "\n\t\tdo not print ocamldoc warnings" let target_dir = "\tGenerate files in directory , rather than in current\n"^ "\t\tdirectory (for man and HTML generators)" let dump = "\tDump collected information into " @@ -211,7 +212,7 @@ let merge_options = let warning = "Warning" let pwarning s = - prerr_endline (warning^": "^s); + if !Odoc_config.print_warnings then prerr_endline (warning^": "^s); if !Odoc_global.warn_error then incr Odoc_global.errors let bad_magic_number = diff --git a/otherlibs/labltk/support/Makefile b/otherlibs/labltk/support/Makefile index 1fb848bc..3e315bfc 100644 --- a/otherlibs/labltk/support/Makefile +++ b/otherlibs/labltk/support/Makefile @@ -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 : diff --git a/otherlibs/labltk/support/tkthread.ml b/otherlibs/labltk/support/tkthread.ml index 0336afe3..04dcc74c 100644 --- a/otherlibs/labltk/support/tkthread.ml +++ b/otherlibs/labltk/support/tkthread.ml @@ -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 -> diff --git a/otherlibs/labltk/support/tkthread.mli b/otherlibs/labltk/support/tkthread.mli index ae031e3a..88883a5d 100644 --- a/otherlibs/labltk/support/tkthread.mli +++ b/otherlibs/labltk/support/tkthread.mli @@ -14,7 +14,8 @@ (* $Id$ *) -(* 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 diff --git a/otherlibs/num/.depend b/otherlibs/num/.depend index 54fca363..6fa1caf7 100644 --- a/otherlibs/num/.depend +++ b/otherlibs/num/.depend @@ -1,5 +1,5 @@ bng.o: bng.c bng.h ../../byterun/config.h ../../byterun/../config/m.h \ - ../../byterun/../config/s.h ../../byterun/compatibility.h bng_ppc.c \ + ../../byterun/../config/s.h ../../byterun/compatibility.h bng_ia32.c \ bng_digit.c bng_alpha.o: bng_alpha.c bng_amd64.o: bng_amd64.c diff --git a/otherlibs/systhreads/Makefile b/otherlibs/systhreads/Makefile index 52186d6e..83c40a66 100644 --- a/otherlibs/systhreads/Makefile +++ b/otherlibs/systhreads/Makefile @@ -50,12 +50,12 @@ posix_n.o: posix.c threads.cma: $(THREAD_OBJS) $(MKLIB) -ocamlc '$(CAMLC)' -o threads $(THREAD_OBJS) \ - -cclib -lunix -cclib "$(PTHREAD_LINK)" + -cclib -lunix $(PTHREAD_LINK) # See remark above: force static linking of libthreadsnat.a threads.cmxa: $(THREAD_OBJS:.cmo=.cmx) $(CAMLOPT) -a -o threads.cmxa $(THREAD_OBJS:.cmo=.cmx) \ - -cclib -lthreadsnat -cclib -lunix -cclib "$(PTHREAD_LINK)" + -cclib -lthreadsnat -cclib -lunix $(PTHREAD_LINK) $(THREAD_OBJS:.cmo=.cmx): ../../ocamlopt diff --git a/parsing/printast.ml b/parsing/printast.ml index 5a001f3a..005a757f 100644 --- a/parsing/printast.ml +++ b/parsing/printast.ml @@ -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) = diff --git a/stdlib/scanf.mli b/stdlib/scanf.mli index 24b93977..0d558da7 100644 --- a/stdlib/scanf.mli +++ b/stdlib/scanf.mli @@ -18,7 +18,7 @@ (** {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}). @@ -31,7 +31,7 @@ [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. The more general source of characters is named a [scanbuf], and it is the first argument of scanning functions. @@ -61,16 +61,16 @@ type scanbuf;; 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). *) @@ -152,7 +152,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]. @@ -169,7 +169,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 @@ -216,7 +216,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, @@ -246,18 +246,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 @@ -266,7 +266,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. @@ -310,8 +310,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 @@ -322,7 +322,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. *) @@ -336,8 +336,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. *) (** {6 Reading format strings} *) @@ -348,8 +348,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 -> @@ -361,5 +361,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]. *) diff --git a/typing/ctype.ml b/typing/ctype.ml index 87888250..cf9b1b3b 100644 --- a/typing/ctype.ml +++ b/typing/ctype.ml @@ -427,15 +427,11 @@ let rec closed_type ty = let closed_parameterized_type params ty = List.iter mark_type params; - try - closed_type ty; - List.iter unmark_type params; - unmark_type ty; - true - with Non_closed _ -> - List.iter unmark_type params; - unmark_type ty; - false + let ok = + try closed_type ty; true with Non_closed _ -> false in + List.iter unmark_type params; + unmark_type ty; + ok let closed_type_decl decl = try diff --git a/typing/oprint.ml b/typing/oprint.ml index e37230bf..139daadc 100644 --- a/typing/oprint.ml +++ b/typing/oprint.ml @@ -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 diff --git a/typing/typecore.ml b/typing/typecore.ml index 232bf228..7939fe69 100644 --- a/typing/typecore.ml +++ b/typing/typecore.ml @@ -1832,10 +1832,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 diff --git a/typing/typedecl.ml b/typing/typedecl.ml index b9442e42..f0ce9836 100644 --- a/typing/typedecl.ml +++ b/typing/typedecl.ml @@ -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 @@ -849,7 +850,9 @@ let report_error ppf = function let ty = Ctype.repr ty in let explain tl typ kwd lab = let ti = List.find (fun ti -> Ctype.deep_occur ty (typ ti)) tl in - Printtyp.reset_and_mark_loops_list [typ ti;ty]; + let ty0 = (* Hack to force aliasing when needed *) + Btype.newgenty (Tobject(ty, ref None)) in + Printtyp.reset_and_mark_loops_list [typ ti; ty0]; fprintf ppf ".@.@[In %s@ %s%a@;<1 -2>the variable %a is unbound@]" kwd (lab ti) Printtyp.type_expr (typ ti) Printtyp.type_expr ty diff --git a/typing/typemod.ml b/typing/typemod.ml index 9989a257..2bbe203a 100644 --- a/typing/typemod.ml +++ b/typing/typemod.ml @@ -795,31 +795,37 @@ and simplify_signature sg = let type_implementation sourcefile outputprefix modulename initial_env ast = Typecore.reset_delayed_checks (); - let (str, sg, finalenv) = type_structure initial_env ast Location.none in + let (str, sg, finalenv) = + Misc.try_finally (fun () -> type_structure initial_env ast Location.none) + (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 diff --git a/typing/typetexp.ml b/typing/typetexp.ml index 5171adf1..4f615abb 100644 --- a/typing/typetexp.ml +++ b/typing/typetexp.ml @@ -221,9 +221,8 @@ let rec transl_type env policy styp = row_fixed = false; row_more = newvar () } in let static = Btype.static_row row in let row = - if static then row else - { row with row_more = - if policy = Univars then new_pre_univar () else newvar () } + if static || policy <> Univars then row + else { row with row_more = new_pre_univar () } in newty (Tvariant row) | Tobject (fi, _) -> @@ -272,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 @@ -352,13 +352,9 @@ let rec transl_type env policy styp = row_fixed = false; row_name = !name } in let static = Btype.static_row row in let row = - if static then row else - { row with row_more = - if policy = Univars then new_pre_univar () else - if policy = Fixed && not static then - raise(Error(styp.ptyp_loc, Unbound_type_variable "[..]")) - else row.row_more - } in + if static || policy <> Univars then row + else { row with row_more = new_pre_univar () } + in newty (Tvariant row) | Ptyp_poly(vars, st) -> begin_def(); diff --git a/win32caml/inria.h b/win32caml/inria.h index 13949d52..8b0ad226 100644 --- a/win32caml/inria.h +++ b/win32caml/inria.h @@ -63,6 +63,14 @@ #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 {

    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 c7fQUIfCu!Fx4<&SgL}FK%a*;Gs-Jz?R|A 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