From 5e7112b963aec17471cf3a7e1356529a695773cb Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Tue, 31 Dec 2024 10:01:03 +0100 Subject: [PATCH 1/4] Add tentative support for OCaml 5.3 The cmt format has changed, this tries to support value dependencies just based on the type of what's available in the new `Cmt_format.cmt_infos`. https://github.com/rescript-lang/reanalyze/issues/202 --- .github/workflows/ci.yml | 4 ++++ src/Annotation.ml | 11 +++++---- src/Arnold.ml | 3 ++- src/Compat.ml | 51 ++++++++++++++++++++++++++++++++++++++-- src/DeadCode.ml | 3 ++- src/Exception.ml | 3 ++- src/SideEffects.ml | 3 ++- 7 files changed, 68 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index be2c3854..45342196 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,6 +60,10 @@ jobs: target: ocaml.5.2 ocaml-compiler: 5.2.x build: opam exec -- dune build + - os: ubuntu-latest + target: ocaml.5.3 + ocaml-compiler: 5.3.x + build: opam exec -- dune build runs-on: ${{matrix.os}} diff --git a/src/Annotation.ml b/src/Annotation.ml index 3aae3663..8bf6fbfd 100644 --- a/src/Annotation.ml +++ b/src/Annotation.ml @@ -20,10 +20,13 @@ let tagIsOneOfTheGenTypeAnnotations s = let rec getAttributePayload checkText (attributes : CL.Typedtree.attributes) = let rec fromExpr (expr : CL.Parsetree.expression) = match expr with - | {pexp_desc = Pexp_constant (Pconst_string _ as cs)} -> - Some (StringPayload (cs |> Compat.getStringValue)) - | {pexp_desc = Pexp_constant (Pconst_integer (n, _))} -> Some (IntPayload n) - | {pexp_desc = Pexp_constant (Pconst_float (s, _))} -> Some (FloatPayload s) + | { pexp_desc = Pexp_constant c} -> + let desc = Compat.constant_desc c in + (match desc with + | Pconst_string _ -> Some (StringPayload (desc |> Compat.getStringValue)) + | Pconst_integer (n, _) -> Some (IntPayload n) + | Pconst_float (s, _) -> Some (FloatPayload s) + | _ -> None) | { pexp_desc = Pexp_construct ({txt = Lident (("true" | "false") as s)}, _); _; diff --git a/src/Arnold.ml b/src/Arnold.ml index 0e1b9c85..8c93b715 100644 --- a/src/Arnold.ml +++ b/src/Arnold.ml @@ -906,7 +906,8 @@ module Compile = struct | Texp_tuple expressions | Texp_array expressions -> expressions |> List.map (expression ~ctx) |> Command.unorderedSequence | Texp_assert _ -> Command.nothing - | Texp_try (e, cases) -> + | Texp_try _ -> + let e, cases = expr.exp_desc |> Compat.getTexpTry in let cE = e |> expression ~ctx in let cCases = cases |> List.map (case ~ctx) |> Command.nondet in let open Command in diff --git a/src/Compat.ml b/src/Compat.ml index ff9200ce..e6ea6693 100644 --- a/src/Compat.ml +++ b/src/Compat.ml @@ -174,7 +174,10 @@ let getMtyFunctorModuleType (moduleType: Types.module_type) = match moduleType | _ -> None let getTexpMatch desc = match desc with -#if OCAML_VERSION >= (4, 08, 0) +#if OCAML_VERSION >= (5, 3, 0) + | Typedtree.Texp_match(e, cases, _values, partial) -> + (e, cases, partial) +#elif OCAML_VERSION >= (4, 08, 0) | Typedtree.Texp_match(e, cases, partial) -> (e, cases, partial) #else @@ -183,8 +186,26 @@ let getTexpMatch desc = match desc with #endif | _ -> assert false +let getTexpTry desc = match desc with +#if OCAML_VERSION >= (5, 3, 0) + | Typedtree.Texp_try(e, cases, _values) -> + (e, cases) +#else + | Typedtree.Texp_try(e, cases) -> + (e, cases) +#endif + | _ -> assert false + let texpMatchGetExceptions desc = match desc with -#if OCAML_VERSION >= (4, 08, 0) +#if OCAML_VERSION >= (5, 3, 0) + | Typedtree.Texp_match(_, cases, _, _) -> + cases + |> List.filter_map(fun ({Typedtree.c_lhs= pat}) -> + match pat.pat_desc with + | Tpat_exception({pat_desc}) -> Some(pat_desc) + | _ -> None + ) +#elif OCAML_VERSION >= (4, 08, 0) | Typedtree.Texp_match(_, cases, _) -> cases |> List.filter_map(fun ({Typedtree.c_lhs= pat}) -> @@ -241,3 +262,29 @@ let get_desc = Types.get_desc #else let get_desc x = x.Types.desc #endif + +let constant_desc d = +#if OCAML_VERSION >= (5, 3, 0) + d.Parsetree.pconst_desc +#else + d +#endif + +let extractValueDependencies (cmt_infos : CL.Cmt_format.cmt_infos) = +#if OCAML_VERSION >= (5, 3, 0) + let deps = ref [] in + let process_dependency (_, uid1, uid2) = + match + ( Types.Uid.Tbl.find_opt cmt_infos.cmt_uid_to_decl uid1, + Types.Uid.Tbl.find_opt cmt_infos.cmt_uid_to_decl uid2 ) + with + | Some (Value v1), Some (Value v2) -> + deps := (v1.val_val, v2.val_val) :: !deps + | _ -> () + in + let items = cmt_infos.cmt_declaration_dependencies in + List.iter process_dependency items; + List.rev !deps +#else + cmt_infos.cmt_value_dependencies +#endif diff --git a/src/DeadCode.ml b/src/DeadCode.ml index 93df36f2..90c5d21c 100644 --- a/src/DeadCode.ml +++ b/src/DeadCode.ml @@ -25,8 +25,9 @@ let processCmt ~cmtFilePath (cmt_infos : CL.Cmt_format.cmt_infos) = Ideally, the handling should be less location-based, just like other language aspects. *) false in + let cmt_value_dependencies = Compat.extractValueDependencies cmt_infos in DeadValue.processStructure ~doTypes:true ~doExternals - ~cmt_value_dependencies:cmt_infos.cmt_value_dependencies structure + ~cmt_value_dependencies structure | _ -> ()); DeadType.TypeDependencies.forceDelayedItems (); DeadType.TypeDependencies.clear () diff --git a/src/Exception.ml b/src/Exception.ml index 9889d243..cb84c301 100644 --- a/src/Exception.ml +++ b/src/Exception.ml @@ -351,7 +351,8 @@ let traverseAst () = kind = Raises; } :: !currentEvents - | Texp_try (e, cases) -> + | Texp_try _ -> + let e, cases = expr.exp_desc |> Compat.getTexpTry in let exceptions = cases |> List.map (fun case -> case.CL.Typedtree.c_lhs.pat_desc) diff --git a/src/SideEffects.ml b/src/SideEffects.ml index 947fc413..6fd4b4ea 100644 --- a/src/SideEffects.ml +++ b/src/SideEffects.ml @@ -46,7 +46,8 @@ let rec exprNoSideEffects (expr : CL.Typedtree.expression) = && cases |> List.for_all caseNoSideEffects | Texp_letmodule _ -> false | Texp_lazy e -> e |> exprNoSideEffects - | Texp_try (e, cases) -> + | Texp_try _ -> + let e, cases = expr.exp_desc |> Compat.getTexpTry in e |> exprNoSideEffects && cases |> List.for_all caseNoSideEffects | Texp_tuple el -> el |> List.for_all exprNoSideEffects | Texp_variant (_lbl, eo) -> eo |> exprOptNoSideEffects From 2927ce6a3b3bd541f1055550ae81740a01c06a4c Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Tue, 31 Dec 2024 10:04:24 +0100 Subject: [PATCH 2/4] Update ci.yml --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 45342196..aa5bdc03 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -62,7 +62,7 @@ jobs: build: opam exec -- dune build - os: ubuntu-latest target: ocaml.5.3 - ocaml-compiler: 5.3.x + ocaml-compiler: 5.3.0~rc1 build: opam exec -- dune build runs-on: ${{matrix.os}} From 7f7dfd7d49eb11fb023a60adbc32ebc8dadf47cd Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Tue, 31 Dec 2024 10:05:55 +0100 Subject: [PATCH 3/4] Update ci.yml --- .github/workflows/ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aa5bdc03..be2c3854 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,10 +60,6 @@ jobs: target: ocaml.5.2 ocaml-compiler: 5.2.x build: opam exec -- dune build - - os: ubuntu-latest - target: ocaml.5.3 - ocaml-compiler: 5.3.0~rc1 - build: opam exec -- dune build runs-on: ${{matrix.os}} From 2e0caa0cb7c68d9aa04b3dd27e3d6e67113f96c6 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Tue, 31 Dec 2024 11:19:08 +0100 Subject: [PATCH 4/4] cleanup: remove 406 support --- .github/workflows/ci.yml | 19 - CONTRIBUTING.md | 17 - README.md | 11 +- dead-code-ppx/DeadCodePPX.ml | 65 - dead-code-ppx/dune | 9 - lazyload-ppx/LazyLoad.ml | 469 - lazyload-ppx/dune | 9 - package.json | 5 +- src/Annotation.ml | 14 +- src/Arnold.ml | 124 +- src/CL.ml | 18 - src/Common.ml | 12 +- src/Compat.ml | 4 +- src/DeadCode.ml | 6 +- src/DeadCommon.ml | 44 +- src/DeadException.ml | 6 +- src/DeadModules.ml | 4 +- src/DeadOptionalArgs.ml | 8 +- src/DeadType.ml | 22 +- src/DeadValue.ml | 86 +- src/EmitJson.ml | 2 +- src/Exception.ml | 54 +- src/Exceptions.ml | 2 +- src/Exn.ml | 2 +- src/Exn.mli | 2 +- src/FindSourceFile.ml | 6 +- src/Il.ml | 4 +- src/Log_.ml | 12 +- src/ModulePath.ml | 4 +- src/Noalloc.ml | 60 +- src/Reanalyze.ml | 2 +- src/SideEffects.ml | 6 +- src/compiler-libs-406/ast_helper.ml | 560 - src/compiler-libs-406/ast_helper.mli | 439 - src/compiler-libs-406/ast_mapper.ml | 918 -- src/compiler-libs-406/ast_mapper.mli | 199 - src/compiler-libs-406/asttypes.mli | 58 - src/compiler-libs-406/bsc_warnings.ml | 77 - src/compiler-libs-406/btype.ml | 737 - src/compiler-libs-406/builtin_attributes.ml | 206 - src/compiler-libs-406/builtin_attributes.mli | 84 - src/compiler-libs-406/clflags.ml | 71 - src/compiler-libs-406/clflags.mli | 45 - src/compiler-libs-406/cmi_format.ml | 141 - src/compiler-libs-406/cmi_format.mli | 51 - src/compiler-libs-406/cmt_format.ml | 197 - src/compiler-libs-406/cmt_format.mli | 121 - src/compiler-libs-406/config.ml | 42 - src/compiler-libs-406/config.mli | 50 - src/compiler-libs-406/consistbl.ml | 66 - src/compiler-libs-406/consistbl.mli | 62 - src/compiler-libs-406/datarepr.ml | 279 - src/compiler-libs-406/datarepr.mli | 51 - src/compiler-libs-406/docstrings.ml | 343 - src/compiler-libs-406/docstrings.mli | 157 - src/compiler-libs-406/dune | 5 - src/compiler-libs-406/env.ml | 2373 --- src/compiler-libs-406/env.mli | 326 - src/compiler-libs-406/ext_pervasives.ml | 109 - src/compiler-libs-406/ident.ml | 249 - src/compiler-libs-406/ident.mli | 73 - src/compiler-libs-406/identifiable.ml | 254 - src/compiler-libs-406/identifiable.mli | 107 - src/compiler-libs-406/lexer.ml | 3105 ---- src/compiler-libs-406/lexer.mli | 84 - src/compiler-libs-406/location.ml | 330 - src/compiler-libs-406/location.mli | 145 - src/compiler-libs-406/longident.ml | 49 - src/compiler-libs-406/longident.mli | 26 - src/compiler-libs-406/misc.ml | 745 - src/compiler-libs-406/outcometree.mli | 144 - src/compiler-libs-406/parser.ml | 12782 ----------------- src/compiler-libs-406/parser.mli | 135 - src/compiler-libs-406/parsetree.mli | 875 -- src/compiler-libs-406/path.ml | 109 - src/compiler-libs-406/path.mli | 46 - src/compiler-libs-406/predef.ml | 277 - src/compiler-libs-406/predef.mli | 87 - src/compiler-libs-406/primitive.ml | 100 - src/compiler-libs-406/primitive.mli | 65 - src/compiler-libs-406/subst.ml | 491 - src/compiler-libs-406/subst.mli | 70 - src/compiler-libs-406/syntaxerr.ml | 87 - src/compiler-libs-406/syntaxerr.mli | 37 - src/compiler-libs-406/tast_mapper.ml | 611 - src/compiler-libs-406/tast_mapper.mli | 64 - src/compiler-libs-406/tbl.ml | 123 - src/compiler-libs-406/tbl.mli | 34 - src/compiler-libs-406/typedtree.ml | 569 - src/compiler-libs-406/typedtree.mli | 616 - src/compiler-libs-406/types.ml | 340 - src/compiler-libs-406/types.mli | 486 - src/compiler-libs-406/warnings.ml | 706 - src/dune | 2 +- src/dune.406 | 14 - 95 files changed, 246 insertions(+), 32666 deletions(-) delete mode 100644 dead-code-ppx/DeadCodePPX.ml delete mode 100644 dead-code-ppx/dune delete mode 100644 lazyload-ppx/LazyLoad.ml delete mode 100644 lazyload-ppx/dune delete mode 100644 src/CL.ml delete mode 100644 src/compiler-libs-406/ast_helper.ml delete mode 100644 src/compiler-libs-406/ast_helper.mli delete mode 100644 src/compiler-libs-406/ast_mapper.ml delete mode 100644 src/compiler-libs-406/ast_mapper.mli delete mode 100644 src/compiler-libs-406/asttypes.mli delete mode 100644 src/compiler-libs-406/bsc_warnings.ml delete mode 100644 src/compiler-libs-406/btype.ml delete mode 100755 src/compiler-libs-406/builtin_attributes.ml delete mode 100755 src/compiler-libs-406/builtin_attributes.mli delete mode 100644 src/compiler-libs-406/clflags.ml delete mode 100644 src/compiler-libs-406/clflags.mli delete mode 100644 src/compiler-libs-406/cmi_format.ml delete mode 100644 src/compiler-libs-406/cmi_format.mli delete mode 100644 src/compiler-libs-406/cmt_format.ml delete mode 100644 src/compiler-libs-406/cmt_format.mli delete mode 100644 src/compiler-libs-406/config.ml delete mode 100644 src/compiler-libs-406/config.mli delete mode 100644 src/compiler-libs-406/consistbl.ml delete mode 100644 src/compiler-libs-406/consistbl.mli delete mode 100644 src/compiler-libs-406/datarepr.ml delete mode 100644 src/compiler-libs-406/datarepr.mli delete mode 100644 src/compiler-libs-406/docstrings.ml delete mode 100644 src/compiler-libs-406/docstrings.mli delete mode 100644 src/compiler-libs-406/dune delete mode 100644 src/compiler-libs-406/env.ml delete mode 100644 src/compiler-libs-406/env.mli delete mode 100644 src/compiler-libs-406/ext_pervasives.ml delete mode 100644 src/compiler-libs-406/ident.ml delete mode 100644 src/compiler-libs-406/ident.mli delete mode 100644 src/compiler-libs-406/identifiable.ml delete mode 100644 src/compiler-libs-406/identifiable.mli delete mode 100644 src/compiler-libs-406/lexer.ml delete mode 100644 src/compiler-libs-406/lexer.mli delete mode 100644 src/compiler-libs-406/location.ml delete mode 100644 src/compiler-libs-406/location.mli delete mode 100644 src/compiler-libs-406/longident.ml delete mode 100644 src/compiler-libs-406/longident.mli delete mode 100644 src/compiler-libs-406/misc.ml delete mode 100644 src/compiler-libs-406/outcometree.mli delete mode 100644 src/compiler-libs-406/parser.ml delete mode 100644 src/compiler-libs-406/parser.mli delete mode 100644 src/compiler-libs-406/parsetree.mli delete mode 100644 src/compiler-libs-406/path.ml delete mode 100644 src/compiler-libs-406/path.mli delete mode 100644 src/compiler-libs-406/predef.ml delete mode 100644 src/compiler-libs-406/predef.mli delete mode 100644 src/compiler-libs-406/primitive.ml delete mode 100644 src/compiler-libs-406/primitive.mli delete mode 100644 src/compiler-libs-406/subst.ml delete mode 100644 src/compiler-libs-406/subst.mli delete mode 100644 src/compiler-libs-406/syntaxerr.ml delete mode 100644 src/compiler-libs-406/syntaxerr.mli delete mode 100644 src/compiler-libs-406/tast_mapper.ml delete mode 100644 src/compiler-libs-406/tast_mapper.mli delete mode 100644 src/compiler-libs-406/tbl.ml delete mode 100644 src/compiler-libs-406/tbl.mli delete mode 100644 src/compiler-libs-406/typedtree.ml delete mode 100644 src/compiler-libs-406/typedtree.mli delete mode 100644 src/compiler-libs-406/types.ml delete mode 100644 src/compiler-libs-406/types.mli delete mode 100644 src/compiler-libs-406/warnings.ml delete mode 100644 src/dune.406 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index be2c3854..e85c1c09 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,25 +21,6 @@ jobs: # syntax explanation: # https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#example-including-additional-values-into-combinations include: - - os: macos-13 - ocaml-compiler: 4.14.x - build: opam exec -- npm run build406 - test: npm test - artifact-folder: darwin - - os: macos-14 - ocaml-compiler: 4.14.x - build: opam exec -- npm run build406 - test: npm test - artifact-folder: darwinarm64 - - os: ubuntu-latest - ocaml-compiler: 4.14.x - build: opam exec -- npm run build406 - test: npm test - artifact-folder: linux - - os: windows-latest - ocaml-compiler: 4.14.x - build: opam exec -- npm run build406 - artifact-folder: win32 - os: ubuntu-latest target: ocaml.4.08 ocaml-compiler: 4.08.x diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 00166edd..0a931341 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,23 +10,6 @@ npm install npm run build ``` -To build targeting 4.06 compiler libs (needed for ReScript projects) whatever the compiler version used: - -``` -npm run build406 -``` - - -## Test reanalyze - -Make sure to always run the tests before submitting any changes (CI usually takes -longer to give you feedback). - -``` -npm run build406 -npm test -``` - ## Releases (for Maintainers) The project is compatible with the [`npm diff --git a/README.md b/README.md index 1e40098e..e57a74d5 100644 --- a/README.md +++ b/README.md @@ -176,15 +176,6 @@ npm add --save-dev reanalyze ## Build From Sources - -### Build for ReScript - -```sh -opam install dune -npm run build406 -# _build/default/src/Reanalyze.exe -``` - ### Build for OCaml native projects using dune ```sh @@ -210,5 +201,5 @@ Make sure that `dune` builds both `.cmt` and `.cmti` files by enabling bytecode This project is itself written in OCaml and can be analyzed as follows. ```sh dune build -./_build/default/src/Reanalyze.exe -suppress src/compiler-libs-406 -dce-cmt _build +./_build/default/src/Reanalyze.exe -dce-cmt _build ``` diff --git a/dead-code-ppx/DeadCodePPX.ml b/dead-code-ppx/DeadCodePPX.ml deleted file mode 100644 index 0f70e280..00000000 --- a/dead-code-ppx/DeadCodePPX.ml +++ /dev/null @@ -1,65 +0,0 @@ -open Compilerlibs406 - -(* Remove code annotated with @dead *) - -let hasDeadAnnotation attributes = - attributes - |> List.exists (fun (({txt}, _) : Parsetree.attribute) -> txt = "dead") - -let rec filter_map l ~f = - match l with - | [] -> [] - | x :: rest -> ( - match f x with - | None -> filter_map rest ~f - | Some y -> y :: filter_map rest ~f) - -let value_binding_list mapper value_bindings = - value_bindings - |> filter_map ~f:(fun (value_binding : Parsetree.value_binding) -> - if value_binding.pvb_attributes |> hasDeadAnnotation then None - else - Some (Ast_mapper.default_mapper.value_binding mapper value_binding)) - -let structure mapper structure = - structure - |> filter_map ~f:(fun (structure_item : Parsetree.structure_item) -> - match structure_item.pstr_desc with - | Pstr_value (rec_value, value_bindings) -> - let value_bindings = value_binding_list mapper value_bindings in - if value_bindings = [] then None - else - Some - { - structure_item with - pstr_desc = Pstr_value (rec_value, value_bindings); - } - | Pstr_primitive {pval_attributes} -> - if pval_attributes |> hasDeadAnnotation then None - else - Some - (Ast_mapper.default_mapper.structure_item mapper structure_item) - | Pstr_exception x -> - if x.pext_attributes |> hasDeadAnnotation then None - else - Some - (Ast_mapper.default_mapper.structure_item mapper structure_item) - | _ -> - Some (Ast_mapper.default_mapper.structure_item mapper structure_item)) - -let signature mapper signature = - signature - |> filter_map ~f:(fun (signature_item : Parsetree.signature_item) -> - let test = - match signature_item.psig_desc with - | Psig_value {pval_attributes} -> - not (pval_attributes |> hasDeadAnnotation) - | _ -> true - in - if test then - Some (Ast_mapper.default_mapper.signature_item mapper signature_item) - else None) - -let () = - Ast_mapper.register "DeadPPX" (fun _argv -> - {Ast_mapper.default_mapper with signature; structure}) diff --git a/dead-code-ppx/dune b/dead-code-ppx/dune deleted file mode 100644 index cc09b272..00000000 --- a/dead-code-ppx/dune +++ /dev/null @@ -1,9 +0,0 @@ -(executable - (name DeadCodePPX) - (public_name deadcodeppx.exe) - (preprocess - (action - (run %{bin:cppo} -V OCAML:%{ocaml_version} %{input-file}))) - (libraries compilerlibs406) - (flags - (:standard -w -9))) diff --git a/lazyload-ppx/LazyLoad.ml b/lazyload-ppx/LazyLoad.ml deleted file mode 100644 index f4779d90..00000000 --- a/lazyload-ppx/LazyLoad.ml +++ /dev/null @@ -1,469 +0,0 @@ -open Compilerlibs406 -open Ast_helper -open Ast_mapper -open Asttypes -open Parsetree -open Longident - -let attributeTxt (x : Parsetree.attribute) = (fst x).txt - -let mkAttribute ~loc ~txt = - ( (let open Location in - {loc; txt}), - Parsetree.PStr - [ - Ast_helper.Str.eval - (Ast_helper.Exp.constant (Pconst_string ("-3", None))); - ] ) - -let makeLoc ~loc ~txt = {Location.loc; txt} - -let hasMappedStructure = ref false - -module Resource = struct - type t = {name : string; loc : Location.t} - - let compare {name = n1} {name = n2} = compare n1 n2 -end - -module ResourceSet = Set.Make (Resource) -module SM = Map.Make (String) - -let jsResources = ref ResourceSet.empty - -let topLevelExprs = ref SM.empty - -let addTopLevelExpr bindingName expr = - let count = ref 0 in - let makeBindingName bindingName count = - match count = 0 with - | true -> bindingName - | false -> bindingName ^ "$" ^ string_of_int count - in - while SM.mem (makeBindingName bindingName !count) !topLevelExprs do - count := !count + 1 - done; - let bindingName = makeBindingName bindingName !count in - let _ = topLevelExprs := SM.add bindingName expr !topLevelExprs in - bindingName - -let depIgnore = [mkAttribute ~loc:!default_loc ~txt:"warning"] - -let localModulePrefix = "$Local$" - -let genLocal {Resource.name; loc} = - with_default_loc loc (fun () -> - Str.modtype - (Mtd.mk - ~typ: - (Mty.typeof_ (Mod.ident {loc = !default_loc; txt = Lident name})) - {loc = !default_loc; txt = localModulePrefix ^ name})) - -let genTopLevelBinding (txt, exp) = - Vb.mk (Pat.var {loc = !default_loc; txt}) exp - -let structure mapper structure = - if !hasMappedStructure then default_mapper.structure mapper structure - else - let _ = hasMappedStructure := true in - let fileAttributes, restOfStructure = - List.partition - (fun str -> - match str with - | {pstr_desc = Pstr_attribute attr} -> attributeTxt attr = "bs.config" - | {pstr_desc = Pstr_extension (({txt = "bs.config"}, _), _)} -> true - | _ -> false) - structure - in - let newStructure = default_mapper.structure mapper restOfStructure in - fileAttributes - @ List.map genLocal (ResourceSet.elements !jsResources) - @ (match SM.bindings !topLevelExprs with - | [] -> [] - | exprs -> [Str.value Nonrecursive (List.map genTopLevelBinding exprs)]) - @ newStructure - -let nameFromLongident li = - match li |> Longident.flatten with name :: _ -> name | [] -> "empty" - -let expr mapper expr = - match expr with - | { - pexp_desc = - Pexp_extension - ( {txt = "reasonResource"; loc}, - PStr - [ - { - pstr_desc = - Pstr_eval ({pexp_desc = Pexp_construct ({txt}, _)}, _); - }; - ] ); - } as pexp -> - let name = txt |> nameFromLongident in - let _ = jsResources := ResourceSet.add {Resource.name; loc} !jsResources in - { - pexp with - pexp_desc = - Pexp_constraint - ( Exp.apply - (Exp.ident - { - loc = !default_loc; - txt = Ldot (Lident "JSResource", "jSResource"); - }) - [(Nolabel, Exp.constant (Pconst_string (name ^ ".bs", None)))], - Typ.constr - {loc = !default_loc; txt = Ldot (Lident "JSResource", "t")} - [ - Typ.package - {loc = !default_loc; txt = Lident (localModulePrefix ^ name)} - []; - ] ); - } - | { - pexp_desc = - Pexp_extension - ( {txt = "requireDeferred"; loc}, - PStr - [ - {pstr_desc = Pstr_eval ({pexp_desc = Pexp_construct ({txt}, _)}, _)}; - ] ); - } -> - let name = txt |> nameFromLongident in - let _ = jsResources := ResourceSet.add {Resource.name; loc} !jsResources in - let bindingName = "$" ^ name ^ "$Deferred" in - let actualExp = - Exp.constraint_ - (Exp.apply - (Exp.ident - { - loc = !default_loc; - txt = Ldot (Lident "RequireDeferred", "make"); - }) - [(Nolabel, Exp.constant (Pconst_string (name ^ ".bs", None)))]) - (Typ.constr - {loc = !default_loc; txt = Ldot (Lident "RequireDeferred", "t")} - [ - Typ.package - {loc = !default_loc; txt = Lident (localModulePrefix ^ name)} - []; - ]) - in - let bindingName = addTopLevelExpr bindingName actualExp in - Exp.ident {loc = !default_loc; txt = Lident bindingName} - | { - pexp_desc = - Pexp_extension - ( {txt = "requireCond"}, - PStr - [ - { - pstr_desc = - Pstr_eval - ( { - pexp_desc = - Pexp_tuple - [ - conditionType; - condition; - { - pexp_desc = - Pexp_extension - ( {txt = "obj"}, - PStr - [ - { - pstr_desc = - Pstr_eval - ( { - pexp_desc = - Pexp_record - ( ( [ - ( { - txt = - Longident - .Lident - "true"; - }, - { - pexp_desc = - Pexp_construct - ( { - txt = - thenTxt; - loc = - thenLoc; - }, - _ ); - pexp_loc = - pexp_loc_then; - } ); - ( { - txt = - Longident - .Lident - "false"; - }, - { - pexp_desc = - Pexp_construct - ( { - txt = - elseTxt; - loc = - elseLoc; - }, - _ ); - pexp_loc = - pexp_loc_else; - } ); - ] - | [ - ( { - txt = - Longident - .Lident - "false"; - }, - { - pexp_desc = - Pexp_construct - ( { - txt = - elseTxt; - loc = - elseLoc; - }, - _ ); - pexp_loc = - pexp_loc_else; - } ); - ( { - txt = - Longident - .Lident - "true"; - }, - { - pexp_desc = - Pexp_construct - ( { - txt = - thenTxt; - loc = - thenLoc; - }, - _ ); - pexp_loc = - pexp_loc_then; - } ); - ] ), - _ ); - }, - [] ); - }; - ] ); - }; - ]; - }, - _ ); - }; - ] ); - } -> - let thenModule = thenTxt |> nameFromLongident in - let elseModule = elseTxt |> nameFromLongident in - jsResources := - ResourceSet.add {Resource.name = thenModule; loc = thenLoc} !jsResources; - jsResources := - ResourceSet.add {Resource.name = elseModule; loc = elseLoc} !jsResources; - let bindingName = "$" ^ thenModule ^ "$OR$" ^ elseModule ^ "$RequireCond" in - let actualExp = - Exp.constraint_ ~loc:pexp_loc_then - (Exp.constraint_ ~loc:pexp_loc_else - (Exp.apply - (Exp.ident ~attrs:depIgnore - { - loc = !default_loc; - txt = Ldot (Lident "RequireCond", "either"); - }) - [ - (Nolabel, conditionType); - (Nolabel, condition); - ( Nolabel, - Exp.extension - ( Location.mkloc "obj" !default_loc, - Parsetree.PStr - [ - Str.eval - (Exp.record - [ - ( Location.mkloc (Longident.Lident "true") - !default_loc, - Exp.constant - (Pconst_string (thenModule ^ ".bs", None)) - ); - ( Location.mkloc (Longident.Lident "false") - !default_loc, - Exp.constant - (Pconst_string (elseModule ^ ".bs", None)) - ); - ] - None); - ] ) ); - ]) - (Typ.package - { - loc = !default_loc; - txt = Lident (localModulePrefix ^ elseModule); - } - [])) - (Typ.package - {loc = !default_loc; txt = Lident (localModulePrefix ^ thenModule)} - []) - in - let bindingName = addTopLevelExpr bindingName actualExp in - Exp.ident {loc = !default_loc; txt = Lident bindingName} - | { - pexp_desc = - Pexp_extension - ( {txt = "requireCond"}, - PStr - [ - { - pstr_desc = - Pstr_eval - ( { - pexp_desc = - Pexp_tuple - [ - conditionType; - condition; - {pexp_desc = Pexp_construct ({txt; loc}, _)}; - ]; - }, - _ ); - }; - ] ); - } -> - let name = txt |> nameFromLongident in - let _ = jsResources := ResourceSet.add {Resource.name; loc} !jsResources in - let bindingName = "$" ^ name ^ "$RequireCond" in - let actualExp = - Exp.constraint_ - (Exp.apply - (Exp.ident ~attrs:depIgnore - {loc = !default_loc; txt = Ldot (Lident "RequireCond", "make")}) - [ - (Nolabel, conditionType); - (Nolabel, condition); - (Nolabel, Exp.constant (Pconst_string (name ^ ".bs", None))); - ]) - (Typ.constr - { - loc = !default_loc; - txt = Ldot (Ldot (Lident "Js", "Nullable"), "t"); - } - [ - Typ.package - {loc = !default_loc; txt = Lident (localModulePrefix ^ name)} - []; - ]) - in - let bindingName = addTopLevelExpr bindingName actualExp in - Exp.ident {loc = !default_loc; txt = Lident bindingName} - | _ -> default_mapper.expr mapper expr - -let module_expr mapper module_expr = - match module_expr with - | { - pmod_desc = - Pmod_extension - ( {txt = "lazyLoadComponent"}, - PStr - [ - { - pstr_desc = - Pstr_eval ({pexp_desc = Pexp_construct ({txt}, _)}, _); - }; - ] ); - pmod_loc; - } as pmod -> - with_default_loc pmod_loc (fun () -> - { - pmod with - pmod_desc = - Pmod_structure - [ - Str.value Nonrecursive - [ - Vb.mk - (Pat.var {loc = !default_loc; txt = "reasonResource"}) - (expr mapper - (Exp.extension - ( {loc = !default_loc; txt = "reasonResource"}, - PStr - [ - Str.eval - (Exp.construct {loc = !default_loc; txt} - None); - ] ))); - ]; - Str.value Nonrecursive - [ - Vb.mk - (Pat.var {loc = !default_loc; txt = "makeProps"}) - (Exp.ident - {loc = !default_loc; txt = Ldot (txt, "makeProps")}); - ]; - Str.value Nonrecursive - [ - Vb.mk - (Pat.var {loc = !default_loc; txt = "make"}) - (Exp.fun_ Nolabel None - (Pat.var {loc = !default_loc; txt = "props"}) - (Exp.apply - (Exp.ident - { - loc = !default_loc; - txt = Ldot (Lident "React", "createElement"); - }) - [ - ( Nolabel, - Exp.letmodule - (makeLoc ~loc:!default_loc ~txt:"Comp") - (Mod.unpack - (Exp.apply - (Exp.ident - { - loc = !default_loc; - txt = - Ldot - ( Lident "BootloaderResource", - "read" ); - }) - [ - ( Nolabel, - Exp.ident - { - loc = !default_loc; - txt = Lident "reasonResource"; - } ); - ])) - (Exp.ident - { - loc = !default_loc; - txt = Ldot (Lident "Comp", "make"); - }) ); - ( Nolabel, - Exp.ident - {loc = !default_loc; txt = Lident "props"} ); - ])); - ]; - ]; - }) - | _ -> default_mapper.module_expr mapper module_expr - -let () = - Ast_mapper.register "lazyLoad" (fun _argv -> - {default_mapper with structure; expr; module_expr}) diff --git a/lazyload-ppx/dune b/lazyload-ppx/dune deleted file mode 100644 index bb4ce998..00000000 --- a/lazyload-ppx/dune +++ /dev/null @@ -1,9 +0,0 @@ -(executable - (name LazyLoad) - (public_name lazyLoad.exe) - (preprocess - (action - (run %{bin:cppo} -V OCAML:%{ocaml_version} %{input-file}))) - (libraries compilerlibs406) - (flags - (:standard -w -9))) diff --git a/package.json b/package.json index 5f5708d6..9853cba1 100644 --- a/package.json +++ b/package.json @@ -6,13 +6,12 @@ "license": "MIT", "scripts": { "build": "dune build", - "build406": "cp src/dune src/dune.saved && cp src/dune.406 src/dune && npm run build && mv src/dune.saved src/dune || mv src/dune.saved src/dune", "clean": "dune clean -p reanalyze", "test": "node ./scripts/run_integration_tests.js", "install:examples": "(cd examples/deadcode && npm install) & (cd examples/termination && npm install)", "build:examples": "(cd examples/deadcode && npm run clean && npm run build && npm run analyze) & (cd examples/termination && npm run clean && npm run build && npm run analyze)", - "dce": "dune build && dune exec reanalyze.exe -- -suppress dead-code-ppx,src/compiler-libs-406 -unsuppress doesnotexist -dce-cmt _build", - "exception": "dune build && dune exec reanalyze.exe -- -exclude-paths src/compiler-libs-406/parser.ml -suppress src/ext,src/compiler-libs-406 -exception-cmt _build", + "dce": "dune build && dune exec reanalyze.exe -- -suppress dead-code-ppx -unsuppress doesnotexist -dce-cmt _build", + "exception": "dune build && dune exec reanalyze.exe -- -suppress src/ext -exception-cmt _build", "preversion": "npm test", "version": "node scripts/bump_version_module.js && git add -A src/", "postversion": "git push && git push --tags" diff --git a/src/Annotation.ml b/src/Annotation.ml index 8bf6fbfd..e336aa38 100644 --- a/src/Annotation.ml +++ b/src/Annotation.ml @@ -2,7 +2,7 @@ type attributePayload = | BoolPayload of bool | ConstructPayload of string | FloatPayload of string - | IdentPayload of CL.Longident.t + | IdentPayload of Longident.t | IntPayload of string | StringPayload of string | TuplePayload of attributePayload list @@ -17,8 +17,8 @@ let tagIsGenTypeOpaque s = s = "genType.opaque" || s = "gentype.opaque" let tagIsOneOfTheGenTypeAnnotations s = tagIsGenType s || tagIsGenTypeImport s || tagIsGenTypeOpaque s -let rec getAttributePayload checkText (attributes : CL.Typedtree.attributes) = - let rec fromExpr (expr : CL.Parsetree.expression) = +let rec getAttributePayload checkText (attributes : Typedtree.attributes) = + let rec fromExpr (expr : Parsetree.expression) = match expr with | { pexp_desc = Pexp_constant c} -> let desc = Compat.constant_desc c in @@ -32,12 +32,12 @@ let rec getAttributePayload checkText (attributes : CL.Typedtree.attributes) = _; } -> Some (BoolPayload (s = "true")) - | {pexp_desc = Pexp_construct ({txt = CL.Longident.Lident "[]"}, None)} -> + | {pexp_desc = Pexp_construct ({txt = Longident.Lident "[]"}, None)} -> None - | {pexp_desc = Pexp_construct ({txt = CL.Longident.Lident "::"}, Some e)} -> + | {pexp_desc = Pexp_construct ({txt = Longident.Lident "::"}, Some e)} -> fromExpr e | {pexp_desc = Pexp_construct ({txt}, _); _} -> - Some (ConstructPayload (txt |> CL.Longident.flatten |> String.concat ".")) + Some (ConstructPayload (txt |> Longident.flatten |> String.concat ".")) | {pexp_desc = Pexp_tuple exprs | Pexp_array exprs} -> let payloads = exprs |> List.rev @@ -79,7 +79,7 @@ let rec getAttributePayload checkText (attributes : CL.Typedtree.attributes) = | PTyp _ -> Some UnrecognizedPayload else getAttributePayload checkText tl -let hasAttribute checkText (attributes : CL.Typedtree.attributes) = +let hasAttribute checkText (attributes : Typedtree.attributes) = getAttributePayload checkText attributes <> None let isOcamlSuppressDeadWarning attributes = diff --git a/src/Arnold.ml b/src/Arnold.ml index 8c93b715..1d543957 100644 --- a/src/Arnold.ml +++ b/src/Arnold.ml @@ -136,7 +136,7 @@ module Stats = struct Format.fprintf ppf "@{%s@} can only be called directly, or passed as labeled \ argument" - (CL.Path.name path)) + (Path.name path)) let logHygieneMustHaveNamedArgument ~label ~loc = incr nHygieneErrors; @@ -164,7 +164,7 @@ module Progress = struct end module Call = struct - type progressFunction = CL.Path.t + type progressFunction = Path.t type t = | FunctionCall of FunctionCall.t @@ -172,7 +172,7 @@ module Call = struct let toString call = match call with - | ProgressFunction progressFunction -> "+" ^ CL.Path.name progressFunction + | ProgressFunction progressFunction -> "+" ^ Path.name progressFunction | FunctionCall functionCall -> FunctionCall.toString functionCall end @@ -210,7 +210,7 @@ module Trace = struct let rec toString trace = match trace with | Tcall (ProgressFunction progressFunction, progress) -> - CL.Path.name progressFunction ^ ":" ^ Progress.toString progress + Path.name progressFunction ^ ":" ^ Progress.toString progress | Tcall (FunctionCall functionCall, progress) -> FunctionCall.toString functionCall ^ ":" ^ Progress.toString progress | Tnondet traces -> @@ -335,14 +335,14 @@ module Command = struct type retOption = Trace.retOption type t = - | Call of Call.t * CL.Location.t + | Call of Call.t * Location.t | ConstrOption of retOption | Nondet of t list | Nothing | Sequence of t list | SwitchOption of { functionCall : FunctionCall.t; - loc : CL.Location.t; + loc : Location.t; some : t; none : t; } @@ -454,7 +454,7 @@ module FunctionTable = struct try Hashtbl.find tbl functionName with Not_found -> assert false let isInFunctionInTable ~functionTable path = - Hashtbl.mem functionTable (CL.Path.name path) + Hashtbl.mem functionTable (Path.name path) let addFunction ~functionName (tbl : t) = if Hashtbl.mem tbl functionName then assert false; @@ -480,18 +480,18 @@ end module FindFunctionsCalled = struct let traverseExpr ~callees = - let super = CL.Tast_mapper.default in - let expr (self : CL.Tast_mapper.mapper) (e : CL.Typedtree.expression) = + let super = Tast_mapper.default in + let expr (self : Tast_mapper.mapper) (e : Typedtree.expression) = (match e.exp_desc with | Texp_apply ({exp_desc = Texp_ident (callee, _, _)}, _args) -> - let functionName = CL.Path.name callee in + let functionName = Path.name callee in callees := !callees |> StringSet.add functionName | _ -> ()); super.expr self e in - {super with CL.Tast_mapper.expr} + {super with Tast_mapper.expr} - let findCallees (expression : CL.Typedtree.expression) = + let findCallees (expression : Typedtree.expression) = let isFunction = match expression.exp_desc with Texp_function _ -> true | _ -> false in @@ -505,7 +505,7 @@ module ExtendFunctionTable = struct (* Add functions passed a recursive function via a labeled argument, and functions calling progress functions, to the function table. *) let extractLabelledArgument ?(kindOpt = None) - (argOpt : CL.Typedtree.expression option) = + (argOpt : Typedtree.expression option) = match argOpt with | Some {exp_desc = Texp_ident (path, {loc}, _)} -> Some (path, loc) | Some @@ -526,7 +526,7 @@ module ExtendFunctionTable = struct | Some {exp_desc = Texp_apply ({exp_desc = Texp_ident (path, {loc}, _)}, args)} when kindOpt <> None -> - let checkArg ((argLabel : CL.Asttypes.arg_label), _argOpt) = + let checkArg ((argLabel : Asttypes.arg_label), _argOpt) = match (argLabel, kindOpt) with | (Labelled l | Optional l), Some kind -> kind |> List.for_all (fun {Kind.label} -> label <> l) @@ -536,12 +536,12 @@ module ExtendFunctionTable = struct | _ -> None let traverseExpr ~functionTable ~progressFunctions ~valueBindingsTable = - let super = CL.Tast_mapper.default in - let expr (self : CL.Tast_mapper.mapper) (e : CL.Typedtree.expression) = + let super = Tast_mapper.default in + let expr (self : Tast_mapper.mapper) (e : Typedtree.expression) = (match e.exp_desc with | Texp_ident (callee, _, _) -> ( let loc = e.exp_loc in - match Hashtbl.find_opt valueBindingsTable (CL.Path.name callee) with + match Hashtbl.find_opt valueBindingsTable (Path.name callee) with | None -> () | Some (id_pos, _, callees) -> if @@ -549,7 +549,7 @@ module ExtendFunctionTable = struct (StringSet.is_empty (StringSet.inter (Lazy.force callees) progressFunctions)) then - let functionName = CL.Path.name callee in + let functionName = Path.name callee in if not (callee |> FunctionTable.isInFunctionInTable ~functionTable) then ( functionTable |> FunctionTable.addFunction ~functionName; @@ -562,9 +562,9 @@ module ExtendFunctionTable = struct functionName printPos id_pos))) | Texp_apply ({exp_desc = Texp_ident (callee, _, _)}, args) when callee |> FunctionTable.isInFunctionInTable ~functionTable -> - let functionName = CL.Path.name callee in + let functionName = Path.name callee in args - |> List.iter (fun ((argLabel : CL.Asttypes.arg_label), argOpt) -> + |> List.iter (fun ((argLabel : Asttypes.arg_label), argOpt) -> match (argLabel, argOpt |> extractLabelledArgument) with | Labelled label, Some (path, loc) when path |> FunctionTable.isInFunctionInTable ~functionTable @@ -576,15 +576,15 @@ module ExtendFunctionTable = struct (fun ppf () -> Format.fprintf ppf "@{%s@} is parametric ~@{%s@}=@{%s@}" - functionName label (CL.Path.name path)) + functionName label (Path.name path)) | _ -> ()) | _ -> ()); super.expr self e in - {super with CL.Tast_mapper.expr} + {super with Tast_mapper.expr} let run ~functionTable ~progressFunctions ~valueBindingsTable - (expression : CL.Typedtree.expression) = + (expression : Typedtree.expression) = let traverseExpr = traverseExpr ~functionTable ~progressFunctions ~valueBindingsTable in @@ -593,20 +593,20 @@ end module CheckExpressionWellFormed = struct let traverseExpr ~functionTable ~valueBindingsTable = - let super = CL.Tast_mapper.default in + let super = Tast_mapper.default in let checkIdent ~path ~loc = if path |> FunctionTable.isInFunctionInTable ~functionTable then Stats.logHygieneOnlyCallDirectly ~path ~loc in - let expr (self : CL.Tast_mapper.mapper) (e : CL.Typedtree.expression) = + let expr (self : Tast_mapper.mapper) (e : Typedtree.expression) = match e.exp_desc with | Texp_ident (path, {loc}, _) -> checkIdent ~path ~loc; e | Texp_apply ({exp_desc = Texp_ident (functionPath, _, _)}, args) -> - let functionName = CL.Path.name functionPath in + let functionName = Path.name functionPath in args - |> List.iter (fun ((argLabel : CL.Asttypes.arg_label), argOpt) -> + |> List.iter (fun ((argLabel : Asttypes.arg_label), argOpt) -> match argOpt |> ExtendFunctionTable.extractLabelledArgument with | Some (path, loc) -> ( match argLabel with @@ -619,7 +619,7 @@ module CheckExpressionWellFormed = struct then () else match Hashtbl.find_opt valueBindingsTable functionName with - | Some (_pos, (body : CL.Typedtree.expression), _) + | Some (_pos, (body : Typedtree.expression), _) when path |> FunctionTable.isInFunctionInTable ~functionTable -> @@ -638,17 +638,17 @@ module CheckExpressionWellFormed = struct Format.fprintf ppf "Extend Function Table with @{%s@} as \ parametric ~@{%s@}=@{%s@}" - functionName label (CL.Path.name path)) + functionName label (Path.name path)) | _ -> checkIdent ~path ~loc) | Optional _ | Nolabel -> checkIdent ~path ~loc) | _ -> ()); e | _ -> super.expr self e in - {super with CL.Tast_mapper.expr} + {super with Tast_mapper.expr} let run ~functionTable ~valueBindingsTable - (expression : CL.Typedtree.expression) = + (expression : Typedtree.expression) = let traverseExpr = traverseExpr ~functionTable ~valueBindingsTable in expression |> traverseExpr.expr traverseExpr |> ignore end @@ -658,12 +658,12 @@ module Compile = struct currentFunctionName : FunctionName.t; functionTable : FunctionTable.t; innerRecursiveFunctions : (FunctionName.t, FunctionName.t) Hashtbl.t; - isProgressFunction : CL.Path.t -> bool; + isProgressFunction : Path.t -> bool; } module Ident = Compat.Ident - let rec expression ~ctx (expr : CL.Typedtree.expression) = + let rec expression ~ctx (expr : Typedtree.expression) = let {currentFunctionName; functionTable; isProgressFunction} = ctx in let loc = expr.exp_loc in let notImplemented case = @@ -678,7 +678,7 @@ module Compile = struct let callee, args = match Hashtbl.find_opt ctx.innerRecursiveFunctions - (CL.Path.name calleeToRename) + (Path.name calleeToRename) with | Some innerFunctionName -> let innerFunctionDefinition = @@ -689,21 +689,21 @@ module Compile = struct let argsFromKind = innerFunctionDefinition.kind |> List.map (fun (entry : Kind.entry) -> - ( CL.Asttypes.Labelled entry.label, + ( Asttypes.Labelled entry.label, Some { expr with exp_desc = Texp_ident - (CL.Path.Pident (Ident.create entry.label), l, vd); + (Path.Pident (Ident.create entry.label), l, vd); } )) in - ( CL.Path.Pident (Ident.create innerFunctionName), + ( Path.Pident (Ident.create innerFunctionName), argsFromKind @ argsToExtend ) | None -> (calleeToRename, argsToExtend) in if callee |> FunctionTable.isInFunctionInTable ~functionTable then - let functionName = CL.Path.name callee in + let functionName = Path.name callee in let functionDefinition = functionTable |> FunctionTable.getFunctionDefinition ~functionName in @@ -713,7 +713,7 @@ module Compile = struct args |> List.find_opt (fun arg -> match arg with - | CL.Asttypes.Labelled s, Some _ -> s = label + | Asttypes.Labelled s, Some _ -> s = label | _ -> false) in let argOpt = @@ -730,17 +730,17 @@ module Compile = struct raise ArgError | Some (path, _pos) when path |> FunctionTable.isInFunctionInTable ~functionTable -> - let functionName = CL.Path.name path in + let functionName = Path.name path in {FunctionArgs.label; functionName} | Some (path, _pos) when functionTable |> FunctionTable.functionGetKindOfLabel ~functionName:currentFunctionName - ~label:(CL.Path.name path) + ~label:(Path.name path) = Some [] (* TODO: when kinds are inferred, support and check non-empty kinds *) -> - let functionName = CL.Path.name path in + let functionName = Path.name path in {FunctionArgs.label; functionName} | _ -> Stats.logHygieneNamedArgValue ~label ~loc; @@ -765,11 +765,11 @@ module Compile = struct match functionTable |> FunctionTable.functionGetKindOfLabel - ~functionName:currentFunctionName ~label:(CL.Path.name callee) + ~functionName:currentFunctionName ~label:(Path.name callee) with | Some kind when kind = Kind.empty -> Command.Call - (FunctionCall (CL.Path.name callee |> FunctionCall.noArgs), loc) + (FunctionCall (Path.name callee |> FunctionCall.noArgs), loc) |> evalArgs ~args ~ctx | Some _kind -> (* TODO when kinds are extended in future: check that args matches with kind @@ -813,7 +813,7 @@ module Compile = struct if recFlag = Recursive then Stats.logHygieneNoNestedLetRec ~loc; let commands = (valueBindings - |> List.map (fun (vb : CL.Typedtree.value_binding) -> + |> List.map (fun (vb : Typedtree.value_binding) -> vb.vb_expr |> expression ~ctx)) @ [inExpr |> expression ~ctx] in @@ -889,7 +889,7 @@ module Compile = struct |> List.map (fun ( _desc, - (recordLabelDefinition : CL.Typedtree.record_label_definition) + (recordLabelDefinition : Typedtree.record_label_definition) ) -> match recordLabelDefinition with @@ -1053,7 +1053,7 @@ module Eval = struct let rec runFunctionCall ~cache ~callStack ~functionArgs ~functionTable ~madeProgressOn ~loc ~state functionCallToInstantiate : State.t = - let pos = loc.CL.Location.loc_start in + let pos = loc.Location.loc_start in let functionCall = functionCallToInstantiate |> FunctionCall.applySubstitution ~sub:functionArgs @@ -1195,7 +1195,7 @@ module Eval = struct if !Common.Cli.debug then Log_.log "@[@,@{Termination Analysis@} for @{%s@}@]@." functionName; - let pos = loc.CL.Location.loc_start in + let pos = loc.Location.loc_start in let callStack = CallStack.create () in let functionArgs = FunctionArgs.empty in let functionCall = FunctionCall.noArgs functionName in @@ -1220,7 +1220,7 @@ module Eval = struct end let progressFunctionsFromAttributes attributes = - let lidToString lid = lid |> CL.Longident.flatten |> String.concat "." in + let lidToString lid = lid |> Longident.flatten |> String.concat "." in let isProgress = ( = ) "progress" in if attributes |> Annotation.hasAttribute isProgress then Some @@ -1236,11 +1236,11 @@ let progressFunctionsFromAttributes attributes = else None let traverseAst ~valueBindingsTable = - let super = CL.Tast_mapper.default in - let value_bindings (self : CL.Tast_mapper.mapper) (recFlag, valueBindings) = + let super = Tast_mapper.default in + let value_bindings (self : Tast_mapper.mapper) (recFlag, valueBindings) = (* Update the table of value bindings for variables *) valueBindings - |> List.iter (fun (vb : CL.Typedtree.value_binding) -> + |> List.iter (fun (vb : Typedtree.value_binding) -> match vb.vb_pat.pat_desc with #if OCAML_VERSION < (5, 2, 0) | Tpat_var (id, {loc = {loc_start = pos}}) -> @@ -1248,17 +1248,17 @@ let traverseAst ~valueBindingsTable = | Tpat_var (id, {loc = {loc_start = pos}}, _) -> #endif let callees = lazy (FindFunctionsCalled.findCallees vb.vb_expr) in - Hashtbl.replace valueBindingsTable (CL.Ident.name id) + Hashtbl.replace valueBindingsTable (Ident.name id) (pos, vb.vb_expr, callees) | _ -> ()); let progressFunctions, functionsToAnalyze = - if recFlag = CL.Asttypes.Nonrecursive then (StringSet.empty, []) + if recFlag = Asttypes.Nonrecursive then (StringSet.empty, []) else let progressFunctions0, functionsToAnalyze0 = valueBindings |> List.fold_left (fun (progressFunctions, functionsToAnalyze) - (valueBinding : CL.Typedtree.value_binding) -> + (valueBinding : Typedtree.value_binding) -> match progressFunctionsFromAttributes valueBinding.vb_attributes with @@ -1273,7 +1273,7 @@ let traverseAst ~valueBindingsTable = #else | Tpat_var (id, _, _) -> #endif - (CL.Ident.name id, valueBinding.vb_expr.exp_loc) + (Ident.name id, valueBinding.vb_expr.exp_loc) :: functionsToAnalyze | _ -> functionsToAnalyze ))) (StringSet.empty, []) @@ -1283,18 +1283,18 @@ let traverseAst ~valueBindingsTable = if functionsToAnalyze <> [] then ( let functionTable = FunctionTable.create () in let isProgressFunction path = - StringSet.mem (CL.Path.name path) progressFunctions + StringSet.mem (Path.name path) progressFunctions in let recursiveFunctions = List.fold_left - (fun defs (valueBinding : CL.Typedtree.value_binding) -> + (fun defs (valueBinding : Typedtree.value_binding) -> match valueBinding.vb_pat.pat_desc with #if OCAML_VERSION < (5, 2, 0) | Tpat_var (id, _) -> #else | Tpat_var (id, _, _) -> #endif - CL.Ident.name id :: defs + Ident.name id :: defs | _ -> defs) [] valueBindings |> List.rev @@ -1356,15 +1356,15 @@ let traverseAst ~valueBindingsTable = super.value_binding self valueBinding |> ignore); (recFlag, valueBindings) in - {super with CL.Tast_mapper.value_bindings} + {super with Tast_mapper.value_bindings} -let processStructure (structure : CL.Typedtree.structure) = +let processStructure (structure : Typedtree.structure) = Stats.newFile (); let valueBindingsTable = Hashtbl.create 1 in let traverseAst = traverseAst ~valueBindingsTable in structure |> traverseAst.structure traverseAst |> ignore -let processCmt (cmt_infos : CL.Cmt_format.cmt_infos) = +let processCmt (cmt_infos : Cmt_format.cmt_infos) = match cmt_infos.cmt_annots with | Interface _ -> () | Implementation structure -> processStructure structure diff --git a/src/CL.ml b/src/CL.ml deleted file mode 100644 index 9f803a31..00000000 --- a/src/CL.ml +++ /dev/null @@ -1,18 +0,0 @@ -(* Compiler libs: use the host compiler libs except on 4.06 use vendored ones. - This allows to target 4.06 on any compiler by overriding OCAML_VERSION. *) - -#if OCAML_VERSION <= (4, 06, 1) -include Compilerlibs406 -#else -module Asttypes = Asttypes -module Cmt_format = Cmt_format -module Ident = Ident -module Location = Location -module Longident = Longident -module Misc = Misc -module Parsetree = Parsetree -module Path = Path -module Tast_mapper = Tast_mapper -module Typedtree = Typedtree -module Types = Types -#endif diff --git a/src/Common.ml b/src/Common.ml index 69d68d97..8a960267 100644 --- a/src/Common.ml +++ b/src/Common.ml @@ -40,7 +40,7 @@ end module StringSet = Set.Make (String) module LocSet = Set.Make (struct - include CL.Location + include Location let compare = compare end) @@ -63,7 +63,7 @@ module FileReferences = struct let findSet table key = try FileHash.find table key with Not_found -> FileSet.empty - let add (locFrom : CL.Location.t) (locTo : CL.Location.t) = + let add (locFrom : Location.t) (locTo : Location.t) = let key = locFrom.loc_start.pos_fname in let set = findSet table key in FileHash.replace table key (FileSet.add locTo.loc_start.pos_fname set) @@ -94,13 +94,13 @@ module Path = struct | [] -> "" let onOkPath ~whenContainsApply ~f path = - match path |> CL.Path.flatten with - | `Ok (id, mods) -> f (CL.Ident.name id :: mods |> String.concat ".") + match path |> Path.flatten with + | `Ok (id, mods) -> f (Ident.name id :: mods |> String.concat ".") | `Contains_apply -> whenContainsApply let fromPathT path = - match path |> CL.Path.flatten with - | `Ok (id, mods) -> CL.Ident.name id :: mods |> List.rev_map Name.create + match path |> Path.flatten with + | `Ok (id, mods) -> Ident.name id :: mods |> List.rev_map Name.create | `Contains_apply -> [] let moduleToImplementation path = diff --git a/src/Compat.ml b/src/Compat.ml index e6ea6693..5ea8ff4c 100644 --- a/src/Compat.ml +++ b/src/Compat.ml @@ -1,5 +1,3 @@ -open CL - #if OCAML_VERSION >= (4, 08, 0) let getStringTag s = match s with | Format.String_tag(s) -> s @@ -270,7 +268,7 @@ let constant_desc d = d #endif -let extractValueDependencies (cmt_infos : CL.Cmt_format.cmt_infos) = +let extractValueDependencies (cmt_infos : Cmt_format.cmt_infos) = #if OCAML_VERSION >= (5, 3, 0) let deps = ref [] in let process_dependency (_, uid1, uid2) = diff --git a/src/DeadCode.ml b/src/DeadCode.ml index 90c5d21c..767fddce 100644 --- a/src/DeadCode.ml +++ b/src/DeadCode.ml @@ -1,14 +1,14 @@ open DeadCommon -let processSignature ~doValues ~doTypes (signature : CL.Types.signature) = +let processSignature ~doValues ~doTypes (signature : Types.signature) = signature |> List.iter (fun sig_item -> DeadValue.processSignatureItem ~doValues ~doTypes - ~moduleLoc:CL.Location.none + ~moduleLoc:Location.none ~path:[!Common.currentModuleName] sig_item) -let processCmt ~cmtFilePath (cmt_infos : CL.Cmt_format.cmt_infos) = +let processCmt ~cmtFilePath (cmt_infos : Cmt_format.cmt_infos) = (match cmt_infos.cmt_annots with | Interface signature -> ProcessDeadAnnotations.signature signature; diff --git a/src/DeadCommon.ml b/src/DeadCommon.ml index fdab04a6..e2dbc266 100644 --- a/src/DeadCommon.ml +++ b/src/DeadCommon.ml @@ -26,7 +26,7 @@ end module Current = struct let bindings = ref PosSet.empty - let lastBinding = ref CL.Location.none + let lastBinding = ref Location.none (** max end position of a value reported dead *) let maxValuePosEnd = ref Lexing.dummy_pos @@ -133,7 +133,7 @@ type posAdjustment = FirstVariant | OtherVariant | Nothing type decl = { declKind : DeclKind.t; - moduleLoc : CL.Location.t; + moduleLoc : Location.t; posAdjustment : posAdjustment; path : Path.t; pos : Lexing.position; @@ -178,13 +178,13 @@ let declGetLoc decl = {decl.posStart with pos_cnum = cnumWithOffset} else decl.posStart in - {CL.Location.loc_start; loc_end = decl.posEnd; loc_ghost = false} + {Location.loc_start; loc_end = decl.posEnd; loc_ghost = false} -let addValueReference ~addFileReference ~(locFrom : CL.Location.t) - ~(locTo : CL.Location.t) = +let addValueReference ~addFileReference ~(locFrom : Location.t) + ~(locTo : Location.t) = let lastBinding = !Current.lastBinding in let locFrom = - match lastBinding = CL.Location.none with + match lastBinding = Location.none with | true -> locFrom | false -> lastBinding in @@ -260,7 +260,7 @@ let iterFilesFromRootsToLeaves iterFun = |> FileSet.iter (fun fileName -> let pos = {Lexing.dummy_pos with pos_fname = fileName} in let loc = - {CL.Location.none with loc_start = pos; loc_end = pos} + {Location.none with loc_start = pos; loc_end = pos} in if Config.warnOnCircularDependencies then Log_.warning ~loc ~name:"Warning Dead Analysis Cycle" @@ -330,10 +330,10 @@ module ProcessDeadAnnotations = struct pos |> annotateLive let collectExportLocations ~doGenType = - let super = CL.Tast_mapper.default in + let super = Tast_mapper.default in let currentlyDisableWarnings = ref false in let value_binding self - ({vb_attributes; vb_pat} as value_binding : CL.Typedtree.value_binding) + ({vb_attributes; vb_pat} as value_binding : Typedtree.value_binding) = (match vb_pat.pat_desc with #if OCAML_VERSION < (5, 2, 0) @@ -345,16 +345,16 @@ module ProcessDeadAnnotations = struct #endif if !currentlyDisableWarnings then pos |> annotateLive; vb_attributes - |> processAttributes ~doGenType ~name:(id |> CL.Ident.name) ~pos + |> processAttributes ~doGenType ~name:(id |> Ident.name) ~pos | _ -> ()); super.value_binding self value_binding in - let type_kind toplevelAttrs self (typeKind : CL.Typedtree.type_kind) = + let type_kind toplevelAttrs self (typeKind : Typedtree.type_kind) = (match typeKind with | Ttype_record labelDeclarations -> labelDeclarations |> List.iter - (fun ({ld_attributes; ld_loc} : CL.Typedtree.label_declaration) -> + (fun ({ld_attributes; ld_loc} : Typedtree.label_declaration) -> toplevelAttrs @ ld_attributes |> processAttributes ~doGenType:false ~name:"" ~pos:ld_loc.loc_start) @@ -362,7 +362,7 @@ module ProcessDeadAnnotations = struct constructorDeclarations |> List.iter (fun - ({cd_attributes; cd_loc} : CL.Typedtree.constructor_declaration) + ({cd_attributes; cd_loc} : Typedtree.constructor_declaration) -> toplevelAttrs @ cd_attributes |> processAttributes ~doGenType:false ~name:"" @@ -370,7 +370,7 @@ module ProcessDeadAnnotations = struct | _ -> ()); super.type_kind self typeKind in - let type_declaration self (typeDeclaration : CL.Typedtree.type_declaration) + let type_declaration self (typeDeclaration : Typedtree.type_declaration) = let attributes = typeDeclaration.typ_attributes in let _ = type_kind attributes self typeDeclaration.typ_kind in @@ -379,13 +379,13 @@ module ProcessDeadAnnotations = struct let value_description self ({val_attributes; val_id; val_val = {val_loc = {loc_start = pos}}} as value_description : - CL.Typedtree.value_description) = + Typedtree.value_description) = if !currentlyDisableWarnings then pos |> annotateLive; val_attributes - |> processAttributes ~doGenType ~name:(val_id |> CL.Ident.name) ~pos; + |> processAttributes ~doGenType ~name:(val_id |> Ident.name) ~pos; super.value_description self value_description in - let structure_item self (item : CL.Typedtree.structure_item) = + let structure_item self (item : Typedtree.structure_item) = (match item.str_desc with | Tstr_attribute attribute when [attribute] |> Annotation.isOcamlSuppressDeadWarning -> @@ -393,13 +393,13 @@ module ProcessDeadAnnotations = struct | _ -> ()); super.structure_item self item in - let structure self (structure : CL.Typedtree.structure) = + let structure self (structure : Typedtree.structure) = let oldDisableWarnings = !currentlyDisableWarnings in super.structure self structure |> ignore; currentlyDisableWarnings := oldDisableWarnings; structure in - let signature_item self (item : CL.Typedtree.signature_item) = + let signature_item self (item : Typedtree.signature_item) = (match item.sig_desc with | Tsig_attribute attribute when [attribute] |> Annotation.isOcamlSuppressDeadWarning -> @@ -407,7 +407,7 @@ module ProcessDeadAnnotations = struct | _ -> ()); super.signature_item self item in - let signature self (signature : CL.Typedtree.signature) = + let signature self (signature : Typedtree.signature) = let oldDisableWarnings = !currentlyDisableWarnings in super.signature self signature |> ignore; currentlyDisableWarnings := oldDisableWarnings; @@ -445,7 +445,7 @@ let getPosAnnotation decl = | true -> decl.posEnd | false -> decl.posStart -let addDeclaration_ ?posEnd ?posStart ~declKind ~path ~(loc : CL.Location.t) +let addDeclaration_ ?posEnd ?posStart ~declKind ~path ~(loc : Location.t) ?(posAdjustment = Nothing) ~moduleLoc (name : Name.t) = let pos = loc.loc_start in let posStart = @@ -482,7 +482,7 @@ let addDeclaration_ ?posEnd ?posStart ~declKind ~path ~(loc : CL.Location.t) in PosHash.replace decls pos decl) -let addValueDeclaration ?(isToplevel = true) ~(loc : CL.Location.t) ~moduleLoc +let addValueDeclaration ?(isToplevel = true) ~(loc : Location.t) ~moduleLoc ?(optionalArgs = OptionalArgs.empty) ~path ~sideEffects name = name |> addDeclaration_ diff --git a/src/DeadException.ml b/src/DeadException.ml index dd935ebc..bfe8a616 100644 --- a/src/DeadException.ml +++ b/src/DeadException.ml @@ -1,12 +1,12 @@ open DeadCommon open Common -type item = {exceptionPath : Path.t; locFrom : CL.Location.t} +type item = {exceptionPath : Path.t; locFrom : Location.t} let delayedItems = ref [] let declarations = Hashtbl.create 1 -let add ~path ~loc ~(strLoc : CL.Location.t) name = +let add ~path ~loc ~(strLoc : Location.t) name = let exceptionPath = name :: path in Hashtbl.add declarations exceptionPath loc; name @@ -23,7 +23,7 @@ let forceDelayedItems () = | Some locTo -> addValueReference ~addFileReference:true ~locFrom ~locTo) -let markAsUsed ~(locFrom : CL.Location.t) ~(locTo : CL.Location.t) path_ = +let markAsUsed ~(locFrom : Location.t) ~(locTo : Location.t) path_ = if locTo.loc_ghost then (* Probably defined in another file, delay processing and check at the end *) let exceptionPath = diff --git a/src/DeadModules.ml b/src/DeadModules.ml index 708caa49..4858848c 100644 --- a/src/DeadModules.ml +++ b/src/DeadModules.ml @@ -9,7 +9,7 @@ let markDead ~isType ~loc path = | Some _ -> () | _ -> Hashtbl.replace table moduleName (false, loc) -let markLive ~isType ~(loc : CL.Location.t) path = +let markLive ~isType ~(loc : Location.t) path = if active () then let moduleName = path |> Common.Path.toModuleName ~isType in match Hashtbl.find_opt table moduleName with @@ -28,7 +28,7 @@ let checkModuleDead ~fileName:pos_fname moduleName = let pos = {Lexing.pos_fname; pos_lnum = 0; pos_bol = 0; pos_cnum = 0} in - {CL.Location.loc_start = pos; loc_end = pos; loc_ghost = false} + {Location.loc_start = pos; loc_end = pos; loc_ghost = false} else loc in Log_.warning ~loc ~name:"Warning Dead Module" (fun ppf () -> diff --git a/src/DeadOptionalArgs.ml b/src/DeadOptionalArgs.ml index 2b1ab856..a5993c47 100644 --- a/src/DeadOptionalArgs.ml +++ b/src/DeadOptionalArgs.ml @@ -12,7 +12,7 @@ type item = { let delayedItems = (ref [] : item list ref) let functionReferences = (ref [] : (Lexing.position * Lexing.position) list ref) -let addFunctionReference ~(locFrom : CL.Location.t) ~(locTo : CL.Location.t) = +let addFunctionReference ~(locFrom : Location.t) ~(locTo : Location.t) = if active () then let posTo = locTo.loc_start in let posFrom = locFrom.loc_start in @@ -28,7 +28,7 @@ let addFunctionReference ~(locFrom : CL.Location.t) ~(locTo : CL.Location.t) = (posFrom |> posToString) (posTo |> posToString); functionReferences := (posFrom, posTo) :: !functionReferences) -let rec hasOptionalArgs (texpr : CL.Types.type_expr) = +let rec hasOptionalArgs (texpr : Types.type_expr) = match Compat.get_desc texpr with | _ when not (active ()) -> false | Tarrow (Optional _, _tFrom, _tTo, _) -> true @@ -37,7 +37,7 @@ let rec hasOptionalArgs (texpr : CL.Types.type_expr) = | Tsubst _ -> hasOptionalArgs (Compat.getTSubst (Compat.get_desc texpr)) | _ -> false -let rec fromTypeExpr (texpr : CL.Types.type_expr) = +let rec fromTypeExpr (texpr : Types.type_expr) = match Compat.get_desc texpr with | _ when not (active ()) -> [] | Tarrow (Optional s, _tFrom, tTo, _) -> s :: fromTypeExpr tTo @@ -46,7 +46,7 @@ let rec fromTypeExpr (texpr : CL.Types.type_expr) = | Tsubst _ -> fromTypeExpr (Compat.getTSubst (Compat.get_desc texpr)) | _ -> [] -let addReferences ~(locFrom : CL.Location.t) ~(locTo : CL.Location.t) ~path +let addReferences ~(locFrom : Location.t) ~(locTo : Location.t) ~path (argNames, argNamesMaybe) = if active () then ( let posTo = locTo.loc_start in diff --git a/src/DeadType.ml b/src/DeadType.ml index 7e8da3e9..0bac6944 100644 --- a/src/DeadType.ml +++ b/src/DeadType.ml @@ -6,7 +6,7 @@ open DeadCommon module TypeLabels = struct (* map from type path (for record/variant label) to its location *) - let table = (Hashtbl.create 256 : (Path.t, CL.Location.t) Hashtbl.t) + let table = (Hashtbl.create 256 : (Path.t, Location.t) Hashtbl.t) let add path loc = Hashtbl.replace table path loc @@ -27,15 +27,15 @@ module TypeDependencies = struct let clear () = delayedItems := [] let processTypeDependency - ( ({loc_start = posTo; loc_ghost = ghost1} : CL.Location.t), - ({loc_start = posFrom; loc_ghost = ghost2} : CL.Location.t) ) = + ( ({loc_start = posTo; loc_ghost = ghost1} : Location.t), + ({loc_start = posFrom; loc_ghost = ghost2} : Location.t) ) = if (not ghost1) && (not ghost2) && posTo <> posFrom then addTypeReference ~posTo ~posFrom let forceDelayedItems () = List.iter processTypeDependency !delayedItems end -let extendTypeDependencies (loc1 : CL.Location.t) (loc2 : CL.Location.t) = +let extendTypeDependencies (loc1 : Location.t) (loc2 : Location.t) = if loc1.loc_start <> loc2.loc_start then ( if !Common.Cli.debug then Log_.item "extendTypeDependencies %s --> %s@." @@ -83,15 +83,15 @@ let addTypeDependenciesInnerModule ~pathToType ~loc ~typeLabelName = extendTypeDependencies loc2 loc | None -> TypeLabels.add path loc -let addDeclaration ~(typeId : CL.Ident.t) +let addDeclaration ~(typeId : Ident.t) ~(typeKind : ('a, 'b) Compat.type_kind) = let currentModulePath = ModulePath.getCurrent () in let pathToType = - (typeId |> CL.Ident.name |> Name.create) + (typeId |> Ident.name |> Name.create) :: (currentModulePath.path @ [!Common.currentModuleName]) in let processTypeLabel ?(posAdjustment = Nothing) typeLabelName ~declKind - ~(loc : CL.Location.t) = + ~(loc : Location.t) = addDeclaration_ ~declKind ~path:pathToType ~loc ~moduleLoc:currentModulePath.loc ~posAdjustment typeLabelName; addTypeDependenciesAcrossFiles ~pathToType ~loc ~typeLabelName; @@ -101,20 +101,20 @@ let addDeclaration ~(typeId : CL.Ident.t) match typeKind with | Type_record (l, _) -> List.iter - (fun {CL.Types.ld_id; ld_loc} -> - CL.Ident.name ld_id |> Name.create + (fun {Types.ld_id; ld_loc} -> + Ident.name ld_id |> Name.create |> processTypeLabel ~declKind:RecordLabel ~loc:ld_loc) l | Type_variant _ -> List.iteri - (fun i {CL.Types.cd_id; cd_loc} -> + (fun i {Types.cd_id; cd_loc} -> let posAdjustment = (* In Res the variant loc can include the | and spaces after it *) if Log_.posLanguage cd_loc.loc_start = Res then if i = 0 then FirstVariant else OtherVariant else Nothing in - CL.Ident.name cd_id |> Name.create + Ident.name cd_id |> Name.create |> processTypeLabel ~declKind:VariantCase ~loc:cd_loc ~posAdjustment) (Compat.getTypeVariant typeKind) | _ -> () diff --git a/src/DeadValue.ml b/src/DeadValue.ml index 66a44a5c..e051c5ab 100644 --- a/src/DeadValue.ml +++ b/src/DeadValue.ml @@ -4,7 +4,7 @@ open DeadCommon let checkAnyValueBindingWithNoSideEffects ({vb_pat = {pat_desc}; vb_expr = expr; vb_loc = loc} : - CL.Typedtree.value_binding) = + Typedtree.value_binding) = match pat_desc with | Tpat_any when (not (SideEffects.checkExpr expr)) && not loc.loc_ghost -> let name = "_" |> Name.create ~isInterface:false in @@ -15,7 +15,7 @@ let checkAnyValueBindingWithNoSideEffects ~sideEffects:false | _ -> () -let collectValueBinding super self (vb : CL.Typedtree.value_binding) = +let collectValueBinding super self (vb : Typedtree.value_binding) = let oldCurrentBindings = !Current.bindings in let oldLastBinding = !Current.lastBinding in checkAnyValueBindingWithNoSideEffects vb; @@ -31,7 +31,7 @@ let collectValueBinding super self (vb : CL.Typedtree.value_binding) = ({pat_desc = Tpat_any}, id, {loc = {loc_start; loc_ghost} as loc}, _) #endif when (not loc_ghost) && not vb.vb_loc.loc_ghost -> - let name = CL.Ident.name id |> Name.create ~isInterface:false in + let name = Ident.name id |> Name.create ~isInterface:false in let optionalArgs = vb.vb_expr.exp_type |> DeadOptionalArgs.fromTypeExpr |> OptionalArgs.fromList @@ -52,7 +52,7 @@ let collectValueBinding super self (vb : CL.Typedtree.value_binding) = in (if (not exists) && not isFirstClassModule then (* This is never toplevel currently *) - let isToplevel = oldLastBinding = CL.Location.none in + let isToplevel = oldLastBinding = Location.none in let sideEffects = SideEffects.checkExpr vb.vb_expr in name |> addValueDeclaration ~isToplevel ~loc ~moduleLoc:currentModulePath.loc @@ -81,12 +81,12 @@ let collectValueBinding super self (vb : CL.Typedtree.value_binding) = in Current.bindings := PosSet.add loc.loc_start !Current.bindings; Current.lastBinding := loc; - let r = super.CL.Tast_mapper.value_binding self vb in + let r = super.Tast_mapper.value_binding self vb in Current.bindings := oldCurrentBindings; Current.lastBinding := oldLastBinding; r -let processOptionalArgs ~expType ~(locFrom : CL.Location.t) ~locTo ~path args = +let processOptionalArgs ~expType ~(locFrom : Location.t) ~locTo ~path args = if expType |> DeadOptionalArgs.hasOptionalArgs then ( let supplied = ref [] in let suppliedMaybe = ref [] in @@ -96,13 +96,13 @@ let processOptionalArgs ~expType ~(locFrom : CL.Location.t) ~locTo ~path args = match arg with | Some { - CL.Typedtree.exp_desc = + Typedtree.exp_desc = Texp_construct (_, {cstr_name = "Some"}, _); } -> Some true | Some { - CL.Typedtree.exp_desc = + Typedtree.exp_desc = Texp_construct (_, {cstr_name = "None"}, _); } -> Some false @@ -110,39 +110,39 @@ let processOptionalArgs ~expType ~(locFrom : CL.Location.t) ~locTo ~path args = | None -> Some false in match lbl with - | CL.Asttypes.Optional s when not locFrom.loc_ghost -> + | Asttypes.Optional s when not locFrom.loc_ghost -> if argIsSupplied <> Some false then supplied := s :: !supplied; if argIsSupplied = None then suppliedMaybe := s :: !suppliedMaybe | _ -> ()); (!supplied, !suppliedMaybe) |> DeadOptionalArgs.addReferences ~locFrom ~locTo ~path) -let rec collectExpr super self (e : CL.Typedtree.expression) = +let rec collectExpr super self (e : Typedtree.expression) = let locFrom = e.exp_loc in (match e.exp_desc with - | Texp_ident (_path, _, {CL.Types.val_loc = {loc_ghost = false; _} as locTo}) + | Texp_ident (_path, _, {Types.val_loc = {loc_ghost = false; _} as locTo}) -> - (* if CL.Path.name _path = "rc" then assert false; *) - if locFrom = locTo && _path |> CL.Path.name = "emptyArray" then ( + (* if Path.name _path = "rc" then assert false; *) + if locFrom = locTo && _path |> Path.name = "emptyArray" then ( (* Work around lowercase jsx with no children producing an artifact `emptyArray` which is called from its own location as many things are generated on the same location. *) if !Common.Cli.debug then Log_.item "addDummyReference %s --> %s@." - (CL.Location.none.loc_start |> posToString) + (Location.none.loc_start |> posToString) (locTo.loc_start |> posToString); - ValueReferences.add locTo.loc_start CL.Location.none.loc_start) + ValueReferences.add locTo.loc_start Location.none.loc_start) else addValueReference ~addFileReference:true ~locFrom ~locTo | Texp_apply ( { exp_desc = Texp_ident - (path, _, {CL.Types.val_loc = {loc_ghost = false; _} as locTo}); + (path, _, {Types.val_loc = {loc_ghost = false; _} as locTo}); exp_type; }, args ) -> args |> processOptionalArgs ~expType:exp_type - ~locFrom:(locFrom : CL.Location.t) + ~locFrom:(locFrom : Location.t) ~locTo ~path | Texp_let ( (* generated for functions with optional args *) @@ -160,7 +160,7 @@ let rec collectExpr super self (e : CL.Typedtree.expression) = Texp_ident ( path, _, - {CL.Types.val_loc = {loc_ghost = false; _} as locTo} ); + {Types.val_loc = {loc_ghost = false; _} as locTo} ); exp_type; }; }; @@ -201,22 +201,22 @@ let rec collectExpr super self (e : CL.Typedtree.expression) = }); #endif } ) - when CL.Ident.name idArg = "arg" - && CL.Ident.name etaArg = "eta" - && CL.Path.name idArg2 = "arg" -> + when Ident.name idArg = "arg" + && Ident.name etaArg = "eta" + && Path.name idArg2 = "arg" -> args |> processOptionalArgs ~expType:exp_type - ~locFrom:(locFrom : CL.Location.t) + ~locFrom:(locFrom : Location.t) ~locTo ~path | Texp_field - (_, _, {lbl_loc = {CL.Location.loc_start = posTo; loc_ghost = false}; _}) + (_, _, {lbl_loc = {Location.loc_start = posTo; loc_ghost = false}; _}) -> if !Config.analyzeTypes then DeadType.addTypeReference ~posTo ~posFrom:locFrom.loc_start | Texp_construct ( _, { - cstr_loc = {CL.Location.loc_start = posTo; loc_ghost} as locTo; + cstr_loc = {Location.loc_start = posTo; loc_ghost} as locTo; cstr_tag; }, _ ) -> @@ -230,14 +230,14 @@ let rec collectExpr super self (e : CL.Typedtree.expression) = fields |> Array.iter (fun (_, record_label_definition) -> match record_label_definition with - | CL.Typedtree.Overridden (_, ({exp_loc} as e)) + | Typedtree.Overridden (_, ({exp_loc} as e)) when exp_loc.loc_ghost -> (* Punned field in OCaml projects has ghost location in expression *) let e = {e with exp_loc = {exp_loc with loc_ghost = false}} in collectExpr super self e |> ignore | _ -> ()) | _ -> ()); - super.CL.Tast_mapper.expr self e + super.Tast_mapper.expr self e (* type k. is a locally abstract type @@ -252,17 +252,17 @@ let rec collectExpr super self (e : CL.Typedtree.expression) = let collectPattern : type k. _ -> _ -> k Compat.generalPattern -> k Compat.generalPattern = fun super self pat -> - let posFrom = pat.CL.Typedtree.pat_loc.loc_start in + let posFrom = pat.Typedtree.pat_loc.loc_start in (match pat.pat_desc with - | CL.Typedtree.Tpat_record (cases, _clodsedFlag) -> + | Typedtree.Tpat_record (cases, _clodsedFlag) -> cases - |> List.iter (fun (_loc, {CL.Types.lbl_loc = {loc_start = posTo}}, _pat) -> + |> List.iter (fun (_loc, {Types.lbl_loc = {loc_start = posTo}}, _pat) -> if !Config.analyzeTypes then DeadType.addTypeReference ~posFrom ~posTo) | _ -> ()); - super.CL.Tast_mapper.pat self pat + super.Tast_mapper.pat self pat -let rec getSignature (moduleType : CL.Types.module_type) = +let rec getSignature (moduleType : Types.module_type) = match moduleType with | Mty_signature signature -> signature | Mty_functor _ -> ( @@ -272,7 +272,7 @@ let rec getSignature (moduleType : CL.Types.module_type) = | _ -> [] let rec processSignatureItem ~doTypes ~doValues ~moduleLoc ~path - (si : CL.Types.signature_item) = + (si : Types.signature_item) = match si with | Sig_type _ when doTypes -> let id, t = si |> Compat.getSigType in @@ -280,7 +280,7 @@ let rec processSignatureItem ~doTypes ~doValues ~moduleLoc ~path DeadType.addDeclaration ~typeId:id ~typeKind:t.type_kind | Sig_value _ when doValues -> let id, loc, kind, valType = si |> Compat.getSigValue in - if not loc.CL.Location.loc_ghost then + if not loc.Location.loc_ghost then let isPrimitive = match kind with Val_prim _ -> true | _ -> false in if (not isPrimitive) || !Config.analyzeExternals then let optionalArgs = @@ -289,7 +289,7 @@ let rec processSignatureItem ~doTypes ~doValues ~moduleLoc ~path (* if Ident.name id = "someValue" then Printf.printf "XXX %s\n" (Ident.name id); *) - CL.Ident.name id + Ident.name id |> Name.create ~isInterface:false |> addValueDeclaration ~loc ~moduleLoc ~optionalArgs ~path ~sideEffects:false @@ -301,17 +301,17 @@ let rec processSignatureItem ~doTypes ~doValues ~moduleLoc ~path getSignature moduleType |> List.iter (processSignatureItem ~doTypes ~doValues ~moduleLoc - ~path:((id |> CL.Ident.name |> Name.create) :: path)) + ~path:((id |> Ident.name |> Name.create) :: path)) | None -> ()) | _ -> () (* Traverse the AST *) let traverseStructure ~doTypes ~doExternals = - let super = CL.Tast_mapper.default in + let super = Tast_mapper.default in let expr self e = e |> collectExpr super self in let pat self p = p |> collectPattern super self in let value_binding self vb = vb |> collectValueBinding super self in - let structure_item self (structureItem : CL.Typedtree.structure_item) = + let structure_item self (structureItem : Typedtree.structure_item) = let oldModulePath = ModulePath.getCurrent () in (match structureItem.str_desc with | Tstr_module {mb_expr; mb_id; mb_loc} -> ( @@ -344,7 +344,7 @@ let traverseStructure ~doTypes ~doExternals = | Some {declKind = Value _} -> true | _ -> false in - let id = vd.val_id |> CL.Ident.name in + let id = vd.val_id |> Ident.name in Printf.printf "Primitive %s\n" id; if (not exists) && id <> "unsafe_expr" @@ -357,7 +357,7 @@ let traverseStructure ~doTypes ~doExternals = | Tstr_type (_recFlag, typeDeclarations) when doTypes -> if !Config.analyzeTypes then typeDeclarations - |> List.iter (fun (typeDeclaration : CL.Typedtree.type_declaration) -> + |> List.iter (fun (typeDeclaration : Typedtree.type_declaration) -> DeadType.addDeclaration ~typeId:typeDeclaration.typ_id ~typeKind:typeDeclaration.typ_type.type_kind) | Tstr_include {incl_mod; incl_type} -> ( @@ -378,7 +378,7 @@ let traverseStructure ~doTypes ~doExternals = let path = (ModulePath.getCurrent ()).path @ [!Common.currentModuleName] in - let name = id |> CL.Ident.name |> Name.create in + let name = id |> Ident.name |> Name.create in name |> DeadException.add ~path ~loc ~strLoc:structureItem.str_loc | None -> ()) | _ -> ()); @@ -395,20 +395,20 @@ let processValueDependency {loc_start = {pos_fname = fnTo} as posTo; loc_ghost = ghost1} as locTo; } : - CL.Types.value_description), + Types.value_description), ({ val_loc = {loc_start = {pos_fname = fnFrom} as posFrom; loc_ghost = ghost2} as locFrom; } : - CL.Types.value_description) ) = + Types.value_description) ) = if (not ghost1) && (not ghost2) && posTo <> posFrom then ( let addFileReference = fileIsImplementationOf fnTo fnFrom in addValueReference ~addFileReference ~locFrom ~locTo; DeadOptionalArgs.addFunctionReference ~locFrom ~locTo) let processStructure ~cmt_value_dependencies ~doTypes ~doExternals - (structure : CL.Typedtree.structure) = + (structure : Typedtree.structure) = let traverseStructure = traverseStructure ~doTypes ~doExternals in structure |> traverseStructure.structure traverseStructure |> ignore; let valueDependencies = cmt_value_dependencies |> List.rev in diff --git a/src/EmitJson.ml b/src/EmitJson.ml index 9530cbc3..b84b57b0 100644 --- a/src/EmitJson.ml +++ b/src/EmitJson.ml @@ -19,7 +19,7 @@ let emitItem ~name ~kind ~file ~range ~message = endCharacter; fprintf ppf " \"message\": \"%s\"" message -let locToPos (loc : CL.Location.t) = +let locToPos (loc : Location.t) = (loc.loc_start.pos_lnum - 1, loc.loc_start.pos_cnum - loc.loc_start.pos_bol) let emitAnnotate ~pos ~text ~action = diff --git a/src/Exception.ml b/src/Exception.ml index cb84c301..7ffb1a6d 100644 --- a/src/Exception.ml +++ b/src/Exception.ml @@ -69,7 +69,7 @@ module Event = struct | DoesNotRaise of t list (* DoesNotRaise(events) where events come from an expression *) | Raises (** raise E *) - and t = {exceptions : Exceptions.t; kind : kind; loc : CL.Location.t} + and t = {exceptions : Exceptions.t; kind : kind; loc : Location.t} let rec print ppf event = match event with @@ -168,8 +168,8 @@ end module Checks = struct type check = { events : Event.t list; - loc : CL.Location.t; - locFull : CL.Location.t; + loc : Location.t; + locFull : Location.t; moduleName : string; name : string; exceptions : Exceptions.t; @@ -224,7 +224,7 @@ end let traverseAst () = ModulePath.init (); - let super = CL.Tast_mapper.default in + let super = Tast_mapper.default in let currentId = ref "" in let currentEvents = ref [] in let exceptionsOfPatterns patterns = @@ -232,24 +232,24 @@ let traverseAst () = |> List.fold_left (fun acc desc -> match desc with - | CL.Typedtree.Tpat_construct _ -> + | Typedtree.Tpat_construct _ -> Exceptions.add (Exn.fromLid (Compat.unboxPatCstrTxt desc)) acc | _ -> acc) Exceptions.empty in - let iterExpr self e = self.CL.Tast_mapper.expr self e |> ignore in + let iterExpr self e = self.Tast_mapper.expr self e |> ignore in let iterExprOpt self eo = match eo with None -> () | Some e -> e |> iterExpr self in - let iterPat self p = self.CL.Tast_mapper.pat self p |> ignore in + let iterPat self p = self.Tast_mapper.pat self p |> ignore in let iterCases self cases = cases |> List.iter (fun case -> - case.CL.Typedtree.c_lhs |> iterPat self; + case.Typedtree.c_lhs |> iterPat self; case.c_guard |> iterExprOpt self; case.c_rhs |> iterExpr self) in - let isRaise : CL.Types.value_description -> bool = function + let isRaise : Types.value_description -> bool = function | { val_kind = Val_prim @@ -262,19 +262,19 @@ let traverseAst () = true | _ -> false in - let isApply : CL.Types.value_description -> bool = function + let isApply : Types.value_description -> bool = function | {val_kind = Val_prim {prim_name = "%apply"}} -> true | _ -> false in - let isRevapply : CL.Types.value_description -> bool = function + let isRevapply : Types.value_description -> bool = function | {val_kind = Val_prim {prim_name = "%revapply"}} -> true | _ -> false in let raiseArgs args = match args with - | [(_, Some {CL.Typedtree.exp_desc = Texp_construct ({txt}, _, _)})] -> + | [(_, Some {Typedtree.exp_desc = Texp_construct ({txt}, _, _)})] -> [Exn.fromLid txt] |> Exceptions.fromList - | [(_, Some {CL.Typedtree.exp_desc = Texp_ident _})] -> + | [(_, Some {Typedtree.exp_desc = Texp_ident _})] -> [Exn.fromString "genericException"] |> Exceptions.fromList | _ -> [Exn.fromString "TODO_from_raise1"] |> Exceptions.fromList in @@ -286,7 +286,7 @@ let traverseAst () = || s = "DoNoRaise" || s = "doNotraise") <> None in - let expr (self : CL.Tast_mapper.mapper) (expr : CL.Typedtree.expression) = + let expr (self : Tast_mapper.mapper) (expr : Typedtree.expression) = let loc = expr.exp_loc in let isDoesNoRaise = expr.exp_attributes |> doesNotRaise in let oldEvents = !currentEvents in @@ -355,7 +355,7 @@ let traverseAst () = let e, cases = expr.exp_desc |> Compat.getTexpTry in let exceptions = cases - |> List.map (fun case -> case.CL.Typedtree.c_lhs.pat_desc) + |> List.map (fun case -> case.Typedtree.c_lhs.pat_desc) |> exceptionsOfPatterns in let oldEvents = !currentEvents in @@ -387,7 +387,7 @@ let traverseAst () = | Annotation.ConstructPayload s when s <> "::" -> [Exn.fromString s] |> Exceptions.fromList | Annotation.IdentPayload s -> - [Exn.fromString (s |> CL.Longident.flatten |> String.concat ".")] + [Exn.fromString (s |> Longident.flatten |> String.concat ".")] |> Exceptions.fromList | Annotation.TuplePayload tuple -> tuple @@ -400,8 +400,8 @@ let traverseAst () = | None -> Exceptions.empty | Some payload -> payload |> getExceptions in - let toplevelEval (self : CL.Tast_mapper.mapper) - (expr : CL.Typedtree.expression) attributes = + let toplevelEval (self : Tast_mapper.mapper) + (expr : Typedtree.expression) attributes = let oldId = !currentId in let oldEvents = !currentEvents in let name = "Toplevel expression" in @@ -415,8 +415,8 @@ let traverseAst () = currentId := oldId; currentEvents := oldEvents in - let structure_item (self : CL.Tast_mapper.mapper) - (structureItem : CL.Typedtree.structure_item) = + let structure_item (self : Tast_mapper.mapper) + (structureItem : Typedtree.structure_item) = let oldModulePath = ModulePath.getCurrent () in (match structureItem.str_desc with | Tstr_eval (expr, attributes) -> toplevelEval self expr attributes @@ -439,8 +439,8 @@ let traverseAst () = | _ -> ()); result in - let value_binding (self : CL.Tast_mapper.mapper) - (vb : CL.Typedtree.value_binding) = + let value_binding (self : Tast_mapper.mapper) + (vb : Typedtree.value_binding) = let oldId = !currentId in let oldEvents = !currentEvents in let isFunction = @@ -477,7 +477,7 @@ let traverseAst () = | Tpat_construct _ when isToplevel && (not vb.vb_loc.loc_ghost) && Compat.unboxPatCstrTxt vb.vb_pat.pat_desc - = CL.Longident.Lident "()" -> + = Longident.Lident "()" -> processBinding "()" #if OCAML_VERSION < (5, 2, 0) | Tpat_var (id, {loc = {loc_ghost}}) @@ -486,17 +486,17 @@ let traverseAst () = #endif when (isFunction || isToplevel) && (not loc_ghost) && not vb.vb_loc.loc_ghost -> - processBinding (id |> CL.Ident.name) + processBinding (id |> Ident.name) | _ -> super.value_binding self vb in - let open CL.Tast_mapper in + let open Tast_mapper in {super with expr; value_binding; structure_item} -let processStructure (structure : CL.Typedtree.structure) = +let processStructure (structure : Typedtree.structure) = let traverseAst = traverseAst () in structure |> traverseAst.structure traverseAst |> ignore -let processCmt (cmt_infos : CL.Cmt_format.cmt_infos) = +let processCmt (cmt_infos : Cmt_format.cmt_infos) = match cmt_infos.cmt_annots with | Interface _ -> () | Implementation structure -> diff --git a/src/Exceptions.ml b/src/Exceptions.ml index 99a042b4..2a0b8011 100644 --- a/src/Exceptions.ml +++ b/src/Exceptions.ml @@ -31,7 +31,7 @@ let pp ~exnTable ppf exceptions = | Some locSet -> let positions = locSet |> Common.LocSet.elements - |> List.map (fun loc -> loc.CL.Location.loc_start) + |> List.map (fun loc -> loc.Location.loc_start) in Format.fprintf ppf "%s@{%s@} (@{%s@})" separator name (positions |> List.map posToString |> String.concat " ") diff --git a/src/Exn.ml b/src/Exn.ml index 81d70b1c..ad5ef66e 100644 --- a/src/Exn.ml +++ b/src/Exn.ml @@ -12,7 +12,7 @@ let jsExnError = "Js.Exn.Error" let matchFailure = "Match_failure" let notFound = "Not_found" let sysError = "Sys_error" -let fromLid lid = lid |> CL.Longident.flatten |> String.concat "." +let fromLid lid = lid |> Longident.flatten |> String.concat "." let fromString s = s let toString s = s let yojsonJsonError = "Yojson.Json_error" diff --git a/src/Exn.mli b/src/Exn.mli index 2a577a52..ba5eee7f 100644 --- a/src/Exn.mli +++ b/src/Exn.mli @@ -7,7 +7,7 @@ val divisionByZero : t val endOfFile : t val exit : t val failure : t -val fromLid : CL.Longident.t -> t +val fromLid : Longident.t -> t val fromString : string -> t val invalidArgument : t val jsExnError : t diff --git a/src/FindSourceFile.ml b/src/FindSourceFile.ml index 41d211a3..42ef5c16 100644 --- a/src/FindSourceFile.ml +++ b/src/FindSourceFile.ml @@ -6,7 +6,7 @@ let nativeFilePath fname = let rec interface items = match items with - | {CL.Typedtree.sig_loc} :: rest -> ( + | {Typedtree.sig_loc} :: rest -> ( match not (Sys.file_exists (nativeFilePath sig_loc.loc_start.pos_fname)) with @@ -16,7 +16,7 @@ let rec interface items = let rec implementation items = match items with - | {CL.Typedtree.str_loc} :: rest -> ( + | {Typedtree.str_loc} :: rest -> ( match not (Sys.file_exists (nativeFilePath str_loc.loc_start.pos_fname)) with @@ -26,7 +26,7 @@ let rec implementation items = let cmt cmt_annots = match cmt_annots with - | CL.Cmt_format.Interface signature -> + | Cmt_format.Interface signature -> if !Common.Cli.debug && signature.sig_items = [] then Log_.item "Interface %d@." (signature.sig_items |> List.length); interface signature.sig_items diff --git a/src/Il.ml b/src/Il.ml index dd6acae0..f3db596b 100644 --- a/src/Il.ml +++ b/src/Il.ml @@ -11,7 +11,7 @@ module Kind = struct (Tuple (arr |> Array.to_list) |> toString) ^ " => " ^ (t |> toString) let extractDeclTypes typ = - let rec extract acc (typ : CL.Types.type_expr) = + let rec extract acc (typ : Types.type_expr) = match Compat.get_desc typ with | Tlink t -> t |> extract acc | Tsubst _ -> Compat.get_desc typ |> Compat.getTSubst |> extract acc @@ -20,7 +20,7 @@ module Kind = struct in typ |> extract [] - let rec fromType (typ : CL.Types.type_expr) = + let rec fromType (typ : Types.type_expr) = match Compat.get_desc typ with | Tlink t -> t |> fromType | Tsubst _ -> Compat.get_desc typ |> Compat.getTSubst |> fromType diff --git a/src/Log_.ml b/src/Log_.ml index 1ec39d09..33941d6e 100644 --- a/src/Log_.ml +++ b/src/Log_.ml @@ -56,12 +56,12 @@ module Color = struct Compat.pp_set_formatter_tag_functions Format.std_formatter color_functions; if not (get_color_enabled ()) then #if OCAML_VERSION < (5, 2, 0) - CL.Misc.Color.setup (Some Never); + Misc.Color.setup (Some Never); #else Misc.Style.setup (Some Never); #endif (* Print a dummy thing once in the beginning, as otherwise flushing does not work. *) - CL.Location.print_loc Format.str_formatter CL.Location.none + Location.print_loc Format.str_formatter Location.none let error ppf s = Format.fprintf ppf "@{%s@}" s @@ -69,7 +69,7 @@ module Color = struct end module Loc = struct - let print_loc ppf (loc : CL.Location.t) = + let print_loc ppf (loc : Location.t) = (* Change the range so it's on a single line. In this way, the line number is clickable in vscode. *) let startChar = loc.loc_start.pos_cnum - loc.loc_start.pos_bol in @@ -88,14 +88,14 @@ module Loc = struct | false -> pos.pos_fname); } in - CL.Location.print_loc ppf + Location.print_loc ppf { loc with loc_start = loc.loc_start |> processPos startChar; loc_end = loc.loc_end |> processPos endChar; } - let print ppf (loc : CL.Location.t) = + let print ppf (loc : Location.t) = Format.fprintf ppf "@[%a@]" print_loc loc end @@ -151,7 +151,7 @@ type kind = Warning | Error let first = ref true -let logKind ~count ~kind ~(loc : CL.Location.t) ~name ~notClosed body = +let logKind ~count ~kind ~(loc : Location.t) ~name ~notClosed body = if Suppress.filter loc.loc_start then ( let open Format in first := false; diff --git a/src/ModulePath.ml b/src/ModulePath.ml index a27f86fe..1a8a816d 100644 --- a/src/ModulePath.ml +++ b/src/ModulePath.ml @@ -2,9 +2,9 @@ open Common module NameMap = Map.Make (Name) (* Keep track of the module path while traversing with Tast_mapper *) -type t = {aliases : Path.t NameMap.t; loc : CL.Location.t; path : Path.t} +type t = {aliases : Path.t NameMap.t; loc : Location.t; path : Path.t} -let initial = ({aliases = NameMap.empty; loc = CL.Location.none; path = []} : t) +let initial = ({aliases = NameMap.empty; loc = Location.none; path = []} : t) let current = (ref initial : t ref) let init () = current := initial diff --git a/src/Noalloc.ml b/src/Noalloc.ml index 314d52ab..1c1e089a 100644 --- a/src/Noalloc.ml +++ b/src/Noalloc.ml @@ -1,7 +1,7 @@ let processCallee ~env ~funDef ~loc callee = match callee with - | CL.Path.Pident id -> ( - let id = CL.Ident.name id in + | Path.Pident id -> ( + let id = Ident.name id in match env |> Il.Env.find ~id with | Some (FunDef funDefCallee) -> funDef |> Il.FunDef.emit ~instr:(Il.Call funDefCallee.id) @@ -10,7 +10,7 @@ let processCallee ~env ~funDef ~loc callee = Format.fprintf ppf "Callee not recognized: %s" id); assert false) | _ -> ( - match callee |> CL.Path.name with + match callee |> Path.name with | "Pervasives.+" | "Stdlib.+" -> funDef |> Il.FunDef.emit ~instr:Il.I32Add | "Pervasives.+." | "Stdlib.+." -> funDef |> Il.FunDef.emit ~instr:Il.F64Add | "Pervasives.*." | "Stdlib.*." -> funDef |> Il.FunDef.emit ~instr:Il.F64Mul @@ -19,7 +19,7 @@ let processCallee ~env ~funDef ~loc callee = Format.fprintf ppf "Callee not recognized: %s" name); assert false) -let rec processTyp ~(funDef : Il.funDef) ~loc (typ : CL.Types.type_expr) = +let rec processTyp ~(funDef : Il.funDef) ~loc (typ : Types.type_expr) = match Compat.get_desc typ with | Ttuple ts -> let scopes = ts |> List.map (processTyp ~funDef ~loc) in @@ -36,12 +36,12 @@ let rec processTyp ~(funDef : Il.funDef) ~loc (typ : CL.Types.type_expr) = Format.fprintf ppf "Type not supported"); assert false -let rec sizeOfTyp ~loc (typ : CL.Types.type_expr) = +let rec sizeOfTyp ~loc (typ : Types.type_expr) = match Compat.get_desc typ with | Tlink t -> t |> sizeOfTyp ~loc | Tsubst _ -> Compat.getTSubst (Compat.get_desc typ) |> sizeOfTyp ~loc | Tconstr (Pident id, [], _) -> ( - match CL.Ident.name id with + match Ident.name id with | "int" -> 4 | "string" -> 4 | name -> @@ -62,7 +62,7 @@ let rec emitLocalSetBackwards ~(funDef : Il.funDef) ~(scope : Il.scope) = let instr = Il.LocalSet offset in funDef |> Il.FunDef.emit ~instr -let rec processFunDefPat ~funDef ~env ~mem (pat : CL.Typedtree.pattern) = +let rec processFunDefPat ~funDef ~env ~mem (pat : Typedtree.pattern) = match pat.pat_desc with #if OCAML_VERSION < (5, 2, 0) | Tpat_var (id, _) @@ -73,11 +73,11 @@ let rec processFunDefPat ~funDef ~env ~mem (pat : CL.Typedtree.pattern) = #endif let scope = pat.pat_type |> processTyp ~funDef ~loc:pat.pat_loc in let newEnv = - env |> Il.Env.add ~id:(id |> CL.Ident.name) ~def:(LocalScope scope) + env |> Il.Env.add ~id:(id |> Ident.name) ~def:(LocalScope scope) in (newEnv, scope) | Tpat_construct _ - when Compat.unboxPatCstrTxt pat.pat_desc = CL.Longident.Lident "()" -> + when Compat.unboxPatCstrTxt pat.pat_desc = Longident.Lident "()" -> (env, Il.Tuple []) | Tpat_tuple pats -> let newEnv, scopes = @@ -94,7 +94,7 @@ let rec processFunDefPat ~funDef ~env ~mem (pat : CL.Typedtree.pattern) = Format.fprintf ppf "Argument pattern not supported"); assert false -let rec processFunDef ~funDef ~env ~mem ~params (expr : CL.Typedtree.expression) +let rec processFunDef ~funDef ~env ~mem ~params (expr : Typedtree.expression) = match expr.exp_desc with #if OCAML_VERSION < (5, 2, 0) @@ -120,7 +120,7 @@ let rec processFunDef ~funDef ~env ~mem ~params (expr : CL.Typedtree.expression) funDef.numParams <- funDef.nextOffset; (env, expr, params) -let translateConst ~loc ~mem (const : CL.Asttypes.constant) = +let translateConst ~loc ~mem (const : Asttypes.constant) = match const with | Const_int n -> Il.I32 (n |> Int32.of_int) | Const_float s -> @@ -140,11 +140,11 @@ let translateConst ~loc ~mem (const : CL.Asttypes.constant) = Format.fprintf ppf "Constant not supported"); assert false -let processConst ~funDef ~loc ~mem (const_ : CL.Asttypes.constant) = +let processConst ~funDef ~loc ~mem (const_ : Asttypes.constant) = let const = const_ |> translateConst ~loc ~mem in funDef |> Il.FunDef.emit ~instr:(Il.Const const) -let rec processLocalBinding ~env ~(pat : CL.Typedtree.pattern) +let rec processLocalBinding ~env ~(pat : Typedtree.pattern) ~(scope : Il.scope) = match (pat.pat_desc, scope) with #if OCAML_VERSION < (5, 2, 0) @@ -152,7 +152,7 @@ let rec processLocalBinding ~env ~(pat : CL.Typedtree.pattern) #else | Tpat_var (id, _, _), _ -> #endif - env |> Il.Env.add ~id:(id |> CL.Ident.name) ~def:(LocalScope scope) + env |> Il.Env.add ~id:(id |> Ident.name) ~def:(LocalScope scope) | Tpat_tuple pats, Tuple scopes -> let patsAndScopes = (List.combine pats scopes [@doesNotRaise]) in patsAndScopes @@ -162,11 +162,11 @@ let rec processLocalBinding ~env ~(pat : CL.Typedtree.pattern) | Tpat_any, _ -> env | _ -> assert false -and processExpr ~funDef ~env ~mem (expr : CL.Typedtree.expression) = +and processExpr ~funDef ~env ~mem (expr : Typedtree.expression) = match expr.exp_desc with | Texp_constant const -> const |> processConst ~funDef ~loc:expr.exp_loc ~mem | Texp_ident (id, _, _) -> ( - let id = CL.Path.name id in + let id = Path.name id in let rec emitScope (scope : Il.scope) = match scope with | Local offset -> funDef |> Il.FunDef.emit ~instr:(Il.LocalGet offset) @@ -189,9 +189,9 @@ and processExpr ~funDef ~env ~mem (expr : CL.Typedtree.expression) = ({exp_desc = Texp_ident (callee, _, vd); exp_loc = callee_loc}, args) -> let kind = vd.val_type |> Il.Kind.fromType in args - |> List.iteri (fun i ((argLabel : CL.Asttypes.arg_label), argOpt) -> + |> List.iteri (fun i ((argLabel : Asttypes.arg_label), argOpt) -> match (argLabel, argOpt) with - | Nolabel, Some (arg : CL.Typedtree.expression) -> + | Nolabel, Some (arg : Typedtree.expression) -> (match kind with | Arrow (declKinds, _) -> let declKind = (declKinds.(i) [@doesNotRaise]) in @@ -203,7 +203,7 @@ and processExpr ~funDef ~env ~mem (expr : CL.Typedtree.expression) = "Function call to @{%s@}: parameter %d has kind \ @{%s@} but the supplied argument has kind \ @{%s@}" - (callee |> CL.Path.name) i + (callee |> Path.name) i (declKind |> Il.Kind.toString) (argKind |> Il.Kind.toString)) | _ -> assert false); @@ -233,7 +233,7 @@ and processExpr ~funDef ~env ~mem (expr : CL.Typedtree.expression) = | Texp_record {fields; extended_expression = None} -> let firstIndex = ref 0 in fields - |> Array.iteri (fun i (_ld, (rld : CL.Typedtree.record_label_definition)) -> + |> Array.iteri (fun i (_ld, (rld : Typedtree.record_label_definition)) -> match rld with | Kept _ -> assert false | Overridden ({loc}, e) -> @@ -248,7 +248,7 @@ and processExpr ~funDef ~env ~mem (expr : CL.Typedtree.expression) = | Texp_field (e, {loc}, {lbl_name; lbl_all}) -> let offset = ref 0 in lbl_all - |> Array.exists (fun (ld : CL.Types.label_description) -> + |> Array.exists (fun (ld : Types.label_description) -> if ld.lbl_name = lbl_name then true else let size = ld.lbl_arg |> sizeOfTyp ~loc in @@ -264,13 +264,13 @@ and processExpr ~funDef ~env ~mem (expr : CL.Typedtree.expression) = Format.fprintf ppf "Expression not supported"); assert false -let rec processGlobal ~env ~id ~mem (expr : CL.Typedtree.expression) = +let rec processGlobal ~env ~id ~mem (expr : Typedtree.expression) = match expr.exp_desc with | Texp_constant const_ -> let const = const_ |> translateConst ~loc:expr.exp_loc ~mem in Il.Init.Const const | Texp_ident (id1, _, _) -> ( - let id1 = CL.Path.name id1 in + let id1 = Path.name id1 in match env |> Il.Env.find ~id:id1 with | Some (GlobalDef globalDef) -> globalDef.init | _ -> @@ -287,8 +287,8 @@ let envRef = ref (Il.Env.create ()) let memRef = ref (Il.Mem.create ()) -let processValueBinding ~id ~(expr : CL.Typedtree.expression) = - let id = CL.Ident.name id in +let processValueBinding ~id ~(expr : Typedtree.expression) = + let id = Ident.name id in Log_.item "no-alloc binding for %s@." id; let kind = Il.Kind.fromType expr.exp_type in match kind with @@ -300,7 +300,7 @@ let processValueBinding ~id ~(expr : CL.Typedtree.expression) = let init = expr |> processGlobal ~env:!envRef ~id ~mem:!memRef in envRef := !envRef |> Il.Env.add ~id ~def:(GlobalDef {id; init}) -let collectValueBinding super self (vb : CL.Typedtree.value_binding) = +let collectValueBinding super self (vb : Typedtree.value_binding) = (match vb.vb_pat.pat_desc with #if OCAML_VERSION < (5, 2, 0) | Tpat_var (id, _) @@ -308,17 +308,17 @@ let collectValueBinding super self (vb : CL.Typedtree.value_binding) = | Tpat_var (id, _, _) #endif when vb.vb_attributes |> Annotation.hasAttribute (( = ) "noalloc") -> - processValueBinding ~id ~expr:vb.CL.Typedtree.vb_expr + processValueBinding ~id ~expr:vb.Typedtree.vb_expr | _ -> ()); - let r = super.CL.Tast_mapper.value_binding self vb in + let r = super.Tast_mapper.value_binding self vb in r let traverseStructure = - let super = CL.Tast_mapper.default in + let super = Tast_mapper.default in let value_binding self vb = vb |> collectValueBinding super self in {super with value_binding} -let processCmt (cmt_infos : CL.Cmt_format.cmt_infos) = +let processCmt (cmt_infos : Cmt_format.cmt_infos) = match cmt_infos.cmt_annots with | Interface _ -> () | Implementation structure -> diff --git a/src/Reanalyze.ml b/src/Reanalyze.ml index 5237a87e..bf12a950 100644 --- a/src/Reanalyze.ml +++ b/src/Reanalyze.ml @@ -1,7 +1,7 @@ open Common let loadCmtFile cmtFilePath = - let cmt_infos = CL.Cmt_format.read_cmt cmtFilePath in + let cmt_infos = Cmt_format.read_cmt cmtFilePath in let excludePath sourceFile = !Cli.excludePaths |> List.exists (fun prefix_ -> diff --git a/src/SideEffects.ml b/src/SideEffects.ml index 6fd4b4ea..9dcfe0f9 100644 --- a/src/SideEffects.ml +++ b/src/SideEffects.ml @@ -21,7 +21,7 @@ let pathIsWhitelistedForSideEffects path = |> Common.Path.onOkPath ~whenContainsApply:false ~f:(fun s -> Hashtbl.mem (Lazy.force whiteTableSideEffects) s) -let rec exprNoSideEffects (expr : CL.Typedtree.expression) = +let rec exprNoSideEffects (expr : Typedtree.expression) = match expr.exp_desc with | Texp_ident _ | Texp_constant _ -> true | Texp_construct (_, _, el) -> el |> List.for_all exprNoSideEffects @@ -33,7 +33,7 @@ let rec exprNoSideEffects (expr : CL.Typedtree.expression) = | Texp_sequence (e1, e2) -> e1 |> exprNoSideEffects && e2 |> exprNoSideEffects | Texp_let (_, vbs, e) -> vbs - |> List.for_all (fun (vb : CL.Typedtree.value_binding) -> + |> List.for_all (fun (vb : Typedtree.value_binding) -> vb.vb_expr |> exprNoSideEffects) && e |> exprNoSideEffects | Texp_record {fields; extended_expression} -> @@ -76,7 +76,7 @@ let rec exprNoSideEffects (expr : CL.Typedtree.expression) = and exprOptNoSideEffects eo = match eo with None -> true | Some e -> e |> exprNoSideEffects -and fieldNoSideEffects ((_ld, rld) : _ * CL.Typedtree.record_label_definition) = +and fieldNoSideEffects ((_ld, rld) : _ * Typedtree.record_label_definition) = match rld with #if OCAML_VERSION >= (5, 0, 0) | Kept (_typeExpr, _mutable_flag) -> true diff --git a/src/compiler-libs-406/ast_helper.ml b/src/compiler-libs-406/ast_helper.ml deleted file mode 100644 index 365471e3..00000000 --- a/src/compiler-libs-406/ast_helper.ml +++ /dev/null @@ -1,560 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Alain Frisch, LexiFi *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Helpers to produce Parsetree fragments *) - -open Asttypes -open Parsetree -open Docstrings - -type lid = Longident.t loc -type str = string loc -type loc = Location.t -type attrs = attribute list - -let default_loc = ref Location.none - -let with_default_loc l f = - let old = !default_loc in - default_loc := l; - try let r = f () in default_loc := old; r - with exn -> default_loc := old; raise exn - -module Const = struct - let integer ?suffix i = Pconst_integer (i, suffix) - let int ?suffix i = integer ?suffix (string_of_int i) - let int32 ?(suffix='l') i = integer ~suffix (Int32.to_string i) - let int64 ?(suffix='L') i = integer ~suffix (Int64.to_string i) - let nativeint ?(suffix='n') i = integer ~suffix (Nativeint.to_string i) - let float ?suffix f = Pconst_float (f, suffix) - let char c = Pconst_char c - let string ?quotation_delimiter s = Pconst_string (s, quotation_delimiter) -end - -module Typ = struct - let mk ?(loc = !default_loc) ?(attrs = []) d = - {ptyp_desc = d; ptyp_loc = loc; ptyp_attributes = attrs} - let attr d a = {d with ptyp_attributes = d.ptyp_attributes @ [a]} - - let any ?loc ?attrs () = mk ?loc ?attrs Ptyp_any - let var ?loc ?attrs a = mk ?loc ?attrs (Ptyp_var a) - let arrow ?loc ?attrs a b c = mk ?loc ?attrs (Ptyp_arrow (a, b, c)) - let tuple ?loc ?attrs a = mk ?loc ?attrs (Ptyp_tuple a) - let constr ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_constr (a, b)) - let object_ ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_object (a, b)) - let class_ ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_class (a, b)) - let alias ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_alias (a, b)) - let variant ?loc ?attrs a b c = mk ?loc ?attrs (Ptyp_variant (a, b, c)) - let poly ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_poly (a, b)) - let package ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_package (a, b)) - let extension ?loc ?attrs a = mk ?loc ?attrs (Ptyp_extension a) - - let force_poly t = - match t.ptyp_desc with - | Ptyp_poly _ -> t - | _ -> poly ~loc:t.ptyp_loc [] t (* -> ghost? *) - - let varify_constructors var_names t = - let check_variable vl loc v = - if List.mem v vl then - raise Syntaxerr.(Error(Variable_in_scope(loc,v))) in - let var_names = List.map (fun v -> v.txt) var_names in - let rec loop t = - let desc = - match t.ptyp_desc with - | Ptyp_any -> Ptyp_any - | Ptyp_var x -> - check_variable var_names t.ptyp_loc x; - Ptyp_var x - | Ptyp_arrow (label,core_type,core_type') -> - Ptyp_arrow(label, loop core_type, loop core_type') - | Ptyp_tuple lst -> Ptyp_tuple (List.map loop lst) - | Ptyp_constr( { txt = Longident.Lident s }, []) - when List.mem s var_names -> - Ptyp_var s - | Ptyp_constr(longident, lst) -> - Ptyp_constr(longident, List.map loop lst) - | Ptyp_object (lst, o) -> - Ptyp_object (List.map loop_object_field lst, o) - | Ptyp_class (longident, lst) -> - Ptyp_class (longident, List.map loop lst) - | Ptyp_alias(core_type, string) -> - check_variable var_names t.ptyp_loc string; - Ptyp_alias(loop core_type, string) - | Ptyp_variant(row_field_list, flag, lbl_lst_option) -> - Ptyp_variant(List.map loop_row_field row_field_list, - flag, lbl_lst_option) - | Ptyp_poly(string_lst, core_type) -> - List.iter (fun v -> - check_variable var_names t.ptyp_loc v.txt) string_lst; - Ptyp_poly(string_lst, loop core_type) - | Ptyp_package(longident,lst) -> - Ptyp_package(longident,List.map (fun (n,typ) -> (n,loop typ) ) lst) - | Ptyp_extension (s, arg) -> - Ptyp_extension (s, arg) - in - {t with ptyp_desc = desc} - and loop_row_field = - function - | Rtag(label,attrs,flag,lst) -> - Rtag(label,attrs,flag,List.map loop lst) - | Rinherit t -> - Rinherit (loop t) - and loop_object_field = - function - | Otag(label, attrs, t) -> - Otag(label, attrs, loop t) - | Oinherit t -> - Oinherit (loop t) - in - loop t - -end - -module Pat = struct - let mk ?(loc = !default_loc) ?(attrs = []) d = - {ppat_desc = d; ppat_loc = loc; ppat_attributes = attrs} - let attr d a = {d with ppat_attributes = d.ppat_attributes @ [a]} - - let any ?loc ?attrs () = mk ?loc ?attrs Ppat_any - let var ?loc ?attrs a = mk ?loc ?attrs (Ppat_var a) - let alias ?loc ?attrs a b = mk ?loc ?attrs (Ppat_alias (a, b)) - let constant ?loc ?attrs a = mk ?loc ?attrs (Ppat_constant a) - let interval ?loc ?attrs a b = mk ?loc ?attrs (Ppat_interval (a, b)) - let tuple ?loc ?attrs a = mk ?loc ?attrs (Ppat_tuple a) - let construct ?loc ?attrs a b = mk ?loc ?attrs (Ppat_construct (a, b)) - let variant ?loc ?attrs a b = mk ?loc ?attrs (Ppat_variant (a, b)) - let record ?loc ?attrs a b = mk ?loc ?attrs (Ppat_record (a, b)) - let array ?loc ?attrs a = mk ?loc ?attrs (Ppat_array a) - let or_ ?loc ?attrs a b = mk ?loc ?attrs (Ppat_or (a, b)) - let constraint_ ?loc ?attrs a b = mk ?loc ?attrs (Ppat_constraint (a, b)) - let type_ ?loc ?attrs a = mk ?loc ?attrs (Ppat_type a) - let lazy_ ?loc ?attrs a = mk ?loc ?attrs (Ppat_lazy a) - let unpack ?loc ?attrs a = mk ?loc ?attrs (Ppat_unpack a) - let open_ ?loc ?attrs a b = mk ?loc ?attrs (Ppat_open (a, b)) - let exception_ ?loc ?attrs a = mk ?loc ?attrs (Ppat_exception a) - let extension ?loc ?attrs a = mk ?loc ?attrs (Ppat_extension a) -end - -module Exp = struct - let mk ?(loc = !default_loc) ?(attrs = []) d = - {pexp_desc = d; pexp_loc = loc; pexp_attributes = attrs} - let attr d a = {d with pexp_attributes = d.pexp_attributes @ [a]} - - let ident ?loc ?attrs a = mk ?loc ?attrs (Pexp_ident a) - let constant ?loc ?attrs a = mk ?loc ?attrs (Pexp_constant a) - let let_ ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_let (a, b, c)) - let fun_ ?loc ?attrs a b c d = mk ?loc ?attrs (Pexp_fun (a, b, c, d)) - let function_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_function a) - let apply ?loc ?attrs a b = mk ?loc ?attrs (Pexp_apply (a, b)) - let match_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_match (a, b)) - let try_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_try (a, b)) - let tuple ?loc ?attrs a = mk ?loc ?attrs (Pexp_tuple a) - let construct ?loc ?attrs a b = mk ?loc ?attrs (Pexp_construct (a, b)) - let variant ?loc ?attrs a b = mk ?loc ?attrs (Pexp_variant (a, b)) - let record ?loc ?attrs a b = mk ?loc ?attrs (Pexp_record (a, b)) - let field ?loc ?attrs a b = mk ?loc ?attrs (Pexp_field (a, b)) - let setfield ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_setfield (a, b, c)) - let array ?loc ?attrs a = mk ?loc ?attrs (Pexp_array a) - let ifthenelse ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_ifthenelse (a, b, c)) - let sequence ?loc ?attrs a b = mk ?loc ?attrs (Pexp_sequence (a, b)) - let while_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_while (a, b)) - let for_ ?loc ?attrs a b c d e = mk ?loc ?attrs (Pexp_for (a, b, c, d, e)) - let constraint_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_constraint (a, b)) - let coerce ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_coerce (a, b, c)) - let send ?loc ?attrs a b = mk ?loc ?attrs (Pexp_send (a, b)) - let new_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_new a) - let setinstvar ?loc ?attrs a b = mk ?loc ?attrs (Pexp_setinstvar (a, b)) - let override ?loc ?attrs a = mk ?loc ?attrs (Pexp_override a) - let letmodule ?loc ?attrs a b c= mk ?loc ?attrs (Pexp_letmodule (a, b, c)) - let letexception ?loc ?attrs a b = mk ?loc ?attrs (Pexp_letexception (a, b)) - let assert_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_assert a) - let lazy_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_lazy a) - let poly ?loc ?attrs a b = mk ?loc ?attrs (Pexp_poly (a, b)) - let object_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_object a) - let newtype ?loc ?attrs a b = mk ?loc ?attrs (Pexp_newtype (a, b)) - let pack ?loc ?attrs a = mk ?loc ?attrs (Pexp_pack a) - let open_ ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_open (a, b, c)) - let extension ?loc ?attrs a = mk ?loc ?attrs (Pexp_extension a) - let unreachable ?loc ?attrs () = mk ?loc ?attrs Pexp_unreachable - - let case lhs ?guard rhs = - { - pc_lhs = lhs; - pc_guard = guard; - pc_rhs = rhs; - } -end - -module Mty = struct - let mk ?(loc = !default_loc) ?(attrs = []) d = - {pmty_desc = d; pmty_loc = loc; pmty_attributes = attrs} - let attr d a = {d with pmty_attributes = d.pmty_attributes @ [a]} - - let ident ?loc ?attrs a = mk ?loc ?attrs (Pmty_ident a) - let alias ?loc ?attrs a = mk ?loc ?attrs (Pmty_alias a) - let signature ?loc ?attrs a = mk ?loc ?attrs (Pmty_signature a) - let functor_ ?loc ?attrs a b c = mk ?loc ?attrs (Pmty_functor (a, b, c)) - let with_ ?loc ?attrs a b = mk ?loc ?attrs (Pmty_with (a, b)) - let typeof_ ?loc ?attrs a = mk ?loc ?attrs (Pmty_typeof a) - let extension ?loc ?attrs a = mk ?loc ?attrs (Pmty_extension a) -end - -module Mod = struct -let mk ?(loc = !default_loc) ?(attrs = []) d = - {pmod_desc = d; pmod_loc = loc; pmod_attributes = attrs} - let attr d a = {d with pmod_attributes = d.pmod_attributes @ [a]} - - let ident ?loc ?attrs x = mk ?loc ?attrs (Pmod_ident x) - let structure ?loc ?attrs x = mk ?loc ?attrs (Pmod_structure x) - let functor_ ?loc ?attrs arg arg_ty body = - mk ?loc ?attrs (Pmod_functor (arg, arg_ty, body)) - let apply ?loc ?attrs m1 m2 = mk ?loc ?attrs (Pmod_apply (m1, m2)) - let constraint_ ?loc ?attrs m mty = mk ?loc ?attrs (Pmod_constraint (m, mty)) - let unpack ?loc ?attrs e = mk ?loc ?attrs (Pmod_unpack e) - let extension ?loc ?attrs a = mk ?loc ?attrs (Pmod_extension a) -end - -module Sig = struct - let mk ?(loc = !default_loc) d = {psig_desc = d; psig_loc = loc} - - let value ?loc a = mk ?loc (Psig_value a) - let type_ ?loc rec_flag a = mk ?loc (Psig_type (rec_flag, a)) - let type_extension ?loc a = mk ?loc (Psig_typext a) - let exception_ ?loc a = mk ?loc (Psig_exception a) - let module_ ?loc a = mk ?loc (Psig_module a) - let rec_module ?loc a = mk ?loc (Psig_recmodule a) - let modtype ?loc a = mk ?loc (Psig_modtype a) - let open_ ?loc a = mk ?loc (Psig_open a) - let include_ ?loc a = mk ?loc (Psig_include a) - let class_ ?loc a = mk ?loc (Psig_class a) - let class_type ?loc a = mk ?loc (Psig_class_type a) - let extension ?loc ?(attrs = []) a = mk ?loc (Psig_extension (a, attrs)) - let attribute ?loc a = mk ?loc (Psig_attribute a) - let text txt = - let f_txt = List.filter (fun ds -> docstring_body ds <> "") txt in - List.map - (fun ds -> attribute ~loc:(docstring_loc ds) (text_attr ds)) - f_txt -end - -module Str = struct - let mk ?(loc = !default_loc) d = {pstr_desc = d; pstr_loc = loc} - - let eval ?loc ?(attrs = []) a = mk ?loc (Pstr_eval (a, attrs)) - let value ?loc a b = mk ?loc (Pstr_value (a, b)) - let primitive ?loc a = mk ?loc (Pstr_primitive a) - let type_ ?loc rec_flag a = mk ?loc (Pstr_type (rec_flag, a)) - let type_extension ?loc a = mk ?loc (Pstr_typext a) - let exception_ ?loc a = mk ?loc (Pstr_exception a) - let module_ ?loc a = mk ?loc (Pstr_module a) - let rec_module ?loc a = mk ?loc (Pstr_recmodule a) - let modtype ?loc a = mk ?loc (Pstr_modtype a) - let open_ ?loc a = mk ?loc (Pstr_open a) - let class_type ?loc a = mk ?loc (Pstr_class_type a) - let include_ ?loc a = mk ?loc (Pstr_include a) - let extension ?loc ?(attrs = []) a = mk ?loc (Pstr_extension (a, attrs)) - let attribute ?loc a = mk ?loc (Pstr_attribute a) - let text txt = - let f_txt = List.filter (fun ds -> docstring_body ds <> "") txt in - List.map - (fun ds -> attribute ~loc:(docstring_loc ds) (text_attr ds)) - f_txt -end - -module Cl = struct - let mk ?(loc = !default_loc) ?(attrs = []) d = - { - pcl_desc = d; - pcl_loc = loc; - pcl_attributes = attrs; - } - let attr d a = {d with pcl_attributes = d.pcl_attributes @ [a]} - - let constr ?loc ?attrs a b = mk ?loc ?attrs (Pcl_constr (a, b)) - let structure ?loc ?attrs a = mk ?loc ?attrs (Pcl_structure a) - let fun_ ?loc ?attrs a b c d = mk ?loc ?attrs (Pcl_fun (a, b, c, d)) - let apply ?loc ?attrs a b = mk ?loc ?attrs (Pcl_apply (a, b)) - let let_ ?loc ?attrs a b c = mk ?loc ?attrs (Pcl_let (a, b, c)) - let constraint_ ?loc ?attrs a b = mk ?loc ?attrs (Pcl_constraint (a, b)) - let extension ?loc ?attrs a = mk ?loc ?attrs (Pcl_extension a) - let open_ ?loc ?attrs a b c = mk ?loc ?attrs (Pcl_open (a, b, c)) -end - -module Cty = struct - let mk ?(loc = !default_loc) ?(attrs = []) d = - { - pcty_desc = d; - pcty_loc = loc; - pcty_attributes = attrs; - } - let attr d a = {d with pcty_attributes = d.pcty_attributes @ [a]} - - let constr ?loc ?attrs a b = mk ?loc ?attrs (Pcty_constr (a, b)) - let signature ?loc ?attrs a = mk ?loc ?attrs (Pcty_signature a) - let arrow ?loc ?attrs a b c = mk ?loc ?attrs (Pcty_arrow (a, b, c)) - let extension ?loc ?attrs a = mk ?loc ?attrs (Pcty_extension a) - let open_ ?loc ?attrs a b c = mk ?loc ?attrs (Pcty_open (a, b, c)) -end - -module Ctf = struct - let mk ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) d = - { - pctf_desc = d; - pctf_loc = loc; - pctf_attributes = add_docs_attrs docs attrs; - } - - let inherit_ ?loc ?attrs a = mk ?loc ?attrs (Pctf_inherit a) - let val_ ?loc ?attrs a b c d = mk ?loc ?attrs (Pctf_val (a, b, c, d)) - let method_ ?loc ?attrs a b c d = mk ?loc ?attrs (Pctf_method (a, b, c, d)) - let constraint_ ?loc ?attrs a b = mk ?loc ?attrs (Pctf_constraint (a, b)) - let extension ?loc ?attrs a = mk ?loc ?attrs (Pctf_extension a) - let attribute ?loc a = mk ?loc (Pctf_attribute a) - let text txt = - let f_txt = List.filter (fun ds -> docstring_body ds <> "") txt in - List.map - (fun ds -> attribute ~loc:(docstring_loc ds) (text_attr ds)) - f_txt - - let attr d a = {d with pctf_attributes = d.pctf_attributes @ [a]} - -end - -module Cf = struct - let mk ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) d = - { - pcf_desc = d; - pcf_loc = loc; - pcf_attributes = add_docs_attrs docs attrs; - } - - - let val_ ?loc ?attrs a b c = mk ?loc ?attrs (Pcf_val (a, b, c)) - let method_ ?loc ?attrs a b c = mk ?loc ?attrs (Pcf_method (a, b, c)) - let constraint_ ?loc ?attrs a b = mk ?loc ?attrs (Pcf_constraint (a, b)) - let initializer_ ?loc ?attrs a = mk ?loc ?attrs (Pcf_initializer a) - let extension ?loc ?attrs a = mk ?loc ?attrs (Pcf_extension a) - let attribute ?loc a = mk ?loc (Pcf_attribute a) - let text txt = - let f_txt = List.filter (fun ds -> docstring_body ds <> "") txt in - List.map - (fun ds -> attribute ~loc:(docstring_loc ds) (text_attr ds)) - f_txt - - let virtual_ ct = Cfk_virtual ct - let concrete o e = Cfk_concrete (o, e) - - let attr d a = {d with pcf_attributes = d.pcf_attributes @ [a]} - -end - -module Val = struct - let mk ?(loc = !default_loc) ?(attrs = []) ?(docs = empty_docs) - ?(prim = []) name typ = - { - pval_name = name; - pval_type = typ; - pval_attributes = add_docs_attrs docs attrs; - pval_loc = loc; - pval_prim = prim; - } -end - -module Md = struct - let mk ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) ?(text = []) name typ = - { - pmd_name = name; - pmd_type = typ; - pmd_attributes = - add_text_attrs text (add_docs_attrs docs attrs); - pmd_loc = loc; - } -end - -module Mtd = struct - let mk ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) ?(text = []) ?typ name = - { - pmtd_name = name; - pmtd_type = typ; - pmtd_attributes = - add_text_attrs text (add_docs_attrs docs attrs); - pmtd_loc = loc; - } -end - -module Mb = struct - let mk ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) ?(text = []) name expr = - { - pmb_name = name; - pmb_expr = expr; - pmb_attributes = - add_text_attrs text (add_docs_attrs docs attrs); - pmb_loc = loc; - } -end - -module Opn = struct - let mk ?(loc = !default_loc) ?(attrs = []) ?(docs = empty_docs) - ?(override = Fresh) lid = - { - popen_lid = lid; - popen_override = override; - popen_loc = loc; - popen_attributes = add_docs_attrs docs attrs; - } -end - -module Incl = struct - let mk ?(loc = !default_loc) ?(attrs = []) ?(docs = empty_docs) mexpr = - { - pincl_mod = mexpr; - pincl_loc = loc; - pincl_attributes = add_docs_attrs docs attrs; - } - -end - -module Vb = struct - let mk ?(loc = !default_loc) ?(attrs = []) ?(docs = empty_docs) - ?(text = []) pat expr = - { - pvb_pat = pat; - pvb_expr = expr; - pvb_attributes = - add_text_attrs text (add_docs_attrs docs attrs); - pvb_loc = loc; - } -end - -module Ci = struct - let mk ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) ?(text = []) - ?(virt = Concrete) ?(params = []) name expr = - { - pci_virt = virt; - pci_params = params; - pci_name = name; - pci_expr = expr; - pci_attributes = - add_text_attrs text (add_docs_attrs docs attrs); - pci_loc = loc; - } -end - -module Type = struct - let mk ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) ?(text = []) - ?(params = []) - ?(cstrs = []) - ?(kind = Ptype_abstract) - ?(priv = Public) - ?manifest - name = - { - ptype_name = name; - ptype_params = params; - ptype_cstrs = cstrs; - ptype_kind = kind; - ptype_private = priv; - ptype_manifest = manifest; - ptype_attributes = - add_text_attrs text (add_docs_attrs docs attrs); - ptype_loc = loc; - } - - let constructor ?(loc = !default_loc) ?(attrs = []) ?(info = empty_info) - ?(args = Pcstr_tuple []) ?res name = - { - pcd_name = name; - pcd_args = args; - pcd_res = res; - pcd_loc = loc; - pcd_attributes = add_info_attrs info attrs; - } - - let field ?(loc = !default_loc) ?(attrs = []) ?(info = empty_info) - ?(mut = Immutable) name typ = - { - pld_name = name; - pld_mutable = mut; - pld_type = typ; - pld_loc = loc; - pld_attributes = add_info_attrs info attrs; - } - -end - -(** Type extensions *) -module Te = struct - let mk ?(attrs = []) ?(docs = empty_docs) - ?(params = []) ?(priv = Public) path constructors = - { - ptyext_path = path; - ptyext_params = params; - ptyext_constructors = constructors; - ptyext_private = priv; - ptyext_attributes = add_docs_attrs docs attrs; - } - - let constructor ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) ?(info = empty_info) name kind = - { - pext_name = name; - pext_kind = kind; - pext_loc = loc; - pext_attributes = add_docs_attrs docs (add_info_attrs info attrs); - } - - let decl ?(loc = !default_loc) ?(attrs = []) ?(docs = empty_docs) - ?(info = empty_info) ?(args = Pcstr_tuple []) ?res name = - { - pext_name = name; - pext_kind = Pext_decl(args, res); - pext_loc = loc; - pext_attributes = add_docs_attrs docs (add_info_attrs info attrs); - } - - let rebind ?(loc = !default_loc) ?(attrs = []) - ?(docs = empty_docs) ?(info = empty_info) name lid = - { - pext_name = name; - pext_kind = Pext_rebind lid; - pext_loc = loc; - pext_attributes = add_docs_attrs docs (add_info_attrs info attrs); - } - -end - -module Csig = struct - let mk self fields = - { - pcsig_self = self; - pcsig_fields = fields; - } -end - -module Cstr = struct - let mk self fields = - { - pcstr_self = self; - pcstr_fields = fields; - } -end diff --git a/src/compiler-libs-406/ast_helper.mli b/src/compiler-libs-406/ast_helper.mli deleted file mode 100644 index 455e225b..00000000 --- a/src/compiler-libs-406/ast_helper.mli +++ /dev/null @@ -1,439 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Alain Frisch, LexiFi *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Helpers to produce Parsetree fragments *) - -open Asttypes -open Docstrings -open Parsetree - -type lid = Longident.t loc -type str = string loc -type loc = Location.t -type attrs = attribute list - -(** {1 Default locations} *) - -val default_loc: loc ref - (** Default value for all optional location arguments. *) - -val with_default_loc: loc -> (unit -> 'a) -> 'a - (** Set the [default_loc] within the scope of the execution - of the provided function. *) - -(** {1 Constants} *) - -module Const : sig - val char : char -> constant - val string : ?quotation_delimiter:string -> string -> constant - val integer : ?suffix:char -> string -> constant - val int : ?suffix:char -> int -> constant - val int32 : ?suffix:char -> int32 -> constant - val int64 : ?suffix:char -> int64 -> constant - val nativeint : ?suffix:char -> nativeint -> constant - val float : ?suffix:char -> string -> constant -end - -(** {1 Core language} *) - -(** Type expressions *) -module Typ : - sig - val mk: ?loc:loc -> ?attrs:attrs -> core_type_desc -> core_type - val attr: core_type -> attribute -> core_type - - val any: ?loc:loc -> ?attrs:attrs -> unit -> core_type - val var: ?loc:loc -> ?attrs:attrs -> string -> core_type - val arrow: ?loc:loc -> ?attrs:attrs -> arg_label -> core_type -> core_type - -> core_type - val tuple: ?loc:loc -> ?attrs:attrs -> core_type list -> core_type - val constr: ?loc:loc -> ?attrs:attrs -> lid -> core_type list -> core_type - val object_: ?loc:loc -> ?attrs:attrs -> object_field list - -> closed_flag -> core_type - val class_: ?loc:loc -> ?attrs:attrs -> lid -> core_type list -> core_type - val alias: ?loc:loc -> ?attrs:attrs -> core_type -> string -> core_type - val variant: ?loc:loc -> ?attrs:attrs -> row_field list -> closed_flag - -> label list option -> core_type - val poly: ?loc:loc -> ?attrs:attrs -> str list -> core_type -> core_type - val package: ?loc:loc -> ?attrs:attrs -> lid -> (lid * core_type) list - -> core_type - val extension: ?loc:loc -> ?attrs:attrs -> extension -> core_type - - val force_poly: core_type -> core_type - - val varify_constructors: str list -> core_type -> core_type - (** [varify_constructors newtypes te] is type expression [te], of which - any of nullary type constructor [tc] is replaced by type variable of - the same name, if [tc]'s name appears in [newtypes]. - Raise [Syntaxerr.Variable_in_scope] if any type variable inside [te] - appears in [newtypes]. - @since 4.05 - *) - end - -(** Patterns *) -module Pat: - sig - val mk: ?loc:loc -> ?attrs:attrs -> pattern_desc -> pattern - val attr:pattern -> attribute -> pattern - - val any: ?loc:loc -> ?attrs:attrs -> unit -> pattern - val var: ?loc:loc -> ?attrs:attrs -> str -> pattern - val alias: ?loc:loc -> ?attrs:attrs -> pattern -> str -> pattern - val constant: ?loc:loc -> ?attrs:attrs -> constant -> pattern - val interval: ?loc:loc -> ?attrs:attrs -> constant -> constant -> pattern - val tuple: ?loc:loc -> ?attrs:attrs -> pattern list -> pattern - val construct: ?loc:loc -> ?attrs:attrs -> lid -> pattern option -> pattern - val variant: ?loc:loc -> ?attrs:attrs -> label -> pattern option -> pattern - val record: ?loc:loc -> ?attrs:attrs -> (lid * pattern) list -> closed_flag - -> pattern - val array: ?loc:loc -> ?attrs:attrs -> pattern list -> pattern - val or_: ?loc:loc -> ?attrs:attrs -> pattern -> pattern -> pattern - val constraint_: ?loc:loc -> ?attrs:attrs -> pattern -> core_type -> pattern - val type_: ?loc:loc -> ?attrs:attrs -> lid -> pattern - val lazy_: ?loc:loc -> ?attrs:attrs -> pattern -> pattern - val unpack: ?loc:loc -> ?attrs:attrs -> str -> pattern - val open_: ?loc:loc -> ?attrs:attrs -> lid -> pattern -> pattern - val exception_: ?loc:loc -> ?attrs:attrs -> pattern -> pattern - val extension: ?loc:loc -> ?attrs:attrs -> extension -> pattern - end - -(** Expressions *) -module Exp: - sig - val mk: ?loc:loc -> ?attrs:attrs -> expression_desc -> expression - val attr: expression -> attribute -> expression - - val ident: ?loc:loc -> ?attrs:attrs -> lid -> expression - val constant: ?loc:loc -> ?attrs:attrs -> constant -> expression - val let_: ?loc:loc -> ?attrs:attrs -> rec_flag -> value_binding list - -> expression -> expression - val fun_: ?loc:loc -> ?attrs:attrs -> arg_label -> expression option - -> pattern -> expression -> expression - val function_: ?loc:loc -> ?attrs:attrs -> case list -> expression - val apply: ?loc:loc -> ?attrs:attrs -> expression - -> (arg_label * expression) list -> expression - val match_: ?loc:loc -> ?attrs:attrs -> expression -> case list - -> expression - val try_: ?loc:loc -> ?attrs:attrs -> expression -> case list -> expression - val tuple: ?loc:loc -> ?attrs:attrs -> expression list -> expression - val construct: ?loc:loc -> ?attrs:attrs -> lid -> expression option - -> expression - val variant: ?loc:loc -> ?attrs:attrs -> label -> expression option - -> expression - val record: ?loc:loc -> ?attrs:attrs -> (lid * expression) list - -> expression option -> expression - val field: ?loc:loc -> ?attrs:attrs -> expression -> lid -> expression - val setfield: ?loc:loc -> ?attrs:attrs -> expression -> lid -> expression - -> expression - val array: ?loc:loc -> ?attrs:attrs -> expression list -> expression - val ifthenelse: ?loc:loc -> ?attrs:attrs -> expression -> expression - -> expression option -> expression - val sequence: ?loc:loc -> ?attrs:attrs -> expression -> expression - -> expression - val while_: ?loc:loc -> ?attrs:attrs -> expression -> expression - -> expression - val for_: ?loc:loc -> ?attrs:attrs -> pattern -> expression -> expression - -> direction_flag -> expression -> expression - val coerce: ?loc:loc -> ?attrs:attrs -> expression -> core_type option - -> core_type -> expression - val constraint_: ?loc:loc -> ?attrs:attrs -> expression -> core_type - -> expression - val send: ?loc:loc -> ?attrs:attrs -> expression -> str -> expression - val new_: ?loc:loc -> ?attrs:attrs -> lid -> expression - val setinstvar: ?loc:loc -> ?attrs:attrs -> str -> expression -> expression - val override: ?loc:loc -> ?attrs:attrs -> (str * expression) list - -> expression - val letmodule: ?loc:loc -> ?attrs:attrs -> str -> module_expr -> expression - -> expression - val letexception: - ?loc:loc -> ?attrs:attrs -> extension_constructor -> expression - -> expression - val assert_: ?loc:loc -> ?attrs:attrs -> expression -> expression - val lazy_: ?loc:loc -> ?attrs:attrs -> expression -> expression - val poly: ?loc:loc -> ?attrs:attrs -> expression -> core_type option - -> expression - val object_: ?loc:loc -> ?attrs:attrs -> class_structure -> expression - val newtype: ?loc:loc -> ?attrs:attrs -> str -> expression -> expression - val pack: ?loc:loc -> ?attrs:attrs -> module_expr -> expression - val open_: ?loc:loc -> ?attrs:attrs -> override_flag -> lid -> expression - -> expression - val extension: ?loc:loc -> ?attrs:attrs -> extension -> expression - val unreachable: ?loc:loc -> ?attrs:attrs -> unit -> expression - - val case: pattern -> ?guard:expression -> expression -> case - end - -(** Value declarations *) -module Val: - sig - val mk: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> - ?prim:string list -> str -> core_type -> value_description - end - -(** Type declarations *) -module Type: - sig - val mk: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> ?text:text -> - ?params:(core_type * variance) list -> - ?cstrs:(core_type * core_type * loc) list -> - ?kind:type_kind -> ?priv:private_flag -> ?manifest:core_type -> str -> - type_declaration - - val constructor: ?loc:loc -> ?attrs:attrs -> ?info:info -> - ?args:constructor_arguments -> ?res:core_type -> str -> - constructor_declaration - val field: ?loc:loc -> ?attrs:attrs -> ?info:info -> - ?mut:mutable_flag -> str -> core_type -> label_declaration - end - -(** Type extensions *) -module Te: - sig - val mk: ?attrs:attrs -> ?docs:docs -> - ?params:(core_type * variance) list -> ?priv:private_flag -> - lid -> extension_constructor list -> type_extension - - val constructor: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> ?info:info -> - str -> extension_constructor_kind -> extension_constructor - - val decl: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> ?info:info -> - ?args:constructor_arguments -> ?res:core_type -> str -> - extension_constructor - val rebind: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> ?info:info -> - str -> lid -> extension_constructor - end - -(** {1 Module language} *) - -(** Module type expressions *) -module Mty: - sig - val mk: ?loc:loc -> ?attrs:attrs -> module_type_desc -> module_type - val attr: module_type -> attribute -> module_type - - val ident: ?loc:loc -> ?attrs:attrs -> lid -> module_type - val alias: ?loc:loc -> ?attrs:attrs -> lid -> module_type - val signature: ?loc:loc -> ?attrs:attrs -> signature -> module_type - val functor_: ?loc:loc -> ?attrs:attrs -> - str -> module_type option -> module_type -> module_type - val with_: ?loc:loc -> ?attrs:attrs -> module_type -> - with_constraint list -> module_type - val typeof_: ?loc:loc -> ?attrs:attrs -> module_expr -> module_type - val extension: ?loc:loc -> ?attrs:attrs -> extension -> module_type - end - -(** Module expressions *) -module Mod: - sig - val mk: ?loc:loc -> ?attrs:attrs -> module_expr_desc -> module_expr - val attr: module_expr -> attribute -> module_expr - - val ident: ?loc:loc -> ?attrs:attrs -> lid -> module_expr - val structure: ?loc:loc -> ?attrs:attrs -> structure -> module_expr - val functor_: ?loc:loc -> ?attrs:attrs -> - str -> module_type option -> module_expr -> module_expr - val apply: ?loc:loc -> ?attrs:attrs -> module_expr -> module_expr -> - module_expr - val constraint_: ?loc:loc -> ?attrs:attrs -> module_expr -> module_type -> - module_expr - val unpack: ?loc:loc -> ?attrs:attrs -> expression -> module_expr - val extension: ?loc:loc -> ?attrs:attrs -> extension -> module_expr - end - -(** Signature items *) -module Sig: - sig - val mk: ?loc:loc -> signature_item_desc -> signature_item - - val value: ?loc:loc -> value_description -> signature_item - val type_: ?loc:loc -> rec_flag -> type_declaration list -> signature_item - val type_extension: ?loc:loc -> type_extension -> signature_item - val exception_: ?loc:loc -> extension_constructor -> signature_item - val module_: ?loc:loc -> module_declaration -> signature_item - val rec_module: ?loc:loc -> module_declaration list -> signature_item - val modtype: ?loc:loc -> module_type_declaration -> signature_item - val open_: ?loc:loc -> open_description -> signature_item - val include_: ?loc:loc -> include_description -> signature_item - val class_: ?loc:loc -> class_description list -> signature_item - val class_type: ?loc:loc -> class_type_declaration list -> signature_item - val extension: ?loc:loc -> ?attrs:attrs -> extension -> signature_item - val attribute: ?loc:loc -> attribute -> signature_item - val text: text -> signature_item list - end - -(** Structure items *) -module Str: - sig - val mk: ?loc:loc -> structure_item_desc -> structure_item - - val eval: ?loc:loc -> ?attrs:attributes -> expression -> structure_item - val value: ?loc:loc -> rec_flag -> value_binding list -> structure_item - val primitive: ?loc:loc -> value_description -> structure_item - val type_: ?loc:loc -> rec_flag -> type_declaration list -> structure_item - val type_extension: ?loc:loc -> type_extension -> structure_item - val exception_: ?loc:loc -> extension_constructor -> structure_item - val module_: ?loc:loc -> module_binding -> structure_item - val rec_module: ?loc:loc -> module_binding list -> structure_item - val modtype: ?loc:loc -> module_type_declaration -> structure_item - val open_: ?loc:loc -> open_description -> structure_item - val class_type: ?loc:loc -> class_type_declaration list -> structure_item - val include_: ?loc:loc -> include_declaration -> structure_item - val extension: ?loc:loc -> ?attrs:attrs -> extension -> structure_item - val attribute: ?loc:loc -> attribute -> structure_item - val text: text -> structure_item list - end - -(** Module declarations *) -module Md: - sig - val mk: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> ?text:text -> - str -> module_type -> module_declaration - end - -(** Module type declarations *) -module Mtd: - sig - val mk: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> ?text:text -> - ?typ:module_type -> str -> module_type_declaration - end - -(** Module bindings *) -module Mb: - sig - val mk: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> ?text:text -> - str -> module_expr -> module_binding - end - -(** Opens *) -module Opn: - sig - val mk: ?loc: loc -> ?attrs:attrs -> ?docs:docs -> - ?override:override_flag -> lid -> open_description - end - -(** Includes *) -module Incl: - sig - val mk: ?loc: loc -> ?attrs:attrs -> ?docs:docs -> 'a -> 'a include_infos - end - -(** Value bindings *) -module Vb: - sig - val mk: ?loc: loc -> ?attrs:attrs -> ?docs:docs -> ?text:text -> - pattern -> expression -> value_binding - end - - -(** {1 Class language} *) - -(** Class type expressions *) -module Cty: - sig - val mk: ?loc:loc -> ?attrs:attrs -> class_type_desc -> class_type - val attr: class_type -> attribute -> class_type - - val constr: ?loc:loc -> ?attrs:attrs -> lid -> core_type list -> class_type - val signature: ?loc:loc -> ?attrs:attrs -> class_signature -> class_type - val arrow: ?loc:loc -> ?attrs:attrs -> arg_label -> core_type -> - class_type -> class_type - val extension: ?loc:loc -> ?attrs:attrs -> extension -> class_type - val open_: ?loc:loc -> ?attrs:attrs -> override_flag -> lid -> class_type - -> class_type - end - -(** Class type fields *) -module Ctf: - sig - val mk: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> - class_type_field_desc -> class_type_field - val attr: class_type_field -> attribute -> class_type_field - - val inherit_: ?loc:loc -> ?attrs:attrs -> class_type -> class_type_field - val val_: ?loc:loc -> ?attrs:attrs -> str -> mutable_flag -> - virtual_flag -> core_type -> class_type_field - val method_: ?loc:loc -> ?attrs:attrs -> str -> private_flag -> - virtual_flag -> core_type -> class_type_field - val constraint_: ?loc:loc -> ?attrs:attrs -> core_type -> core_type -> - class_type_field - val extension: ?loc:loc -> ?attrs:attrs -> extension -> class_type_field - val attribute: ?loc:loc -> attribute -> class_type_field - val text: text -> class_type_field list - end - -(** Class expressions *) -module Cl: - sig - val mk: ?loc:loc -> ?attrs:attrs -> class_expr_desc -> class_expr - val attr: class_expr -> attribute -> class_expr - - val constr: ?loc:loc -> ?attrs:attrs -> lid -> core_type list -> class_expr - val structure: ?loc:loc -> ?attrs:attrs -> class_structure -> class_expr - val fun_: ?loc:loc -> ?attrs:attrs -> arg_label -> expression option -> - pattern -> class_expr -> class_expr - val apply: ?loc:loc -> ?attrs:attrs -> class_expr -> - (arg_label * expression) list -> class_expr - val let_: ?loc:loc -> ?attrs:attrs -> rec_flag -> value_binding list -> - class_expr -> class_expr - val constraint_: ?loc:loc -> ?attrs:attrs -> class_expr -> class_type -> - class_expr - val extension: ?loc:loc -> ?attrs:attrs -> extension -> class_expr - val open_: ?loc:loc -> ?attrs:attrs -> override_flag -> lid -> class_expr - -> class_expr - end - -(** Class fields *) -module Cf: - sig - val mk: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> class_field_desc -> - class_field - val attr: class_field -> attribute -> class_field - - val val_: ?loc:loc -> ?attrs:attrs -> str -> mutable_flag -> - class_field_kind -> class_field - val method_: ?loc:loc -> ?attrs:attrs -> str -> private_flag -> - class_field_kind -> class_field - val constraint_: ?loc:loc -> ?attrs:attrs -> core_type -> core_type -> - class_field - val initializer_: ?loc:loc -> ?attrs:attrs -> expression -> class_field - val extension: ?loc:loc -> ?attrs:attrs -> extension -> class_field - val attribute: ?loc:loc -> attribute -> class_field - val text: text -> class_field list - - val virtual_: core_type -> class_field_kind - val concrete: override_flag -> expression -> class_field_kind - - end - -(** Classes *) -module Ci: - sig - val mk: ?loc:loc -> ?attrs:attrs -> ?docs:docs -> ?text:text -> - ?virt:virtual_flag -> ?params:(core_type * variance) list -> - str -> 'a -> 'a class_infos - end - -(** Class signatures *) -module Csig: - sig - val mk: core_type -> class_type_field list -> class_signature - end - -(** Class structures *) -module Cstr: - sig - val mk: pattern -> class_field list -> class_structure - end diff --git a/src/compiler-libs-406/ast_mapper.ml b/src/compiler-libs-406/ast_mapper.ml deleted file mode 100644 index 439717d3..00000000 --- a/src/compiler-libs-406/ast_mapper.ml +++ /dev/null @@ -1,918 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Alain Frisch, LexiFi *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* A generic Parsetree mapping class *) - -(* -[@@@ocaml.warning "+9"] - (* Ensure that record patterns don't miss any field. *) -*) - - -open Parsetree -open Ast_helper -open Location - -type mapper = { - attribute: mapper -> attribute -> attribute; - attributes: mapper -> attribute list -> attribute list; - case: mapper -> case -> case; - cases: mapper -> case list -> case list; - class_description: mapper -> class_description -> class_description; - class_expr: mapper -> class_expr -> class_expr; - class_field: mapper -> class_field -> class_field; - class_signature: mapper -> class_signature -> class_signature; - class_structure: mapper -> class_structure -> class_structure; - class_type: mapper -> class_type -> class_type; - class_type_declaration: mapper -> class_type_declaration - -> class_type_declaration; - class_type_field: mapper -> class_type_field -> class_type_field; - constructor_declaration: mapper -> constructor_declaration - -> constructor_declaration; - expr: mapper -> expression -> expression; - extension: mapper -> extension -> extension; - extension_constructor: mapper -> extension_constructor - -> extension_constructor; - include_declaration: mapper -> include_declaration -> include_declaration; - include_description: mapper -> include_description -> include_description; - label_declaration: mapper -> label_declaration -> label_declaration; - location: mapper -> Location.t -> Location.t; - module_binding: mapper -> module_binding -> module_binding; - module_declaration: mapper -> module_declaration -> module_declaration; - module_expr: mapper -> module_expr -> module_expr; - module_type: mapper -> module_type -> module_type; - module_type_declaration: mapper -> module_type_declaration - -> module_type_declaration; - open_description: mapper -> open_description -> open_description; - pat: mapper -> pattern -> pattern; - payload: mapper -> payload -> payload; - signature: mapper -> signature -> signature; - signature_item: mapper -> signature_item -> signature_item; - structure: mapper -> structure -> structure; - structure_item: mapper -> structure_item -> structure_item; - typ: mapper -> core_type -> core_type; - type_declaration: mapper -> type_declaration -> type_declaration; - type_extension: mapper -> type_extension -> type_extension; - type_kind: mapper -> type_kind -> type_kind; - value_binding: mapper -> value_binding -> value_binding; - value_description: mapper -> value_description -> value_description; - with_constraint: mapper -> with_constraint -> with_constraint; -} - -let map_fst f (x, y) = (f x, y) -let map_snd f (x, y) = (x, f y) -let map_tuple f1 f2 (x, y) = (f1 x, f2 y) -let map_tuple3 f1 f2 f3 (x, y, z) = (f1 x, f2 y, f3 z) -let map_opt f = function None -> None | Some x -> Some (f x) - -let map_loc sub {loc; txt} = {loc = sub.location sub loc; txt} - -module T = struct - (* Type expressions for the core language *) - - let row_field sub = function - | Rtag (l, attrs, b, tl) -> - Rtag (map_loc sub l, sub.attributes sub attrs, - b, List.map (sub.typ sub) tl) - | Rinherit t -> Rinherit (sub.typ sub t) - - let object_field sub = function - | Otag (l, attrs, t) -> - Otag (map_loc sub l, sub.attributes sub attrs, sub.typ sub t) - | Oinherit t -> Oinherit (sub.typ sub t) - - let map sub {ptyp_desc = desc; ptyp_loc = loc; ptyp_attributes = attrs} = - let open Typ in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Ptyp_any -> any ~loc ~attrs () - | Ptyp_var s -> var ~loc ~attrs s - | Ptyp_arrow (lab, t1, t2) -> - arrow ~loc ~attrs lab (sub.typ sub t1) (sub.typ sub t2) - | Ptyp_tuple tyl -> tuple ~loc ~attrs (List.map (sub.typ sub) tyl) - | Ptyp_constr (lid, tl) -> - constr ~loc ~attrs (map_loc sub lid) (List.map (sub.typ sub) tl) - | Ptyp_object (l, o) -> - object_ ~loc ~attrs (List.map (object_field sub) l) o - | Ptyp_class (lid, tl) -> - class_ ~loc ~attrs (map_loc sub lid) (List.map (sub.typ sub) tl) - | Ptyp_alias (t, s) -> alias ~loc ~attrs (sub.typ sub t) s - | Ptyp_variant (rl, b, ll) -> - variant ~loc ~attrs (List.map (row_field sub) rl) b ll - | Ptyp_poly (sl, t) -> poly ~loc ~attrs - (List.map (map_loc sub) sl) (sub.typ sub t) - | Ptyp_package (lid, l) -> - package ~loc ~attrs (map_loc sub lid) - (List.map (map_tuple (map_loc sub) (sub.typ sub)) l) - | Ptyp_extension x -> extension ~loc ~attrs (sub.extension sub x) - - let map_type_declaration sub - {ptype_name; ptype_params; ptype_cstrs; - ptype_kind; - ptype_private; - ptype_manifest; - ptype_attributes; - ptype_loc} = - Type.mk (map_loc sub ptype_name) - ~params:(List.map (map_fst (sub.typ sub)) ptype_params) - ~priv:ptype_private - ~cstrs:(List.map - (map_tuple3 (sub.typ sub) (sub.typ sub) (sub.location sub)) - ptype_cstrs) - ~kind:(sub.type_kind sub ptype_kind) - ?manifest:(map_opt (sub.typ sub) ptype_manifest) - ~loc:(sub.location sub ptype_loc) - ~attrs:(sub.attributes sub ptype_attributes) - - let map_type_kind sub = function - | Ptype_abstract -> Ptype_abstract - | Ptype_variant l -> - Ptype_variant (List.map (sub.constructor_declaration sub) l) - | Ptype_record l -> Ptype_record (List.map (sub.label_declaration sub) l) - | Ptype_open -> Ptype_open - - let map_constructor_arguments sub = function - | Pcstr_tuple l -> Pcstr_tuple (List.map (sub.typ sub) l) - | Pcstr_record l -> - Pcstr_record (List.map (sub.label_declaration sub) l) - - let map_type_extension sub - {ptyext_path; ptyext_params; - ptyext_constructors; - ptyext_private; - ptyext_attributes} = - Te.mk - (map_loc sub ptyext_path) - (List.map (sub.extension_constructor sub) ptyext_constructors) - ~params:(List.map (map_fst (sub.typ sub)) ptyext_params) - ~priv:ptyext_private - ~attrs:(sub.attributes sub ptyext_attributes) - - let map_extension_constructor_kind sub = function - Pext_decl(ctl, cto) -> - Pext_decl(map_constructor_arguments sub ctl, map_opt (sub.typ sub) cto) - | Pext_rebind li -> - Pext_rebind (map_loc sub li) - - let map_extension_constructor sub - {pext_name; - pext_kind; - pext_loc; - pext_attributes} = - Te.constructor - (map_loc sub pext_name) - (map_extension_constructor_kind sub pext_kind) - ~loc:(sub.location sub pext_loc) - ~attrs:(sub.attributes sub pext_attributes) - -end - -module CT = struct - (* Type expressions for the class language *) - - let map sub {pcty_loc = loc; pcty_desc = desc; pcty_attributes = attrs} = - let open Cty in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Pcty_constr (lid, tys) -> - constr ~loc ~attrs (map_loc sub lid) (List.map (sub.typ sub) tys) - | Pcty_signature x -> signature ~loc ~attrs (sub.class_signature sub x) - | Pcty_arrow (lab, t, ct) -> - arrow ~loc ~attrs lab (sub.typ sub t) (sub.class_type sub ct) - | Pcty_extension x -> extension ~loc ~attrs (sub.extension sub x) - | Pcty_open (ovf, lid, ct) -> - open_ ~loc ~attrs ovf (map_loc sub lid) (sub.class_type sub ct) - - let map_field sub {pctf_desc = desc; pctf_loc = loc; pctf_attributes = attrs} - = - let open Ctf in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Pctf_inherit ct -> inherit_ ~loc ~attrs (sub.class_type sub ct) - | Pctf_val (s, m, v, t) -> - val_ ~loc ~attrs (map_loc sub s) m v (sub.typ sub t) - | Pctf_method (s, p, v, t) -> - method_ ~loc ~attrs (map_loc sub s) p v (sub.typ sub t) - | Pctf_constraint (t1, t2) -> - constraint_ ~loc ~attrs (sub.typ sub t1) (sub.typ sub t2) - | Pctf_attribute x -> attribute ~loc (sub.attribute sub x) - | Pctf_extension x -> extension ~loc ~attrs (sub.extension sub x) - - let map_signature sub {pcsig_self; pcsig_fields} = - Csig.mk - (sub.typ sub pcsig_self) - (List.map (sub.class_type_field sub) pcsig_fields) -end - -module MT = struct - (* Type expressions for the module language *) - - let map sub {pmty_desc = desc; pmty_loc = loc; pmty_attributes = attrs} = - let open Mty in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Pmty_ident s -> ident ~loc ~attrs (map_loc sub s) - | Pmty_alias s -> alias ~loc ~attrs (map_loc sub s) - | Pmty_signature sg -> signature ~loc ~attrs (sub.signature sub sg) - | Pmty_functor (s, mt1, mt2) -> - functor_ ~loc ~attrs (map_loc sub s) - (Misc.may_map (sub.module_type sub) mt1) - (sub.module_type sub mt2) - | Pmty_with (mt, l) -> - with_ ~loc ~attrs (sub.module_type sub mt) - (List.map (sub.with_constraint sub) l) - | Pmty_typeof me -> typeof_ ~loc ~attrs (sub.module_expr sub me) - | Pmty_extension x -> extension ~loc ~attrs (sub.extension sub x) - - let map_with_constraint sub = function - | Pwith_type (lid, d) -> - Pwith_type (map_loc sub lid, sub.type_declaration sub d) - | Pwith_module (lid, lid2) -> - Pwith_module (map_loc sub lid, map_loc sub lid2) - | Pwith_typesubst (lid, d) -> - Pwith_typesubst (map_loc sub lid, sub.type_declaration sub d) - | Pwith_modsubst (s, lid) -> - Pwith_modsubst (map_loc sub s, map_loc sub lid) - - let map_signature_item sub {psig_desc = desc; psig_loc = loc} = - let open Sig in - let loc = sub.location sub loc in - match desc with - | Psig_value vd -> value ~loc (sub.value_description sub vd) - | Psig_type (rf, l) -> type_ ~loc rf (List.map (sub.type_declaration sub) l) - | Psig_typext te -> type_extension ~loc (sub.type_extension sub te) - | Psig_exception ed -> exception_ ~loc (sub.extension_constructor sub ed) - | Psig_module x -> module_ ~loc (sub.module_declaration sub x) - | Psig_recmodule l -> - rec_module ~loc (List.map (sub.module_declaration sub) l) - | Psig_modtype x -> modtype ~loc (sub.module_type_declaration sub x) - | Psig_open x -> open_ ~loc (sub.open_description sub x) - | Psig_include x -> include_ ~loc (sub.include_description sub x) - | Psig_class l -> class_ ~loc (List.map (sub.class_description sub) l) - | Psig_class_type l -> - class_type ~loc (List.map (sub.class_type_declaration sub) l) - | Psig_extension (x, attrs) -> - extension ~loc (sub.extension sub x) ~attrs:(sub.attributes sub attrs) - | Psig_attribute x -> attribute ~loc (sub.attribute sub x) -end - - -module M = struct - (* Value expressions for the module language *) - - let map sub {pmod_loc = loc; pmod_desc = desc; pmod_attributes = attrs} = - let open Mod in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Pmod_ident x -> ident ~loc ~attrs (map_loc sub x) - | Pmod_structure str -> structure ~loc ~attrs (sub.structure sub str) - | Pmod_functor (arg, arg_ty, body) -> - functor_ ~loc ~attrs (map_loc sub arg) - (Misc.may_map (sub.module_type sub) arg_ty) - (sub.module_expr sub body) - | Pmod_apply (m1, m2) -> - apply ~loc ~attrs (sub.module_expr sub m1) (sub.module_expr sub m2) - | Pmod_constraint (m, mty) -> - constraint_ ~loc ~attrs (sub.module_expr sub m) - (sub.module_type sub mty) - | Pmod_unpack e -> unpack ~loc ~attrs (sub.expr sub e) - | Pmod_extension x -> extension ~loc ~attrs (sub.extension sub x) - - let map_structure_item sub {pstr_loc = loc; pstr_desc = desc} = - let open Str in - let loc = sub.location sub loc in - match desc with - | Pstr_eval (x, attrs) -> - eval ~loc ~attrs:(sub.attributes sub attrs) (sub.expr sub x) - | Pstr_value (r, vbs) -> value ~loc r (List.map (sub.value_binding sub) vbs) - | Pstr_primitive vd -> primitive ~loc (sub.value_description sub vd) - | Pstr_type (rf, l) -> type_ ~loc rf (List.map (sub.type_declaration sub) l) - | Pstr_typext te -> type_extension ~loc (sub.type_extension sub te) - | Pstr_exception ed -> exception_ ~loc (sub.extension_constructor sub ed) - | Pstr_module x -> module_ ~loc (sub.module_binding sub x) - | Pstr_recmodule l -> rec_module ~loc (List.map (sub.module_binding sub) l) - | Pstr_modtype x -> modtype ~loc (sub.module_type_declaration sub x) - | Pstr_open x -> open_ ~loc (sub.open_description sub x) - | Pstr_class () -> {pstr_loc = loc ; pstr_desc = Pstr_class ()} - | Pstr_class_type l -> - class_type ~loc (List.map (sub.class_type_declaration sub) l) - | Pstr_include x -> include_ ~loc (sub.include_declaration sub x) - | Pstr_extension (x, attrs) -> - extension ~loc (sub.extension sub x) ~attrs:(sub.attributes sub attrs) - | Pstr_attribute x -> attribute ~loc (sub.attribute sub x) -end - -module E = struct - (* Value expressions for the core language *) - - let map sub {pexp_loc = loc; pexp_desc = desc; pexp_attributes = attrs} = - let open Exp in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Pexp_ident x -> ident ~loc ~attrs (map_loc sub x) - | Pexp_constant x -> constant ~loc ~attrs x - | Pexp_let (r, vbs, e) -> - let_ ~loc ~attrs r (List.map (sub.value_binding sub) vbs) - (sub.expr sub e) - | Pexp_fun (lab, def, p, e) -> - fun_ ~loc ~attrs lab (map_opt (sub.expr sub) def) (sub.pat sub p) - (sub.expr sub e) - | Pexp_function pel -> function_ ~loc ~attrs (sub.cases sub pel) - | Pexp_apply (e, l) -> - apply ~loc ~attrs (sub.expr sub e) (List.map (map_snd (sub.expr sub)) l) - | Pexp_match (e, pel) -> - match_ ~loc ~attrs (sub.expr sub e) (sub.cases sub pel) - | Pexp_try (e, pel) -> try_ ~loc ~attrs (sub.expr sub e) (sub.cases sub pel) - | Pexp_tuple el -> tuple ~loc ~attrs (List.map (sub.expr sub) el) - | Pexp_construct (lid, arg) -> - construct ~loc ~attrs (map_loc sub lid) (map_opt (sub.expr sub) arg) - | Pexp_variant (lab, eo) -> - variant ~loc ~attrs lab (map_opt (sub.expr sub) eo) - | Pexp_record (l, eo) -> - record ~loc ~attrs (List.map (map_tuple (map_loc sub) (sub.expr sub)) l) - (map_opt (sub.expr sub) eo) - | Pexp_field (e, lid) -> - field ~loc ~attrs (sub.expr sub e) (map_loc sub lid) - | Pexp_setfield (e1, lid, e2) -> - setfield ~loc ~attrs (sub.expr sub e1) (map_loc sub lid) - (sub.expr sub e2) - | Pexp_array el -> array ~loc ~attrs (List.map (sub.expr sub) el) - | Pexp_ifthenelse (e1, e2, e3) -> - ifthenelse ~loc ~attrs (sub.expr sub e1) (sub.expr sub e2) - (map_opt (sub.expr sub) e3) - | Pexp_sequence (e1, e2) -> - sequence ~loc ~attrs (sub.expr sub e1) (sub.expr sub e2) - | Pexp_while (e1, e2) -> - while_ ~loc ~attrs (sub.expr sub e1) (sub.expr sub e2) - | Pexp_for (p, e1, e2, d, e3) -> - for_ ~loc ~attrs (sub.pat sub p) (sub.expr sub e1) (sub.expr sub e2) d - (sub.expr sub e3) - | Pexp_coerce (e, t1, t2) -> - coerce ~loc ~attrs (sub.expr sub e) (map_opt (sub.typ sub) t1) - (sub.typ sub t2) - | Pexp_constraint (e, t) -> - constraint_ ~loc ~attrs (sub.expr sub e) (sub.typ sub t) - | Pexp_send (e, s) -> - send ~loc ~attrs (sub.expr sub e) (map_loc sub s) - | Pexp_new lid -> new_ ~loc ~attrs (map_loc sub lid) - | Pexp_setinstvar (s, e) -> - setinstvar ~loc ~attrs (map_loc sub s) (sub.expr sub e) - | Pexp_override sel -> - override ~loc ~attrs - (List.map (map_tuple (map_loc sub) (sub.expr sub)) sel) - | Pexp_letmodule (s, me, e) -> - letmodule ~loc ~attrs (map_loc sub s) (sub.module_expr sub me) - (sub.expr sub e) - | Pexp_letexception (cd, e) -> - letexception ~loc ~attrs - (sub.extension_constructor sub cd) - (sub.expr sub e) - | Pexp_assert e -> assert_ ~loc ~attrs (sub.expr sub e) - | Pexp_lazy e -> lazy_ ~loc ~attrs (sub.expr sub e) - | Pexp_poly (e, t) -> - poly ~loc ~attrs (sub.expr sub e) (map_opt (sub.typ sub) t) - | Pexp_object cls -> object_ ~loc ~attrs (sub.class_structure sub cls) - | Pexp_newtype (s, e) -> - newtype ~loc ~attrs (map_loc sub s) (sub.expr sub e) - | Pexp_pack me -> pack ~loc ~attrs (sub.module_expr sub me) - | Pexp_open (ovf, lid, e) -> - open_ ~loc ~attrs ovf (map_loc sub lid) (sub.expr sub e) - | Pexp_extension x -> extension ~loc ~attrs (sub.extension sub x) - | Pexp_unreachable -> unreachable ~loc ~attrs () -end - -module P = struct - (* Patterns *) - - let map sub {ppat_desc = desc; ppat_loc = loc; ppat_attributes = attrs} = - let open Pat in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Ppat_any -> any ~loc ~attrs () - | Ppat_var s -> var ~loc ~attrs (map_loc sub s) - | Ppat_alias (p, s) -> alias ~loc ~attrs (sub.pat sub p) (map_loc sub s) - | Ppat_constant c -> constant ~loc ~attrs c - | Ppat_interval (c1, c2) -> interval ~loc ~attrs c1 c2 - | Ppat_tuple pl -> tuple ~loc ~attrs (List.map (sub.pat sub) pl) - | Ppat_construct (l, p) -> - construct ~loc ~attrs (map_loc sub l) (map_opt (sub.pat sub) p) - | Ppat_variant (l, p) -> variant ~loc ~attrs l (map_opt (sub.pat sub) p) - | Ppat_record (lpl, cf) -> - record ~loc ~attrs - (List.map (map_tuple (map_loc sub) (sub.pat sub)) lpl) cf - | Ppat_array pl -> array ~loc ~attrs (List.map (sub.pat sub) pl) - | Ppat_or (p1, p2) -> or_ ~loc ~attrs (sub.pat sub p1) (sub.pat sub p2) - | Ppat_constraint (p, t) -> - constraint_ ~loc ~attrs (sub.pat sub p) (sub.typ sub t) - | Ppat_type s -> type_ ~loc ~attrs (map_loc sub s) - | Ppat_lazy p -> lazy_ ~loc ~attrs (sub.pat sub p) - | Ppat_unpack s -> unpack ~loc ~attrs (map_loc sub s) - | Ppat_open (lid,p) -> open_ ~loc ~attrs (map_loc sub lid) (sub.pat sub p) - | Ppat_exception p -> exception_ ~loc ~attrs (sub.pat sub p) - | Ppat_extension x -> extension ~loc ~attrs (sub.extension sub x) -end - -module CE = struct - (* Value expressions for the class language *) - - let map sub {pcl_loc = loc; pcl_desc = desc; pcl_attributes = attrs} = - let open Cl in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Pcl_constr (lid, tys) -> - constr ~loc ~attrs (map_loc sub lid) (List.map (sub.typ sub) tys) - | Pcl_structure s -> - structure ~loc ~attrs (sub.class_structure sub s) - | Pcl_fun (lab, e, p, ce) -> - fun_ ~loc ~attrs lab - (map_opt (sub.expr sub) e) - (sub.pat sub p) - (sub.class_expr sub ce) - | Pcl_apply (ce, l) -> - apply ~loc ~attrs (sub.class_expr sub ce) - (List.map (map_snd (sub.expr sub)) l) - | Pcl_let (r, vbs, ce) -> - let_ ~loc ~attrs r (List.map (sub.value_binding sub) vbs) - (sub.class_expr sub ce) - | Pcl_constraint (ce, ct) -> - constraint_ ~loc ~attrs (sub.class_expr sub ce) (sub.class_type sub ct) - | Pcl_extension x -> extension ~loc ~attrs (sub.extension sub x) - | Pcl_open (ovf, lid, ce) -> - open_ ~loc ~attrs ovf (map_loc sub lid) (sub.class_expr sub ce) - - let map_kind sub = function - | Cfk_concrete (o, e) -> Cfk_concrete (o, sub.expr sub e) - | Cfk_virtual t -> Cfk_virtual (sub.typ sub t) - - let map_field sub {pcf_desc = desc; pcf_loc = loc; pcf_attributes = attrs} = - let open Cf in - let loc = sub.location sub loc in - let attrs = sub.attributes sub attrs in - match desc with - | Pcf_inherit () -> - {pcf_desc = desc; pcf_loc = loc; pcf_attributes = attrs} - | Pcf_val (s, m, k) -> val_ ~loc ~attrs (map_loc sub s) m (map_kind sub k) - | Pcf_method (s, p, k) -> - method_ ~loc ~attrs (map_loc sub s) p (map_kind sub k) - | Pcf_constraint (t1, t2) -> - constraint_ ~loc ~attrs (sub.typ sub t1) (sub.typ sub t2) - | Pcf_initializer e -> initializer_ ~loc ~attrs (sub.expr sub e) - | Pcf_attribute x -> attribute ~loc (sub.attribute sub x) - | Pcf_extension x -> extension ~loc ~attrs (sub.extension sub x) - - let map_structure sub {pcstr_self; pcstr_fields} = - { - pcstr_self = sub.pat sub pcstr_self; - pcstr_fields = List.map (sub.class_field sub) pcstr_fields; - } - - let class_infos sub f {pci_virt; pci_params = pl; pci_name; pci_expr; - pci_loc; pci_attributes} = - Ci.mk - ~virt:pci_virt - ~params:(List.map (map_fst (sub.typ sub)) pl) - (map_loc sub pci_name) - (f pci_expr) - ~loc:(sub.location sub pci_loc) - ~attrs:(sub.attributes sub pci_attributes) -end - -(* Now, a generic AST mapper, to be extended to cover all kinds and - cases of the OCaml grammar. The default behavior of the mapper is - the identity. *) - -let default_mapper = - { - structure = (fun this l -> List.map (this.structure_item this) l); - structure_item = M.map_structure_item; - module_expr = M.map; - signature = (fun this l -> List.map (this.signature_item this) l); - signature_item = MT.map_signature_item; - module_type = MT.map; - with_constraint = MT.map_with_constraint; - class_expr = CE.map; - class_field = CE.map_field; - class_structure = CE.map_structure; - class_type = CT.map; - class_type_field = CT.map_field; - class_signature = CT.map_signature; - class_type_declaration = - (fun this -> CE.class_infos this (this.class_type this)); - class_description = - (fun this -> CE.class_infos this (this.class_type this)); - type_declaration = T.map_type_declaration; - type_kind = T.map_type_kind; - typ = T.map; - type_extension = T.map_type_extension; - extension_constructor = T.map_extension_constructor; - value_description = - (fun this {pval_name; pval_type; pval_prim; pval_loc; - pval_attributes} -> - Val.mk - (map_loc this pval_name) - (this.typ this pval_type) - ~attrs:(this.attributes this pval_attributes) - ~loc:(this.location this pval_loc) - ~prim:pval_prim - ); - - pat = P.map; - expr = E.map; - - module_declaration = - (fun this {pmd_name; pmd_type; pmd_attributes; pmd_loc} -> - Md.mk - (map_loc this pmd_name) - (this.module_type this pmd_type) - ~attrs:(this.attributes this pmd_attributes) - ~loc:(this.location this pmd_loc) - ); - - module_type_declaration = - (fun this {pmtd_name; pmtd_type; pmtd_attributes; pmtd_loc} -> - Mtd.mk - (map_loc this pmtd_name) - ?typ:(map_opt (this.module_type this) pmtd_type) - ~attrs:(this.attributes this pmtd_attributes) - ~loc:(this.location this pmtd_loc) - ); - - module_binding = - (fun this {pmb_name; pmb_expr; pmb_attributes; pmb_loc} -> - Mb.mk (map_loc this pmb_name) (this.module_expr this pmb_expr) - ~attrs:(this.attributes this pmb_attributes) - ~loc:(this.location this pmb_loc) - ); - - - open_description = - (fun this {popen_lid; popen_override; popen_attributes; popen_loc} -> - Opn.mk (map_loc this popen_lid) - ~override:popen_override - ~loc:(this.location this popen_loc) - ~attrs:(this.attributes this popen_attributes) - ); - - - include_description = - (fun this {pincl_mod; pincl_attributes; pincl_loc} -> - Incl.mk (this.module_type this pincl_mod) - ~loc:(this.location this pincl_loc) - ~attrs:(this.attributes this pincl_attributes) - ); - - include_declaration = - (fun this {pincl_mod; pincl_attributes; pincl_loc} -> - Incl.mk (this.module_expr this pincl_mod) - ~loc:(this.location this pincl_loc) - ~attrs:(this.attributes this pincl_attributes) - ); - - - value_binding = - (fun this {pvb_pat; pvb_expr; pvb_attributes; pvb_loc} -> - Vb.mk - (this.pat this pvb_pat) - (this.expr this pvb_expr) - ~loc:(this.location this pvb_loc) - ~attrs:(this.attributes this pvb_attributes) - ); - - - constructor_declaration = - (fun this {pcd_name; pcd_args; pcd_res; pcd_loc; pcd_attributes} -> - Type.constructor - (map_loc this pcd_name) - ~args:(T.map_constructor_arguments this pcd_args) - ?res:(map_opt (this.typ this) pcd_res) - ~loc:(this.location this pcd_loc) - ~attrs:(this.attributes this pcd_attributes) - ); - - label_declaration = - (fun this {pld_name; pld_type; pld_loc; pld_mutable; pld_attributes} -> - Type.field - (map_loc this pld_name) - (this.typ this pld_type) - ~mut:pld_mutable - ~loc:(this.location this pld_loc) - ~attrs:(this.attributes this pld_attributes) - ); - - cases = (fun this l -> List.map (this.case this) l); - case = - (fun this {pc_lhs; pc_guard; pc_rhs} -> - { - pc_lhs = this.pat this pc_lhs; - pc_guard = map_opt (this.expr this) pc_guard; - pc_rhs = this.expr this pc_rhs; - } - ); - - - - location = (fun _this l -> l); - - extension = (fun this (s, e) -> (map_loc this s, this.payload this e)); - attribute = (fun this (s, e) -> (map_loc this s, this.payload this e)); - attributes = (fun this l -> List.map (this.attribute this) l); - payload = - (fun this -> function - | PStr x -> PStr (this.structure this x) - | PSig x -> PSig (this.signature this x) - | PTyp x -> PTyp (this.typ this x) - | PPat (x, g) -> PPat (this.pat this x, map_opt (this.expr this) g) - ); - } - -let rec extension_of_error {loc; msg; if_highlight; sub} = - { loc; txt = "ocaml.error" }, - PStr ([Str.eval (Exp.constant (Pconst_string (msg, None))); - Str.eval (Exp.constant (Pconst_string (if_highlight, None)))] @ - (List.map (fun ext -> Str.extension (extension_of_error ext)) sub)) - -let attribute_of_warning loc s = - { loc; txt = "ocaml.ppwarning" }, - PStr ([Str.eval ~loc (Exp.constant (Pconst_string (s, None)))]) - -module StringMap = Map.Make(struct - type t = string - let compare = compare -end) - -let cookies = ref StringMap.empty - -let get_cookie k = - try Some (StringMap.find k !cookies) - with Not_found -> None - -let set_cookie k v = - cookies := StringMap.add k v !cookies - -let tool_name_ref = ref "_none_" - -let tool_name () = !tool_name_ref - - -module PpxContext = struct - open Longident - open Asttypes - open Ast_helper - - let lid name = { txt = Lident name; loc = Location.none } - - let make_string x = Exp.constant (Pconst_string (x, None)) - - let make_bool x = - if x - then Exp.construct (lid "true") None - else Exp.construct (lid "false") None - - let rec make_list f lst = - match lst with - | x :: rest -> - Exp.construct (lid "::") (Some (Exp.tuple [f x; make_list f rest])) - | [] -> - Exp.construct (lid "[]") None - - let make_pair f1 f2 (x1, x2) = - Exp.tuple [f1 x1; f2 x2] - - - let get_cookies () = - lid "cookies", - make_list (make_pair make_string (fun x -> x)) - (StringMap.bindings !cookies) - - let mk fields = - { txt = "ocaml.ppx.context"; loc = Location.none }, - Parsetree.PStr [Str.eval (Exp.record fields None)] - - let make ~tool_name () = - let fields = - [ - lid "tool_name", make_string tool_name; - lid "include_dirs", make_list make_string !Clflags.include_dirs; - lid "load_path", make_list make_string !Config.load_path; - lid "open_modules", make_list make_string !Clflags.open_modules; - lid "debug", make_bool !Clflags.debug; - get_cookies () - ] - in - mk fields - - let get_fields = function - | PStr [{pstr_desc = Pstr_eval - ({ pexp_desc = Pexp_record (fields, None) }, [])}] -> - fields - | _ -> - raise_errorf "Internal error: invalid [@@@ocaml.ppx.context] syntax" - - let restore fields = - let field name payload = - let rec get_string = function - | { pexp_desc = Pexp_constant (Pconst_string (str, None)) } -> str - | _ -> raise_errorf "Internal error: invalid [@@@ocaml.ppx.context \ - { %s }] string syntax" name - and get_bool pexp = - match pexp with - | {pexp_desc = Pexp_construct ({txt = Longident.Lident "true"}, - None)} -> - true - | {pexp_desc = Pexp_construct ({txt = Longident.Lident "false"}, - None)} -> - false - | _ -> raise_errorf "Internal error: invalid [@@@ocaml.ppx.context \ - { %s }] bool syntax" name - and get_list elem = function - | {pexp_desc = - Pexp_construct ({txt = Longident.Lident "::"}, - Some {pexp_desc = Pexp_tuple [exp; rest]}) } -> - elem exp :: get_list elem rest - | {pexp_desc = - Pexp_construct ({txt = Longident.Lident "[]"}, None)} -> - [] - | _ -> raise_errorf "Internal error: invalid [@@@ocaml.ppx.context \ - { %s }] list syntax" name - and get_pair f1 f2 = function - | {pexp_desc = Pexp_tuple [e1; e2]} -> - (f1 e1, f2 e2) - | _ -> raise_errorf "Internal error: invalid [@@@ocaml.ppx.context \ - { %s }] pair syntax" name - in - match name with - | "tool_name" -> - tool_name_ref := get_string payload - | "include_dirs" -> - Clflags.include_dirs := get_list get_string payload - | "load_path" -> - Config.load_path := get_list get_string payload - | "open_modules" -> - Clflags.open_modules := get_list get_string payload - | "debug" -> - Clflags.debug := get_bool payload - | "cookies" -> - let l = get_list (get_pair get_string (fun x -> x)) payload in - cookies := - List.fold_left - (fun s (k, v) -> StringMap.add k v s) StringMap.empty - l - | _ -> - () - in - List.iter (function ({txt=Lident name}, x) -> field name x | _ -> ()) fields - - let update_cookies fields = - let fields = - List.filter - (function ({txt=Lident "cookies"}, _) -> false | _ -> true) - fields - in - fields @ [get_cookies ()] -end - -let ppx_context = PpxContext.make - -let extension_of_exn exn = - match error_of_exn exn with - | Some (`Ok error) -> extension_of_error error - | Some `Already_displayed -> { loc = Location.none; txt = "ocaml.error" }, PStr [] - | None -> raise exn - - -let apply_lazy ~source ~target mapper = - let implem ast = - let fields, ast = - match ast with - | {pstr_desc = Pstr_attribute ({txt = "ocaml.ppx.context"}, x)} :: l -> - PpxContext.get_fields x, l - | _ -> [], ast - in - PpxContext.restore fields; - let ast = - try - let mapper = mapper () in - mapper.structure mapper ast - with exn -> - [{pstr_desc = Pstr_extension (extension_of_exn exn, []); - pstr_loc = Location.none}] - in - let fields = PpxContext.update_cookies fields in - Str.attribute (PpxContext.mk fields) :: ast - in - let iface ast = - let fields, ast = - match ast with - | {psig_desc = Psig_attribute ({txt = "ocaml.ppx.context"}, x)} :: l -> - PpxContext.get_fields x, l - | _ -> [], ast - in - PpxContext.restore fields; - let ast = - try - let mapper = mapper () in - mapper.signature mapper ast - with exn -> - [{psig_desc = Psig_extension (extension_of_exn exn, []); - psig_loc = Location.none}] - in - let fields = PpxContext.update_cookies fields in - Sig.attribute (PpxContext.mk fields) :: ast - in - - let ic = open_in_bin source in - let magic = - really_input_string ic (String.length Config.ast_impl_magic_number) - in - - let rewrite transform = - Location.set_input_name @@ input_value ic; - let ast = input_value ic in - close_in ic; - let ast = transform ast in - let oc = open_out_bin target in - output_string oc magic; - output_value oc !Location.input_name; - output_value oc ast; - close_out oc - and fail () = - close_in ic; - failwith "Ast_mapper: OCaml version mismatch or malformed input"; - in - - if magic = Config.ast_impl_magic_number then - rewrite (implem : structure -> structure) - else if magic = Config.ast_intf_magic_number then - rewrite (iface : signature -> signature) - else fail () - -let drop_ppx_context_str ~restore = function - | {pstr_desc = Pstr_attribute({Location.txt = "ocaml.ppx.context"}, a)} - :: items -> - if restore then - PpxContext.restore (PpxContext.get_fields a); - items - | items -> items - -let drop_ppx_context_sig ~restore = function - | {psig_desc = Psig_attribute({Location.txt = "ocaml.ppx.context"}, a)} - :: items -> - if restore then - PpxContext.restore (PpxContext.get_fields a); - items - | items -> items - -let add_ppx_context_str ~tool_name ast = - Ast_helper.Str.attribute (ppx_context ~tool_name ()) :: ast - -let add_ppx_context_sig ~tool_name ast = - Ast_helper.Sig.attribute (ppx_context ~tool_name ()) :: ast - - -let apply ~source ~target mapper = - apply_lazy ~source ~target (fun () -> mapper) - -let run_main mapper = - try - let a = Sys.argv in - let n = Array.length a in - if n > 2 then - let mapper () = - try mapper (Array.to_list (Array.sub a 1 (n - 3))) - with exn -> - (* PR#6463 *) - let f _ _ = raise exn in - {default_mapper with structure = f; signature = f} - in - apply_lazy ~source:a.(n - 2) ~target:a.(n - 1) mapper - else begin - Printf.eprintf "Usage: %s [extra_args] \n%!" - Sys.executable_name; - exit 2 - end - with exn -> - prerr_endline (Printexc.to_string exn); - exit 2 - -let register_function = ref (fun _name f -> run_main f) -let register name f = !register_function name f diff --git a/src/compiler-libs-406/ast_mapper.mli b/src/compiler-libs-406/ast_mapper.mli deleted file mode 100644 index 75d33e61..00000000 --- a/src/compiler-libs-406/ast_mapper.mli +++ /dev/null @@ -1,199 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Alain Frisch, LexiFi *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** The interface of a -ppx rewriter - - A -ppx rewriter is a program that accepts a serialized abstract syntax - tree and outputs another, possibly modified, abstract syntax tree. - This module encapsulates the interface between the compiler and - the -ppx rewriters, handling such details as the serialization format, - forwarding of command-line flags, and storing state. - - {!mapper} allows to implement AST rewriting using open recursion. - A typical mapper would be based on {!default_mapper}, a deep - identity mapper, and will fall back on it for handling the syntax it - does not modify. For example: - - {[ -open Asttypes -open Parsetree -open Ast_mapper - -let test_mapper argv = - { default_mapper with - expr = fun mapper expr -> - match expr with - | { pexp_desc = Pexp_extension ({ txt = "test" }, PStr [])} -> - Ast_helper.Exp.constant (Const_int 42) - | other -> default_mapper.expr mapper other; } - -let () = - register "ppx_test" test_mapper]} - - This -ppx rewriter, which replaces [[%test]] in expressions with - the constant [42], can be compiled using - [ocamlc -o ppx_test -I +compiler-libs ocamlcommon.cma ppx_test.ml]. - - *) - -open Parsetree - -(** {1 A generic Parsetree mapper} *) - -type mapper = { - attribute: mapper -> attribute -> attribute; - attributes: mapper -> attribute list -> attribute list; - case: mapper -> case -> case; - cases: mapper -> case list -> case list; - class_description: mapper -> class_description -> class_description; - class_expr: mapper -> class_expr -> class_expr; - class_field: mapper -> class_field -> class_field; - class_signature: mapper -> class_signature -> class_signature; - class_structure: mapper -> class_structure -> class_structure; - class_type: mapper -> class_type -> class_type; - class_type_declaration: mapper -> class_type_declaration - -> class_type_declaration; - class_type_field: mapper -> class_type_field -> class_type_field; - constructor_declaration: mapper -> constructor_declaration - -> constructor_declaration; - expr: mapper -> expression -> expression; - extension: mapper -> extension -> extension; - extension_constructor: mapper -> extension_constructor - -> extension_constructor; - include_declaration: mapper -> include_declaration -> include_declaration; - include_description: mapper -> include_description -> include_description; - label_declaration: mapper -> label_declaration -> label_declaration; - location: mapper -> Location.t -> Location.t; - module_binding: mapper -> module_binding -> module_binding; - module_declaration: mapper -> module_declaration -> module_declaration; - module_expr: mapper -> module_expr -> module_expr; - module_type: mapper -> module_type -> module_type; - module_type_declaration: mapper -> module_type_declaration - -> module_type_declaration; - open_description: mapper -> open_description -> open_description; - pat: mapper -> pattern -> pattern; - payload: mapper -> payload -> payload; - signature: mapper -> signature -> signature; - signature_item: mapper -> signature_item -> signature_item; - structure: mapper -> structure -> structure; - structure_item: mapper -> structure_item -> structure_item; - typ: mapper -> core_type -> core_type; - type_declaration: mapper -> type_declaration -> type_declaration; - type_extension: mapper -> type_extension -> type_extension; - type_kind: mapper -> type_kind -> type_kind; - value_binding: mapper -> value_binding -> value_binding; - value_description: mapper -> value_description -> value_description; - with_constraint: mapper -> with_constraint -> with_constraint; -} -(** A mapper record implements one "method" per syntactic category, - using an open recursion style: each method takes as its first - argument the mapper to be applied to children in the syntax - tree. *) - -val default_mapper: mapper -(** A default mapper, which implements a "deep identity" mapping. *) - -(** {1 Apply mappers to compilation units} *) - -val tool_name: unit -> string -(** Can be used within a ppx preprocessor to know which tool is - calling it ["ocamlc"], ["ocamlopt"], ["ocamldoc"], ["ocamldep"], - ["ocaml"], ... Some global variables that reflect command-line - options are automatically synchronized between the calling tool - and the ppx preprocessor: {!Clflags.include_dirs}, - {!Config.load_path}, {!Clflags.open_modules}, {!Clflags.for_package}, - {!Clflags.debug}. *) - - -val apply: source:string -> target:string -> mapper -> unit -(** Apply a mapper (parametrized by the unit name) to a dumped - parsetree found in the [source] file and put the result in the - [target] file. The [structure] or [signature] field of the mapper - is applied to the implementation or interface. *) - -val run_main: (string list -> mapper) -> unit -(** Entry point to call to implement a standalone -ppx rewriter from a - mapper, parametrized by the command line arguments. The current - unit name can be obtained from {!Location.input_name}. This - function implements proper error reporting for uncaught - exceptions. *) - -(** {1 Registration API} *) - -val register_function: (string -> (string list -> mapper) -> unit) ref - -val register: string -> (string list -> mapper) -> unit -(** Apply the [register_function]. The default behavior is to run the - mapper immediately, taking arguments from the process command - line. This is to support a scenario where a mapper is linked as a - stand-alone executable. - - It is possible to overwrite the [register_function] to define - "-ppx drivers", which combine several mappers in a single process. - Typically, a driver starts by defining [register_function] to a - custom implementation, then lets ppx rewriters (linked statically - or dynamically) register themselves, and then run all or some of - them. It is also possible to have -ppx drivers apply rewriters to - only specific parts of an AST. - - The first argument to [register] is a symbolic name to be used by - the ppx driver. *) - - -(** {1 Convenience functions to write mappers} *) - -val map_opt: ('a -> 'b) -> 'a option -> 'b option - -val extension_of_error: Location.error -> extension -(** Encode an error into an 'ocaml.error' extension node which can be - inserted in a generated Parsetree. The compiler will be - responsible for reporting the error. *) - -val attribute_of_warning: Location.t -> string -> attribute -(** Encode a warning message into an 'ocaml.ppwarning' attribute which can be - inserted in a generated Parsetree. The compiler will be - responsible for reporting the warning. *) - -(** {1 Helper functions to call external mappers} *) - -val add_ppx_context_str: - tool_name:string -> Parsetree.structure -> Parsetree.structure -(** Extract information from the current environment and encode it - into an attribute which is prepended to the list of structure - items in order to pass the information to an external - processor. *) - -val add_ppx_context_sig: - tool_name:string -> Parsetree.signature -> Parsetree.signature -(** Same as [add_ppx_context_str], but for signatures. *) - -val drop_ppx_context_str: - restore:bool -> Parsetree.structure -> Parsetree.structure -(** Drop the ocaml.ppx.context attribute from a structure. If - [restore] is true, also restore the associated data in the current - process. *) - -val drop_ppx_context_sig: - restore:bool -> Parsetree.signature -> Parsetree.signature -(** Same as [drop_ppx_context_str], but for signatures. *) - -(** {1 Cookies} *) - -(** Cookies are used to pass information from a ppx processor to - a further invocation of itself, when called from the OCaml - toplevel (or other tools that support cookies). *) - -val set_cookie: string -> Parsetree.expression -> unit -val get_cookie: string -> Parsetree.expression option diff --git a/src/compiler-libs-406/asttypes.mli b/src/compiler-libs-406/asttypes.mli deleted file mode 100644 index 8cab1c6b..00000000 --- a/src/compiler-libs-406/asttypes.mli +++ /dev/null @@ -1,58 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Auxiliary AST types used by parsetree and typedtree. *) - -type constant = - Const_int of int - | Const_char of char - | Const_string of string * string option - | Const_float of string - | Const_int32 of int32 - | Const_int64 of int64 - | Const_nativeint of nativeint - -type rec_flag = Nonrecursive | Recursive - -type direction_flag = Upto | Downto - -(* Order matters, used in polymorphic comparison *) -type private_flag = Private | Public - -type mutable_flag = Immutable | Mutable - -type virtual_flag = Virtual | Concrete - -type override_flag = Override | Fresh - -type closed_flag = Closed | Open - -type label = string - -type arg_label = - Nolabel - | Labelled of string (* label:T -> ... *) - | Optional of string (* ?label:T -> ... *) - -type 'a loc = 'a Location.loc = { - txt : 'a; - loc : Location.t; -} - - -type variance = - | Covariant - | Contravariant - | Invariant diff --git a/src/compiler-libs-406/bsc_warnings.ml b/src/compiler-libs-406/bsc_warnings.ml deleted file mode 100644 index 1dc1fe28..00000000 --- a/src/compiler-libs-406/bsc_warnings.ml +++ /dev/null @@ -1,77 +0,0 @@ -(* Copyright (C) 2020- Hongbo Zhang, Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - - - -(** - See the meanings of the warning codes here: https://caml.inria.fr/pub/docs/manual-ocaml/comp.html#sec281 - - - 30 Two labels or constructors of the same name are defined in two mutually recursive types. - - 40 Constructor or label name used out of scope. - - - 6 Label omitted in function application. - - 7 Method overridden. - - 9 Missing fields in a record pattern. (*Not always desired, in some cases need [@@@warning "+9"] *) - - 27 Innocuous unused variable: unused variable that is not bound with let nor as, and doesn’t start with an underscore (_) character. - - 29 Unescaped end-of-line in a string constant (non-portable code). - - 32 .. 39 Unused blabla - - 44 Open statement shadows an already defined identifier. - - 45 Open statement shadows an already defined label or constructor. - - 48 Implicit elimination of optional arguments. https://caml.inria.fr/mantis/view.php?id=6352 - - 101 (bsb-specific) unsafe polymorphic comparison. -*) - - -(* - The purpose of default warning set is to make it strict while - not annoy user too much - - -4 Fragile pattern matching: matching that will remain complete even if additional con- structors are added to one of the variant types matched. - We turn it off since common pattern - {[ - match x with | A -> .. | _ -> false - ]} - - -9 Missing fields in a record pattern. - only in some special cases that we need all fields being listed - - We encourage people to write code based on type based disambigution - 40,41,42 are enabled for compatiblity reasons - -40 Constructor or label name used out of scope - This is intentional, we should never warn it - - 41 Ambiguous constructor or label name. - It is turned off since it prevents such cases below: - {[ - type a = A |B - type b = A | B | C - ]} - - 42 Disambiguated constructor or label name (compatibility warning). - - - 50 Unexpected documentation comment. - - - 102 Bs_polymorphic_comparison -*) -let defaults_w = "+a-4-9-20-40-41-42-50-61-102" -let defaults_warn_error = "-a+5+6+101+109";; -(*TODO: add +10*) \ No newline at end of file diff --git a/src/compiler-libs-406/btype.ml b/src/compiler-libs-406/btype.ml deleted file mode 100644 index d94693b1..00000000 --- a/src/compiler-libs-406/btype.ml +++ /dev/null @@ -1,737 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy and Jerome Vouillon, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Basic operations on core types *) - -open Misc -open Asttypes -open Types - -(**** Sets, maps and hashtables of types ****) - -module TypeSet = Set.Make(TypeOps) -module TypeMap = Map.Make (TypeOps) -module TypeHash = Hashtbl.Make(TypeOps) - -(**** Forward declarations ****) - -let print_raw = - ref (fun _ -> assert false : Format.formatter -> type_expr -> unit) - -(**** Type level management ****) - -let generic_level = 100000000 - -(* Used to mark a type during a traversal. *) -let lowest_level = 0 -let pivot_level = 2 * lowest_level - 1 - (* pivot_level - lowest_level < lowest_level *) - -(**** Some type creators ****) - -let new_id = ref (-1) - -let newty2 level desc = - incr new_id; { desc; level; id = !new_id } -let newgenty desc = newty2 generic_level desc -let newgenvar ?name () = newgenty (Tvar name) -(* -let newmarkedvar level = - incr new_id; { desc = Tvar; level = pivot_level - level; id = !new_id } -let newmarkedgenvar () = - incr new_id; - { desc = Tvar; level = pivot_level - generic_level; id = !new_id } -*) - -(**** Check some types ****) - -let is_Tvar = function {desc=Tvar _} -> true | _ -> false -let is_Tunivar = function {desc=Tunivar _} -> true | _ -> false -let is_Tconstr = function {desc=Tconstr _} -> true | _ -> false - -let dummy_method = "*dummy method*" -let default_mty = function - Some mty -> mty - | None -> Mty_signature [] - -(**** Definitions for backtracking ****) - -type change = - Ctype of type_expr * type_desc - | Ccompress of type_expr * type_desc * type_desc - | Clevel of type_expr * int - | Cname of - (Path.t * type_expr list) option ref * (Path.t * type_expr list) option - | Crow of row_field option ref * row_field option - | Ckind of field_kind option ref * field_kind option - | Ccommu of commutable ref * commutable - | Cuniv of type_expr option ref * type_expr option - | Ctypeset of TypeSet.t ref * TypeSet.t - -type changes = - Change of change * changes ref - | Unchanged - | Invalid - -let trail = Weak.create 1 - -let log_change ch = - match Weak.get trail 0 with None -> () - | Some r -> - let r' = ref Unchanged in - r := Change (ch, r'); - Weak.set trail 0 (Some r') - -(**** Representative of a type ****) - -let rec field_kind_repr = - function - Fvar {contents = Some kind} -> field_kind_repr kind - | kind -> kind - -let rec repr_link compress t d = - function - {desc = Tlink t' as d'} -> - repr_link true t d' t' - | {desc = Tfield (_, k, _, t') as d'} when field_kind_repr k = Fabsent -> - repr_link true t d' t' - | t' -> - if compress then begin - log_change (Ccompress (t, t.desc, d)); t.desc <- d - end; - t' - -let repr t = - match t.desc with - Tlink t' as d -> - repr_link false t d t' - | Tfield (_, k, _, t') as d when field_kind_repr k = Fabsent -> - repr_link false t d t' - | _ -> t - -let rec commu_repr = function - Clink r when !r <> Cunknown -> commu_repr !r - | c -> c - -let rec row_field_repr_aux tl = function - Reither(_, tl', _, {contents = Some fi}) -> - row_field_repr_aux (tl@tl') fi - | Reither(c, tl', m, r) -> - Reither(c, tl@tl', m, r) - | Rpresent (Some _) when tl <> [] -> - Rpresent (Some (List.hd tl)) - | fi -> fi - -let row_field_repr fi = row_field_repr_aux [] fi - -let rec rev_concat l ll = - match ll with - [] -> l - | l'::ll -> rev_concat (l'@l) ll - -let rec row_repr_aux ll row = - match (repr row.row_more).desc with - | Tvariant row' -> - let f = row.row_fields in - row_repr_aux (if f = [] then ll else f::ll) row' - | _ -> - if ll = [] then row else - {row with row_fields = rev_concat row.row_fields ll} - -let row_repr row = row_repr_aux [] row - -let rec row_field tag row = - let rec find = function - | (tag',f) :: fields -> - if tag = tag' then row_field_repr f else find fields - | [] -> - match repr row.row_more with - | {desc=Tvariant row'} -> row_field tag row' - | _ -> Rabsent - in find row.row_fields - -let rec row_more row = - match repr row.row_more with - | {desc=Tvariant row'} -> row_more row' - | ty -> ty - -let row_fixed row = - let row = row_repr row in - row.row_fixed || - match (repr row.row_more).desc with - Tvar _ | Tnil -> false - | Tunivar _ | Tconstr _ -> true - | _ -> assert false - -let static_row row = - let row = row_repr row in - row.row_closed && - List.for_all - (fun (_,f) -> match row_field_repr f with Reither _ -> false | _ -> true) - row.row_fields - -let hash_variant s = - let accu = ref 0 in - for i = 0 to String.length s - 1 do - accu := 223 * !accu + Char.code s.[i] - done; - (* reduce to 31 bits *) - accu := !accu land (1 lsl 31 - 1); - (* make it signed for 64 bits architectures *) - if !accu > 0x3FFFFFFF then !accu - (1 lsl 31) else !accu - -let proxy ty = - let ty0 = repr ty in - match ty0.desc with - | Tvariant row when not (static_row row) -> - row_more row - | Tobject (ty, _) -> - let rec proxy_obj ty = - match ty.desc with - Tfield (_, _, _, ty) | Tlink ty -> proxy_obj ty - | Tvar _ | Tunivar _ | Tconstr _ -> ty - | Tnil -> ty0 - | _ -> assert false - in proxy_obj ty - | _ -> ty0 - -(**** Utilities for fixed row private types ****) - -let row_of_type t = - match (repr t).desc with - Tobject(t,_) -> - let rec get_row t = - let t = repr t in - match t.desc with - Tfield(_,_,_,t) -> get_row t - | _ -> t - in get_row t - | Tvariant row -> - row_more row - | _ -> - t - -let has_constr_row t = - not (is_Tconstr t) && is_Tconstr (row_of_type t) - -let is_row_name s = - let l = String.length s in - if l < 4 then false else String.sub s (l-4) 4 = "#row" - -let is_constr_row ~allow_ident t = - match t.desc with - Tconstr (Path.Pident id, _, _) when allow_ident -> - is_row_name (Ident.name id) - | Tconstr (Path.Pdot (_, s, _), _, _) -> is_row_name s - | _ -> false - - - (**********************************) - (* Utilities for type traversal *) - (**********************************) - -let rec iter_row f row = - List.iter - (fun (_, fi) -> - match row_field_repr fi with - | Rpresent(Some ty) -> f ty - | Reither(_, tl, _, _) -> List.iter f tl - | _ -> ()) - row.row_fields; - match (repr row.row_more).desc with - Tvariant row -> iter_row f row - | Tvar _ | Tunivar _ | Tsubst _ | Tconstr _ | Tnil -> - Misc.may (fun (_,l) -> List.iter f l) row.row_name - | _ -> assert false - -let iter_type_expr f ty = - match ty.desc with - Tvar _ -> () - | Tarrow (_, ty1, ty2, _) -> f ty1; f ty2 - | Ttuple l -> List.iter f l - | Tconstr (_, l, _) -> List.iter f l - | Tobject(ty, {contents = Some (_, p)}) - -> f ty; List.iter f p - | Tobject (ty, _) -> f ty - | Tvariant row -> iter_row f row; f (row_more row) - | Tfield (_, _, ty1, ty2) -> f ty1; f ty2 - | Tnil -> () - | Tlink ty -> f ty - | Tsubst ty -> f ty - | Tunivar _ -> () - | Tpoly (ty, tyl) -> f ty; List.iter f tyl - | Tpackage (_, _, l) -> List.iter f l - -let rec iter_abbrev f = function - Mnil -> () - | Mcons(_, _, ty, ty', rem) -> f ty; f ty'; iter_abbrev f rem - | Mlink rem -> iter_abbrev f !rem - -type type_iterators = - { it_signature: type_iterators -> signature -> unit; - it_signature_item: type_iterators -> signature_item -> unit; - it_value_description: type_iterators -> value_description -> unit; - it_type_declaration: type_iterators -> type_declaration -> unit; - it_extension_constructor: type_iterators -> extension_constructor -> unit; - it_module_declaration: type_iterators -> module_declaration -> unit; - it_modtype_declaration: type_iterators -> modtype_declaration -> unit; - it_class_declaration: type_iterators -> class_declaration -> unit; - it_class_type_declaration: type_iterators -> class_type_declaration -> unit; - it_module_type: type_iterators -> module_type -> unit; - it_class_type: type_iterators -> class_type -> unit; - it_type_kind: type_iterators -> type_kind -> unit; - it_do_type_expr: type_iterators -> type_expr -> unit; - it_type_expr: type_iterators -> type_expr -> unit; - it_path: Path.t -> unit; } - -let iter_type_expr_cstr_args f = function - | Cstr_tuple tl -> List.iter f tl - | Cstr_record lbls -> List.iter (fun d -> f d.ld_type) lbls - -let map_type_expr_cstr_args f = function - | Cstr_tuple tl -> Cstr_tuple (List.map f tl) - | Cstr_record lbls -> - Cstr_record (List.map (fun d -> {d with ld_type=f d.ld_type}) lbls) - -let iter_type_expr_kind f = function - | Type_abstract -> () - | Type_variant cstrs -> - List.iter - (fun cd -> - iter_type_expr_cstr_args f cd.cd_args; - Misc.may f cd.cd_res - ) - cstrs - | Type_record(lbls, _) -> - List.iter (fun d -> f d.ld_type) lbls - | Type_open -> - () - - -let type_iterators = - let it_signature it = - List.iter (it.it_signature_item it) - and it_signature_item it = function - Sig_value (_, vd) -> it.it_value_description it vd - | Sig_type (_, td, _) -> it.it_type_declaration it td - | Sig_typext (_, td, _) -> it.it_extension_constructor it td - | Sig_module (_, md, _) -> it.it_module_declaration it md - | Sig_modtype (_, mtd) -> it.it_modtype_declaration it mtd - | Sig_class (_, cd, _) -> it.it_class_declaration it cd - | Sig_class_type (_, ctd, _) -> it.it_class_type_declaration it ctd - and it_value_description it vd = - it.it_type_expr it vd.val_type - and it_type_declaration it td = - List.iter (it.it_type_expr it) td.type_params; - may (it.it_type_expr it) td.type_manifest; - it.it_type_kind it td.type_kind - and it_extension_constructor it td = - it.it_path td.ext_type_path; - List.iter (it.it_type_expr it) td.ext_type_params; - iter_type_expr_cstr_args (it.it_type_expr it) td.ext_args; - may (it.it_type_expr it) td.ext_ret_type - and it_module_declaration it md = - it.it_module_type it md.md_type - and it_modtype_declaration it mtd = - may (it.it_module_type it) mtd.mtd_type - and it_class_declaration it cd = - List.iter (it.it_type_expr it) cd.cty_params; - it.it_class_type it cd.cty_type; - may (it.it_type_expr it) cd.cty_new; - it.it_path cd.cty_path - and it_class_type_declaration it ctd = - List.iter (it.it_type_expr it) ctd.clty_params; - it.it_class_type it ctd.clty_type; - it.it_path ctd.clty_path - and it_module_type it = function - Mty_ident p - | Mty_alias(_, p) -> it.it_path p - | Mty_signature sg -> it.it_signature it sg - | Mty_functor (_, mto, mt) -> - may (it.it_module_type it) mto; - it.it_module_type it mt - and it_class_type it = function - Cty_constr (p, tyl, cty) -> - it.it_path p; - List.iter (it.it_type_expr it) tyl; - it.it_class_type it cty - | Cty_signature cs -> - it.it_type_expr it cs.csig_self; - Vars.iter (fun _ (_,_,ty) -> it.it_type_expr it ty) cs.csig_vars; - List.iter - (fun (p, tl) -> it.it_path p; List.iter (it.it_type_expr it) tl) - cs.csig_inher - | Cty_arrow (_, ty, cty) -> - it.it_type_expr it ty; - it.it_class_type it cty - and it_type_kind it kind = - iter_type_expr_kind (it.it_type_expr it) kind - and it_do_type_expr it ty = - iter_type_expr (it.it_type_expr it) ty; - match ty.desc with - Tconstr (p, _, _) - | Tobject (_, {contents=Some (p, _)}) - | Tpackage (p, _, _) -> - it.it_path p - | Tvariant row -> - may (fun (p,_) -> it.it_path p) (row_repr row).row_name - | _ -> () - and it_path _p = () - in - { it_path; it_type_expr = it_do_type_expr; it_do_type_expr; - it_type_kind; it_class_type; it_module_type; - it_signature; it_class_type_declaration; it_class_declaration; - it_modtype_declaration; it_module_declaration; it_extension_constructor; - it_type_declaration; it_value_description; it_signature_item; } - -let copy_row f fixed row keep more = - let fields = List.map - (fun (l, fi) -> l, - match row_field_repr fi with - | Rpresent(Some ty) -> Rpresent(Some(f ty)) - | Reither(c, tl, m, e) -> - let e = if keep then e else ref None in - let m = if row.row_fixed then fixed else m in - let tl = List.map f tl in - Reither(c, tl, m, e) - | _ -> fi) - row.row_fields in - let name = - match row.row_name with None -> None - | Some (path, tl) -> Some (path, List.map f tl) in - { row_fields = fields; row_more = more; - row_bound = (); row_fixed = row.row_fixed && fixed; - row_closed = row.row_closed; row_name = name; } - -let rec copy_kind = function - Fvar{contents = Some k} -> copy_kind k - | Fvar _ -> Fvar (ref None) - | Fpresent -> Fpresent - | Fabsent -> assert false - -let copy_commu c = - if commu_repr c = Cok then Cok else Clink (ref Cunknown) - -(* Since univars may be used as row variables, we need to do some - encoding during substitution *) -let rec norm_univar ty = - match ty.desc with - Tunivar _ | Tsubst _ -> ty - | Tlink ty -> norm_univar ty - | Ttuple (ty :: _) -> norm_univar ty - | _ -> assert false - -let rec copy_type_desc ?(keep_names=false) f = function - Tvar _ as ty -> if keep_names then ty else Tvar None - | Tarrow (p, ty1, ty2, c)-> Tarrow (p, f ty1, f ty2, copy_commu c) - | Ttuple l -> Ttuple (List.map f l) - | Tconstr (p, l, _) -> Tconstr (p, List.map f l, ref Mnil) - | Tobject(ty, {contents = Some (p, tl)}) - -> Tobject (f ty, ref (Some(p, List.map f tl))) - | Tobject (ty, _) -> Tobject (f ty, ref None) - | Tvariant _ -> assert false (* too ambiguous *) - | Tfield (p, k, ty1, ty2) -> (* the kind is kept shared *) - Tfield (p, field_kind_repr k, f ty1, f ty2) - | Tnil -> Tnil - | Tlink ty -> copy_type_desc f ty.desc - | Tsubst _ -> assert false - | Tunivar _ as ty -> ty (* always keep the name *) - | Tpoly (ty, tyl) -> - let tyl = List.map (fun x -> norm_univar (f x)) tyl in - Tpoly (f ty, tyl) - | Tpackage (p, n, l) -> Tpackage (p, n, List.map f l) - -(* Utilities for copying *) - -let saved_desc = ref [] - (* Saved association of generic nodes with their description. *) - -let save_desc ty desc = - saved_desc := (ty, desc)::!saved_desc - -let saved_kinds = ref [] (* duplicated kind variables *) -let new_kinds = ref [] (* new kind variables *) -let dup_kind r = - (match !r with None -> () | Some _ -> assert false); - if not (List.memq r !new_kinds) then begin - saved_kinds := r :: !saved_kinds; - let r' = ref None in - new_kinds := r' :: !new_kinds; - r := Some (Fvar r') - end - -(* Restored type descriptions. *) -let cleanup_types () = - List.iter (fun (ty, desc) -> ty.desc <- desc) !saved_desc; - List.iter (fun r -> r := None) !saved_kinds; - saved_desc := []; saved_kinds := []; new_kinds := [] - -(* Mark a type. *) -let rec mark_type ty = - let ty = repr ty in - if ty.level >= lowest_level then begin - ty.level <- pivot_level - ty.level; - iter_type_expr mark_type ty - end - -let mark_type_node ty = - let ty = repr ty in - if ty.level >= lowest_level then begin - ty.level <- pivot_level - ty.level; - end - -let mark_type_params ty = - iter_type_expr mark_type ty - -let type_iterators = - let it_type_expr it ty = - let ty = repr ty in - if ty.level >= lowest_level then begin - mark_type_node ty; - it.it_do_type_expr it ty; - end - in - {type_iterators with it_type_expr} - - -(* Remove marks from a type. *) -let rec unmark_type ty = - let ty = repr ty in - if ty.level < lowest_level then begin - ty.level <- pivot_level - ty.level; - iter_type_expr unmark_type ty - end - -let unmark_iterators = - let it_type_expr _it ty = unmark_type ty in - {type_iterators with it_type_expr} - -let unmark_type_decl decl = - unmark_iterators.it_type_declaration unmark_iterators decl - -let unmark_extension_constructor ext = - List.iter unmark_type ext.ext_type_params; - iter_type_expr_cstr_args unmark_type ext.ext_args; - Misc.may unmark_type ext.ext_ret_type - -let unmark_class_signature sign = - unmark_type sign.csig_self; - Vars.iter (fun _l (_m, _v, t) -> unmark_type t) sign.csig_vars - -let unmark_class_type cty = - unmark_iterators.it_class_type unmark_iterators cty - - - (*******************************************) - (* Memorization of abbreviation expansion *) - (*******************************************) - -(* Search whether the expansion has been memorized. *) - -let lte_public p1 p2 = (* Private <= Public *) - match p1, p2 with - | Private, _ | _, Public -> true - | Public, Private -> false - -let rec find_expans priv p1 = function - Mnil -> None - | Mcons (priv', p2, _ty0, ty, _) - when lte_public priv priv' && Path.same p1 p2 -> Some ty - | Mcons (_, _, _, _, rem) -> find_expans priv p1 rem - | Mlink {contents = rem} -> find_expans priv p1 rem - -(* debug: check for cycles in abbreviation. only works with -principal -let rec check_expans visited ty = - let ty = repr ty in - assert (not (List.memq ty visited)); - match ty.desc with - Tconstr (path, args, abbrev) -> - begin match find_expans path !abbrev with - Some ty' -> check_expans (ty :: visited) ty' - | None -> () - end - | _ -> () -*) - -let memo = ref [] - (* Contains the list of saved abbreviation expansions. *) - -let cleanup_abbrev () = - (* Remove all memorized abbreviation expansions. *) - List.iter (fun abbr -> abbr := Mnil) !memo; - memo := [] - -let memorize_abbrev mem priv path v v' = - (* Memorize the expansion of an abbreviation. *) - mem := Mcons (priv, path, v, v', !mem); - (* check_expans [] v; *) - memo := mem :: !memo - -let rec forget_abbrev_rec mem path = - match mem with - Mnil -> - assert false - | Mcons (_, path', _, _, rem) when Path.same path path' -> - rem - | Mcons (priv, path', v, v', rem) -> - Mcons (priv, path', v, v', forget_abbrev_rec rem path) - | Mlink mem' -> - mem' := forget_abbrev_rec !mem' path; - raise Exit - -let forget_abbrev mem path = - try mem := forget_abbrev_rec !mem path with Exit -> () - -(* debug: check for invalid abbreviations -let rec check_abbrev_rec = function - Mnil -> true - | Mcons (_, ty1, ty2, rem) -> - repr ty1 != repr ty2 - | Mlink mem' -> - check_abbrev_rec !mem' - -let check_memorized_abbrevs () = - List.for_all (fun mem -> check_abbrev_rec !mem) !memo -*) - - (**********************************) - (* Utilities for labels *) - (**********************************) - -let is_optional = function Optional _ -> true | _ -> false - -let label_name = function - Nolabel -> "" - | Labelled s - | Optional s -> s - -let prefixed_label_name = function - Nolabel -> "" - | Labelled s -> "~" ^ s - | Optional s -> "?" ^ s - -let rec extract_label_aux hd l = function - [] -> raise Not_found - | (l',t as p) :: ls -> - if label_name l' = l then (l', t, List.rev hd, ls) - else extract_label_aux (p::hd) l ls - -let extract_label l ls = extract_label_aux [] l ls - - - (**********************************) - (* Utilities for backtracking *) - (**********************************) - -let undo_change = function - Ctype (ty, desc) -> ty.desc <- desc - | Ccompress (ty, desc, _) -> ty.desc <- desc - | Clevel (ty, level) -> ty.level <- level - | Cname (r, v) -> r := v - | Crow (r, v) -> r := v - | Ckind (r, v) -> r := v - | Ccommu (r, v) -> r := v - | Cuniv (r, v) -> r := v - | Ctypeset (r, v) -> r := v - -type snapshot = changes ref * int -let last_snapshot = ref 0 - -let log_type ty = - if ty.id <= !last_snapshot then log_change (Ctype (ty, ty.desc)) -let link_type ty ty' = - log_type ty; - let desc = ty.desc in - ty.desc <- Tlink ty'; - (* Name is a user-supplied name for this unification variable (obtained - * through a type annotation for instance). *) - match desc, ty'.desc with - Tvar name, Tvar name' -> - begin match name, name' with - | Some _, None -> log_type ty'; ty'.desc <- Tvar name - | None, Some _ -> () - | Some _, Some _ -> - if ty.level < ty'.level then (log_type ty'; ty'.desc <- Tvar name) - | None, None -> () - end - | _ -> () - (* ; assert (check_memorized_abbrevs ()) *) - (* ; check_expans [] ty' *) -let set_level ty level = - if ty.id <= !last_snapshot then log_change (Clevel (ty, ty.level)); - ty.level <- level -let set_univar rty ty = - log_change (Cuniv (rty, !rty)); rty := Some ty -let set_name nm v = - log_change (Cname (nm, !nm)); nm := v -let set_row_field e v = - log_change (Crow (e, !e)); e := Some v -let set_kind rk k = - log_change (Ckind (rk, !rk)); rk := Some k -let set_commu rc c = - log_change (Ccommu (rc, !rc)); rc := c -let set_typeset rs s = - log_change (Ctypeset (rs, !rs)); rs := s - -let snapshot () = - let old = !last_snapshot in - last_snapshot := !new_id; - match Weak.get trail 0 with Some r -> (r, old) - | None -> - let r = ref Unchanged in - Weak.set trail 0 (Some r); - (r, old) - -let rec rev_log accu = function - Unchanged -> accu - | Invalid -> assert false - | Change (ch, next) -> - let d = !next in - next := Invalid; - rev_log (ch::accu) d - -let backtrack (changes, old) = - match !changes with - Unchanged -> last_snapshot := old - | Invalid -> failwith "Btype.backtrack" - | Change _ as change -> - cleanup_abbrev (); - let backlog = rev_log [] change in - List.iter undo_change backlog; - changes := Unchanged; - last_snapshot := old; - Weak.set trail 0 (Some changes) - -let rec rev_compress_log log r = - match !r with - Unchanged | Invalid -> - log - | Change (Ccompress _, next) -> - rev_compress_log (r::log) next - | Change (_, next) -> - rev_compress_log log next - -let undo_compress (changes, _old) = - match !changes with - Unchanged - | Invalid -> () - | Change _ -> - let log = rev_compress_log [] changes in - List.iter - (fun r -> match !r with - Change (Ccompress (ty, desc, d), next) when ty.desc == d -> - ty.desc <- desc; r := !next - | _ -> ()) - log diff --git a/src/compiler-libs-406/builtin_attributes.ml b/src/compiler-libs-406/builtin_attributes.ml deleted file mode 100755 index 84503189..00000000 --- a/src/compiler-libs-406/builtin_attributes.ml +++ /dev/null @@ -1,206 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Alain Frisch, LexiFi *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Asttypes -open Parsetree - -let string_of_cst = function - | Pconst_string(s, _) -> Some s - | _ -> None - -let string_of_payload = function - | PStr[{pstr_desc=Pstr_eval({pexp_desc=Pexp_constant c},_)}] -> - string_of_cst c - | _ -> None - -let string_of_opt_payload p = - match string_of_payload p with - | Some s -> s - | None -> "" - -let rec error_of_extension ext = - match ext with - | ({txt = ("ocaml.error"|"error") as txt; loc}, p) -> - let rec sub_from inner = - match inner with - | {pstr_desc=Pstr_extension (ext, _)} :: rest -> - error_of_extension ext :: sub_from rest - | _ :: rest -> - (Location.errorf ~loc - "Invalid syntax for sub-error of extension '%s'." txt) :: - sub_from rest - | [] -> [] - in - begin match p with - | PStr [] -> raise Location.Already_displayed_error - | PStr({pstr_desc=Pstr_eval - ({pexp_desc=Pexp_constant(Pconst_string(msg,_))}, _)}:: - {pstr_desc=Pstr_eval - ({pexp_desc=Pexp_constant(Pconst_string(if_highlight,_))}, _)}:: - inner) -> - Location.error ~loc ~if_highlight ~sub:(sub_from inner) msg - | PStr({pstr_desc=Pstr_eval - ({pexp_desc=Pexp_constant(Pconst_string(msg,_))}, _)}::inner) -> - Location.error ~loc ~sub:(sub_from inner) msg - | _ -> Location.errorf ~loc "Invalid syntax for extension '%s'." txt - end - | ({txt; loc}, _) -> - Location.errorf ~loc "Uninterpreted extension '%s'." txt - -let cat s1 s2 = - if s2 = "" then s1 else - s1 ^ "\n" ^ s2 - -let rec deprecated_of_attrs = function - | [] -> None - | ({txt = "ocaml.deprecated"|"deprecated"; _}, p) :: _ -> - Some (string_of_opt_payload p) - | _ :: tl -> deprecated_of_attrs tl - -let check_deprecated loc attrs s = - match deprecated_of_attrs attrs with - | None -> () - | Some txt -> Location.deprecated loc (cat s txt) - -let check_deprecated_inclusion ~def ~use loc attrs1 attrs2 s = - match deprecated_of_attrs attrs1, deprecated_of_attrs attrs2 with - | None, _ | Some _, Some _ -> () - | Some txt, None -> Location.deprecated ~def ~use loc (cat s txt) - -let rec deprecated_mutable_of_attrs = function - | [] -> None - | ({txt = "ocaml.deprecated_mutable"|"deprecated_mutable"; _}, p) :: _ -> - Some (string_of_opt_payload p) - | _ :: tl -> deprecated_mutable_of_attrs tl - -let check_deprecated_mutable loc attrs s = - match deprecated_mutable_of_attrs attrs with - | None -> () - | Some txt -> - Location.deprecated loc (Printf.sprintf "mutating field %s" (cat s txt)) - -let check_deprecated_mutable_inclusion ~def ~use loc attrs1 attrs2 s = - match deprecated_mutable_of_attrs attrs1, - deprecated_mutable_of_attrs attrs2 - with - | None, _ | Some _, Some _ -> () - | Some txt, None -> - Location.deprecated ~def ~use loc - (Printf.sprintf "mutating field %s" (cat s txt)) - -let check_bs_attributes_inclusion = - ref (fun _attrs1 _attrs2 _s -> - None - ) - -let check_duplicated_labels : (_ -> _ option ) ref = ref (fun _lbls -> - None -) - -let rec deprecated_of_sig = function - | {psig_desc = Psig_attribute a} :: tl -> - begin match deprecated_of_attrs [a] with - | None -> deprecated_of_sig tl - | Some _ as r -> r - end - | _ -> None - - -let rec deprecated_of_str = function - | {pstr_desc = Pstr_attribute a} :: tl -> - begin match deprecated_of_attrs [a] with - | None -> deprecated_of_str tl - | Some _ as r -> r - end - | _ -> None - - -let warning_attribute ?(ppwarning = true) = - let process loc txt errflag payload = - match string_of_payload payload with - | Some s -> - begin try Warnings.parse_options errflag s - with Arg.Bad _ -> - Location.prerr_warning loc - (Warnings.Attribute_payload - (txt, "Ill-formed list of warnings")) - end - | None -> - Location.prerr_warning loc - (Warnings.Attribute_payload - (txt, "A single string literal is expected")) - in - function - | ({txt = ("ocaml.warning"|"warning") as txt; loc}, payload) -> - process loc txt false payload - | ({txt = ("ocaml.warnerror"|"warnerror") as txt; loc}, payload) -> - process loc txt true payload - | {txt="ocaml.ppwarning"|"ppwarning"}, - PStr[{pstr_desc=Pstr_eval({pexp_desc=Pexp_constant - (Pconst_string (s, _))},_); - pstr_loc}] when ppwarning -> - Location.prerr_warning pstr_loc (Warnings.Preprocessor s) - | _ -> - () - -let warning_scope ?ppwarning attrs f = - let prev = Warnings.backup () in - try - List.iter (warning_attribute ?ppwarning) (List.rev attrs); - let ret = f () in - Warnings.restore prev; - ret - with exn -> - Warnings.restore prev; - raise exn - - -let warn_on_literal_pattern = - List.exists - (function - | ({txt="ocaml.warn_on_literal_pattern"|"warn_on_literal_pattern"; _}, _) - -> true - | _ -> false - ) - -let explicit_arity = - List.exists - (function - | ({txt="ocaml.explicit_arity"|"explicit_arity"; _}, _) -> true - | _ -> false - ) - -let immediate = - List.exists - (function - | ({txt="ocaml.immediate"|"immediate"; _}, _) -> true - | _ -> false - ) - -(* The "ocaml.boxed (default)" and "ocaml.unboxed (default)" - attributes cannot be input by the user, they are added by the - compiler when applying the default setting. This is done to record - in the .cmi the default used by the compiler when compiling the - source file because the default can change between compiler - invocations. *) - -let check l (x, _) = List.mem x.txt l - -let has_unboxed attr = - List.exists (check ["ocaml.unboxed"; "unboxed"]) - attr - -let has_boxed attr = - List.exists (check ["ocaml.boxed"; "boxed"]) attr diff --git a/src/compiler-libs-406/builtin_attributes.mli b/src/compiler-libs-406/builtin_attributes.mli deleted file mode 100755 index 7282dbbe..00000000 --- a/src/compiler-libs-406/builtin_attributes.mli +++ /dev/null @@ -1,84 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Alain Frisch, LexiFi *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Support for some of the builtin attributes: - - ocaml.deprecated - ocaml.error - ocaml.ppwarning - ocaml.warning - ocaml.warnerror - ocaml.explicit_arity (for camlp4/camlp5) - ocaml.warn_on_literal_pattern - ocaml.deprecated_mutable - ocaml.immediate - ocaml.boxed / ocaml.unboxed -*) - - -val check_deprecated: Location.t -> Parsetree.attributes -> string -> unit -val check_deprecated_inclusion: - def:Location.t -> use:Location.t -> Location.t -> Parsetree.attributes -> - Parsetree.attributes -> string -> unit -val deprecated_of_attrs: Parsetree.attributes -> string option -val deprecated_of_sig: Parsetree.signature -> string option -val deprecated_of_str: Parsetree.structure -> string option - -val check_deprecated_mutable: - Location.t -> Parsetree.attributes -> string -> unit -val check_deprecated_mutable_inclusion: - def:Location.t -> use:Location.t -> Location.t -> Parsetree.attributes -> - Parsetree.attributes -> string -> unit - -val check_bs_attributes_inclusion: - (Parsetree.attributes -> - Parsetree.attributes -> string -> (string*string) option ) ref - -val check_duplicated_labels: - (Parsetree.label_declaration list -> - string Asttypes.loc option - ) ref -val error_of_extension: Parsetree.extension -> Location.error - -val warning_attribute: ?ppwarning:bool -> Parsetree.attribute -> unit - (** Apply warning settings from the specified attribute. - "ocaml.warning"/"ocaml.warnerror" (and variants without the prefix) - are processed and other attributes are ignored. - - Also implement ocaml.ppwarning (unless ~ppwarning:false is - passed). - *) - -val warning_scope: - ?ppwarning:bool -> - Parsetree.attributes -> (unit -> 'a) -> 'a - (** Execute a function in a new scope for warning settings. This - means that the effect of any call to [warning_attribute] during - the execution of this function will be discarded after - execution. - - The function also takes a list of attributes which are processed - with [warning_attribute] in the fresh scope before the function - is executed. - *) - -val warn_on_literal_pattern: Parsetree.attributes -> bool -val explicit_arity: Parsetree.attributes -> bool - - -val immediate: Parsetree.attributes -> bool - -val has_unboxed: Parsetree.attributes -> bool -val has_boxed: Parsetree.attributes -> bool diff --git a/src/compiler-libs-406/clflags.ml b/src/compiler-libs-406/clflags.ml deleted file mode 100644 index 1385d41c..00000000 --- a/src/compiler-libs-406/clflags.ml +++ /dev/null @@ -1,71 +0,0 @@ - - - - -let output_name = ref (None : string option) (* -o *) -and include_dirs = ref ([] : string list)(* -I *) -and debug = ref false (* -g *) -and fast = ref false (* -unsafe *) - -and nopervasives = ref false (* -nopervasives *) -and preprocessor = ref(None : string option) (* -pp *) -and all_ppx = ref ([] : string list) (* -ppx *) -let annotations = ref false (* -annot *) -let binary_annotations = ref false (* -annot *) -and noassert = ref false (* -noassert *) -and verbose = ref false (* -verbose *) -and open_modules = ref [] (* -open *) -and principal = ref false (* -principal *) -and real_paths = ref true (* -short-paths *) -and applicative_functors = ref true (* -no-app-funct *) -and error_size = ref 500 (* -error-size *) -and transparent_modules = ref false (* -trans-mod *) -let dump_source = ref false (* -dsource *) -let dump_parsetree = ref false (* -dparsetree *) -and dump_typedtree = ref false (* -dtypedtree *) -and dump_rawlambda = ref false (* -drawlambda *) -and dump_lambda = ref false (* -dlambda *) - - -let dont_write_files = ref false (* set to true under ocamldoc *) - - -let reset_dump_state () = begin - dump_source := false; - dump_parsetree := false; - dump_typedtree := false; - dump_rawlambda := false -end - - - - -let keep_docs = ref false (* -keep-docs *) -let keep_locs = ref true (* -keep-locs *) - - - - -let parse_color_setting = function - | "auto" -> Some Misc.Color.Auto - | "always" -> Some Misc.Color.Always - | "never" -> Some Misc.Color.Never - | _ -> None -let color = ref None ;; (* -color *) - -let unboxed_types = ref false - - - - -type mli_status = Mli_exists | Mli_non_exists -let assume_no_mli = ref Mli_non_exists -let bs_vscode = - try ignore @@ Sys.getenv "BS_VSCODE" ; true with _ -> false - (* We get it from environment variable mostly due to - we don't want to rebuild when flip on or off - *) -let dont_record_crc_unit : string option ref = ref None -let bs_gentype = ref None -let no_assert_false = ref false -let dump_location = ref true diff --git a/src/compiler-libs-406/clflags.mli b/src/compiler-libs-406/clflags.mli deleted file mode 100644 index b0859b4a..00000000 --- a/src/compiler-libs-406/clflags.mli +++ /dev/null @@ -1,45 +0,0 @@ -val output_name : string option ref -val include_dirs : string list ref - -val debug : bool ref -val fast : bool ref - -val nopervasives : bool ref -val open_modules : string list ref -val preprocessor : string option ref -val all_ppx : string list ref -val annotations : bool ref -val binary_annotations : bool ref -val noassert : bool ref -val verbose : bool ref -val principal : bool ref -val real_paths : bool ref -val applicative_functors : bool ref -val error_size : int ref -val transparent_modules : bool ref -val dump_source : bool ref -val dump_parsetree : bool ref -val dump_typedtree : bool ref -val dump_rawlambda : bool ref -val dump_lambda : bool ref -val dont_write_files : bool ref -val keep_docs : bool ref -val keep_locs : bool ref - - -val parse_color_setting : string -> Misc.Color.setting option -val color : Misc.Color.setting option ref - -val unboxed_types : bool ref - -val reset_dump_state: unit -> unit - - -type mli_status = Mli_exists | Mli_non_exists -val assume_no_mli : mli_status ref -val bs_vscode : bool -val dont_record_crc_unit : string option ref -val bs_gentype : string option ref -val no_assert_false : bool ref -val dump_location : bool ref - diff --git a/src/compiler-libs-406/cmi_format.ml b/src/compiler-libs-406/cmi_format.ml deleted file mode 100644 index 1b21d362..00000000 --- a/src/compiler-libs-406/cmi_format.ml +++ /dev/null @@ -1,141 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Fabrice Le Fessant, INRIA Saclay *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -type pers_flags = - | Rectypes - | Deprecated of string - | Opaque - | Unsafe_string - -type error = - Not_an_interface of string - | Wrong_version_interface of string * string - | Corrupted_interface of string - -exception Error of error - -type cmi_infos = { - cmi_name : string; - cmi_sign : Types.signature_item list; - cmi_crcs : (string * Digest.t option) list; - cmi_flags : pers_flags list; -} - -let input_cmi ic = - let (name, sign) = input_value ic in - let crcs = input_value ic in - let flags = input_value ic in - { - cmi_name = name; - cmi_sign = sign; - cmi_crcs = crcs; - cmi_flags = flags; - } - -let read_cmi filename = - let ic = open_in_bin filename in - try - let buffer = - really_input_string ic (String.length Config.cmi_magic_number) - in - if buffer <> Config.cmi_magic_number then begin - close_in ic; - let pre_len = String.length Config.cmi_magic_number - 3 in - if String.sub buffer 0 pre_len - = String.sub Config.cmi_magic_number 0 pre_len then - begin - let msg = - if buffer < Config.cmi_magic_number then "an older" else "a newer" in - raise (Error (Wrong_version_interface (filename, msg))) - end else begin - raise(Error(Not_an_interface filename)) - end - end; - let cmi = input_cmi ic in - close_in ic; - cmi - with End_of_file | Failure _ -> - close_in ic; - raise(Error(Corrupted_interface(filename))) - | Error e -> - close_in ic; - raise (Error e) - -let output_cmi filename oc cmi = -(* beware: the provided signature must have been substituted for saving *) - output_string oc Config.cmi_magic_number; - output_value oc (cmi.cmi_name, cmi.cmi_sign); - flush oc; - let crc = Digest.file filename in - let crcs = (cmi.cmi_name, Some crc) :: cmi.cmi_crcs in - output_value oc crcs; - output_value oc cmi.cmi_flags; - crc - -(* This function is also called by [save_cmt] as cmi_format is subset of - cmt_format, so dont close the channel yet -*) -let create_cmi ?check_exists filename (cmi : cmi_infos) = - (* beware: the provided signature must have been substituted for saving *) - let content = - Config.cmi_magic_number ^ Marshal.to_string (cmi.cmi_name, cmi.cmi_sign) [] - (* checkout [output_value] in {!Pervasives} module *) - in - let crc = Digest.string content in - let cmi_infos = - if check_exists <> None && Sys.file_exists filename then - Some (read_cmi filename) - else None in - match cmi_infos with - | Some {cmi_name = _; cmi_sign = _; cmi_crcs = (old_name, Some old_crc)::rest ; cmi_flags} - (* TODO: design the cmi format so that we don't need read the whole cmi *) - when - cmi.cmi_name = old_name && - crc = old_crc && - cmi.cmi_crcs = rest && - cmi_flags = cmi.cmi_flags -> - crc - | _ -> - let crcs = (cmi.cmi_name, Some crc) :: cmi.cmi_crcs in - let oc = open_out_bin filename in - output_string oc content; - output_value oc crcs; - output_value oc cmi.cmi_flags; - close_out oc; - crc - -(* Error report *) - -open Format - -let report_error ppf = function - | Not_an_interface filename -> - fprintf ppf "%a@ is not a compiled interface" - Location.print_filename filename - | Wrong_version_interface (filename, older_newer) -> - fprintf ppf - "%a@ is not a compiled interface for this version of OCaml.@.\ - It seems to be for %s version of OCaml." - Location.print_filename filename older_newer - | Corrupted_interface filename -> - fprintf ppf "Corrupted compiled interface@ %a" - Location.print_filename filename - -let () = - Location.register_error_of_exn - (function - | Error err -> Some (Location.error_of_printer_file report_error err) - | _ -> None - ) diff --git a/src/compiler-libs-406/cmi_format.mli b/src/compiler-libs-406/cmi_format.mli deleted file mode 100644 index 9385deb5..00000000 --- a/src/compiler-libs-406/cmi_format.mli +++ /dev/null @@ -1,51 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Fabrice Le Fessant, INRIA Saclay *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -type pers_flags = - | Rectypes - | Deprecated of string - | Opaque - | Unsafe_string - -type cmi_infos = { - cmi_name : string; - cmi_sign : Types.signature_item list; - cmi_crcs : (string * Digest.t option) list; - cmi_flags : pers_flags list; -} - -(* write the magic + the cmi information *) -val output_cmi : string -> out_channel -> cmi_infos -> Digest.t - -val create_cmi : ?check_exists:unit -> string -> cmi_infos -> Digest.t - -(* read the cmi information (the magic is supposed to have already been read) *) -val input_cmi : in_channel -> cmi_infos - -(* read a cmi from a filename, checking the magic *) -val read_cmi : string -> cmi_infos - -(* Error report *) - -type error = - Not_an_interface of string - | Wrong_version_interface of string * string - | Corrupted_interface of string - -exception Error of error - -open Format - -val report_error: formatter -> error -> unit diff --git a/src/compiler-libs-406/cmt_format.ml b/src/compiler-libs-406/cmt_format.ml deleted file mode 100644 index 911111c1..00000000 --- a/src/compiler-libs-406/cmt_format.ml +++ /dev/null @@ -1,197 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Fabrice Le Fessant, INRIA Saclay *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Cmi_format -open Typedtree - -(* Note that in Typerex, there is an awful hack to save a cmt file - together with the interface file that was generated by ocaml (this - is because the installed version of ocaml might differ from the one - integrated in Typerex). -*) - - - -let read_magic_number ic = - let len_magic_number = String.length Config.cmt_magic_number in - really_input_string ic len_magic_number - -type binary_annots = - | Packed of Types.signature * string list - | Implementation of structure - | Interface of signature - | Partial_implementation of binary_part array - | Partial_interface of binary_part array - -and binary_part = -| Partial_structure of structure -| Partial_structure_item of structure_item -| Partial_expression of expression -| Partial_pattern of pattern -| Partial_class_expr of unit -| Partial_signature of signature -| Partial_signature_item of signature_item -| Partial_module_type of module_type - -type cmt_infos = { - cmt_modname : string; - cmt_annots : binary_annots; - cmt_value_dependencies : - (Types.value_description * Types.value_description) list; - cmt_comments : (string * Location.t) list; - cmt_args : string array; - cmt_sourcefile : string option; - cmt_builddir : string; - cmt_loadpath : string list; - cmt_source_digest : Digest.t option; - cmt_initial_env : Env.t; - cmt_imports : (string * Digest.t option) list; - cmt_interface_digest : Digest.t option; - cmt_use_summaries : bool; -} - -type error = - Not_a_typedtree of string - -let need_to_clear_env = - try ignore (Sys.getenv "OCAML_BINANNOT_WITHENV"); false - with Not_found -> true - -let keep_only_summary = Env.keep_only_summary - -open Tast_mapper - -let cenv = - {Tast_mapper.default with env = fun _sub env -> keep_only_summary env} - -let clear_part = function - | Partial_structure s -> Partial_structure (cenv.structure cenv s) - | Partial_structure_item s -> - Partial_structure_item (cenv.structure_item cenv s) - | Partial_expression e -> Partial_expression (cenv.expr cenv e) - | Partial_pattern p -> Partial_pattern (cenv.pat cenv p) - | Partial_class_expr () -> assert false - | Partial_signature s -> Partial_signature (cenv.signature cenv s) - | Partial_signature_item s -> - Partial_signature_item (cenv.signature_item cenv s) - | Partial_module_type s -> Partial_module_type (cenv.module_type cenv s) - -let clear_env binary_annots = - if need_to_clear_env then - match binary_annots with - | Implementation s -> Implementation (cenv.structure cenv s) - | Interface s -> Interface (cenv.signature cenv s) - | Packed _ -> binary_annots - | Partial_implementation array -> - Partial_implementation (Array.map clear_part array) - | Partial_interface array -> - Partial_interface (Array.map clear_part array) - - else binary_annots - -exception Error of error - -let input_cmt ic = (input_value ic : cmt_infos) - -let output_cmt oc cmt = - output_string oc Config.cmt_magic_number; - output_value oc (cmt : cmt_infos) - -let read filename = -(* Printf.fprintf stderr "Cmt_format.read %s\n%!" filename; *) - let ic = open_in_bin filename in - try - let magic_number = read_magic_number ic in - let cmi, cmt = - if magic_number = Config.cmt_magic_number then - None, Some (input_cmt ic) - else if magic_number = Config.cmi_magic_number then - let cmi = Cmi_format.input_cmi ic in - let cmt = try - let magic_number = read_magic_number ic in - if magic_number = Config.cmt_magic_number then - let cmt = input_cmt ic in - Some cmt - else None - with _ -> None - in - Some cmi, cmt - else - raise(Cmi_format.Error(Cmi_format.Not_an_interface filename)) - in - close_in ic; -(* Printf.fprintf stderr "Cmt_format.read done\n%!"; *) - cmi, cmt - with e -> - close_in ic; - raise e - -let read_cmt filename = - match read filename with - _, None -> raise (Error (Not_a_typedtree filename)) - | _, Some cmt -> cmt - -let read_cmi filename = - match read filename with - None, _ -> - raise (Cmi_format.Error (Cmi_format.Not_an_interface filename)) - | Some cmi, _ -> cmi - -let saved_types = ref [] -let value_deps = ref [] - -let clear () = - saved_types := []; - value_deps := [] - -let add_saved_type b = saved_types := b :: !saved_types -let get_saved_types () = !saved_types -let set_saved_types l = saved_types := l - -let record_value_dependency vd1 vd2 = - if vd1.Types.val_loc <> vd2.Types.val_loc then - value_deps := (vd1, vd2) :: !value_deps - -let save_cmt filename modname binary_annots sourcefile initial_env cmi = - if !Clflags.binary_annotations then begin - (if !Config.bs_only then Misc.output_to_bin_file_directly else - Misc.output_to_file_via_temporary - ~mode:[Open_binary] ) filename - (fun temp_file_name oc -> - let this_crc = - match cmi with - | None -> None - | Some cmi -> Some (output_cmi temp_file_name oc cmi) - in - let source_digest = Misc.may_map Digest.file sourcefile in - let cmt = { - cmt_modname = modname; - cmt_annots = clear_env binary_annots; - cmt_value_dependencies = !value_deps; - cmt_comments = Lexer.comments (); - cmt_args = Sys.argv; - cmt_sourcefile = sourcefile; - cmt_builddir = Sys.getcwd (); - cmt_loadpath = !Config.load_path; - cmt_source_digest = source_digest; - cmt_initial_env = if need_to_clear_env then - keep_only_summary initial_env else initial_env; - cmt_imports = List.sort compare (Env.imports ()); - cmt_interface_digest = this_crc; - cmt_use_summaries = need_to_clear_env; - } in - output_cmt oc cmt) - end; - clear () diff --git a/src/compiler-libs-406/cmt_format.mli b/src/compiler-libs-406/cmt_format.mli deleted file mode 100644 index 6daf6433..00000000 --- a/src/compiler-libs-406/cmt_format.mli +++ /dev/null @@ -1,121 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Fabrice Le Fessant, INRIA Saclay *) -(* *) -(* Copyright 2012 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** cmt and cmti files format. *) - -(** The layout of a cmt file is as follows: - := \{\} \{cmt infos\} \{\} - where is the cmi file format: - := . - More precisely, the optional part must be present if and only if - the file is: - - a cmti, or - - a cmt, for a ml file which has no corresponding mli (hence no - corresponding cmti). - - Thus, we provide a common reading function for cmi and cmt(i) - files which returns an option for each of the three parts: cmi - info, cmt info, source info. *) - -open Typedtree - -type binary_annots = - | Packed of Types.signature * string list - | Implementation of structure - | Interface of signature - | Partial_implementation of binary_part array - | Partial_interface of binary_part array - -and binary_part = - | Partial_structure of structure - | Partial_structure_item of structure_item - | Partial_expression of expression - | Partial_pattern of pattern - | Partial_class_expr of unit - | Partial_signature of signature - | Partial_signature_item of signature_item - | Partial_module_type of module_type - -type cmt_infos = { - cmt_modname : string; - cmt_annots : binary_annots; - cmt_value_dependencies : - (Types.value_description * Types.value_description) list; - cmt_comments : (string * Location.t) list; - cmt_args : string array; - cmt_sourcefile : string option; - cmt_builddir : string; - cmt_loadpath : string list; - cmt_source_digest : string option; - cmt_initial_env : Env.t; - cmt_imports : (string * Digest.t option) list; - cmt_interface_digest : Digest.t option; - cmt_use_summaries : bool; -} - -type error = - Not_a_typedtree of string - -exception Error of error - -(** [read filename] opens filename, and extract both the cmi_infos, if - it exists, and the cmt_infos, if it exists. Thus, it can be used - with .cmi, .cmt and .cmti files. - - .cmti files always contain a cmi_infos at the beginning. .cmt files - only contain a cmi_infos at the beginning if there is no associated - .cmti file. -*) -val read : string -> Cmi_format.cmi_infos option * cmt_infos option - -val read_cmt : string -> cmt_infos -val read_cmi : string -> Cmi_format.cmi_infos - -(** [save_cmt filename modname binary_annots sourcefile initial_env cmi] - writes a cmt(i) file. *) -val save_cmt : - string -> (* filename.cmt to generate *) - string -> (* module name *) - binary_annots -> - string option -> (* source file *) - Env.t -> (* initial env *) - Cmi_format.cmi_infos option -> (* if a .cmi was generated *) - unit - -(* Miscellaneous functions *) - -val read_magic_number : in_channel -> string - -val clear: unit -> unit - -val add_saved_type : binary_part -> unit -val get_saved_types : unit -> binary_part list -val set_saved_types : binary_part list -> unit - -val record_value_dependency: - Types.value_description -> Types.value_description -> unit - - -(* - - val is_magic_number : string -> bool - val read : in_channel -> Env.cmi_infos option * t - val write_magic_number : out_channel -> unit - val write : out_channel -> t -> unit - - val find : string list -> string -> string - val read_signature : 'a -> string -> Types.signature * 'b list * 'c list - -*) diff --git a/src/compiler-libs-406/config.ml b/src/compiler-libs-406/config.ml deleted file mode 100644 index e82d154a..00000000 --- a/src/compiler-libs-406/config.ml +++ /dev/null @@ -1,42 +0,0 @@ -let version = "4.06.1+BS" -let standard_library = - let (//) = Filename.concat in - Filename.dirname Sys.executable_name // Filename.parent_dir_name // "lib" // "ocaml" -let standard_library_default = standard_library -let syntax_kind = ref `ml -let bs_only = ref true -let unsafe_empty_array = ref true - - -and cmi_magic_number = "Caml1999I022" - -and ast_impl_magic_number = "Caml1999M022" -and ast_intf_magic_number = "Caml1999N022" -and cmt_magic_number = "Caml1999T022" - -let load_path = ref ([] : string list) - -let interface_suffix = ref ".mli" - - -(* This is normally the same as in obj.ml, but we have to define it - separately because it can differ when we're in the middle of a - bootstrapping phase. *) - - - -let default_uncurry = ref false - -let print_config oc = - let p name valu = Printf.fprintf oc "%s: %s\n" name valu in - p "version" version; - p "standard_library_default" standard_library_default; - p "standard_library" standard_library; - (* print the magic number *) - - p "cmi_magic_number" cmi_magic_number; - p "ast_impl_magic_number" ast_impl_magic_number; - p "ast_intf_magic_number" ast_intf_magic_number; - p "cmt_magic_number" cmt_magic_number; - flush oc; -;; diff --git a/src/compiler-libs-406/config.mli b/src/compiler-libs-406/config.mli deleted file mode 100644 index 362ca062..00000000 --- a/src/compiler-libs-406/config.mli +++ /dev/null @@ -1,50 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* System configuration *) - -val version: string - (* The current version number of the system *) - -val standard_library: string - (* The directory containing the standard libraries *) - -val syntax_kind : [ `ml | `reason | `rescript ] ref - -val bs_only : bool ref - -val unsafe_empty_array: bool ref - - -val load_path: string list ref - (* Directories in the search path for .cmi and .cmo files *) - -val interface_suffix: string ref - (* Suffix for interface file names *) - -val cmi_magic_number: string - (* Magic number for compiled interface files *) -val ast_intf_magic_number: string - (* Magic number for file holding an interface syntax tree *) -val ast_impl_magic_number: string - (* Magic number for file holding an implementation syntax tree *) -val cmt_magic_number: string - (* Magic number for compiled interface files *) - - -val default_uncurry : bool ref -val print_config : out_channel -> unit;; - - diff --git a/src/compiler-libs-406/consistbl.ml b/src/compiler-libs-406/consistbl.ml deleted file mode 100644 index dbba5d1f..00000000 --- a/src/compiler-libs-406/consistbl.ml +++ /dev/null @@ -1,66 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 2002 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Consistency tables: for checking consistency of module CRCs *) - -type t = (string, Digest.t * string) Hashtbl.t - -let create () = Hashtbl.create 13 - -let clear = Hashtbl.clear - -exception Inconsistency of string * string * string - -exception Not_available of string - -let check tbl name crc source = - try - let (old_crc, old_source) = Hashtbl.find tbl name in - if crc <> old_crc then raise(Inconsistency(name, source, old_source)) - with Not_found -> - Hashtbl.add tbl name (crc, source) - -let check_noadd tbl name crc source = - try - let (old_crc, old_source) = Hashtbl.find tbl name in - if crc <> old_crc then raise(Inconsistency(name, source, old_source)) - with Not_found -> - raise (Not_available name) - -let set tbl name crc source = Hashtbl.add tbl name (crc, source) - -let source tbl name = snd (Hashtbl.find tbl name) - -let extract l tbl = - let l = List.sort_uniq String.compare l in - List.fold_left - (fun assc name -> - try - let (crc, _) = Hashtbl.find tbl name in - (name, Some crc) :: assc - with Not_found -> - (name, None) :: assc) - [] l - -let filter p tbl = - let to_remove = ref [] in - Hashtbl.iter - (fun name _ -> - if not (p name) then to_remove := name :: !to_remove) - tbl; - List.iter - (fun name -> - while Hashtbl.mem tbl name do Hashtbl.remove tbl name done) - !to_remove diff --git a/src/compiler-libs-406/consistbl.mli b/src/compiler-libs-406/consistbl.mli deleted file mode 100644 index c532bddf..00000000 --- a/src/compiler-libs-406/consistbl.mli +++ /dev/null @@ -1,62 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 2002 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Consistency tables: for checking consistency of module CRCs *) - -type t - -val create: unit -> t - -val clear: t -> unit - -val check: t -> string -> Digest.t -> string -> unit - (* [check tbl name crc source] - checks consistency of ([name], [crc]) with infos previously - stored in [tbl]. If no CRC was previously associated with - [name], record ([name], [crc]) in [tbl]. - [source] is the name of the file from which the information - comes from. This is used for error reporting. *) - -val check_noadd: t -> string -> Digest.t -> string -> unit - (* Same as [check], but raise [Not_available] if no CRC was previously - associated with [name]. *) - -val set: t -> string -> Digest.t -> string -> unit - (* [set tbl name crc source] forcefully associates [name] with - [crc] in [tbl], even if [name] already had a different CRC - associated with [name] in [tbl]. *) - -val source: t -> string -> string - (* [source tbl name] returns the file name associated with [name] - if the latter has an associated CRC in [tbl]. - Raise [Not_found] otherwise. *) - -val extract: string list -> t -> (string * Digest.t option) list - (* [extract tbl names] returns an associative list mapping each string - in [names] to the CRC associated with it in [tbl]. If no CRC is - associated with a name then it is mapped to [None]. *) - -val filter: (string -> bool) -> t -> unit - (* [filter pred tbl] removes from [tbl] table all (name, CRC) pairs - such that [pred name] is [false]. *) - -exception Inconsistency of string * string * string - (* Raised by [check] when a CRC mismatch is detected. - First string is the name of the compilation unit. - Second string is the source that caused the inconsistency. - Third string is the source that set the CRC. *) - -exception Not_available of string - (* Raised by [check_noadd] when a name doesn't have an associated CRC. *) diff --git a/src/compiler-libs-406/datarepr.ml b/src/compiler-libs-406/datarepr.ml deleted file mode 100644 index 9310573e..00000000 --- a/src/compiler-libs-406/datarepr.ml +++ /dev/null @@ -1,279 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Compute constructor and label descriptions from type declarations, - determining their representation. *) - -open Asttypes -open Types -open Btype - -(* Simplified version of Ctype.free_vars *) -let free_vars ?(param=false) ty = - let ret = ref TypeSet.empty in - let rec loop ty = - let ty = repr ty in - if ty.level >= lowest_level then begin - ty.level <- pivot_level - ty.level; - match ty.desc with - | Tvar _ -> - ret := TypeSet.add ty !ret - | Tvariant row -> - let row = row_repr row in - iter_row loop row; - if not (static_row row) then begin - match row.row_more.desc with - | Tvar _ when param -> ret := TypeSet.add ty !ret - | _ -> loop row.row_more - end - (* XXX: What about Tobject ? *) - | _ -> - iter_type_expr loop ty - end - in - loop ty; - unmark_type ty; - !ret - -let newgenconstr path tyl = newgenty (Tconstr (path, tyl, ref Mnil)) - -let constructor_existentials cd_args cd_res = - let tyl = - match cd_args with - | Cstr_tuple l -> l - | Cstr_record l -> List.map (fun l -> l.ld_type) l - in - let existentials = - match cd_res with - | None -> [] - | Some type_ret -> - let arg_vars_set = free_vars (newgenty (Ttuple tyl)) in - let res_vars = free_vars type_ret in - TypeSet.elements (TypeSet.diff arg_vars_set res_vars) - in - (tyl, existentials) - -let constructor_args priv cd_args cd_res path rep = - let tyl, existentials = constructor_existentials cd_args cd_res in - match cd_args with - | Cstr_tuple l -> existentials, l, None - | Cstr_record lbls -> - let arg_vars_set = free_vars ~param:true (newgenty (Ttuple tyl)) in - let type_params = TypeSet.elements arg_vars_set in - let type_unboxed = - match rep with - | Record_unboxed _ -> unboxed_true_default_false - | _ -> unboxed_false_default_false - in - let tdecl = - { - type_params; - type_arity = List.length type_params; - type_kind = Type_record (lbls, rep); - type_private = priv; - type_manifest = None; - type_variance = List.map (fun _ -> Variance.full) type_params; - type_newtype_level = None; - type_loc = Location.none; - type_attributes = []; - type_immediate = false; - type_unboxed; - } - in - existentials, - [ newgenconstr path type_params ], - Some tdecl - -let internal_optional = "internal.optional" - -let optional_shape : Parsetree.attribute = - {txt = internal_optional ; loc = Location.none}, Parsetree.PStr [] - -let constructor_has_optional_shape ({cstr_attributes = attrs} : constructor_description) = - List.exists (fun (x,_) -> x.txt = internal_optional) attrs - - -let constructor_descrs ty_path decl cstrs = - let ty_res = newgenconstr ty_path decl.type_params in - let num_consts = ref 0 and num_nonconsts = ref 0 and num_normal = ref 0 in - List.iter - (fun {cd_args; cd_res; _} -> - if cd_args = Cstr_tuple [] then incr num_consts else incr num_nonconsts; - if cd_res = None then incr num_normal) - cstrs; - let rec describe_constructors idx_const idx_nonconst = function - [] -> [] - | {cd_id; cd_args; cd_res; cd_loc; cd_attributes} :: rem -> - let ty_res = - match cd_res with - | Some ty_res' -> ty_res' - | None -> ty_res - in - let (tag, descr_rem) = - match cd_args with - | _ when decl.type_unboxed.unboxed -> - assert (rem = []); - (Cstr_unboxed, []) - | Cstr_tuple [] -> (Cstr_constant idx_const, - describe_constructors (idx_const+1) idx_nonconst rem) - | _ -> (Cstr_block idx_nonconst, - describe_constructors idx_const (idx_nonconst+1) rem) in - let cstr_name = Ident.name cd_id in - let existentials, cstr_args, cstr_inlined = - let representation = - if decl.type_unboxed.unboxed - then Record_unboxed true - else Record_inlined {tag = idx_nonconst; name = cstr_name; num_nonconsts = !num_nonconsts} - in - constructor_args decl.type_private cd_args cd_res - (Path.Pdot (ty_path, cstr_name, Path.nopos)) representation - in - let cstr = - { cstr_name; - cstr_res = ty_res; - cstr_existentials = existentials; - cstr_args; - cstr_arity = List.length cstr_args; - cstr_tag = tag; - cstr_consts = !num_consts; - cstr_nonconsts = !num_nonconsts; - cstr_normal = !num_normal; - cstr_private = decl.type_private; - cstr_generalized = cd_res <> None; - cstr_loc = cd_loc; - cstr_attributes = cd_attributes; - cstr_inlined; - } in - (cd_id, cstr) :: descr_rem in - let result = describe_constructors 0 0 cstrs in - match result with - | ( - [ ({Ident.name = "None"} as a_id, ({cstr_args = []} as a_descr) ) ; - ({Ident.name = "Some"} as b_id, ({ cstr_args = [_]} as b_descr)) - ] | - [ ({Ident.name = "Some"} as a_id, ({cstr_args = [_]} as a_descr) ) ; - ({Ident.name = "None"} as b_id, ({ cstr_args = []} as b_descr)) - ] - ) - -> - [ - (a_id, {a_descr with - cstr_attributes = - optional_shape :: a_descr.cstr_attributes}); - (b_id, {b_descr with - cstr_attributes = - optional_shape :: b_descr.cstr_attributes - }) - ] - | _ -> result - -let extension_descr path_ext ext = - let ty_res = - match ext.ext_ret_type with - Some type_ret -> type_ret - | None -> newgenconstr ext.ext_type_path ext.ext_type_params - in - let existentials, cstr_args, cstr_inlined = - constructor_args ext.ext_private ext.ext_args ext.ext_ret_type - path_ext Record_extension - in - { cstr_name = Path.last path_ext; - cstr_res = ty_res; - cstr_existentials = existentials; - cstr_args; - cstr_arity = List.length cstr_args; - cstr_tag = Cstr_extension(path_ext, cstr_args = []); - cstr_consts = -1; - cstr_nonconsts = -1; - cstr_private = ext.ext_private; - cstr_normal = -1; - cstr_generalized = ext.ext_ret_type <> None; - cstr_loc = ext.ext_loc; - cstr_attributes = ext.ext_attributes; - cstr_inlined; - } - -let none = {desc = Ttuple []; level = -1; id = -1} - (* Clearly ill-formed type *) -let dummy_label = - { lbl_name = ""; lbl_res = none; lbl_arg = none; lbl_mut = Immutable; - lbl_pos = (-1); lbl_all = [||]; lbl_repres = Record_regular; - lbl_private = Public; - lbl_loc = Location.none; - lbl_attributes = []; - } - -let label_descrs ty_res lbls repres priv = - let all_labels = Array.make (List.length lbls) dummy_label in - let rec describe_labels num = function - [] -> [] - | l :: rest -> - let lbl = - { lbl_name = Ident.name l.ld_id; - lbl_res = ty_res; - lbl_arg = l.ld_type; - lbl_mut = l.ld_mutable; - lbl_pos = num; - lbl_all = all_labels; - lbl_repres = repres; - lbl_private = priv; - lbl_loc = l.ld_loc; - lbl_attributes = l.ld_attributes; - } in - all_labels.(num) <- lbl; - (l.ld_id, lbl) :: describe_labels (num+1) rest in - describe_labels 0 lbls - -exception Constr_not_found - -let rec find_constr tag num_const num_nonconst = function - [] -> - raise Constr_not_found - | {cd_args = Cstr_tuple []; _} as c :: rem -> - if Types.equal_tag tag (Cstr_constant num_const) - then c - else find_constr tag (num_const + 1) num_nonconst rem - | c :: rem -> - if Types.equal_tag tag (Cstr_block num_nonconst) || tag = Cstr_unboxed - then c - else find_constr tag num_const (num_nonconst + 1) rem - -let find_constr_by_tag tag cstrlist = - find_constr tag 0 0 cstrlist - -let constructors_of_type ty_path decl = - match decl.type_kind with - | Type_variant cstrs -> constructor_descrs ty_path decl cstrs - | Type_record _ | Type_abstract | Type_open -> [] - -let labels_of_type ty_path decl = - match decl.type_kind with - | Type_record(labels, rep) -> - label_descrs (newgenconstr ty_path decl.type_params) - labels rep decl.type_private - | Type_variant _ | Type_abstract | Type_open -> [] - -(* Set row_name in Env, cf. GPR#1204/1329 *) -let set_row_name decl path = - match decl.type_manifest with - None -> () - | Some ty -> - let ty = repr ty in - match ty.desc with - Tvariant row when static_row row -> - let row = {(row_repr row) with - row_name = Some (path, decl.type_params)} in - ty.desc <- Tvariant row - | _ -> () diff --git a/src/compiler-libs-406/datarepr.mli b/src/compiler-libs-406/datarepr.mli deleted file mode 100644 index f6bc50f0..00000000 --- a/src/compiler-libs-406/datarepr.mli +++ /dev/null @@ -1,51 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Compute constructor and label descriptions from type declarations, - determining their representation. *) - -open Types - -val constructor_has_optional_shape: - Types.constructor_description -> bool - -val extension_descr: - Path.t -> extension_constructor -> constructor_description - -val labels_of_type: - Path.t -> type_declaration -> - (Ident.t * label_description) list -val constructors_of_type: - Path.t -> type_declaration -> - (Ident.t * constructor_description) list - - -exception Constr_not_found - -val find_constr_by_tag: - constructor_tag -> constructor_declaration list -> - constructor_declaration - -val constructor_existentials : - constructor_arguments -> type_expr option -> type_expr list * type_expr list -(** Takes [cd_args] and [cd_res] from a [constructor_declaration] and - returns: - - the types of the constructor's arguments - - the existential variables introduced by the constructor - *) - - -(* Set the polymorphic variant row_name field *) -val set_row_name : type_declaration -> Path.t -> unit diff --git a/src/compiler-libs-406/docstrings.ml b/src/compiler-libs-406/docstrings.ml deleted file mode 100644 index 5de6d4d4..00000000 --- a/src/compiler-libs-406/docstrings.ml +++ /dev/null @@ -1,343 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Leo White *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Location - -(* Docstrings *) - -(* A docstring is "attached" if it has been inserted in the AST. This - is used for generating unexpected docstring warnings. *) -type ds_attached = - | Unattached (* Not yet attached anything.*) - | Info (* Attached to a field or constructor. *) - | Docs (* Attached to an item or as floating text. *) - -(* A docstring is "associated" with an item if there are no blank lines between - them. This is used for generating docstring ambiguity warnings. *) -type ds_associated = - | Zero (* Not associated with an item *) - | One (* Associated with one item *) - | Many (* Associated with multiple items (ambiguity) *) - -type docstring = - { ds_body: string; - ds_loc: Location.t; - mutable ds_attached: ds_attached; - mutable ds_associated: ds_associated; } - -(* List of docstrings *) - -let docstrings : docstring list ref = ref [] - -(* Warn for unused and ambiguous docstrings *) - -let warn_bad_docstrings () = - if Warnings.is_active (Warnings.Bad_docstring true) then begin - List.iter - (fun ds -> - match ds.ds_attached with - | Info -> () - | Unattached -> - prerr_warning ds.ds_loc (Warnings.Bad_docstring true) - | Docs -> - match ds.ds_associated with - | Zero | One -> () - | Many -> - prerr_warning ds.ds_loc (Warnings.Bad_docstring false)) - (List.rev !docstrings) -end - -(* Docstring constructors and destructors *) - -let docstring body loc = - let ds = - { ds_body = body; - ds_loc = loc; - ds_attached = Unattached; - ds_associated = Zero; } - in - ds - -let register ds = - docstrings := ds :: !docstrings - -let docstring_body ds = ds.ds_body - -let docstring_loc ds = ds.ds_loc - -(* Docstrings attached to items *) - -type docs = - { docs_pre: docstring option; - docs_post: docstring option; } - -let empty_docs = { docs_pre = None; docs_post = None } - -let doc_loc = {txt = "ocaml.doc"; loc = Location.none} - -let docs_attr ds = - let open Parsetree in - let exp = - { pexp_desc = Pexp_constant (Pconst_string(ds.ds_body, None)); - pexp_loc = ds.ds_loc; - pexp_attributes = []; } - in - let item = - { pstr_desc = Pstr_eval (exp, []); pstr_loc = exp.pexp_loc } - in - (doc_loc, PStr [item]) - -let add_docs_attrs docs attrs = - let attrs = - match docs.docs_pre with - | None | Some { ds_body=""; _ } -> attrs - | Some ds -> docs_attr ds :: attrs - in - let attrs = - match docs.docs_post with - | None | Some { ds_body=""; _ } -> attrs - | Some ds -> attrs @ [docs_attr ds] - in - attrs - -(* Docstrings attached to constructors or fields *) - -type info = docstring option - -let empty_info = None - -let info_attr = docs_attr - -let add_info_attrs info attrs = - match info with - | None | Some {ds_body=""; _} -> attrs - | Some ds -> attrs @ [info_attr ds] - -(* Docstrings not attached to a specific item *) - -type text = docstring list - -let empty_text = [] -let empty_text_lazy = lazy [] - -let text_loc = {txt = "ocaml.text"; loc = Location.none} - -let text_attr ds = - let open Parsetree in - let exp = - { pexp_desc = Pexp_constant (Pconst_string(ds.ds_body, None)); - pexp_loc = ds.ds_loc; - pexp_attributes = []; } - in - let item = - { pstr_desc = Pstr_eval (exp, []); pstr_loc = exp.pexp_loc } - in - (text_loc, PStr [item]) - -let add_text_attrs dsl attrs = - let fdsl = List.filter (function {ds_body=""} -> false| _ ->true) dsl in - (List.map text_attr fdsl) @ attrs - -(* Find the first non-info docstring in a list, attach it and return it *) -let get_docstring ~info dsl = - let rec loop = function - | [] -> None - | {ds_attached = Info; _} :: rest -> loop rest - | ds :: _ -> - ds.ds_attached <- if info then Info else Docs; - Some ds - in - loop dsl - -(* Find all the non-info docstrings in a list, attach them and return them *) -let get_docstrings dsl = - let rec loop acc = function - | [] -> List.rev acc - | {ds_attached = Info; _} :: rest -> loop acc rest - | ds :: rest -> - ds.ds_attached <- Docs; - loop (ds :: acc) rest - in - loop [] dsl - -(* "Associate" all the docstrings in a list *) -let associate_docstrings dsl = - List.iter - (fun ds -> - match ds.ds_associated with - | Zero -> ds.ds_associated <- One - | (One | Many) -> ds.ds_associated <- Many) - dsl - -(* Map from positions to pre docstrings *) - -let pre_table : (Lexing.position, docstring list) Hashtbl.t = - Hashtbl.create 50 - -let set_pre_docstrings pos dsl = - if dsl <> [] then Hashtbl.add pre_table pos dsl - -let get_pre_docs pos = - try - let dsl = Hashtbl.find pre_table pos in - associate_docstrings dsl; - get_docstring ~info:false dsl - with Not_found -> None - -let mark_pre_docs pos = - try - let dsl = Hashtbl.find pre_table pos in - associate_docstrings dsl - with Not_found -> () - -(* Map from positions to post docstrings *) - -let post_table : (Lexing.position, docstring list) Hashtbl.t = - Hashtbl.create 50 - -let set_post_docstrings pos dsl = - if dsl <> [] then Hashtbl.add post_table pos dsl - -let get_post_docs pos = - try - let dsl = Hashtbl.find post_table pos in - associate_docstrings dsl; - get_docstring ~info:false dsl - with Not_found -> None - -let mark_post_docs pos = - try - let dsl = Hashtbl.find post_table pos in - associate_docstrings dsl - with Not_found -> () - -let get_info pos = - try - let dsl = Hashtbl.find post_table pos in - get_docstring ~info:true dsl - with Not_found -> None - -(* Map from positions to floating docstrings *) - -let floating_table : (Lexing.position, docstring list) Hashtbl.t = - Hashtbl.create 50 - -let set_floating_docstrings pos dsl = - if dsl <> [] then Hashtbl.add floating_table pos dsl - -let get_text pos = - try - let dsl = Hashtbl.find floating_table pos in - get_docstrings dsl - with Not_found -> [] - -(* Maps from positions to extra docstrings *) - -let pre_extra_table : (Lexing.position, docstring list) Hashtbl.t = - Hashtbl.create 50 - -let set_pre_extra_docstrings pos dsl = - if dsl <> [] then Hashtbl.add pre_extra_table pos dsl - -let get_pre_extra_text pos = - try - let dsl = Hashtbl.find pre_extra_table pos in - get_docstrings dsl - with Not_found -> [] - -let post_extra_table : (Lexing.position, docstring list) Hashtbl.t = - Hashtbl.create 50 - -let set_post_extra_docstrings pos dsl = - if dsl <> [] then Hashtbl.add post_extra_table pos dsl - -let get_post_extra_text pos = - try - let dsl = Hashtbl.find post_extra_table pos in - get_docstrings dsl - with Not_found -> [] - -(* Docstrings from parser actions *) - -let symbol_docs () = - { docs_pre = get_pre_docs (Parsing.symbol_start_pos ()); - docs_post = get_post_docs (Parsing.symbol_end_pos ()); } - -let symbol_docs_lazy () = - let p1 = Parsing.symbol_start_pos () in - let p2 = Parsing.symbol_end_pos () in - lazy { docs_pre = get_pre_docs p1; - docs_post = get_post_docs p2; } - -let rhs_docs pos1 pos2 = - { docs_pre = get_pre_docs (Parsing.rhs_start_pos pos1); - docs_post = get_post_docs (Parsing.rhs_end_pos pos2); } - -let rhs_docs_lazy pos1 pos2 = - let p1 = Parsing.rhs_start_pos pos1 in - let p2 = Parsing.rhs_end_pos pos2 in - lazy { docs_pre = get_pre_docs p1; - docs_post = get_post_docs p2; } - -let mark_symbol_docs () = - mark_pre_docs (Parsing.symbol_start_pos ()); - mark_post_docs (Parsing.symbol_end_pos ()) - -let mark_rhs_docs pos1 pos2 = - mark_pre_docs (Parsing.rhs_start_pos pos1); - mark_post_docs (Parsing.rhs_end_pos pos2) - -let symbol_info () = - get_info (Parsing.symbol_end_pos ()) - -let rhs_info pos = - get_info (Parsing.rhs_end_pos pos) - -let symbol_text () = - get_text (Parsing.symbol_start_pos ()) - -let symbol_text_lazy () = - let pos = Parsing.symbol_start_pos () in - lazy (get_text pos) - -let rhs_text pos = - get_text (Parsing.rhs_start_pos pos) - -let rhs_text_lazy pos = - let pos = Parsing.rhs_start_pos pos in - lazy (get_text pos) - -let symbol_pre_extra_text () = - get_pre_extra_text (Parsing.symbol_start_pos ()) - -let symbol_post_extra_text () = - get_post_extra_text (Parsing.symbol_end_pos ()) - -let rhs_pre_extra_text pos = - get_pre_extra_text (Parsing.rhs_start_pos pos) - -let rhs_post_extra_text pos = - get_post_extra_text (Parsing.rhs_end_pos pos) - - -(* (Re)Initialise all comment state *) - -let init () = - docstrings := []; - Hashtbl.reset pre_table; - Hashtbl.reset post_table; - Hashtbl.reset floating_table; - Hashtbl.reset pre_extra_table; - Hashtbl.reset post_extra_table diff --git a/src/compiler-libs-406/docstrings.mli b/src/compiler-libs-406/docstrings.mli deleted file mode 100644 index 892a80e2..00000000 --- a/src/compiler-libs-406/docstrings.mli +++ /dev/null @@ -1,157 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Leo White *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Documentation comments *) - -(** (Re)Initialise all docstring state *) -val init : unit -> unit - -(** Emit warnings for unattached and ambiguous docstrings *) -val warn_bad_docstrings : unit -> unit - -(** {2 Docstrings} *) - -(** Documentation comments *) -type docstring - -(** Create a docstring *) -val docstring : string -> Location.t -> docstring - -(** Register a docstring *) -val register : docstring -> unit - -(** Get the text of a docstring *) -val docstring_body : docstring -> string - -(** Get the location of a docstring *) -val docstring_loc : docstring -> Location.t - -(** {2 Set functions} - - These functions are used by the lexer to associate docstrings to - the locations of tokens. *) - -(** Docstrings immediately preceding a token *) -val set_pre_docstrings : Lexing.position -> docstring list -> unit - -(** Docstrings immediately following a token *) -val set_post_docstrings : Lexing.position -> docstring list -> unit - -(** Docstrings not immediately adjacent to a token *) -val set_floating_docstrings : Lexing.position -> docstring list -> unit - -(** Docstrings immediately following the token which precedes this one *) -val set_pre_extra_docstrings : Lexing.position -> docstring list -> unit - -(** Docstrings immediately preceding the token which follows this one *) -val set_post_extra_docstrings : Lexing.position -> docstring list -> unit - -(** {2 Items} - - The {!docs} type represents documentation attached to an item. *) - -type docs = - { docs_pre: docstring option; - docs_post: docstring option; } - -val empty_docs : docs - -val docs_attr : docstring -> Parsetree.attribute - -(** Convert item documentation to attributes and add them to an - attribute list *) -val add_docs_attrs : docs -> Parsetree.attributes -> Parsetree.attributes - -(** Fetch the item documentation for the current symbol. This also - marks this documentation (for ambiguity warnings). *) -val symbol_docs : unit -> docs -val symbol_docs_lazy : unit -> docs Lazy.t - -(** Fetch the item documentation for the symbols between two - positions. This also marks this documentation (for ambiguity - warnings). *) -val rhs_docs : int -> int -> docs -val rhs_docs_lazy : int -> int -> docs Lazy.t - -(** Mark the item documentation for the current symbol (for ambiguity - warnings). *) -val mark_symbol_docs : unit -> unit - -(** Mark as associated the item documentation for the symbols between - two positions (for ambiguity warnings) *) -val mark_rhs_docs : int -> int -> unit - -(** {2 Fields and constructors} - - The {!info} type represents documentation attached to a field or - constructor. *) - -type info = docstring option - -val empty_info : info - -val info_attr : docstring -> Parsetree.attribute - -(** Convert field info to attributes and add them to an - attribute list *) -val add_info_attrs : info -> Parsetree.attributes -> Parsetree.attributes - -(** Fetch the field info for the current symbol. *) -val symbol_info : unit -> info - -(** Fetch the field info following the symbol at a given position. *) -val rhs_info : int -> info - -(** {2 Unattached comments} - - The {!text} type represents documentation which is not attached to - anything. *) - -type text = docstring list - -val empty_text : text -val empty_text_lazy : text Lazy.t - -val text_attr : docstring -> Parsetree.attribute - -(** Convert text to attributes and add them to an attribute list *) -val add_text_attrs : text -> Parsetree.attributes -> Parsetree.attributes - -(** Fetch the text preceding the current symbol. *) -val symbol_text : unit -> text -val symbol_text_lazy : unit -> text Lazy.t - -(** Fetch the text preceding the symbol at the given position. *) -val rhs_text : int -> text -val rhs_text_lazy : int -> text Lazy.t - -(** {2 Extra text} - - There may be additional text attached to the delimiters of a block - (e.g. [struct] and [end]). This is fetched by the following - functions, which are applied to the contents of the block rather - than the delimiters. *) - -(** Fetch additional text preceding the current symbol *) -val symbol_pre_extra_text : unit -> text - -(** Fetch additional text following the current symbol *) -val symbol_post_extra_text : unit -> text - -(** Fetch additional text preceding the symbol at the given position *) -val rhs_pre_extra_text : int -> text - -(** Fetch additional text following the symbol at the given position *) -val rhs_post_extra_text : int -> text diff --git a/src/compiler-libs-406/dune b/src/compiler-libs-406/dune deleted file mode 100644 index 9b0e0fc8..00000000 --- a/src/compiler-libs-406/dune +++ /dev/null @@ -1,5 +0,0 @@ -(library - (name compilerlibs406) - (flags "-w" "-9") - (modules_without_implementation asttypes outcometree parsetree) - (libraries )) \ No newline at end of file diff --git a/src/compiler-libs-406/env.ml b/src/compiler-libs-406/env.ml deleted file mode 100644 index 469d552d..00000000 --- a/src/compiler-libs-406/env.ml +++ /dev/null @@ -1,2373 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Environment handling *) - -open Cmi_format -open Config -open Misc -open Asttypes -open Longident -open Path -open Types -open Btype - -let add_delayed_check_forward = ref (fun _ -> assert false) - -let value_declarations : ((string * Location.t), (unit -> unit)) Hashtbl.t = - Hashtbl.create 16 - (* This table is used to usage of value declarations. A declaration is - identified with its name and location. The callback attached to a - declaration is called whenever the value is used explicitly - (lookup_value) or implicitly (inclusion test between signatures, - cf Includemod.value_descriptions). *) - -let type_declarations = Hashtbl.create 16 -let module_declarations = Hashtbl.create 16 - -type constructor_usage = Positive | Pattern | Privatize -type constructor_usages = - { - mutable cu_positive: bool; - mutable cu_pattern: bool; - mutable cu_privatize: bool; - } -let add_constructor_usage cu = function - | Positive -> cu.cu_positive <- true - | Pattern -> cu.cu_pattern <- true - | Privatize -> cu.cu_privatize <- true -let constructor_usages () = - {cu_positive = false; cu_pattern = false; cu_privatize = false} - -let used_constructors : - (string * Location.t * string, (constructor_usage -> unit)) Hashtbl.t - = Hashtbl.create 16 - -let prefixed_sg = Hashtbl.create 113 - -type error = - | Illegal_renaming of string * string * string - | Inconsistent_import of string * string * string - | Need_recursive_types of string * string - | Depend_on_unsafe_string_unit of string * string - | Missing_module of Location.t * Path.t * Path.t - | Illegal_value_name of Location.t * string - -exception Error of error - -let error err = raise (Error err) - -module EnvLazy : sig - type ('a,'b) t - - type log - - val force : ('a -> 'b) -> ('a,'b) t -> 'b - val create : 'a -> ('a,'b) t - val get_arg : ('a,'b) t -> 'a option - - (* [force_logged log f t] is equivalent to [force f t] but if [f] returns [None] then - [t] is recorded in [log]. [backtrack log] will then reset all the recorded [t]s back - to their original state. *) - val log : unit -> log - val force_logged : log -> ('a -> 'b option) -> ('a,'b option) t -> 'b option - val backtrack : log -> unit - -end = struct - - type ('a,'b) t = ('a,'b) eval ref - - and ('a,'b) eval = - | Done of 'b - | Raise of exn - | Thunk of 'a - - type undo = - | Nil - | Cons : ('a, 'b) t * 'a * undo -> undo - - type log = undo ref - - let force f x = - match !x with - | Done x -> x - | Raise e -> raise e - | Thunk e -> - match f e with - | y -> - x := Done y; - y - | exception e -> - x := Raise e; - raise e - - let get_arg x = - match !x with Thunk a -> Some a | _ -> None - - let create x = - ref (Thunk x) - - let log () = - ref Nil - - let force_logged log f x = - match !x with - | Done x -> x - | Raise e -> raise e - | Thunk e -> - match f e with - | None -> - x := Done None; - log := Cons(x, e, !log); - None - | Some _ as y -> - x := Done y; - y - | exception e -> - x := Raise e; - raise e - - let backtrack log = - let rec loop = function - | Nil -> () - | Cons(x, e, rest) -> - x := Thunk e; - loop rest - in - loop !log - -end - -module PathMap = Map.Make(Path) - -type summary = - Env_empty - | Env_value of summary * Ident.t * value_description - | Env_type of summary * Ident.t * type_declaration - | Env_extension of summary * Ident.t * extension_constructor - | Env_module of summary * Ident.t * module_declaration - | Env_modtype of summary * Ident.t * modtype_declaration - | Env_class of summary * Ident.t * class_declaration - | Env_cltype of summary * Ident.t * class_type_declaration - | Env_open of summary * Path.t - | Env_functor_arg of summary * Ident.t - | Env_constraints of summary * type_declaration PathMap.t - | Env_copy_types of summary * string list - -module TycompTbl = - struct - (** This module is used to store components of types (i.e. labels - and constructors). We keep a representation of each nested - "open" and the set of local bindings between each of them. *) - - type 'a t = { - current: 'a Ident.tbl; - (** Local bindings since the last open. *) - - opened: 'a opened option; - (** Symbolic representation of the last (innermost) open, if any. *) - } - - and 'a opened = { - components: (string, 'a list) Tbl.t; - (** Components from the opened module. We keep a list of - bindings for each name, as in comp_labels and - comp_constrs. *) - - using: (string -> ('a * 'a) option -> unit) option; - (** A callback to be applied when a component is used from this - "open". This is used to detect unused "opens". The - arguments are used to detect shadowing. *) - - next: 'a t; - (** The table before opening the module. *) - } - - let empty = { current = Ident.empty; opened = None } - - let add id x tbl = - {tbl with current = Ident.add id x tbl.current} - - let add_open slot wrap components next = - let using = - match slot with - | None -> None - | Some f -> Some (fun s x -> f s (wrap x)) - in - { - current = Ident.empty; - opened = Some {using; components; next}; - } - - let rec find_same id tbl = - try Ident.find_same id tbl.current - with Not_found as exn -> - begin match tbl.opened with - | Some {next; _} -> find_same id next - | None -> raise exn - end - - let nothing = fun () -> () - - let mk_callback rest name desc = function - | None -> nothing - | Some f -> - (fun () -> - match rest with - | [] -> f name None - | (hidden, _) :: _ -> f name (Some (desc, hidden)) - ) - - let rec find_all name tbl = - List.map (fun (_id, desc) -> desc, nothing) - (Ident.find_all name tbl.current) @ - match tbl.opened with - | None -> [] - | Some {using; next; components} -> - let rest = find_all name next in - match Tbl.find_str name components with - | exception Not_found -> rest - | opened -> - List.map - (fun desc -> desc, mk_callback rest name desc using) - opened - @ rest - - let rec fold_name f tbl acc = - let acc = Ident.fold_name (fun _id d -> f d) tbl.current acc in - match tbl.opened with - | Some {using = _; next; components} -> - acc - |> Tbl.fold - (fun _name -> List.fold_right (fun desc -> f desc)) - components - |> fold_name f next - | None -> - acc - - let rec local_keys tbl acc = - let acc = Ident.fold_all (fun k _ accu -> k::accu) tbl.current acc in - match tbl.opened with - | Some o -> local_keys o.next acc - | None -> acc - - let diff_keys is_local tbl1 tbl2 = - let keys2 = local_keys tbl2 [] in - List.filter - (fun id -> - is_local (find_same id tbl2) && - try ignore (find_same id tbl1); false - with Not_found -> true) - keys2 - - end - - -module IdTbl = - struct - (** This module is used to store all kinds of components except - (labels and constructors) in environments. We keep a - representation of each nested "open" and the set of local - bindings between each of them. *) - - - type 'a t = { - current: 'a Ident.tbl; - (** Local bindings since the last open *) - - opened: 'a opened option; - (** Symbolic representation of the last (innermost) open, if any. *) - } - - and 'a opened = { - root: Path.t; - (** The path of the opened module, to be prefixed in front of - its local names to produce a valid path in the current - environment. *) - - components: (string, 'a * int) Tbl.t; - (** Components from the opened module. *) - - using: (string -> ('a * 'a) option -> unit) option; - (** A callback to be applied when a component is used from this - "open". This is used to detect unused "opens". The - arguments are used to detect shadowing. *) - - next: 'a t; - (** The table before opening the module. *) - } - - let empty = { current = Ident.empty; opened = None } - - let add id x tbl = - {tbl with current = Ident.add id x tbl.current} - - let add_open slot wrap root components next = - let using = - match slot with - | None -> None - | Some f -> Some (fun s x -> f s (wrap x)) - in - { - current = Ident.empty; - opened = Some {using; root; components; next}; - } - - let rec find_same id tbl = - try Ident.find_same id tbl.current - with Not_found as exn -> - begin match tbl.opened with - | Some {next; _} -> find_same id next - | None -> raise exn - end - - let rec find_name mark name tbl = - try - let (id, desc) = Ident.find_name name tbl.current in - Pident id, desc - with Not_found as exn -> - begin match tbl.opened with - | Some {using; root; next; components} -> - begin try - let (descr, pos) = Tbl.find_str name components in - let res = Pdot (root, name, pos), descr in - if mark then begin match using with - | None -> () - | Some f -> - begin try f name (Some (snd (find_name false name next), snd res)) - with Not_found -> f name None - end - end; - res - with Not_found -> - find_name mark name next - end - | None -> - raise exn - end - - let find_name name tbl = find_name true name tbl - - let rec update name f tbl = - try - let (id, desc) = Ident.find_name name tbl.current in - let new_desc = f desc in - {tbl with current = Ident.add id new_desc tbl.current} - with Not_found -> - begin match tbl.opened with - | Some {root; using; next; components} -> - begin try - let (desc, pos) = Tbl.find_str name components in - let new_desc = f desc in - let components = Tbl.add name (new_desc, pos) components in - {tbl with opened = Some {root; using; next; components}} - with Not_found -> - let next = update name f next in - {tbl with opened = Some {root; using; next; components}} - end - | None -> - tbl - end - - - - let rec find_all name tbl = - List.map (fun (id, desc) -> Pident id, desc) (Ident.find_all name tbl.current) @ - match tbl.opened with - | None -> [] - | Some {root; using = _; next; components} -> - try - let (desc, pos) = Tbl.find_str name components in - (Pdot (root, name, pos), desc) :: find_all name next - with Not_found -> - find_all name next - - let rec fold_name f tbl acc = - let acc = Ident.fold_name (fun id d -> f (Ident.name id) (Pident id, d)) tbl.current acc in - match tbl.opened with - | Some {root; using = _; next; components} -> - acc - |> Tbl.fold - (fun name (desc, pos) -> f name (Pdot (root, name, pos), desc)) - components - |> fold_name f next - | None -> - acc - - let rec local_keys tbl acc = - let acc = Ident.fold_all (fun k _ accu -> k::accu) tbl.current acc in - match tbl.opened with - | Some o -> local_keys o.next acc - | None -> acc - - - let rec iter f tbl = - Ident.iter (fun id desc -> f id (Pident id, desc)) tbl.current; - match tbl.opened with - | Some {root; using = _; next; components} -> - Tbl.iter - (fun s (x, pos) -> f (Ident.hide (Ident.create s) (* ??? *)) (Pdot (root, s, pos), x)) - components; - iter f next - | None -> () - - let diff_keys tbl1 tbl2 = - let keys2 = local_keys tbl2 [] in - List.filter - (fun id -> - try ignore (find_same id tbl1); false - with Not_found -> true) - keys2 - - - end - -type type_descriptions = - constructor_description list * label_description list - -let in_signature_flag = 0x01 -let implicit_coercion_flag = 0x02 - -type t = { - values: value_description IdTbl.t; - constrs: constructor_description TycompTbl.t; - labels: label_description TycompTbl.t; - types: (type_declaration * type_descriptions) IdTbl.t; - modules: (Subst.t * module_declaration, module_declaration) EnvLazy.t IdTbl.t; - modtypes: modtype_declaration IdTbl.t; - components: module_components IdTbl.t; - classes: class_declaration IdTbl.t; - cltypes: class_type_declaration IdTbl.t; - functor_args: unit Ident.tbl; - summary: summary; - local_constraints: type_declaration PathMap.t; - gadt_instances: (int * TypeSet.t ref) list; - flags: int; -} - -and module_components = - { - deprecated: string option; - loc: Location.t; - comps: - (t * Subst.t * Path.t * Types.module_type, module_components_repr option) - EnvLazy.t; - } - -and module_components_repr = - Structure_comps of structure_components - | Functor_comps of functor_components - -and 'a comp_tbl = (string, ('a * int)) Tbl.t - -and structure_components = { - mutable comp_values: value_description comp_tbl; - mutable comp_constrs: (string, constructor_description list) Tbl.t; - mutable comp_labels: (string, label_description list) Tbl.t; - mutable comp_types: (type_declaration * type_descriptions) comp_tbl; - mutable comp_modules: - (Subst.t * module_declaration, module_declaration) EnvLazy.t comp_tbl; - mutable comp_modtypes: modtype_declaration comp_tbl; - mutable comp_components: module_components comp_tbl; - mutable comp_classes: class_declaration comp_tbl; - mutable comp_cltypes: class_type_declaration comp_tbl; -} - -and functor_components = { - fcomp_param: Ident.t; (* Formal parameter *) - fcomp_arg: module_type option; (* Argument signature *) - fcomp_res: module_type; (* Result signature *) - fcomp_cache: (Path.t, module_components) Hashtbl.t; (* For memoization *) - fcomp_subst_cache: (Path.t, module_type) Hashtbl.t -} - -let copy_local ~from env = - { env with - local_constraints = from.local_constraints; - gadt_instances = from.gadt_instances; - flags = from.flags } - -let same_constr = ref (fun _ _ _ -> assert false) - -(* Helper to decide whether to report an identifier shadowing - by some 'open'. For labels and constructors, we do not report - if the two elements are from the same re-exported declaration. - - Later, one could also interpret some attributes on value and - type declarations to silence the shadowing warnings. *) - -let check_shadowing env = function - | `Constructor (Some (c1, c2)) - when not (!same_constr env c1.cstr_res c2.cstr_res) -> - Some "constructor" - | `Label (Some (l1, l2)) - when not (!same_constr env l1.lbl_res l2.lbl_res) -> - Some "label" - | `Value (Some _) -> Some "value" - | `Type (Some _) -> Some "type" - | `Module (Some _) | `Component (Some _) -> Some "module" - | `Module_type (Some _) -> Some "module type" - | `Class (Some _) -> Some "class" - | `Class_type (Some _) -> Some "class type" - | `Constructor _ | `Label _ - | `Value None | `Type None | `Module None | `Module_type None - | `Class None | `Class_type None | `Component None -> - None - -let subst_modtype_maker (subst, md) = - if subst == Subst.identity then md - else {md with md_type = Subst.modtype subst md.md_type} - -let empty = { - values = IdTbl.empty; constrs = TycompTbl.empty; - labels = TycompTbl.empty; types = IdTbl.empty; - modules = IdTbl.empty; modtypes = IdTbl.empty; - components = IdTbl.empty; classes = IdTbl.empty; - cltypes = IdTbl.empty; - summary = Env_empty; local_constraints = PathMap.empty; gadt_instances = []; - flags = 0; - functor_args = Ident.empty; - } - -let in_signature b env = - let flags = - if b then env.flags lor in_signature_flag - else env.flags land (lnot in_signature_flag) - in - {env with flags} - -let implicit_coercion env = - {env with flags = env.flags lor implicit_coercion_flag} - -let is_in_signature env = env.flags land in_signature_flag <> 0 -let is_implicit_coercion env = env.flags land implicit_coercion_flag <> 0 - -let is_ident = function - Pident _ -> true - | Pdot _ | Papply _ -> false - -let is_local_ext = function - | {cstr_tag = Cstr_extension(p, _)} -> is_ident p - | _ -> false - -let diff env1 env2 = - IdTbl.diff_keys env1.values env2.values @ - TycompTbl.diff_keys is_local_ext env1.constrs env2.constrs @ - IdTbl.diff_keys env1.modules env2.modules @ - IdTbl.diff_keys env1.classes env2.classes - -type can_load_cmis = - | Can_load_cmis - | Cannot_load_cmis of EnvLazy.log - -let can_load_cmis = ref Can_load_cmis - -let without_cmis f x = - let log = EnvLazy.log () in - let res = - Misc.(protect_refs - [R (can_load_cmis, Cannot_load_cmis log)] - (fun () -> f x)) - in - EnvLazy.backtrack log; - res - -(* Forward declarations *) - -let components_of_module' = - ref ((fun ~deprecated:_ ~loc:_ _env _sub _path _mty -> assert false) : - deprecated:string option -> loc:Location.t -> t -> Subst.t -> - Path.t -> module_type -> - module_components) -let components_of_module_maker' = - ref ((fun (_env, _sub, _path, _mty) -> assert false) : - t * Subst.t * Path.t * module_type -> module_components_repr option) -let components_of_functor_appl' = - ref ((fun _f _env _p1 _p2 -> assert false) : - functor_components -> t -> Path.t -> Path.t -> module_components) -let check_modtype_inclusion = - (* to be filled with Includemod.check_modtype_inclusion *) - ref ((fun ~loc:_ _env _mty1 _path1 _mty2 -> assert false) : - loc:Location.t -> t -> module_type -> Path.t -> module_type -> unit) -let strengthen = - (* to be filled with Mtype.strengthen *) - ref ((fun ~aliasable:_ _env _mty _path -> assert false) : - aliasable:bool -> t -> module_type -> Path.t -> module_type) - -let md md_type = - {md_type; md_attributes=[]; md_loc=Location.none} - -let get_components_opt c = - match !can_load_cmis with - | Can_load_cmis -> - EnvLazy.force !components_of_module_maker' c.comps - | Cannot_load_cmis log -> - EnvLazy.force_logged log !components_of_module_maker' c.comps - -let empty_structure = - Structure_comps { - comp_values = Tbl.empty; - comp_constrs = Tbl.empty; - comp_labels = Tbl.empty; - comp_types = Tbl.empty; - comp_modules = Tbl.empty; comp_modtypes = Tbl.empty; - comp_components = Tbl.empty; comp_classes = Tbl.empty; - comp_cltypes = Tbl.empty } - -let get_components c = - match get_components_opt c with - | None -> empty_structure - | Some c -> c - -(* The name of the compilation unit currently compiled. - "" if outside a compilation unit. *) - -let current_unit = ref "" - -(* Persistent structure descriptions *) - -type pers_struct = - { ps_name: string; - ps_sig: signature Lazy.t; - ps_comps: module_components; - ps_crcs: (string * Digest.t option) list; - ps_filename: string; - ps_flags: pers_flags list } - -let persistent_structures = - (Hashtbl.create 17 : (string, pers_struct option) Hashtbl.t) - -(* Consistency between persistent structures *) - -let crc_units = Consistbl.create() - -module StringSet = - Set.Make(struct type t = string let compare = String.compare end) - -let imported_units = ref StringSet.empty - -let add_import s = - imported_units := StringSet.add s !imported_units - -let imported_opaque_units = ref StringSet.empty - -let add_imported_opaque s = - imported_opaque_units := StringSet.add s !imported_opaque_units - -let clear_imports () = - Consistbl.clear crc_units; - imported_units := StringSet.empty; - imported_opaque_units := StringSet.empty - -let check_consistency ps = - try - List.iter - (fun (name, crco) -> - match crco with - None -> () - | Some crc -> - add_import name; - Consistbl.check crc_units name crc ps.ps_filename) - ps.ps_crcs; - with Consistbl.Inconsistency(name, source, auth) -> - error (Inconsistent_import(name, auth, source)) - -(* Reading persistent structures from .cmi files *) - -let save_pers_struct crc ps = - let modname = ps.ps_name in - Hashtbl.add persistent_structures modname (Some ps); - List.iter - (function - | Rectypes -> () - | Deprecated _ -> () - | Unsafe_string -> () - | Opaque -> add_imported_opaque modname) - ps.ps_flags; - Consistbl.set crc_units modname crc ps.ps_filename; - add_import modname - -module Persistent_signature = struct - type t = - { filename : string; - cmi : Cmi_format.cmi_infos } - - let load = ref (fun ~unit_name -> - match find_in_path_uncap !load_path (unit_name ^ ".cmi") with - | filename -> Some { filename; cmi = read_cmi filename } - | exception Not_found -> None) -end - -let acknowledge_pers_struct check modname - { Persistent_signature.filename; cmi } = - let name = cmi.cmi_name in - let sign = cmi.cmi_sign in - let crcs = cmi.cmi_crcs in - let flags = cmi.cmi_flags in - let deprecated = - List.fold_left (fun acc -> function Deprecated s -> Some s | _ -> acc) None - flags - in - let comps = - !components_of_module' ~deprecated ~loc:Location.none - empty Subst.identity - (Pident(Ident.create_persistent name)) - (Mty_signature sign) - in - let ps = { ps_name = name; - ps_sig = lazy (Subst.signature Subst.identity sign); - ps_comps = comps; - ps_crcs = crcs; - ps_filename = filename; - ps_flags = flags; - } in - if ps.ps_name <> modname then - error (Illegal_renaming(modname, ps.ps_name, filename)); - - List.iter - (function - | Rectypes -> - error (Need_recursive_types(ps.ps_name, !current_unit)) - | Unsafe_string -> - error (Depend_on_unsafe_string_unit (ps.ps_name, !current_unit)); - | Deprecated _ -> () - | Opaque -> add_imported_opaque modname) - ps.ps_flags; - if check then check_consistency ps; - Hashtbl.add persistent_structures modname (Some ps); - ps - -let read_pers_struct check modname filename = - add_import modname; - let cmi = read_cmi filename in - acknowledge_pers_struct check modname - { Persistent_signature.filename; cmi } - -let find_pers_struct check name = - if name = "*predef*" then raise Not_found; - match Hashtbl.find persistent_structures name with - | Some ps -> ps - | None -> raise Not_found - | exception Not_found -> - match !can_load_cmis with - | Cannot_load_cmis _ -> raise Not_found - | Can_load_cmis -> - let ps = - match !Persistent_signature.load ~unit_name:name with - | Some ps -> ps - | None -> - Hashtbl.add persistent_structures name None; - raise Not_found - in - add_import name; - acknowledge_pers_struct check name ps - -(* Emits a warning if there is no valid cmi for name *) -let check_pers_struct name = - try - ignore (find_pers_struct false name) - with - | Not_found -> - let warn = Warnings.No_cmi_file(name, None) in - Location.prerr_warning Location.none warn - | Cmi_format.Error err -> - let msg = Format.asprintf "%a" Cmi_format.report_error err in - let warn = Warnings.No_cmi_file(name, Some msg) in - Location.prerr_warning Location.none warn - | Error err -> - let msg = - match err with - | Illegal_renaming(name, ps_name, filename) -> - Format.asprintf - " %a@ contains the compiled interface for @ \ - %s when %s was expected" - Location.print_filename filename ps_name name - | Inconsistent_import _ -> assert false - | Need_recursive_types(name, _) -> - Format.sprintf - "%s uses recursive types" - name - | Depend_on_unsafe_string_unit (name, _) -> - Printf.sprintf "%s uses -unsafe-string" - name - | Missing_module _ -> assert false - | Illegal_value_name _ -> assert false - in - let warn = Warnings.No_cmi_file(name, Some msg) in - Location.prerr_warning Location.none warn - -let read_pers_struct modname filename = - read_pers_struct true modname filename - -let find_pers_struct name = - find_pers_struct true name - -let check_pers_struct name = - if not (Hashtbl.mem persistent_structures name) then begin - (* PR#6843: record the weak dependency ([add_import]) regardless of - whether the check succeeds, to help make builds more - deterministic. *) - add_import name; - if (Warnings.is_active (Warnings.No_cmi_file("", None))) then - !add_delayed_check_forward - (fun () -> check_pers_struct name) - end - -let reset_cache () = - current_unit := ""; - Hashtbl.clear persistent_structures; - clear_imports (); - Hashtbl.clear value_declarations; - Hashtbl.clear type_declarations; - Hashtbl.clear module_declarations; - Hashtbl.clear used_constructors; - Hashtbl.clear prefixed_sg - -let reset_cache_toplevel () = - (* Delete 'missing cmi' entries from the cache. *) - let l = - Hashtbl.fold - (fun name r acc -> if r = None then name :: acc else acc) - persistent_structures [] - in - List.iter (Hashtbl.remove persistent_structures) l; - Hashtbl.clear value_declarations; - Hashtbl.clear type_declarations; - Hashtbl.clear module_declarations; - Hashtbl.clear used_constructors; - Hashtbl.clear prefixed_sg - - -let set_unit_name name = - current_unit := name - -let get_unit_name () = - !current_unit - -(* Lookup by identifier *) - -let rec find_module_descr path env = - match path with - Pident id -> - begin try - IdTbl.find_same id env.components - with Not_found -> - if Ident.persistent id && not (Ident.name id = !current_unit) - then (find_pers_struct (Ident.name id)).ps_comps - else raise Not_found - end - | Pdot(p, s, _pos) -> - begin match get_components (find_module_descr p env) with - Structure_comps c -> - let (descr, _pos) = Tbl.find_str s c.comp_components in - descr - | Functor_comps _ -> - raise Not_found - end - | Papply(p1, p2) -> - begin match get_components (find_module_descr p1 env) with - Functor_comps f -> - !components_of_functor_appl' f env p1 p2 - | Structure_comps _ -> - raise Not_found - end - -let find proj1 proj2 path env = - match path with - Pident id -> - IdTbl.find_same id (proj1 env) - | Pdot(p, s, _pos) -> - begin match get_components (find_module_descr p env) with - Structure_comps c -> - let (data, _pos) = Tbl.find_str s (proj2 c) in data - | Functor_comps _ -> - raise Not_found - end - | Papply _ -> - raise Not_found - -let find_value = - find (fun env -> env.values) (fun sc -> sc.comp_values) -and find_type_full = - find (fun env -> env.types) (fun sc -> sc.comp_types) -and find_modtype = - find (fun env -> env.modtypes) (fun sc -> sc.comp_modtypes) -and find_class = - find (fun env -> env.classes) (fun sc -> sc.comp_classes) -and find_cltype = - find (fun env -> env.cltypes) (fun sc -> sc.comp_cltypes) - -let type_of_cstr path = function - | {cstr_inlined = Some d; _} -> - (d, ([], List.map snd (Datarepr.labels_of_type path d))) - | _ -> - assert false - -let find_type_full path env = - match Path.constructor_typath path with - | Regular p -> - (try (PathMap.find p env.local_constraints, ([], [])) - with Not_found -> find_type_full p env) - | Cstr (ty_path, s) -> - let (_, (cstrs, _)) = - try find_type_full ty_path env - with Not_found -> assert false - in - let cstr = - try List.find (fun cstr -> cstr.cstr_name = s) cstrs - with Not_found -> assert false - in - type_of_cstr path cstr - | LocalExt id -> - let cstr = - try TycompTbl.find_same id env.constrs - with Not_found -> assert false - in - type_of_cstr path cstr - | Ext (mod_path, s) -> - let comps = - try find_module_descr mod_path env - with Not_found -> assert false - in - let comps = - match get_components comps with - | Structure_comps c -> c - | Functor_comps _ -> assert false - in - let exts = - List.filter - (function {cstr_tag=Cstr_extension _} -> true | _ -> false) - (try Tbl.find_str s comps.comp_constrs - with Not_found -> assert false) - in - match exts with - | [cstr] -> type_of_cstr path cstr - | _ -> assert false - -let find_type p env = - fst (find_type_full p env) -let find_type_descrs p env = - snd (find_type_full p env) - -let find_module ~alias path env = - match path with - Pident id -> - begin try - let data = IdTbl.find_same id env.modules in - EnvLazy.force subst_modtype_maker data - with Not_found -> - if Ident.persistent id && not (Ident.name id = !current_unit) then - let ps = find_pers_struct (Ident.name id) in - md (Mty_signature(Lazy.force ps.ps_sig)) - else raise Not_found - end - | Pdot(p, s, _pos) -> - begin match get_components (find_module_descr p env) with - Structure_comps c -> - let (data, _pos) = Tbl.find_str s c.comp_modules in - EnvLazy.force subst_modtype_maker data - | Functor_comps _ -> - raise Not_found - end - | Papply(p1, p2) -> - let desc1 = find_module_descr p1 env in - begin match get_components desc1 with - Functor_comps f -> - md begin match f.fcomp_res with - | Mty_alias _ as mty -> mty - | mty -> - if alias then mty else - try - Hashtbl.find f.fcomp_subst_cache p2 - with Not_found -> - let mty = - Subst.modtype - (Subst.add_module f.fcomp_param p2 Subst.identity) - f.fcomp_res in - Hashtbl.add f.fcomp_subst_cache p2 mty; - mty - end - | Structure_comps _ -> - raise Not_found - end - -let required_globals = ref [] -let reset_required_globals () = required_globals := [] -let get_required_globals () = !required_globals -let add_required_global id = - if Ident.global id && not !Clflags.transparent_modules - && not (List.exists (Ident.same id) !required_globals) - then required_globals := id :: !required_globals - -let rec normalize_path lax env path = - let path = - match path with - Pdot(p, s, pos) -> - Pdot(normalize_path lax env p, s, pos) - | Papply(p1, p2) -> - Papply(normalize_path lax env p1, normalize_path true env p2) - | _ -> path - in - try match find_module ~alias:true path env with - {md_type=Mty_alias(_, path1)} -> - let path' = normalize_path lax env path1 in - if lax || !Clflags.transparent_modules then path' else - let id = Path.head path in - if Ident.global id && not (Ident.same id (Path.head path')) - then add_required_global id; - path' - | _ -> path - with Not_found when lax - || (match path with Pident id -> not (Ident.persistent id) | _ -> true) -> - path - -let normalize_path oloc env path = - try normalize_path (oloc = None) env path - with Not_found -> - match oloc with None -> assert false - | Some loc -> - raise (Error(Missing_module(loc, path, normalize_path true env path))) - -let normalize_path_prefix oloc env path = - match path with - Pdot(p, s, pos) -> - Pdot(normalize_path oloc env p, s, pos) - | Pident _ -> - path - | Papply _ -> - assert false - - -let find_module = find_module ~alias:false - -(* Find the manifest type associated to a type when appropriate: - - the type should be public or should have a private row, - - the type should have an associated manifest type. *) -let find_type_expansion path env = - let decl = find_type path env in - match decl.type_manifest with - | Some body when decl.type_private = Public - || decl.type_kind <> Type_abstract - || Btype.has_constr_row body -> - (decl.type_params, body, may_map snd decl.type_newtype_level) - (* The manifest type of Private abstract data types without - private row are still considered unknown to the type system. - Hence, this case is caught by the following clause that also handles - purely abstract data types without manifest type definition. *) - | _ -> raise Not_found - -(* Find the manifest type information associated to a type, i.e. - the necessary information for the compiler's type-based optimisations. - In particular, the manifest type associated to a private abstract type - is revealed for the sake of compiler's type-based optimisations. *) -let find_type_expansion_opt path env = - let decl = find_type path env in - match decl.type_manifest with - (* The manifest type of Private abstract data types can still get - an approximation using their manifest type. *) - | Some body -> (decl.type_params, body, may_map snd decl.type_newtype_level) - | _ -> raise Not_found - -let find_modtype_expansion path env = - match (find_modtype path env).mtd_type with - | None -> raise Not_found - | Some mty -> mty - -let rec is_functor_arg path env = - match path with - Pident id -> - begin try Ident.find_same id env.functor_args; true - with Not_found -> false - end - | Pdot (p, _s, _) -> is_functor_arg p env - | Papply _ -> true - -(* Lookup by name *) - -exception Recmodule - -let report_deprecated ?loc p deprecated = - match loc, deprecated with - | Some loc, Some txt -> - let txt = if txt = "" then "" else "\n" ^ txt in - Location.deprecated loc (Printf.sprintf "module %s%s" (Path.name p) txt) - | _ -> () - -let mark_module_used env name loc = - if not (is_implicit_coercion env) then - try Hashtbl.find module_declarations (name, loc) () - with Not_found -> () - -let rec lookup_module_descr_aux ?loc lid env = - match lid with - Lident s -> - begin try - IdTbl.find_name s env.components - with Not_found -> - if s = !current_unit then raise Not_found; - let ps = find_pers_struct s in - (Pident(Ident.create_persistent s), ps.ps_comps) - end - | Ldot(l, s) -> - let (p, descr) = lookup_module_descr ?loc l env in - begin match get_components descr with - Structure_comps c -> - let (descr, pos) = Tbl.find_str s c.comp_components in - (Pdot(p, s, pos), descr) - | Functor_comps _ -> - raise Not_found - end - | Lapply(l1, l2) -> - let (p1, desc1) = lookup_module_descr ?loc l1 env in - let p2 = lookup_module ~load:true ?loc l2 env in - let {md_type=mty2} = find_module p2 env in - begin match get_components desc1 with - Functor_comps f -> - let loc = match loc with Some l -> l | None -> Location.none in - Misc.may (!check_modtype_inclusion ~loc env mty2 p2) f.fcomp_arg; - (Papply(p1, p2), !components_of_functor_appl' f env p1 p2) - | Structure_comps _ -> - raise Not_found - end - -and lookup_module_descr ?loc lid env = - let (p, comps) as res = lookup_module_descr_aux ?loc lid env in - mark_module_used env (Path.last p) comps.loc; -(* - Format.printf "USE module %s at %a@." (Path.last p) - Location.print comps.loc; -*) - report_deprecated ?loc p comps.deprecated; - res - -and lookup_module ~load ?loc lid env : Path.t = - match lid with - Lident s -> - begin try - let (p, data) = IdTbl.find_name s env.modules in - let {md_loc; md_attributes; md_type} = - EnvLazy.force subst_modtype_maker data - in - mark_module_used env s md_loc; - begin match md_type with - | Mty_ident (Path.Pident id) when Ident.name id = "#recmod#" -> - (* see #5965 *) - raise Recmodule - | Mty_alias (_, Path.Pident id) -> - if !Config.bs_only && not !Clflags.transparent_modules && Ident.persistent id then - find_pers_struct (Ident.name id) |> ignore - | _ -> () - end; - report_deprecated ?loc p - (Builtin_attributes.deprecated_of_attrs md_attributes); - p - with Not_found -> - if s = !current_unit then raise Not_found; - let p = Pident(Ident.create_persistent s) in - if !Clflags.transparent_modules && not load then check_pers_struct s - else begin - let ps = find_pers_struct s in - report_deprecated ?loc p ps.ps_comps.deprecated - end; - p - end - | Ldot(l, s) -> - let (p, descr) = lookup_module_descr ?loc l env in - begin match get_components descr with - Structure_comps c -> - let (_data, pos) = Tbl.find_str s c.comp_modules in - let (comps, _) = Tbl.find_str s c.comp_components in - mark_module_used env s comps.loc; - let p = Pdot(p, s, pos) in - report_deprecated ?loc p comps.deprecated; - p - | Functor_comps _ -> - raise Not_found - end - | Lapply(l1, l2) -> - let (p1, desc1) = lookup_module_descr ?loc l1 env in - let p2 = lookup_module ~load:true ?loc l2 env in - let {md_type=mty2} = find_module p2 env in - let p = Papply(p1, p2) in - begin match get_components desc1 with - Functor_comps f -> - let loc = match loc with Some l -> l | None -> Location.none in - Misc.may (!check_modtype_inclusion ~loc env mty2 p2) f.fcomp_arg; - p - | Structure_comps _ -> - raise Not_found - end - -let lookup proj1 proj2 ?loc lid env = - match lid with - Lident s -> - IdTbl.find_name s (proj1 env) - | Ldot(l, s) -> - let (p, desc) = lookup_module_descr ?loc l env in - begin match get_components desc with - Structure_comps c -> - let (data, pos) = Tbl.find_str s (proj2 c) in - (Pdot(p, s, pos), data) - | Functor_comps _ -> - raise Not_found - end - | Lapply _ -> - raise Not_found - -let lookup_all_simple proj1 proj2 shadow ?loc lid env = - match lid with - Lident s -> - let xl = TycompTbl.find_all s (proj1 env) in - let rec do_shadow = - function - | [] -> [] - | ((x, f) :: xs) -> - (x, f) :: - (do_shadow (List.filter (fun (y, _) -> not (shadow x y)) xs)) - in - do_shadow xl - | Ldot(l, s) -> - let (_p, desc) = lookup_module_descr ?loc l env in - begin match get_components desc with - Structure_comps c -> - let comps = - try Tbl.find_str s (proj2 c) with Not_found -> [] - in - List.map - (fun data -> (data, (fun () -> ()))) - comps - | Functor_comps _ -> - raise Not_found - end - | Lapply _ -> - raise Not_found - -let has_local_constraints env = not (PathMap.is_empty env.local_constraints) - -let cstr_shadow cstr1 cstr2 = - match cstr1.cstr_tag, cstr2.cstr_tag with - | Cstr_extension _, Cstr_extension _ -> true - | _ -> false - -let lbl_shadow _lbl1 _lbl2 = false - -let lookup_value = - lookup (fun env -> env.values) (fun sc -> sc.comp_values) -let lookup_all_constructors = - lookup_all_simple (fun env -> env.constrs) (fun sc -> sc.comp_constrs) - cstr_shadow -let lookup_all_labels = - lookup_all_simple (fun env -> env.labels) (fun sc -> sc.comp_labels) - lbl_shadow -let lookup_type = - lookup (fun env -> env.types) (fun sc -> sc.comp_types) -let lookup_modtype = - lookup (fun env -> env.modtypes) (fun sc -> sc.comp_modtypes) -let lookup_class = - lookup (fun env -> env.classes) (fun sc -> sc.comp_classes) -let lookup_cltype = - lookup (fun env -> env.cltypes) (fun sc -> sc.comp_cltypes) - -let copy_types l env = - let f desc = {desc with val_type = Subst.type_expr Subst.identity desc.val_type} in - let values = List.fold_left (fun env s -> IdTbl.update s f env) env.values l in - {env with values; summary = Env_copy_types (env.summary, l)} - -let mark_value_used env name vd = - if not (is_implicit_coercion env) then - try Hashtbl.find value_declarations (name, vd.val_loc) () - with Not_found -> () - -let mark_type_used env name vd = - if not (is_implicit_coercion env) then - try Hashtbl.find type_declarations (name, vd.type_loc) () - with Not_found -> () - -let mark_constructor_used usage env name vd constr = - if not (is_implicit_coercion env) then - try Hashtbl.find used_constructors (name, vd.type_loc, constr) usage - with Not_found -> () - -let mark_extension_used usage env ext name = - if not (is_implicit_coercion env) then - let ty_name = Path.last ext.ext_type_path in - try Hashtbl.find used_constructors (ty_name, ext.ext_loc, name) usage - with Not_found -> () - -let set_value_used_callback name vd callback = - let key = (name, vd.val_loc) in - try - let old = Hashtbl.find value_declarations key in - Hashtbl.replace value_declarations key (fun () -> old (); callback ()) - (* this is to support cases like: - let x = let x = 1 in x in x - where the two declarations have the same location - (e.g. resulting from Camlp4 expansion of grammar entries) *) - with Not_found -> - Hashtbl.add value_declarations key callback - -let set_type_used_callback name td callback = - let loc = td.type_loc in - if loc.Location.loc_ghost then () - else let key = (name, loc) in - let old = - try Hashtbl.find type_declarations key - with Not_found -> assert false - in - Hashtbl.replace type_declarations key (fun () -> callback old) - -let lookup_value ?loc lid env = - let (_, desc) as r = lookup_value ?loc lid env in - mark_value_used env (Longident.last lid) desc; - r - -let lookup_type ?loc lid env = - let (path, (decl, _)) = lookup_type ?loc lid env in - mark_type_used env (Longident.last lid) decl; - path - -let mark_type_path env path = - try - let decl = find_type path env in - mark_type_used env (Path.last path) decl - with Not_found -> () - -let ty_path t = - match repr t with - | {desc=Tconstr(path, _, _)} -> path - | _ -> assert false - -let lookup_constructor ?loc lid env = - match lookup_all_constructors ?loc lid env with - [] -> raise Not_found - | (desc, use) :: _ -> - mark_type_path env (ty_path desc.cstr_res); - use (); - desc - -let is_lident = function - Lident _ -> true - | _ -> false - -let lookup_all_constructors ?loc lid env = - try - let cstrs = lookup_all_constructors ?loc lid env in - let wrap_use desc use () = - mark_type_path env (ty_path desc.cstr_res); - use () - in - List.map (fun (cstr, use) -> (cstr, wrap_use cstr use)) cstrs - with - Not_found when is_lident lid -> [] - -let mark_constructor usage env name desc = - if not (is_implicit_coercion env) - then match desc.cstr_tag with - | Cstr_extension _ -> - begin - let ty_path = ty_path desc.cstr_res in - let ty_name = Path.last ty_path in - try Hashtbl.find used_constructors (ty_name, desc.cstr_loc, name) usage - with Not_found -> () - end - | _ -> - let ty_path = ty_path desc.cstr_res in - let ty_decl = try find_type ty_path env with Not_found -> assert false in - let ty_name = Path.last ty_path in - mark_constructor_used usage env ty_name ty_decl name - -let lookup_label ?loc lid env = - match lookup_all_labels ?loc lid env with - [] -> raise Not_found - | (desc, use) :: _ -> - mark_type_path env (ty_path desc.lbl_res); - use (); - desc - -let lookup_all_labels ?loc lid env = - try - let lbls = lookup_all_labels ?loc lid env in - let wrap_use desc use () = - mark_type_path env (ty_path desc.lbl_res); - use () - in - List.map (fun (lbl, use) -> (lbl, wrap_use lbl use)) lbls - with - Not_found when is_lident lid -> [] - -let lookup_class ?loc lid env = - let (_, desc) as r = lookup_class ?loc lid env in - (* special support for Typeclass.unbound_class *) - if Path.name desc.cty_path = "" then ignore (lookup_type ?loc lid env) - else mark_type_path env desc.cty_path; - r - -let lookup_cltype ?loc lid env = - let (_, desc) as r = lookup_cltype ?loc lid env in - if Path.name desc.clty_path = "" then ignore (lookup_type ?loc lid env) - else mark_type_path env desc.clty_path; - mark_type_path env desc.clty_path; - r - -(* Iter on an environment (ignoring the body of functors and - not yet evaluated structures) *) - -type iter_cont = unit -> unit -let iter_env_cont = ref [] - -let rec scrape_alias_for_visit env mty = - match mty with - | Mty_alias(_, Pident id) - when Ident.persistent id - && not (Hashtbl.mem persistent_structures (Ident.name id)) -> false - | Mty_alias(_, path) -> (* PR#6600: find_module may raise Not_found *) - begin try scrape_alias_for_visit env (find_module path env).md_type - with Not_found -> false - end - | _ -> true - -let iter_env proj1 proj2 f env () = - IdTbl.iter (fun id x -> f (Pident id) x) (proj1 env); - let rec iter_components path path' mcomps = - let cont () = - let visit = - match EnvLazy.get_arg mcomps.comps with - | None -> true - | Some (env, _sub, _path, mty) -> scrape_alias_for_visit env mty - in - if not visit then () else - match get_components mcomps with - Structure_comps comps -> - Tbl.iter - (fun s (d, n) -> f (Pdot (path, s, n)) (Pdot (path', s, n), d)) - (proj2 comps); - Tbl.iter - (fun s (c, n) -> - iter_components (Pdot (path, s, n)) (Pdot (path', s, n)) c) - comps.comp_components - | Functor_comps _ -> () - in iter_env_cont := (path, cont) :: !iter_env_cont - in - Hashtbl.iter - (fun s pso -> - match pso with None -> () - | Some ps -> - let id = Pident (Ident.create_persistent s) in - iter_components id id ps.ps_comps) - persistent_structures; - IdTbl.iter - (fun id (path, comps) -> iter_components (Pident id) path comps) - env.components - -let run_iter_cont l = - iter_env_cont := []; - List.iter (fun c -> c ()) l; - let cont = List.rev !iter_env_cont in - iter_env_cont := []; - cont - -let iter_types f = iter_env (fun env -> env.types) (fun sc -> sc.comp_types) f - -let same_types env1 env2 = - env1.types == env2.types && env1.components == env2.components - -let used_persistent () = - let r = ref Concr.empty in - Hashtbl.iter (fun s pso -> if pso != None then r := Concr.add s !r) - persistent_structures; - !r - -let find_all_comps proj s (p,mcomps) = - match get_components mcomps with - Functor_comps _ -> [] - | Structure_comps comps -> - try let (c,n) = Tbl.find_str s (proj comps) in [Pdot(p,s,n), c] - with Not_found -> [] - -let rec find_shadowed_comps path env = - match path with - Pident id -> - IdTbl.find_all (Ident.name id) env.components - | Pdot (p, s, _) -> - let l = find_shadowed_comps p env in - let l' = - List.map (find_all_comps (fun comps -> comps.comp_components) s) l in - List.flatten l' - | Papply _ -> [] - -let find_shadowed proj1 proj2 path env = - match path with - Pident id -> - IdTbl.find_all (Ident.name id) (proj1 env) - | Pdot (p, s, _) -> - let l = find_shadowed_comps p env in - let l' = List.map (find_all_comps proj2 s) l in - List.flatten l' - | Papply _ -> [] - -let find_shadowed_types path env = - List.map fst - (find_shadowed - (fun env -> env.types) (fun comps -> comps.comp_types) path env) - - -(* GADT instance tracking *) - -let add_gadt_instance_level lv env = - {env with - gadt_instances = (lv, ref TypeSet.empty) :: env.gadt_instances} - -let is_Tlink = function {desc = Tlink _} -> true | _ -> false - -let gadt_instance_level env t = - let rec find_instance = function - [] -> None - | (lv, r) :: rem -> - if TypeSet.exists is_Tlink !r then - (* Should we use set_typeset ? *) - r := TypeSet.fold (fun ty -> TypeSet.add (repr ty)) !r TypeSet.empty; - if TypeSet.mem t !r then Some lv else find_instance rem - in find_instance env.gadt_instances - -let add_gadt_instances env lv tl = - let r = - try List.assoc lv env.gadt_instances with Not_found -> assert false in - (* Format.eprintf "Added"; - List.iter (fun ty -> Format.eprintf "@ %a" !Btype.print_raw ty) tl; - Format.eprintf "@."; *) - set_typeset r (List.fold_right TypeSet.add tl !r) - -(* Only use this after expand_head! *) -let add_gadt_instance_chain env lv t = - let r = - try List.assoc lv env.gadt_instances with Not_found -> assert false in - let rec add_instance t = - let t = repr t in - if not (TypeSet.mem t !r) then begin - (* Format.eprintf "@ %a" !Btype.print_raw t; *) - set_typeset r (TypeSet.add t !r); - match t.desc with - Tconstr (p, _, memo) -> - may add_instance (find_expans Private p !memo) - | _ -> () - end - in - (* Format.eprintf "Added chain"; *) - add_instance t - (* Format.eprintf "@." *) - -(* Expand manifest module type names at the top of the given module type *) - -let rec scrape_alias env ?path mty = - match mty, path with - Mty_ident p, _ -> - begin try - scrape_alias env (find_modtype_expansion p env) ?path - with Not_found -> - mty - end - | Mty_alias(_, path), _ -> - begin try - scrape_alias env (find_module path env).md_type ~path - with Not_found -> - (*Location.prerr_warning Location.none - (Warnings.No_cmi_file (Path.name path));*) - mty - end - | mty, Some path -> - !strengthen ~aliasable:true env mty path - | _ -> mty - -let scrape_alias env mty = scrape_alias env mty - -(* Given a signature and a root path, prefix all idents in the signature - by the root path and build the corresponding substitution. *) - -let rec prefix_idents root pos sub = function - [] -> ([], sub) - | Sig_value(id, decl) :: rem -> - let p = Pdot(root, Ident.name id, pos) in - let nextpos = match decl.val_kind with Val_prim _ -> pos | _ -> pos+1 in - let (pl, final_sub) = prefix_idents root nextpos sub rem in - (p::pl, final_sub) - | Sig_type(id, _, _) :: rem -> - let p = Pdot(root, Ident.name id, nopos) in - let (pl, final_sub) = - prefix_idents root pos (Subst.add_type id p sub) rem in - (p::pl, final_sub) - | Sig_typext(id, _, _) :: rem -> - let p = Pdot(root, Ident.name id, pos) in - (* we extend the substitution in case of an inlined record *) - let (pl, final_sub) = - prefix_idents root (pos+1) (Subst.add_type id p sub) rem in - (p::pl, final_sub) - | Sig_module(id, _, _) :: rem -> - let p = Pdot(root, Ident.name id, pos) in - let (pl, final_sub) = - prefix_idents root (pos+1) (Subst.add_module id p sub) rem in - (p::pl, final_sub) - | Sig_modtype(id, _) :: rem -> - let p = Pdot(root, Ident.name id, nopos) in - let (pl, final_sub) = - prefix_idents root pos - (Subst.add_modtype id (Mty_ident p) sub) rem in - (p::pl, final_sub) - | Sig_class(id, _, _) :: rem -> - (* pretend this is a type, cf. PR#6650 *) - let p = Pdot(root, Ident.name id, pos) in - let (pl, final_sub) = - prefix_idents root (pos + 1) (Subst.add_type id p sub) rem in - (p::pl, final_sub) - | Sig_class_type(id, _, _) :: rem -> - let p = Pdot(root, Ident.name id, nopos) in - let (pl, final_sub) = - prefix_idents root pos (Subst.add_type id p sub) rem in - (p::pl, final_sub) - -let prefix_idents root sub sg = - if sub = Subst.identity then - let sgs = - try - Hashtbl.find prefixed_sg root - with Not_found -> - let sgs = ref [] in - Hashtbl.add prefixed_sg root sgs; - sgs - in - try - List.assq sg !sgs - with Not_found -> - let r = prefix_idents root 0 sub sg in - sgs := (sg, r) :: !sgs; - r - else - prefix_idents root 0 sub sg - -(* Compute structure descriptions *) - -let add_to_tbl id decl tbl = - let decls = - try Tbl.find_str id tbl with Not_found -> [] in - Tbl.add id (decl :: decls) tbl - -let rec components_of_module ~deprecated ~loc env sub path mty = - { - deprecated; - loc; - comps = EnvLazy.create (env, sub, path, mty) - } - -and components_of_module_maker (env, sub, path, mty) = - match scrape_alias env mty with - Mty_signature sg -> - let c = - { comp_values = Tbl.empty; - comp_constrs = Tbl.empty; - comp_labels = Tbl.empty; comp_types = Tbl.empty; - comp_modules = Tbl.empty; comp_modtypes = Tbl.empty; - comp_components = Tbl.empty; comp_classes = Tbl.empty; - comp_cltypes = Tbl.empty } in - let pl, sub = prefix_idents path sub sg in - let env = ref env in - let pos = ref 0 in - List.iter2 (fun item path -> - match item with - Sig_value(id, decl) -> - let decl' = Subst.value_description sub decl in - c.comp_values <- - Tbl.add (Ident.name id) (decl', !pos) c.comp_values; - begin match decl.val_kind with - Val_prim _ -> () | _ -> incr pos - end - | Sig_type(id, decl, _) -> - let decl' = Subst.type_declaration sub decl in - Datarepr.set_row_name decl' (Subst.type_path sub (Path.Pident id)); - let constructors = - List.map snd (Datarepr.constructors_of_type path decl') in - let labels = - List.map snd (Datarepr.labels_of_type path decl') in - c.comp_types <- - Tbl.add (Ident.name id) - ((decl', (constructors, labels)), nopos) - c.comp_types; - List.iter - (fun descr -> - c.comp_constrs <- - add_to_tbl descr.cstr_name descr c.comp_constrs) - constructors; - List.iter - (fun descr -> - c.comp_labels <- - add_to_tbl descr.lbl_name descr c.comp_labels) - labels; - env := store_type_infos id decl !env - | Sig_typext(id, ext, _) -> - let ext' = Subst.extension_constructor sub ext in - let descr = Datarepr.extension_descr path ext' in - c.comp_constrs <- - add_to_tbl (Ident.name id) descr c.comp_constrs; - incr pos - | Sig_module(id, md, _) -> - let md' = EnvLazy.create (sub, md) in - c.comp_modules <- - Tbl.add (Ident.name id) (md', !pos) c.comp_modules; - let deprecated = - Builtin_attributes.deprecated_of_attrs md.md_attributes - in - let comps = - components_of_module ~deprecated ~loc:md.md_loc !env sub path - md.md_type - in - c.comp_components <- - Tbl.add (Ident.name id) (comps, !pos) c.comp_components; - env := store_module ~check:false id md !env; - incr pos - | Sig_modtype(id, decl) -> - let decl' = Subst.modtype_declaration sub decl in - c.comp_modtypes <- - Tbl.add (Ident.name id) (decl', nopos) c.comp_modtypes; - env := store_modtype id decl !env - | Sig_class(id, decl, _) -> - let decl' = Subst.class_declaration sub decl in - c.comp_classes <- - Tbl.add (Ident.name id) (decl', !pos) c.comp_classes; - incr pos - | Sig_class_type(id, decl, _) -> - let decl' = Subst.cltype_declaration sub decl in - c.comp_cltypes <- - Tbl.add (Ident.name id) (decl', !pos) c.comp_cltypes) - sg pl; - Some (Structure_comps c) - | Mty_functor(param, ty_arg, ty_res) -> - Some (Functor_comps { - fcomp_param = param; - (* fcomp_arg and fcomp_res must be prefixed eagerly, because - they are interpreted in the outer environment *) - fcomp_arg = may_map (Subst.modtype sub) ty_arg; - fcomp_res = Subst.modtype sub ty_res; - fcomp_cache = Hashtbl.create 17; - fcomp_subst_cache = Hashtbl.create 17 }) - | Mty_ident _ - | Mty_alias _ -> None - -(* Insertion of bindings by identifier + path *) - -and check_usage loc id warn tbl = - if not loc.Location.loc_ghost && Warnings.is_active (warn "") then begin - let name = Ident.name id in - let key = (name, loc) in - if Hashtbl.mem tbl key then () - else let used = ref false in - Hashtbl.add tbl key (fun () -> used := true); - if not (name = "" || name.[0] = '_' || name.[0] = '#') - then - !add_delayed_check_forward - (fun () -> if not !used then Location.prerr_warning loc (warn name)) - end; - -and check_value_name name loc = - (* Note: we could also check here general validity of the - identifier, to protect against bad identifiers forged by -pp or - -ppx preprocessors. *) - if name = "|." then raise (Error(Illegal_value_name(loc, name))) - else if String.length name > 0 && (name.[0] = '#') then - for i = 1 to String.length name - 1 do - if name.[i] = '#' then - raise (Error(Illegal_value_name(loc, name))) - done - - -and store_value ?check id decl env = - check_value_name (Ident.name id) decl.val_loc; - may (fun f -> check_usage decl.val_loc id f value_declarations) check; - { env with - values = IdTbl.add id decl env.values; - summary = Env_value(env.summary, id, decl) } - -and store_type ~check id info env = - let loc = info.type_loc in - if check then - check_usage loc id (fun s -> Warnings.Unused_type_declaration s) - type_declarations; - let path = Pident id in - let constructors = Datarepr.constructors_of_type path info in - let labels = Datarepr.labels_of_type path info in - let descrs = (List.map snd constructors, List.map snd labels) in - - if check && not loc.Location.loc_ghost && - Warnings.is_active (Warnings.Unused_constructor ("", false, false)) - then begin - let ty = Ident.name id in - List.iter - begin fun (_, {cstr_name = c; _}) -> - let k = (ty, loc, c) in - if not (Hashtbl.mem used_constructors k) then - let used = constructor_usages () in - Hashtbl.add used_constructors k (add_constructor_usage used); - if not (ty = "" || ty.[0] = '_') - then !add_delayed_check_forward - (fun () -> - if not (is_in_signature env) && not used.cu_positive then - Location.prerr_warning loc - (Warnings.Unused_constructor - (c, used.cu_pattern, used.cu_privatize))) - end - constructors - end; - { env with - constrs = - List.fold_right - (fun (id, descr) constrs -> TycompTbl.add id descr constrs) - constructors - env.constrs; - labels = - List.fold_right - (fun (id, descr) labels -> TycompTbl.add id descr labels) - labels - env.labels; - types = - IdTbl.add id (info, descrs) env.types; - summary = Env_type(env.summary, id, info) } - -and store_type_infos id info env = - (* Simplified version of store_type that doesn't compute and store - constructor and label infos, but simply record the arity and - manifest-ness of the type. Used in components_of_module to - keep track of type abbreviations (e.g. type t = float) in the - computation of label representations. *) - { env with - types = IdTbl.add id (info,([],[])) - env.types; - summary = Env_type(env.summary, id, info) } - -and store_extension ~check id ext env = - let loc = ext.ext_loc in - if check && not loc.Location.loc_ghost && - Warnings.is_active (Warnings.Unused_extension ("", false, false, false)) - then begin - let is_exception = Path.same ext.ext_type_path Predef.path_exn in - let ty = Path.last ext.ext_type_path in - let n = Ident.name id in - let k = (ty, loc, n) in - if not (Hashtbl.mem used_constructors k) then begin - let used = constructor_usages () in - Hashtbl.add used_constructors k (add_constructor_usage used); - !add_delayed_check_forward - (fun () -> - if not (is_in_signature env) && not used.cu_positive then - Location.prerr_warning loc - (Warnings.Unused_extension - (n, is_exception, used.cu_pattern, used.cu_privatize) - ) - ) - end; - end; - { env with - constrs = TycompTbl.add id - (Datarepr.extension_descr (Pident id) ext) - env.constrs; - summary = Env_extension(env.summary, id, ext) } - -and store_module ~check id md env = - let loc = md.md_loc in - if check then - check_usage loc id (fun s -> Warnings.Unused_module s) - module_declarations; - - let deprecated = Builtin_attributes.deprecated_of_attrs md.md_attributes in - { env with - modules = IdTbl.add id (EnvLazy.create (Subst.identity, md)) env.modules; - components = - IdTbl.add id - (components_of_module ~deprecated ~loc:md.md_loc - env Subst.identity (Pident id) md.md_type) - env.components; - summary = Env_module(env.summary, id, md) } - -and store_modtype id info env = - { env with - modtypes = IdTbl.add id info env.modtypes; - summary = Env_modtype(env.summary, id, info) } - -and store_class id desc env = - { env with - classes = IdTbl.add id desc env.classes; - summary = Env_class(env.summary, id, desc) } - -and store_cltype id desc env = - { env with - cltypes = IdTbl.add id desc env.cltypes; - summary = Env_cltype(env.summary, id, desc) } - -(* Compute the components of a functor application in a path. *) - -let components_of_functor_appl f env p1 p2 = - try - Hashtbl.find f.fcomp_cache p2 - with Not_found -> - let p = Papply(p1, p2) in - let sub = Subst.add_module f.fcomp_param p2 Subst.identity in - let mty = Subst.modtype sub f.fcomp_res in - let comps = components_of_module ~deprecated:None ~loc:Location.none - (*???*) - env Subst.identity p mty in - Hashtbl.add f.fcomp_cache p2 comps; - comps - -(* Define forward functions *) - -let _ = - components_of_module' := components_of_module; - components_of_functor_appl' := components_of_functor_appl; - components_of_module_maker' := components_of_module_maker - -(* Insertion of bindings by identifier *) - -let add_functor_arg id env = - {env with - functor_args = Ident.add id () env.functor_args; - summary = Env_functor_arg (env.summary, id)} - -let add_value ?check id desc env = - store_value ?check id desc env - -let add_type ~check id info env = - store_type ~check id info env - -and add_extension ~check id ext env = - store_extension ~check id ext env - -and add_module_declaration ?(arg=false) ~check id md env = - let env = store_module ~check id md env in - if arg then add_functor_arg id env else env - -and add_modtype id info env = - store_modtype id info env - -and add_class id ty env = - store_class id ty env - -and add_cltype id ty env = - store_cltype id ty env - -let add_module ?arg id mty env = - add_module_declaration ~check:false ?arg id (md mty) env - -let add_local_type path info env = - { env with - local_constraints = PathMap.add path info env.local_constraints } - -let add_local_constraint path info elv env = - match info with - {type_manifest = Some _; type_newtype_level = Some (lv, _)} -> - (* elv is the expansion level, lv is the definition level *) - let info = {info with type_newtype_level = Some (lv, elv)} in - add_local_type path info env - | _ -> assert false - - -(* Insertion of bindings by name *) - -let enter store_fun name data env = - let id = Ident.create name in (id, store_fun id data env) - -let enter_value ?check = enter (store_value ?check) -and enter_type = enter (store_type ~check:true) -and enter_extension = enter (store_extension ~check:true) -and enter_module_declaration ?arg id md env = - add_module_declaration ?arg ~check:true id md env - (* let (id, env) = enter store_module name md env in - (id, add_functor_arg ?arg id env) *) -and enter_modtype = enter store_modtype -and enter_class = enter store_class -and enter_cltype = enter store_cltype - -let enter_module ?arg s mty env = - let id = Ident.create s in - (id, enter_module_declaration ?arg id (md mty) env) - -(* Insertion of all components of a signature *) - -let add_item comp env = - match comp with - Sig_value(id, decl) -> add_value id decl env - | Sig_type(id, decl, _) -> add_type ~check:false id decl env - | Sig_typext(id, ext, _) -> add_extension ~check:false id ext env - | Sig_module(id, md, _) -> add_module_declaration ~check:false id md env - | Sig_modtype(id, decl) -> add_modtype id decl env - | Sig_class(id, decl, _) -> add_class id decl env - | Sig_class_type(id, decl, _) -> add_cltype id decl env - -let rec add_signature sg env = - match sg with - [] -> env - | comp :: rem -> add_signature rem (add_item comp env) - -(* Open a signature path *) - -let add_components slot root env0 comps = - let add_l w comps env0 = - TycompTbl.add_open slot w comps env0 - in - - let add w comps env0 = IdTbl.add_open slot w root comps env0 in - - let constrs = - add_l (fun x -> `Constructor x) comps.comp_constrs env0.constrs - in - let labels = - add_l (fun x -> `Label x) comps.comp_labels env0.labels - in - - let values = - add (fun x -> `Value x) comps.comp_values env0.values - in - let types = - add (fun x -> `Type x) comps.comp_types env0.types - in - let modtypes = - add (fun x -> `Module_type x) comps.comp_modtypes env0.modtypes - in - let classes = - add (fun x -> `Class x) comps.comp_classes env0.classes - in - let cltypes = - add (fun x -> `Class_type x) comps.comp_cltypes env0.cltypes - in - let components = - add (fun x -> `Component x) comps.comp_components env0.components - in - - let modules = - add (fun x -> `Module x) comps.comp_modules env0.modules - in - - { env0 with - summary = Env_open(env0.summary, root); - constrs; - labels; - values; - types; - modtypes; - classes; - cltypes; - components; - modules; - } - -let open_signature slot root env0 = - match get_components (find_module_descr root env0) with - | Functor_comps _ -> None - | Structure_comps comps -> Some (add_components slot root env0 comps) - - -(* Open a signature from a file *) - -let open_pers_signature name env = - match open_signature None (Pident(Ident.create_persistent name)) env with - | Some env -> env - | None -> assert false (* a compilation unit cannot refer to a functor *) - -let open_signature - ?(used_slot = ref false) - ?(loc = Location.none) ?(toplevel = false) ovf root env = - if not toplevel && ovf = Asttypes.Fresh && not loc.Location.loc_ghost - && (Warnings.is_active (Warnings.Unused_open "") - || Warnings.is_active (Warnings.Open_shadow_identifier ("", "")) - || Warnings.is_active (Warnings.Open_shadow_label_constructor ("",""))) - then begin - let used = used_slot in - !add_delayed_check_forward - (fun () -> - if not !used then begin - used := true; - Location.prerr_warning loc (Warnings.Unused_open (Path.name root)) - end - ); - let shadowed = ref [] in - let slot s b = - begin match check_shadowing env b with - | Some kind when not (List.mem (kind, s) !shadowed) -> - shadowed := (kind, s) :: !shadowed; - let w = - match kind with - | "label" | "constructor" -> - Warnings.Open_shadow_label_constructor (kind, s) - | _ -> Warnings.Open_shadow_identifier (kind, s) - in - Location.prerr_warning loc w - | _ -> () - end; - used := true - in - open_signature (Some slot) root env - end - else open_signature None root env - -(* Read a signature from a file *) - -let read_signature modname filename = - let ps = read_pers_struct modname filename in - Lazy.force ps.ps_sig - -(* Return the CRC of the interface of the given compilation unit *) - -let crc_of_unit name = - let ps = find_pers_struct name in - let crco = - try - List.assoc name ps.ps_crcs - with Not_found -> - assert false - in - match crco with - None -> assert false - | Some crc -> crc - -(* Return the list of imported interfaces with their CRCs *) - -let imports () = - let dont_record_crc_unit = !Clflags.dont_record_crc_unit in - match dont_record_crc_unit with - | None -> Consistbl.extract (StringSet.elements !imported_units) crc_units - | Some x -> - Consistbl.extract - (StringSet.fold - (fun m acc -> if m = x then acc else m::acc) - !imported_units []) crc_units -(* Returns true if [s] is an opaque imported module *) -let is_imported_opaque s = - StringSet.mem s !imported_opaque_units - -(* Save a signature to a file *) - -let save_signature_with_imports ?check_exists ~deprecated sg modname filename imports = - (*prerr_endline filename; - List.iter (fun (name, crc) -> prerr_endline name) imports;*) - Btype.cleanup_abbrev (); - Subst.reset_for_saving (); - let sg = Subst.signature (Subst.for_saving Subst.identity) sg in - let flags = - (match deprecated with Some s -> [Deprecated s] | None -> []) - in - try - let cmi = { - cmi_name = modname; - cmi_sign = sg; - cmi_crcs = imports; - cmi_flags = flags; - } in - let crc = - create_cmi ?check_exists filename cmi in - (* Enter signature in persistent table so that imported_unit() - will also return its crc *) - let comps = - components_of_module ~deprecated ~loc:Location.none - empty Subst.identity - (Pident(Ident.create_persistent modname)) (Mty_signature sg) in - let ps = - { ps_name = modname; - ps_sig = lazy (Subst.signature Subst.identity sg); - ps_comps = comps; - ps_crcs = (cmi.cmi_name, Some crc) :: imports; - ps_filename = filename; - ps_flags = cmi.cmi_flags; - } in - save_pers_struct crc ps; - cmi - with exn -> - remove_file filename; - raise exn - -let save_signature ?check_exists ~deprecated sg modname filename = - save_signature_with_imports ?check_exists ~deprecated sg modname filename (imports()) - -(* Folding on environments *) - -let find_all proj1 proj2 f lid env acc = - match lid with - | None -> - IdTbl.fold_name - (fun name (p, data) acc -> f name p data acc) - (proj1 env) acc - | Some l -> - let p, desc = lookup_module_descr l env in - begin match get_components desc with - Structure_comps c -> - Tbl.fold - (fun s (data, pos) acc -> f s (Pdot (p, s, pos)) data acc) - (proj2 c) acc - | Functor_comps _ -> - acc - end - -let find_all_simple_list proj1 proj2 f lid env acc = - match lid with - | None -> - TycompTbl.fold_name - (fun data acc -> f data acc) - (proj1 env) acc - | Some l -> - let (_p, desc) = lookup_module_descr l env in - begin match get_components desc with - Structure_comps c -> - Tbl.fold - (fun _s comps acc -> - match comps with - [] -> acc - | data :: _ -> - f data acc) - (proj2 c) acc - | Functor_comps _ -> - acc - end - -let fold_modules f lid env acc = - match lid with - | None -> - let acc = - IdTbl.fold_name - (fun name (p, data) acc -> - let data = EnvLazy.force subst_modtype_maker data in - f name p data acc - ) - env.modules - acc - in - Hashtbl.fold - (fun name ps acc -> - match ps with - None -> acc - | Some ps -> - f name (Pident(Ident.create_persistent name)) - (md (Mty_signature (Lazy.force ps.ps_sig))) acc) - persistent_structures - acc - | Some l -> - let p, desc = lookup_module_descr l env in - begin match get_components desc with - Structure_comps c -> - Tbl.fold - (fun s (data, pos) acc -> - f s (Pdot (p, s, pos)) - (EnvLazy.force subst_modtype_maker data) acc) - c.comp_modules - acc - | Functor_comps _ -> - acc - end - -let fold_values f = - find_all (fun env -> env.values) (fun sc -> sc.comp_values) f -and fold_constructors f = - find_all_simple_list (fun env -> env.constrs) (fun sc -> sc.comp_constrs) f -and fold_labels f = - find_all_simple_list (fun env -> env.labels) (fun sc -> sc.comp_labels) f -and fold_types f = - find_all (fun env -> env.types) (fun sc -> sc.comp_types) f -and fold_modtypes f = - find_all (fun env -> env.modtypes) (fun sc -> sc.comp_modtypes) f -and fold_classs f = - find_all (fun env -> env.classes) (fun sc -> sc.comp_classes) f -and fold_cltypes f = - find_all (fun env -> env.cltypes) (fun sc -> sc.comp_cltypes) f - - -(* Make the initial environment *) -let initial_safe_string = - Predef.build_initial_env - (add_type ~check:false) - (add_extension ~check:false) - empty - -(* Return the environment summary *) - -let summary env = - if PathMap.is_empty env.local_constraints then env.summary - else Env_constraints (env.summary, env.local_constraints) - -let last_env = ref empty -let last_reduced_env = ref empty - -let keep_only_summary env = - if !last_env == env then !last_reduced_env - else begin - let new_env = - { - empty with - summary = env.summary; - local_constraints = env.local_constraints; - flags = env.flags; - } - in - last_env := env; - last_reduced_env := new_env; - new_env - end - - -let env_of_only_summary env_from_summary env = - let new_env = env_from_summary env.summary Subst.identity in - { new_env with - local_constraints = env.local_constraints; - flags = env.flags; - } - -(* Error report *) - -open Format - -let report_error ppf = function - | Illegal_renaming(modname, ps_name, filename) -> fprintf ppf - "Wrong file naming: %a@ contains the compiled interface for @ \ - %s when %s was expected" - Location.print_filename filename ps_name modname - | Inconsistent_import(name, source1, source2) -> fprintf ppf - "@[The files %a@ and %a@ \ - make inconsistent assumptions@ over interface %s@]" - Location.print_filename source1 Location.print_filename source2 name - | Need_recursive_types(import, export) -> - fprintf ppf - "@[Unit %s imports from %s, which uses recursive types.@ %s@]" - export import "The compilation flag -rectypes is required" - | Depend_on_unsafe_string_unit(import, export) -> - fprintf ppf - "@[Unit %s imports from %s, compiled with -unsafe-string.@ %s@]" - export import "This compiler has been configured in strict \ - safe-string mode (-force-safe-string)" - | Missing_module(_, path1, path2) -> - fprintf ppf "@[@["; - if Path.same path1 path2 then - fprintf ppf "Internal path@ %s@ is dangling." (Path.name path1) - else - fprintf ppf "Internal path@ %s@ expands to@ %s@ which is dangling." - (Path.name path1) (Path.name path2); - fprintf ppf "@]@ @[%s@ %s@ %s.@]@]" - "The compiled interface for module" (Ident.name (Path.head path2)) - "was not found" - | Illegal_value_name(_loc, name) -> - fprintf ppf "'%s' is not a valid value identifier." - name - -let () = - Location.register_error_of_exn - (function - | Error (Missing_module (loc, _, _) - | Illegal_value_name (loc, _) - as err) when loc <> Location.none -> - Some (Location.error_of_printer loc report_error err) - | Error err -> Some (Location.error_of_printer_file report_error err) - | _ -> None - ) diff --git a/src/compiler-libs-406/env.mli b/src/compiler-libs-406/env.mli deleted file mode 100644 index 7bde230a..00000000 --- a/src/compiler-libs-406/env.mli +++ /dev/null @@ -1,326 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Environment handling *) - -open Types - -module PathMap : Map.S with type key = Path.t - and type 'a t = 'a Map.Make(Path).t - -type summary = - Env_empty - | Env_value of summary * Ident.t * value_description - | Env_type of summary * Ident.t * type_declaration - | Env_extension of summary * Ident.t * extension_constructor - | Env_module of summary * Ident.t * module_declaration - | Env_modtype of summary * Ident.t * modtype_declaration - | Env_class of summary * Ident.t * class_declaration - | Env_cltype of summary * Ident.t * class_type_declaration - | Env_open of summary * Path.t - | Env_functor_arg of summary * Ident.t - | Env_constraints of summary * type_declaration PathMap.t - | Env_copy_types of summary * string list - -type t - -val empty: t -val initial_safe_string: t - -val diff: t -> t -> Ident.t list -val copy_local: from:t -> t -> t - -type type_descriptions = - constructor_description list * label_description list - -(* For short-paths *) -type iter_cont -val iter_types: - (Path.t -> Path.t * (type_declaration * type_descriptions) -> unit) -> - t -> iter_cont -val run_iter_cont: iter_cont list -> (Path.t * iter_cont) list -val same_types: t -> t -> bool -val used_persistent: unit -> Concr.t -val find_shadowed_types: Path.t -> t -> Path.t list -val without_cmis: ('a -> 'b) -> 'a -> 'b - (* [without_cmis f arg] applies [f] to [arg], but does not - allow opening cmis during its execution *) - -(* Lookup by paths *) - -val find_value: Path.t -> t -> value_description -val find_type: Path.t -> t -> type_declaration -val find_type_descrs: Path.t -> t -> type_descriptions -val find_module: Path.t -> t -> module_declaration -val find_modtype: Path.t -> t -> modtype_declaration -val find_class: Path.t -> t -> class_declaration -val find_cltype: Path.t -> t -> class_type_declaration - -val find_type_expansion: - Path.t -> t -> type_expr list * type_expr * int option -val find_type_expansion_opt: - Path.t -> t -> type_expr list * type_expr * int option -(* Find the manifest type information associated to a type for the sake - of the compiler's type-based optimisations. *) -val find_modtype_expansion: Path.t -> t -> module_type -val add_functor_arg: Ident.t -> t -> t -val is_functor_arg: Path.t -> t -> bool -val normalize_path: Location.t option -> t -> Path.t -> Path.t -(* Normalize the path to a concrete value or module. - If the option is None, allow returning dangling paths. - Otherwise raise a Missing_module error, and may add forgotten - head as required global. *) -val normalize_path_prefix: Location.t option -> t -> Path.t -> Path.t -(* Only normalize the prefix part of the path *) -val reset_required_globals: unit -> unit -val get_required_globals: unit -> Ident.t list -val add_required_global: Ident.t -> unit - -val has_local_constraints: t -> bool -val add_gadt_instance_level: int -> t -> t -val gadt_instance_level: t -> type_expr -> int option -val add_gadt_instances: t -> int -> type_expr list -> unit -val add_gadt_instance_chain: t -> int -> type_expr -> unit - -(* Lookup by long identifiers *) - -(* ?loc is used to report 'deprecated module' warnings *) - -val lookup_value: - ?loc:Location.t -> Longident.t -> t -> Path.t * value_description -val lookup_constructor: - ?loc:Location.t -> Longident.t -> t -> constructor_description -val lookup_all_constructors: - ?loc:Location.t -> - Longident.t -> t -> (constructor_description * (unit -> unit)) list -val lookup_label: - ?loc:Location.t -> Longident.t -> t -> label_description -val lookup_all_labels: - ?loc:Location.t -> - Longident.t -> t -> (label_description * (unit -> unit)) list -val lookup_type: - ?loc:Location.t -> Longident.t -> t -> Path.t - (* Since 4.04, this function no longer returns [type_description]. - To obtain it, you should either call [Env.find_type], or replace - it by [Typetexp.find_type] *) -val lookup_module: - load:bool -> ?loc:Location.t -> Longident.t -> t -> Path.t -val lookup_modtype: - ?loc:Location.t -> Longident.t -> t -> Path.t * modtype_declaration -val lookup_class: - ?loc:Location.t -> Longident.t -> t -> Path.t * class_declaration -val lookup_cltype: - ?loc:Location.t -> Longident.t -> t -> Path.t * class_type_declaration - -val copy_types: string list -> t -> t - (* Used only in Typecore.duplicate_ident_types. *) - -exception Recmodule - (* Raise by lookup_module when the identifier refers - to one of the modules of a recursive definition - during the computation of its approximation (see #5965). *) - -(* Insertion by identifier *) - -val add_value: - ?check:(string -> Warnings.t) -> Ident.t -> value_description -> t -> t -val add_type: check:bool -> Ident.t -> type_declaration -> t -> t -val add_extension: check:bool -> Ident.t -> extension_constructor -> t -> t -val add_module: ?arg:bool -> Ident.t -> module_type -> t -> t -val add_module_declaration: ?arg:bool -> check:bool -> Ident.t -> - module_declaration -> t -> t -val add_modtype: Ident.t -> modtype_declaration -> t -> t -val add_class: Ident.t -> class_declaration -> t -> t -val add_cltype: Ident.t -> class_type_declaration -> t -> t -val add_local_constraint: Path.t -> type_declaration -> int -> t -> t -val add_local_type: Path.t -> type_declaration -> t -> t - -(* Insertion of all fields of a signature. *) - -val add_item: signature_item -> t -> t -val add_signature: signature -> t -> t - -(* Insertion of all fields of a signature, relative to the given path. - Used to implement open. Returns None if the path refers to a functor, - not a structure. *) -val open_signature: - ?used_slot:bool ref -> - ?loc:Location.t -> ?toplevel:bool -> Asttypes.override_flag -> Path.t -> - t -> t option - -val open_pers_signature: string -> t -> t - -(* Insertion by name *) - -val enter_value: - ?check:(string -> Warnings.t) -> - string -> value_description -> t -> Ident.t * t -val enter_type: string -> type_declaration -> t -> Ident.t * t -val enter_extension: string -> extension_constructor -> t -> Ident.t * t -val enter_module: ?arg:bool -> string -> module_type -> t -> Ident.t * t -val enter_module_declaration: - ?arg:bool -> Ident.t -> module_declaration -> t -> t -val enter_modtype: string -> modtype_declaration -> t -> Ident.t * t -val enter_class: string -> class_declaration -> t -> Ident.t * t -val enter_cltype: string -> class_type_declaration -> t -> Ident.t * t - -(* Initialize the cache of in-core module interfaces. *) -val reset_cache: unit -> unit - -(* To be called before each toplevel phrase. *) -val reset_cache_toplevel: unit -> unit - -(* Remember the name of the current compilation unit. *) -val set_unit_name: string -> unit -val get_unit_name: unit -> string - -(* Read, save a signature to/from a file *) - -val read_signature: string -> string -> signature - (* Arguments: module name, file name. Results: signature. *) -val save_signature: - ?check_exists:unit -> - deprecated:string option -> signature -> string -> string -> Cmi_format.cmi_infos - (* Arguments: signature, module name, file name. *) -val save_signature_with_imports: - ?check_exists:unit -> - deprecated:string option -> - signature -> string -> string -> (string * Digest.t option) list - -> Cmi_format.cmi_infos - (* Arguments: signature, module name, file name, - imported units with their CRCs. *) - -(* Return the CRC of the interface of the given compilation unit *) - -val crc_of_unit: string -> Digest.t - -(* Return the set of compilation units imported, with their CRC *) - -val imports: unit -> (string * Digest.t option) list - -(* [is_imported_opaque md] returns true if [md] is an opaque imported module *) -val is_imported_opaque: string -> bool - -(* Direct access to the table of imported compilation units with their CRC *) - -val crc_units: Consistbl.t -val add_import: string -> unit - -(* Summaries -- compact representation of an environment, to be - exported in debugging information. *) - -val summary: t -> summary - -(* Return an equivalent environment where all fields have been reset, - except the summary. The initial environment can be rebuilt from the - summary, using Envaux.env_of_only_summary. *) - -val keep_only_summary : t -> t -val env_of_only_summary : (summary -> Subst.t -> t) -> t -> t - -(* Error report *) - -type error = - | Illegal_renaming of string * string * string - | Inconsistent_import of string * string * string - | Need_recursive_types of string * string - | Depend_on_unsafe_string_unit of string * string - | Missing_module of Location.t * Path.t * Path.t - | Illegal_value_name of Location.t * string - -exception Error of error - -open Format - -val report_error: formatter -> error -> unit - - -val mark_value_used: t -> string -> value_description -> unit -val mark_module_used: t -> string -> Location.t -> unit -val mark_type_used: t -> string -> type_declaration -> unit - -type constructor_usage = Positive | Pattern | Privatize -val mark_constructor_used: - constructor_usage -> t -> string -> type_declaration -> string -> unit -val mark_constructor: - constructor_usage -> t -> string -> constructor_description -> unit -val mark_extension_used: - constructor_usage -> t -> extension_constructor -> string -> unit - -val in_signature: bool -> t -> t -val implicit_coercion: t -> t - -val is_in_signature: t -> bool - -val set_value_used_callback: - string -> value_description -> (unit -> unit) -> unit -val set_type_used_callback: - string -> type_declaration -> ((unit -> unit) -> unit) -> unit - -(* Forward declaration to break mutual recursion with Includemod. *) -val check_modtype_inclusion: - (loc:Location.t -> t -> module_type -> Path.t -> module_type -> unit) ref -(* Forward declaration to break mutual recursion with Typecore. *) -val add_delayed_check_forward: ((unit -> unit) -> unit) ref -(* Forward declaration to break mutual recursion with Mtype. *) -val strengthen: - (aliasable:bool -> t -> module_type -> Path.t -> module_type) ref -(* Forward declaration to break mutual recursion with Ctype. *) -val same_constr: (t -> type_expr -> type_expr -> bool) ref - -(** Folding over all identifiers (for analysis purpose) *) - -val fold_values: - (string -> Path.t -> value_description -> 'a -> 'a) -> - Longident.t option -> t -> 'a -> 'a -val fold_types: - (string -> Path.t -> type_declaration * type_descriptions -> 'a -> 'a) -> - Longident.t option -> t -> 'a -> 'a -val fold_constructors: - (constructor_description -> 'a -> 'a) -> - Longident.t option -> t -> 'a -> 'a -val fold_labels: - (label_description -> 'a -> 'a) -> - Longident.t option -> t -> 'a -> 'a - -(** Persistent structures are only traversed if they are already loaded. *) -val fold_modules: - (string -> Path.t -> module_declaration -> 'a -> 'a) -> - Longident.t option -> t -> 'a -> 'a - -val fold_modtypes: - (string -> Path.t -> modtype_declaration -> 'a -> 'a) -> - Longident.t option -> t -> 'a -> 'a -val fold_classs: - (string -> Path.t -> class_declaration -> 'a -> 'a) -> - Longident.t option -> t -> 'a -> 'a -val fold_cltypes: - (string -> Path.t -> class_type_declaration -> 'a -> 'a) -> - Longident.t option -> t -> 'a -> 'a - -(** Utilities *) -val scrape_alias: t -> module_type -> module_type -val check_value_name: string -> Location.t -> unit - -module Persistent_signature : sig - type t = - { filename : string; (** Name of the file containing the signature. *) - cmi : Cmi_format.cmi_infos } - - (** Function used to load a persistent signature. The default is to look for - the .cmi file in the load path. This function can be overridden to load - it from memory, for instance to build a self-contained toplevel. *) - val load : (unit_name:string -> t option) ref -end diff --git a/src/compiler-libs-406/ext_pervasives.ml b/src/compiler-libs-406/ext_pervasives.ml deleted file mode 100644 index 8682641a..00000000 --- a/src/compiler-libs-406/ext_pervasives.ml +++ /dev/null @@ -1,109 +0,0 @@ -(* Copyright (C) 2015-2016 Bloomberg Finance L.P. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - - - - - - -external reraise: exn -> 'a = "%reraise" - -let finally v ~clean:action f = - match f v with - | exception e -> - action v ; - reraise e - | e -> action v ; e - -(* let try_it f = - try ignore (f ()) with _ -> () *) - -let with_file_as_chan filename f = - finally (open_out_bin filename) ~clean:close_out f - - -let max_int (x : int) y = - if x >= y then x else y - -let min_int (x : int) y = - if x < y then x else y - -let max_int_option (x : int option) y = - match x, y with - | None, _ -> y - | Some _, None -> x - | Some x0 , Some y0 -> - if x0 >= y0 then x else y - - -(* external id : 'a -> 'a = "%identity" *) - -(* -let hash_variant s = - let accu = ref 0 in - for i = 0 to String.length s - 1 do - accu := 223 * !accu + Char.code s.[i] - done; - (* reduce to 31 bits *) - accu := !accu land (1 lsl 31 - 1); - (* make it signed for 64 bits architectures *) - if !accu > 0x3FFFFFFF then !accu - (1 lsl 31) else !accu *) - -(* let todo loc = - failwith (loc ^ " Not supported yet") -*) - - - -let rec int_of_string_aux s acc off len = - if off >= len then acc - else - let d = (Char.code (String.unsafe_get s off) - 48) in - if d >=0 && d <= 9 then - int_of_string_aux s (10*acc + d) (off + 1) len - else -1 (* error *) - -let nat_of_string_exn (s : string) = - let acc = int_of_string_aux s 0 0 (String.length s) in - if acc < 0 then invalid_arg s - else acc - - -(** return index *) -let parse_nat_of_string (s : string) (cursor : int ref) = - let current = !cursor in - assert (current >= 0); - let acc = ref 0 in - let s_len = String.length s in - let todo = ref true in - let cur = ref current in - while !todo && !cursor < s_len do - let d = Char.code (String.unsafe_get s !cur) - 48 in - if d >=0 && d <= 9 then begin - acc := 10* !acc + d; - incr cur - end else todo := false - done ; - cursor := !cur; - !acc \ No newline at end of file diff --git a/src/compiler-libs-406/ident.ml b/src/compiler-libs-406/ident.ml deleted file mode 100644 index 70828ed2..00000000 --- a/src/compiler-libs-406/ident.ml +++ /dev/null @@ -1,249 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Format - -type t = { stamp: int; name: string; mutable flags: int } - -let global_flag = 1 -let predef_exn_flag = 2 - -(* A stamp of 0 denotes a persistent identifier *) - -let currentstamp = ref 0 - -let create s = - incr currentstamp; - { name = s; stamp = !currentstamp; flags = 0 } - -let create_predef_exn s = - incr currentstamp; - { name = s; stamp = !currentstamp; flags = predef_exn_flag } - -let create_persistent s = - { name = s; stamp = 0; flags = global_flag } - -let rename i = - incr currentstamp; - { i with stamp = !currentstamp } - -let name i = i.name - -let unique_name i = i.name ^ "_" ^ string_of_int i.stamp - -let unique_toplevel_name i = i.name ^ "/" ^ string_of_int i.stamp - -let persistent i = (i.stamp = 0) - -let equal i1 i2 = i1.name = i2.name - -let same i1 i2 = i1 = i2 - (* Possibly more efficient version (with a real compiler, at least): - if i1.stamp <> 0 - then i1.stamp = i2.stamp - else i2.stamp = 0 && i1.name = i2.name *) - -let compare i1 i2 = compare i1 i2 - -let binding_time i = i.stamp - -let current_time() = !currentstamp -let set_current_time t = currentstamp := max !currentstamp t - -let reinit_level = ref (-1) - -let reinit () = - if !reinit_level < 0 - then reinit_level := !currentstamp - else currentstamp := !reinit_level - -let hide i = - { i with stamp = -1 } - -let make_global i = - i.flags <- i.flags lor global_flag - -let global i = - (i.flags land global_flag) <> 0 - -let is_predef_exn i = - (i.flags land predef_exn_flag) <> 0 - -let print ppf i = - match i.stamp with - | 0 -> fprintf ppf "%s!" i.name - | -1 -> fprintf ppf "%s#" i.name - | n -> fprintf ppf "%s/%i%s" i.name n (if global i then "g" else "") - -type 'a tbl = - Empty - | Node of 'a tbl * 'a data * 'a tbl * int - -and 'a data = - { ident: t; - data: 'a; - previous: 'a data option } - -let empty = Empty - -(* Inline expansion of height for better speed - * let height = function - * Empty -> 0 - * | Node(_,_,_,h) -> h - *) - -let mknode l d r = - let hl = match l with Empty -> 0 | Node(_,_,_,h) -> h - and hr = match r with Empty -> 0 | Node(_,_,_,h) -> h in - Node(l, d, r, (if hl >= hr then hl + 1 else hr + 1)) - -let balance l d r = - let hl = match l with Empty -> 0 | Node(_,_,_,h) -> h - and hr = match r with Empty -> 0 | Node(_,_,_,h) -> h in - if hl > hr + 1 then - match l with - | Node (ll, ld, lr, _) - when (match ll with Empty -> 0 | Node(_,_,_,h) -> h) >= - (match lr with Empty -> 0 | Node(_,_,_,h) -> h) -> - mknode ll ld (mknode lr d r) - | Node (ll, ld, Node(lrl, lrd, lrr, _), _) -> - mknode (mknode ll ld lrl) lrd (mknode lrr d r) - | _ -> assert false - else if hr > hl + 1 then - match r with - | Node (rl, rd, rr, _) - when (match rr with Empty -> 0 | Node(_,_,_,h) -> h) >= - (match rl with Empty -> 0 | Node(_,_,_,h) -> h) -> - mknode (mknode l d rl) rd rr - | Node (Node (rll, rld, rlr, _), rd, rr, _) -> - mknode (mknode l d rll) rld (mknode rlr rd rr) - | _ -> assert false - else - mknode l d r - -let rec add id data = function - Empty -> - Node(Empty, {ident = id; data = data; previous = None}, Empty, 1) - | Node(l, k, r, h) -> - let c = compare id.name k.ident.name in - if c = 0 then - Node(l, {ident = id; data = data; previous = Some k}, r, h) - else if c < 0 then - balance (add id data l) k r - else - balance l k (add id data r) - -let rec find_stamp s = function - None -> - raise Not_found - | Some k -> - if k.ident.stamp = s then k.data else find_stamp s k.previous - -let rec find_same id = function - Empty -> - raise Not_found - | Node(l, k, r, _) -> - let c = compare id.name k.ident.name in - if c = 0 then - if id.stamp = k.ident.stamp - then k.data - else find_stamp id.stamp k.previous - else - find_same id (if c < 0 then l else r) - -let rec find_name name = function - Empty -> - raise Not_found - | Node(l, k, r, _) -> - let c = compare name k.ident.name in - if c = 0 then - k.ident, k.data - else - find_name name (if c < 0 then l else r) - -let rec get_all = function - | None -> [] - | Some k -> (k.ident, k.data) :: get_all k.previous - -let rec find_all name = function - Empty -> - [] - | Node(l, k, r, _) -> - let c = compare name k.ident.name in - if c = 0 then - (k.ident, k.data) :: get_all k.previous - else - find_all name (if c < 0 then l else r) - -let rec fold_aux f stack accu = function - Empty -> - begin match stack with - [] -> accu - | a :: l -> fold_aux f l accu a - end - | Node(l, k, r, _) -> - fold_aux f (l :: stack) (f k accu) r - -let fold_name f tbl accu = fold_aux (fun k -> f k.ident k.data) [] accu tbl - -let rec fold_data f d accu = - match d with - None -> accu - | Some k -> f k.ident k.data (fold_data f k.previous accu) - -let fold_all f tbl accu = - fold_aux (fun k -> fold_data f (Some k)) [] accu tbl - -(* let keys tbl = fold_name (fun k _ accu -> k::accu) tbl [] *) - -let rec iter f = function - Empty -> () - | Node(l, k, r, _) -> - iter f l; f k.ident k.data; iter f r - -(* Idents for sharing keys *) - -(* They should be 'totally fresh' -> neg numbers *) -let key_name = "" - -let make_key_generator () = - let c = ref 1 in - fun id -> - let stamp = !c in - decr c ; - { id with name = key_name; stamp = stamp; } - -let compare x y = - let c = x.stamp - y.stamp in - if c <> 0 then c - else - let c = compare x.name y.name in - if c <> 0 then c - else - compare x.flags y.flags - -let output oc id = output_string oc (unique_name id) -let hash i = (Char.code i.name.[0]) lxor i.stamp - -let original_equal = equal -include Identifiable.Make (struct - type nonrec t = t - let compare = compare - let output = output - let print = print - let hash = hash - let equal = same -end) -let equal = original_equal diff --git a/src/compiler-libs-406/ident.mli b/src/compiler-libs-406/ident.mli deleted file mode 100644 index c2983edb..00000000 --- a/src/compiler-libs-406/ident.mli +++ /dev/null @@ -1,73 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Identifiers (unique names) *) - -type t = { stamp: int; name: string; mutable flags: int } - -include Identifiable.S with type t := t -(* Notes: - - [equal] compares identifiers by name - - [compare x y] is 0 if [same x y] is true. - - [compare] compares identifiers by binding location -*) - - -val create: string -> t -val create_persistent: string -> t -val create_predef_exn: string -> t -val rename: t -> t -val name: t -> string -val unique_name: t -> string -val unique_toplevel_name: t -> string -val persistent: t -> bool -val same: t -> t -> bool - (* Compare identifiers by binding location. - Two identifiers are the same either if they are both - non-persistent and have been created by the same call to - [new], or if they are both persistent and have the same - name. *) -val compare: t -> t -> int -val hide: t -> t - (* Return an identifier with same name as the given identifier, - but stamp different from any stamp returned by new. - When put in a 'a tbl, this identifier can only be looked - up by name. *) - -val make_global: t -> unit -val global: t -> bool -val is_predef_exn: t -> bool - -val binding_time: t -> int -val current_time: unit -> int -val set_current_time: int -> unit -val reinit: unit -> unit - -type 'a tbl - (* Association tables from identifiers to type 'a. *) - -val empty: 'a tbl -val add: t -> 'a -> 'a tbl -> 'a tbl -val find_same: t -> 'a tbl -> 'a -val find_name: string -> 'a tbl -> t * 'a -val find_all: string -> 'a tbl -> (t * 'a) list -val fold_name: (t -> 'a -> 'b -> 'b) -> 'a tbl -> 'b -> 'b -val fold_all: (t -> 'a -> 'b -> 'b) -> 'a tbl -> 'b -> 'b -val iter: (t -> 'a -> unit) -> 'a tbl -> unit - - -(* Idents for sharing keys *) - -val make_key_generator : unit -> (t -> t) diff --git a/src/compiler-libs-406/identifiable.ml b/src/compiler-libs-406/identifiable.ml deleted file mode 100644 index 6ee0519a..00000000 --- a/src/compiler-libs-406/identifiable.ml +++ /dev/null @@ -1,254 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -module type Thing = sig - type t - - include Hashtbl.HashedType with type t := t - include Map.OrderedType with type t := t - - val output : out_channel -> t -> unit - val print : Format.formatter -> t -> unit -end - -module type Set = sig - module T : Set.OrderedType - include Set.S - with type elt = T.t - and type t = Set.Make (T).t - - val output : out_channel -> t -> unit - val print : Format.formatter -> t -> unit - val to_string : t -> string - val of_list : elt list -> t - val map : (elt -> elt) -> t -> t -end - -module type Map = sig - module T : Map.OrderedType - include Map.S - with type key = T.t - and type 'a t = 'a Map.Make (T).t - - val filter_map : (key -> 'a -> 'b option) -> 'a t -> 'b t - val of_list : (key * 'a) list -> 'a t - - val disjoint_union : ?eq:('a -> 'a -> bool) -> ?print:(Format.formatter -> 'a -> unit) -> 'a t -> 'a t -> 'a t - - val union_right : 'a t -> 'a t -> 'a t - - val union_left : 'a t -> 'a t -> 'a t - - val union_merge : ('a -> 'a -> 'a) -> 'a t -> 'a t -> 'a t - val rename : key t -> key -> key - val map_keys : (key -> key) -> 'a t -> 'a t - val keys : 'a t -> Set.Make(T).t - val data : 'a t -> 'a list - val of_set : (key -> 'a) -> Set.Make(T).t -> 'a t - val transpose_keys_and_data : key t -> key t - val transpose_keys_and_data_set : key t -> Set.Make(T).t t - val print : - (Format.formatter -> 'a -> unit) -> Format.formatter -> 'a t -> unit -end - -module type Tbl = sig - module T : sig - type t - include Map.OrderedType with type t := t - include Hashtbl.HashedType with type t := t - end - include Hashtbl.S - with type key = T.t - and type 'a t = 'a Hashtbl.Make (T).t - - val to_list : 'a t -> (T.t * 'a) list - val of_list : (T.t * 'a) list -> 'a t - - val to_map : 'a t -> 'a Map.Make(T).t - val of_map : 'a Map.Make(T).t -> 'a t - val memoize : 'a t -> (key -> 'a) -> key -> 'a - val map : 'a t -> ('a -> 'b) -> 'b t -end - -module Pair (A : Thing) (B : Thing) : Thing with type t = A.t * B.t = struct - type t = A.t * B.t - - let compare (a1, b1) (a2, b2) = - let c = A.compare a1 a2 in - if c <> 0 then c - else B.compare b1 b2 - - let output oc (a, b) = Printf.fprintf oc " (%a, %a)" A.output a B.output b - let hash (a, b) = Hashtbl.hash (A.hash a, B.hash b) - let equal (a1, b1) (a2, b2) = A.equal a1 a2 && B.equal b1 b2 - let print ppf (a, b) = Format.fprintf ppf " (%a, @ %a)" A.print a B.print b -end - -module Make_map (T : Thing) = struct - include Map.Make (T) - - let filter_map f t = - fold (fun id v map -> - match f id v with - | None -> map - | Some r -> add id r map) t empty - - let of_list l = - List.fold_left (fun map (id, v) -> add id v map) empty l - - let disjoint_union ?eq ?print m1 m2 = - union (fun id v1 v2 -> - let ok = match eq with - | None -> false - | Some eq -> eq v1 v2 - in - if not ok then - let err = - match print with - | None -> - Format.asprintf "Map.disjoint_union %a" T.print id - | Some print -> - Format.asprintf "Map.disjoint_union %a => %a <> %a" - T.print id print v1 print v2 - in - Misc.fatal_error err - else Some v1) - m1 m2 - - let union_right m1 m2 = - merge (fun _id x y -> match x, y with - | None, None -> None - | None, Some v - | Some v, None - | Some _, Some v -> Some v) - m1 m2 - - let union_left m1 m2 = union_right m2 m1 - - let union_merge f m1 m2 = - let aux _ m1 m2 = - match m1, m2 with - | None, m | m, None -> m - | Some m1, Some m2 -> Some (f m1 m2) - in - merge aux m1 m2 - - let rename m v = - try find v m - with Not_found -> v - - let map_keys f m = - of_list (List.map (fun (k, v) -> f k, v) (bindings m)) - - let print f ppf s = - let elts ppf s = iter (fun id v -> - Format.fprintf ppf "@ (@[%a@ %a@])" T.print id f v) s in - Format.fprintf ppf "@[<1>{@[%a@ @]}@]" elts s - - module T_set = Set.Make (T) - - let keys map = fold (fun k _ set -> T_set.add k set) map T_set.empty - - let data t = List.map snd (bindings t) - - let of_set f set = T_set.fold (fun e map -> add e (f e) map) set empty - - let transpose_keys_and_data map = fold (fun k v m -> add v k m) map empty - let transpose_keys_and_data_set map = - fold (fun k v m -> - let set = - match find v m with - | exception Not_found -> - T_set.singleton k - | set -> - T_set.add k set - in - add v set m) - map empty -end - -module Make_set (T : Thing) = struct - include Set.Make (T) - - let output oc s = - Printf.fprintf oc " ( "; - iter (fun v -> Printf.fprintf oc "%a " T.output v) s; - Printf.fprintf oc ")" - - let print ppf s = - let elts ppf s = iter (fun e -> Format.fprintf ppf "@ %a" T.print e) s in - Format.fprintf ppf "@[<1>{@[%a@ @]}@]" elts s - - let to_string s = Format.asprintf "%a" print s - - let of_list l = match l with - | [] -> empty - | [t] -> singleton t - | t :: q -> List.fold_left (fun acc e -> add e acc) (singleton t) q - - let map f s = of_list (List.map f (elements s)) -end - -module Make_tbl (T : Thing) = struct - include Hashtbl.Make (T) - - module T_map = Make_map (T) - - let to_list t = - fold (fun key datum elts -> (key, datum)::elts) t [] - - let of_list elts = - let t = create 42 in - List.iter (fun (key, datum) -> add t key datum) elts; - t - - let to_map v = fold T_map.add v T_map.empty - - let of_map m = - let t = create (T_map.cardinal m) in - T_map.iter (fun k v -> add t k v) m; - t - - let memoize t f = fun key -> - try find t key with - | Not_found -> - let r = f key in - add t key r; - r - - let map t f = - of_map (T_map.map f (to_map t)) -end - -module type S = sig - type t - - module T : Thing with type t = t - include Thing with type t := T.t - - module Set : Set with module T := T - module Map : Map with module T := T - module Tbl : Tbl with module T := T -end - -module Make (T : Thing) = struct - module T = T - include T - - module Set = Make_set (T) - module Map = Make_map (T) - module Tbl = Make_tbl (T) -end diff --git a/src/compiler-libs-406/identifiable.mli b/src/compiler-libs-406/identifiable.mli deleted file mode 100644 index 46e14545..00000000 --- a/src/compiler-libs-406/identifiable.mli +++ /dev/null @@ -1,107 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Uniform interface for common data structures over various things. *) - -module type Thing = sig - type t - - include Hashtbl.HashedType with type t := t - include Map.OrderedType with type t := t - - val output : out_channel -> t -> unit - val print : Format.formatter -> t -> unit -end - -module Pair : functor (A : Thing) (B : Thing) -> Thing with type t = A.t * B.t - -module type Set = sig - module T : Set.OrderedType - include Set.S - with type elt = T.t - and type t = Set.Make (T).t - - val output : out_channel -> t -> unit - val print : Format.formatter -> t -> unit - val to_string : t -> string - val of_list : elt list -> t - val map : (elt -> elt) -> t -> t -end - -module type Map = sig - module T : Map.OrderedType - include Map.S - with type key = T.t - and type 'a t = 'a Map.Make (T).t - - val filter_map : (key -> 'a -> 'b option) -> 'a t -> 'b t - val of_list : (key * 'a) list -> 'a t - - (** [disjoint_union m1 m2] contains all bindings from [m1] and - [m2]. If some binding is present in both and the associated - value is not equal, a Fatal_error is raised *) - val disjoint_union : ?eq:('a -> 'a -> bool) -> ?print:(Format.formatter -> 'a -> unit) -> 'a t -> 'a t -> 'a t - - (** [union_right m1 m2] contains all bindings from [m1] and [m2]. If - some binding is present in both, the one from [m2] is taken *) - val union_right : 'a t -> 'a t -> 'a t - - (** [union_left m1 m2 = union_right m2 m1] *) - val union_left : 'a t -> 'a t -> 'a t - - val union_merge : ('a -> 'a -> 'a) -> 'a t -> 'a t -> 'a t - val rename : key t -> key -> key - val map_keys : (key -> key) -> 'a t -> 'a t - val keys : 'a t -> Set.Make(T).t - val data : 'a t -> 'a list - val of_set : (key -> 'a) -> Set.Make(T).t -> 'a t - val transpose_keys_and_data : key t -> key t - val transpose_keys_and_data_set : key t -> Set.Make(T).t t - val print : - (Format.formatter -> 'a -> unit) -> Format.formatter -> 'a t -> unit -end - -module type Tbl = sig - module T : sig - type t - include Map.OrderedType with type t := t - include Hashtbl.HashedType with type t := t - end - include Hashtbl.S - with type key = T.t - and type 'a t = 'a Hashtbl.Make (T).t - - val to_list : 'a t -> (T.t * 'a) list - val of_list : (T.t * 'a) list -> 'a t - - val to_map : 'a t -> 'a Map.Make(T).t - val of_map : 'a Map.Make(T).t -> 'a t - val memoize : 'a t -> (key -> 'a) -> key -> 'a - val map : 'a t -> ('a -> 'b) -> 'b t -end - -module type S = sig - type t - - module T : Thing with type t = t - include Thing with type t := T.t - - module Set : Set with module T := T - module Map : Map with module T := T - module Tbl : Tbl with module T := T -end - -module Make (T : Thing) : S with type t := T.t diff --git a/src/compiler-libs-406/lexer.ml b/src/compiler-libs-406/lexer.ml deleted file mode 100644 index c615b58e..00000000 --- a/src/compiler-libs-406/lexer.ml +++ /dev/null @@ -1,3105 +0,0 @@ -# 18 "ml/lexer.mll" - -open Lexing -open Misc -open Parser - -type directive_value = - | Dir_bool of bool - | Dir_float of float - | Dir_int of int - | Dir_string of string - | Dir_null - -type directive_type = - | Dir_type_bool - | Dir_type_float - | Dir_type_int - | Dir_type_string - | Dir_type_null - -let type_of_directive x = - match x with - | Dir_bool _ -> Dir_type_bool - | Dir_float _ -> Dir_type_float - | Dir_int _ -> Dir_type_int - | Dir_string _ -> Dir_type_string - | Dir_null -> Dir_type_null - -let string_of_type_directive x = - match x with - | Dir_type_bool -> "bool" - | Dir_type_float -> "float" - | Dir_type_int -> "int" - | Dir_type_string -> "string" - | Dir_type_null -> "null" - -type error = - | Illegal_character of char - | Illegal_escape of string - | Unterminated_comment of Location.t - | Unterminated_string - | Unterminated_string_in_comment of Location.t * Location.t - | Keyword_as_label of string - | Invalid_literal of string - | Invalid_directive of string * string option - | Unterminated_paren_in_conditional - | Unterminated_if - | Unterminated_else - | Unexpected_token_in_conditional - | Expect_hash_then_in_conditional - | Illegal_semver of string - | Unexpected_directive - | Conditional_expr_expected_type of directive_type * directive_type - -;; - -exception Error of error * Location.t;; - -let assert_same_type lexbuf x y = - let lhs = type_of_directive x in let rhs = type_of_directive y in - if lhs <> rhs then - raise (Error(Conditional_expr_expected_type(lhs,rhs), Location.curr lexbuf)) - else y - -let directive_built_in_values = - Hashtbl.create 51 - - -let replace_directive_built_in_value k v = - Hashtbl.replace directive_built_in_values k v - -let remove_directive_built_in_value k = - Hashtbl.replace directive_built_in_values k Dir_null - -let replace_directive_int k v = - Hashtbl.replace directive_built_in_values k (Dir_int v) - -let replace_directive_bool k v = - Hashtbl.replace directive_built_in_values k (Dir_bool v) - -let replace_directive_string k v = - Hashtbl.replace directive_built_in_values k (Dir_string v) - -let () = - (* Note we use {!Config} instead of {!Sys} becasue - we want to overwrite in some cases with the - same stdlib - *) - let version = - Config.version (* so that it can be overridden*) - in - replace_directive_built_in_value "OCAML_VERSION" - (Dir_string version); - replace_directive_built_in_value "OS_TYPE" - (Dir_string Sys.os_type); - replace_directive_built_in_value "BIG_ENDIAN" - (Dir_bool Sys.big_endian) - -let find_directive_built_in_value k = - Hashtbl.find directive_built_in_values k - -let iter_directive_built_in_value f = Hashtbl.iter f directive_built_in_values - -(* - {[ - # semver 0 "12";; - - : int * int * int * string = (12, 0, 0, "");; - # semver 0 "12.3";; - - : int * int * int * string = (12, 3, 0, "");; - semver 0 "12.3.10";; - - : int * int * int * string = (12, 3, 10, "");; - # semver 0 "12.3.10+x";; - - : int * int * int * string = (12, 3, 10, "+x") - ]} -*) -let zero = Char.code '0' -let dot = Char.code '.' -let semantic_version_parse str start last_index = - let rec aux start acc last_index = - if start <= last_index then - let c = Char.code (String.unsafe_get str start) in - if c = dot then (acc, start + 1) (* consume [4.] instead of [4]*) - else - let v = c - zero in - if v >=0 && v <= 9 then - aux (start + 1) (acc * 10 + v) last_index - else (acc , start) - else (acc, start) - in - let major, major_end = aux start 0 last_index in - let minor, minor_end = aux major_end 0 last_index in - let patch, patch_end = aux minor_end 0 last_index in - let additional = String.sub str patch_end (last_index - patch_end +1) in - (major, minor, patch), additional - -(** - {[ - semver Location.none "1.2.3" "~1.3.0" = false;; - semver Location.none "1.2.3" "^1.3.0" = true ;; - semver Location.none "1.2.3" ">1.3.0" = false ;; - semver Location.none "1.2.3" ">=1.3.0" = false ;; - semver Location.none "1.2.3" "<1.3.0" = true ;; - semver Location.none "1.2.3" "<=1.3.0" = true ;; - ]} -*) -let semver loc lhs str = - let last_index = String.length str - 1 in - if last_index < 0 then raise (Error(Illegal_semver str, loc)) - else - let pred, ((major, minor, _patch) as version, _) = - let v = String.unsafe_get str 0 in - match v with - | '>' -> - if last_index = 0 then raise (Error(Illegal_semver str, loc)) else - if String.unsafe_get str 1 = '=' then - `Ge, semantic_version_parse str 2 last_index - else `Gt, semantic_version_parse str 1 last_index - | '<' - -> - if last_index = 0 then raise (Error(Illegal_semver str, loc)) else - if String.unsafe_get str 1 = '=' then - `Le, semantic_version_parse str 2 last_index - else `Lt, semantic_version_parse str 1 last_index - | '^' - -> `Compatible, semantic_version_parse str 1 last_index - | '~' -> `Approximate, semantic_version_parse str 1 last_index - | _ -> `Exact, semantic_version_parse str 0 last_index - in - let ((l_major, l_minor, _l_patch) as lversion,_) = - semantic_version_parse lhs 0 (String.length lhs - 1) in - match pred with - | `Ge -> lversion >= version - | `Gt -> lversion > version - | `Le -> lversion <= version - | `Lt -> lversion < version - | `Approximate -> major = l_major && minor = l_minor - | `Compatible -> major = l_major - | `Exact -> lversion = version - - -let pp_directive_value fmt (x : directive_value) = - match x with - | Dir_bool b -> Format.pp_print_bool fmt b - | Dir_int b -> Format.pp_print_int fmt b - | Dir_float b -> Format.pp_print_float fmt b - | Dir_string s -> Format.fprintf fmt "%S" s - | Dir_null -> Format.pp_print_string fmt "null" - -let list_variables fmt = - iter_directive_built_in_value - (fun s dir_value -> - Format.fprintf - fmt "@[%s@ %a@]@." - s pp_directive_value dir_value - ) - -let defined str = - begin match find_directive_built_in_value str with - | Dir_null -> false - | _ -> true - | exception _ -> - try ignore @@ Sys.getenv str; true with _ -> false - end - -let query _loc str = - begin match find_directive_built_in_value str with - | Dir_null -> Dir_bool false - | v -> v - | exception Not_found -> - begin match Sys.getenv str with - | v -> - begin - try Dir_bool (bool_of_string v) with - _ -> - begin - try Dir_int (int_of_string v ) - with - _ -> - begin try (Dir_float (float_of_string v)) - with _ -> Dir_string v - end - end - end - | exception Not_found -> - Dir_bool false - end - end - - -let define_key_value key v = - if String.length key > 0 - && Char.uppercase_ascii (key.[0]) = key.[0] then - begin - replace_directive_built_in_value key - begin - (* NEED Sync up across {!lexer.mll} {!bspp.ml} and here, - TODO: put it in {!lexer.mll} - *) - try Dir_bool (bool_of_string v) with - _ -> - begin - try Dir_int (int_of_string v ) - with - _ -> - begin try (Dir_float (float_of_string v)) - with _ -> Dir_string v - end - end - end; - true - end - else false - -let cvt_int_literal s = - - int_of_string ("-" ^ s) - -let value_of_token loc (t : Parser.token) = - match t with - | INT (i,None) -> Dir_int (cvt_int_literal i) - | STRING (s,_) -> Dir_string s - | FLOAT (s,None) -> Dir_float (float_of_string s) - | TRUE -> Dir_bool true - | FALSE -> Dir_bool false - | UIDENT s -> query loc s - | _ -> raise (Error (Unexpected_token_in_conditional, loc)) - - -let directive_parse token_with_comments lexbuf = - let look_ahead = ref None in - let token () : Parser.token = - let v = !look_ahead in - match v with - | Some v -> - look_ahead := None ; - v - | None -> - let rec skip () = - match token_with_comments lexbuf with - | COMMENT _ - | DOCSTRING _ -> skip () - | EOF -> raise (Error (Unterminated_if, Location.curr lexbuf)) - | t -> t - in skip () - in - let push e = - (* INVARIANT: only look at most one token *) - assert (!look_ahead = None); - look_ahead := Some e - in - let rec - token_op calc ~no lhs = - match token () with - | (LESS - | GREATER - | INFIXOP0 "<=" - | INFIXOP0 ">=" - | EQUAL - | INFIXOP0 "<>" as op) -> - let f = - match op with - | LESS -> (<) - | GREATER -> (>) - | INFIXOP0 "<=" -> (<=) - | EQUAL -> (=) - | INFIXOP0 "<>" -> (<>) - | _ -> assert false - in - let curr_loc = Location.curr lexbuf in - let rhs = value_of_token curr_loc (token ()) in - not calc || - f lhs (assert_same_type lexbuf lhs rhs) - | INFIXOP0 "=~" -> - not calc || - begin match lhs with - | Dir_string s -> - let curr_loc = Location.curr lexbuf in - let rhs = value_of_token curr_loc (token ()) in - begin match rhs with - | Dir_string rhs -> - semver curr_loc s rhs - | _ -> - raise - (Error - ( Conditional_expr_expected_type - (Dir_type_string, type_of_directive lhs), Location.curr lexbuf)) - end - | _ -> raise - (Error - ( Conditional_expr_expected_type - (Dir_type_string, type_of_directive lhs), Location.curr lexbuf)) - end - | e -> no e - and - parse_or calc : bool = - parse_or_aux calc (parse_and calc) - and (* a || (b || (c || d))*) - parse_or_aux calc v : bool = - (* let l = v in *) - match token () with - | BARBAR -> - let b = parse_or (calc && not v) in - v || b - | e -> push e ; v - and parse_and calc = - parse_and_aux calc (parse_relation calc) - and parse_and_aux calc v = (* a && (b && (c && d)) *) - (* let l = v in *) - match token () with - | AMPERAMPER -> - let b = parse_and (calc && v) in - v && b - | e -> push e ; v - and parse_relation (calc : bool) : bool = - let curr_token = token () in - let curr_loc = Location.curr lexbuf in - match curr_token with - | TRUE -> true - | FALSE -> false - | UIDENT v -> - let value_v = query curr_loc v in - token_op calc - ~no:(fun e -> push e ; - match value_v with - | Dir_bool b -> b - | _ -> - let ty = type_of_directive value_v in - raise - (Error(Conditional_expr_expected_type (Dir_type_bool, ty), - curr_loc))) - value_v - | INT (v,None) -> - let num_v = cvt_int_literal v in - token_op calc - ~no:(fun e -> - push e; - num_v <> 0 - ) - (Dir_int num_v) - | FLOAT (v,None) -> - token_op calc - ~no:(fun _e -> - raise (Error(Conditional_expr_expected_type(Dir_type_bool, Dir_type_float), - curr_loc))) - (Dir_float (float_of_string v)) - | STRING (v,_) -> - token_op calc - ~no:(fun _e -> - raise (Error - (Conditional_expr_expected_type(Dir_type_bool, Dir_type_string), - curr_loc))) - (Dir_string v) - | LIDENT ("defined" | "undefined" as r) -> - let t = token () in - let loc = Location.curr lexbuf in - begin match t with - | UIDENT s -> - not calc || - if r.[0] = 'u' then - not @@ defined s - else defined s - | _ -> raise (Error (Unexpected_token_in_conditional, loc)) - end - | LPAREN -> - let v = parse_or calc in - begin match token () with - | RPAREN -> v - | _ -> raise (Error(Unterminated_paren_in_conditional, Location.curr lexbuf)) - end - - | _ -> raise (Error (Unexpected_token_in_conditional, curr_loc)) - in - let v = parse_or true in - begin match token () with - | THEN | EOL -> v - | _ -> raise (Error (Expect_hash_then_in_conditional, Location.curr lexbuf)) - end - - -type dir_conditional = - | Dir_if_true - | Dir_if_false - | Dir_out - -(* let string_of_dir_conditional (x : dir_conditional) = *) -(* match x with *) -(* | Dir_if_true -> "Dir_if_true" *) -(* | Dir_if_false -> "Dir_if_false" *) -(* | Dir_out -> "Dir_out" *) - -let is_elif (i : Parser.token ) = - match i with - | LIDENT "elif" -> true - | _ -> false (* avoid polymorphic equal *) - - -(* The table of keywords *) - -let keyword_table = - create_hashtable 149 [ - "and", AND; - "as", AS; - "assert", ASSERT; - "begin", BEGIN; - "class", CLASS; - "constraint", CONSTRAINT; - "do", DO; - "done", DONE; - "downto", DOWNTO; - "else", ELSE; - "end", END; - "exception", EXCEPTION; - "external", EXTERNAL; - "false", FALSE; - "for", FOR; - "fun", FUN; - "function", FUNCTION; - "functor", FUNCTOR; - "if", IF; - "in", IN; - "include", INCLUDE; - "inherit", INHERIT; - "initializer", INITIALIZER; - "lazy", LAZY; - "let", LET; - "match", MATCH; - "method", METHOD; - "module", MODULE; - "mutable", MUTABLE; - "new", NEW; - "nonrec", NONREC; - "object", OBJECT; - "of", OF; - "open", OPEN; - "or", OR; -(* "parser", PARSER; *) - "private", PRIVATE; - "rec", REC; - "sig", SIG; - "struct", STRUCT; - "then", THEN; - "to", TO; - "true", TRUE; - "try", TRY; - "type", TYPE; - "val", VAL; - "virtual", VIRTUAL; - "when", WHEN; - "while", WHILE; - "with", WITH; - - "lor", INFIXOP3("lor"); (* Should be INFIXOP2 *) - "lxor", INFIXOP3("lxor"); (* Should be INFIXOP2 *) - "mod", INFIXOP3("mod"); - "land", INFIXOP3("land"); - "lsl", INFIXOP4("lsl"); - "lsr", INFIXOP4("lsr"); - "asr", INFIXOP4("asr") -] - -(* To buffer string literals *) - -let string_buffer = Buffer.create 256 -let reset_string_buffer () = Buffer.reset string_buffer -let get_stored_string () = Buffer.contents string_buffer - -let store_string_char c = Buffer.add_char string_buffer c -let store_string_utf_8_uchar u = Buffer.add_utf_8_uchar string_buffer u -let store_string s = Buffer.add_string string_buffer s -let store_lexeme lexbuf = store_string (Lexing.lexeme lexbuf) - -(* To store the position of the beginning of a string and comment *) -let string_start_loc = ref Location.none;; -let comment_start_loc = ref [];; -let in_comment () = !comment_start_loc <> [];; -let is_in_string = ref false -let in_string () = !is_in_string -let print_warnings = ref true -let if_then_else = ref Dir_out -let sharp_look_ahead = ref None -let update_if_then_else v = - (* Format.fprintf Format.err_formatter "@[update %s \n@]@." (string_of_dir_conditional v); *) - if_then_else := v - -(* Escaped chars are interpreted in strings unless they are in comments. *) -let store_escaped_char lexbuf c = - if in_comment () then store_lexeme lexbuf else store_string_char c - -let store_escaped_uchar lexbuf u = - if in_comment () then store_lexeme lexbuf else store_string_utf_8_uchar u - -let with_comment_buffer comment lexbuf = - let start_loc = Location.curr lexbuf in - comment_start_loc := [start_loc]; - reset_string_buffer (); - let end_loc = comment lexbuf in - let s = get_stored_string () in - reset_string_buffer (); - let loc = { start_loc with Location.loc_end = end_loc.Location.loc_end } in - s, loc - -(* To translate escape sequences *) - -let hex_digit_value d = (* assert (d in '0'..'9' 'a'..'f' 'A'..'F') *) - let d = Char.code d in - if d >= 97 then d - 87 else - if d >= 65 then d - 55 else - d - 48 - -let hex_num_value lexbuf ~first ~last = - let rec loop acc i = match i > last with - | true -> acc - | false -> - let value = hex_digit_value (Lexing.lexeme_char lexbuf i) in - loop (16 * acc + value) (i + 1) - in - loop 0 first - -let char_for_backslash = function - | 'n' -> '\010' - | 'r' -> '\013' - | 'b' -> '\008' - | 't' -> '\009' - | c -> c - -let char_for_decimal_code lexbuf i = - let c = 100 * (Char.code(Lexing.lexeme_char lexbuf i) - 48) + - 10 * (Char.code(Lexing.lexeme_char lexbuf (i+1)) - 48) + - (Char.code(Lexing.lexeme_char lexbuf (i+2)) - 48) in - if not (Uchar.is_valid c ) then - if in_comment () - then 'x' - else raise (Error(Illegal_escape (Lexing.lexeme lexbuf), - Location.curr lexbuf)) - else (Obj.magic (c : int) : char) - -let char_for_octal_code lexbuf i = - let c = 64 * (Char.code(Lexing.lexeme_char lexbuf i) - 48) + - 8 * (Char.code(Lexing.lexeme_char lexbuf (i+1)) - 48) + - (Char.code(Lexing.lexeme_char lexbuf (i+2)) - 48) in - Char.chr c - -let char_for_hexadecimal_code lexbuf i = - let byte = hex_num_value lexbuf ~first:i ~last:(i+1) in - Char.chr byte - -let uchar_for_uchar_escape lexbuf = - let err e = - raise - (Error (Illegal_escape (Lexing.lexeme lexbuf ^ e), Location.curr lexbuf)) - in - let len = Lexing.lexeme_end lexbuf - Lexing.lexeme_start lexbuf in - let first = 3 (* skip opening \u{ *) in - let last = len - 2 (* skip closing } *) in - let digit_count = last - first + 1 in - match digit_count > 6 with - | true -> err ", too many digits, expected 1 to 6 hexadecimal digits" - | false -> - let cp = hex_num_value lexbuf ~first ~last in - if Uchar.is_valid cp then Uchar.unsafe_of_int cp else - err (", " ^ Printf.sprintf "%X" cp ^ " is not a Unicode scalar value") - -(* recover the name from a LABEL or OPTLABEL token *) - -let get_label_name lexbuf = - let s = Lexing.lexeme lexbuf in - let name = String.sub s 1 (String.length s - 2) in - if Hashtbl.mem keyword_table name then - raise (Error(Keyword_as_label name, Location.curr lexbuf)); - name -;; - -(* Update the current location with file name and line number. *) - -let update_loc lexbuf file line absolute chars = - let pos = lexbuf.lex_curr_p in - let new_file = match file with - | None -> pos.pos_fname - | Some s -> s - in - lexbuf.lex_curr_p <- { pos with - pos_fname = new_file; - pos_lnum = if absolute then line else pos.pos_lnum + line; - pos_bol = pos.pos_cnum - chars; - } -;; - -let preprocessor = ref None - -let escaped_newlines = ref false - - -let handle_docstrings = ref true -let comment_list = ref [] - -let add_comment com = - comment_list := com :: !comment_list - -let add_docstring_comment ds = - let com = - ("*" ^ Docstrings.docstring_body ds, Docstrings.docstring_loc ds) - in - add_comment com - -let comments () = List.rev !comment_list - -(* Error report *) - -open Format - -let report_error ppf = function - | Illegal_character c -> - fprintf ppf "Illegal character (%s)" (Char.escaped c) - | Illegal_escape s -> - fprintf ppf "Illegal backslash escape in string or character (%s)" s - | Unterminated_comment _ -> - fprintf ppf "Comment not terminated" - | Unterminated_string -> - fprintf ppf "String literal not terminated" - | Unterminated_string_in_comment (_, loc) -> - fprintf ppf "This comment contains an unterminated string literal@.\ - %aString literal begins here" - Location.print_error loc - | Keyword_as_label kwd -> - fprintf ppf "`%s' is a keyword, it cannot be used as label name" kwd - | Invalid_literal s -> - fprintf ppf "Invalid literal %s" s - | Invalid_directive (dir, explanation) -> - fprintf ppf "Invalid lexer directive %S" dir; - begin match explanation with - | None -> () - | Some expl -> fprintf ppf ": %s" expl - end - | Unterminated_if -> - fprintf ppf "#if not terminated" - | Unterminated_else -> - fprintf ppf "#else not terminated" - | Unexpected_directive -> fprintf ppf "Unexpected directive" - | Unexpected_token_in_conditional -> - fprintf ppf "Unexpected token in conditional predicate" - | Unterminated_paren_in_conditional -> - fprintf ppf "Unterminated parens in conditional predicate" - | Expect_hash_then_in_conditional -> - fprintf ppf "Expect `then` after conditional predicate" - | Conditional_expr_expected_type (a,b) -> - fprintf ppf "Conditional expression type mismatch (%s,%s)" - (string_of_type_directive a ) - (string_of_type_directive b ) - | Illegal_semver s -> - fprintf ppf "Illegal semantic version string %s" s - -let () = - Location.register_error_of_exn - (function - | Error (err, loc) -> - Some (Location.error_of_printer loc report_error err) - | _ -> - None - ) - - -# 702 "ml/lexer.ml" -let __ocaml_lex_tables = { - Lexing.lex_base = - "\000\000\166\255\167\255\094\000\129\000\164\000\199\000\234\000\ - \013\001\190\255\048\001\085\001\198\255\041\001\124\001\159\001\ - \069\000\084\000\193\001\228\001\216\255\218\255\221\255\007\002\ - \102\002\137\002\087\000\125\000\167\002\240\255\251\002\079\003\ - \163\003\247\003\081\004\173\004\001\005\138\000\254\255\001\000\ - \005\000\255\255\006\000\007\000\091\005\121\005\250\255\205\005\ - \248\255\033\006\117\006\201\006\029\007\113\007\197\007\025\008\ - \109\008\193\008\021\009\105\009\129\000\189\009\017\010\101\010\ - \185\010\013\011\024\002\196\255\239\255\135\002\104\011\094\000\ - \095\000\011\000\238\255\237\255\232\255\138\011\164\000\034\002\ - \104\000\236\255\064\002\105\000\235\255\054\002\074\002\109\000\ - \234\255\177\011\110\000\233\255\118\000\228\255\127\000\227\255\ - \153\000\222\011\226\255\001\012\022\012\137\002\225\255\012\000\ - \013\000\241\000\020\001\017\000\225\255\018\000\051\012\086\012\ - \121\012\156\012\191\012\213\255\208\255\209\255\210\255\206\255\ - \226\012\114\000\089\000\199\255\200\255\201\255\097\000\186\255\ - \184\255\193\255\005\013\189\255\191\255\040\013\075\013\110\013\ - \145\013\125\004\243\255\244\255\186\000\245\255\141\001\143\013\ - \253\255\122\000\131\000\255\255\254\255\252\255\175\013\010\014\ - \159\000\164\000\195\000\251\255\250\255\249\255\044\014\154\002\ - \165\000\248\255\164\002\177\000\247\255\083\014\180\000\246\255\ - \220\000\142\001\245\255\246\255\247\255\221\000\154\014\255\255\ - \248\255\098\000\188\014\199\000\098\004\253\255\220\000\230\000\ - \255\000\173\004\252\255\155\003\239\003\251\255\227\014\250\255\ - \250\014\032\015\249\255\018\001\051\001\252\255\061\015\254\255\ - \255\255\034\001\035\001\253\255\090\015\203\000\206\000\012\001\ - \016\001\231\000\025\001\231\000\019\000\255\255"; - Lexing.lex_backtrk = - "\255\255\255\255\255\255\086\000\085\000\082\000\081\000\074\000\ - \072\000\255\255\063\000\060\000\255\255\053\000\052\000\050\000\ - \048\000\044\000\041\000\077\000\255\255\255\255\255\255\032\000\ - \031\000\038\000\036\000\035\000\058\000\255\255\010\000\010\000\ - \009\000\008\000\006\000\004\000\003\000\002\000\255\255\089\000\ - \089\000\255\255\255\255\255\255\080\000\255\255\255\255\255\255\ - \255\255\014\000\014\000\012\000\011\000\014\000\011\000\011\000\ - \010\000\012\000\011\000\012\000\255\255\013\000\013\000\010\000\ - \010\000\012\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\023\000\023\000\023\000\ - \023\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\024\000\255\255\025\000\255\255\ - \026\000\084\000\255\255\087\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\033\000\083\000\ - \078\000\040\000\043\000\255\255\255\255\255\255\255\255\255\255\ - \051\000\070\000\067\000\255\255\255\255\255\255\068\000\255\255\ - \255\255\255\255\061\000\255\255\255\255\079\000\073\000\076\000\ - \075\000\255\255\255\255\255\255\012\000\255\255\012\000\012\000\ - \255\255\012\000\012\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\010\000\010\000\255\255\ - \255\255\007\000\007\000\007\000\007\000\255\255\001\000\007\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\003\000\255\255\ - \255\255\003\000\255\255\255\255\255\255\002\000\255\255\255\255\ - \001\000\255\255\255\255\255\255\255\255\255\255"; - Lexing.lex_default = - "\001\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\000\000\255\255\255\255\000\000\255\255\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\071\000\255\255\000\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\000\000\255\255\ - \255\255\000\000\255\255\255\255\255\255\255\255\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\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\000\000\000\000\255\255\076\000\255\255\ - \255\255\255\255\000\000\000\000\000\000\255\255\255\255\255\255\ - \255\255\000\000\255\255\255\255\000\000\255\255\255\255\255\255\ - \000\000\255\255\255\255\000\000\255\255\000\000\255\255\000\000\ - \255\255\255\255\000\000\255\255\104\000\255\255\000\000\255\255\ - \104\000\105\000\104\000\107\000\000\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\000\000\000\000\000\000\000\000\000\000\ - \255\255\255\255\255\255\000\000\000\000\000\000\255\255\000\000\ - \000\000\000\000\255\255\000\000\000\000\255\255\255\255\255\255\ - \255\255\138\000\000\000\000\000\255\255\000\000\152\000\255\255\ - \000\000\255\255\255\255\000\000\000\000\000\000\255\255\255\255\ - \255\255\255\255\255\255\000\000\000\000\000\000\255\255\255\255\ - \255\255\000\000\255\255\255\255\000\000\255\255\255\255\000\000\ - \255\255\170\000\000\000\000\000\000\000\255\255\176\000\000\000\ - \000\000\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ - \255\255\255\255\000\000\255\255\255\255\000\000\255\255\000\000\ - \255\255\255\255\000\000\255\255\197\000\000\000\255\255\000\000\ - \000\000\255\255\255\255\000\000\255\255\255\255\255\255\207\000\ - \210\000\255\255\210\000\255\255\255\255\000\000"; - Lexing.lex_trans = - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\037\000\038\000\038\000\037\000\039\000\043\000\041\000\ - \041\000\038\000\042\000\042\000\043\000\072\000\102\000\102\000\ - \073\000\103\000\103\000\108\000\108\000\213\000\109\000\109\000\ - \037\000\008\000\029\000\024\000\006\000\004\000\023\000\027\000\ - \026\000\021\000\025\000\007\000\020\000\019\000\018\000\003\000\ - \031\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\017\000\016\000\015\000\014\000\010\000\034\000\ - \005\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\013\000\040\000\012\000\005\000\036\000\ - \022\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ - \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ - \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ - \033\000\033\000\033\000\028\000\011\000\009\000\035\000\003\000\ - \119\000\092\000\003\000\003\000\003\000\075\000\074\000\072\000\ - \003\000\003\000\073\000\003\000\003\000\003\000\118\000\081\000\ - \084\000\117\000\116\000\037\000\088\000\091\000\037\000\128\000\ - \003\000\126\000\003\000\003\000\003\000\003\000\003\000\093\000\ - \094\000\127\000\003\000\148\000\255\255\003\000\003\000\003\000\ - \095\000\096\000\037\000\003\000\003\000\147\000\003\000\003\000\ - \003\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ - \059\000\059\000\059\000\003\000\003\000\003\000\003\000\003\000\ - \003\000\003\000\095\000\096\000\139\000\005\000\157\000\168\000\ - \005\000\005\000\005\000\156\000\161\000\153\000\005\000\005\000\ - \154\000\005\000\005\000\005\000\085\000\085\000\085\000\085\000\ - \164\000\070\000\003\000\167\000\003\000\192\000\005\000\003\000\ - \005\000\005\000\005\000\005\000\005\000\182\000\139\000\172\000\ - \006\000\168\000\195\000\006\000\006\000\006\000\206\000\207\000\ - \182\000\006\000\006\000\184\000\006\000\006\000\006\000\187\000\ - \187\000\187\000\187\000\102\000\182\000\003\000\103\000\003\000\ - \002\000\006\000\005\000\006\000\006\000\006\000\006\000\006\000\ - \211\000\182\000\212\000\111\000\184\000\255\255\111\000\111\000\ - \111\000\255\255\000\000\107\000\111\000\111\000\208\000\111\000\ - \136\000\111\000\209\000\000\000\172\000\106\000\102\000\195\000\ - \005\000\103\000\005\000\209\000\111\000\006\000\111\000\135\000\ - \111\000\111\000\111\000\000\000\200\000\200\000\133\000\202\000\ - \202\000\133\000\133\000\133\000\106\000\000\000\105\000\133\000\ - \133\000\000\000\133\000\133\000\133\000\200\000\000\000\000\000\ - \201\000\000\000\000\000\006\000\000\000\006\000\000\000\133\000\ - \111\000\133\000\134\000\133\000\133\000\133\000\121\000\000\000\ - \000\000\006\000\000\000\000\000\006\000\006\000\006\000\000\000\ - \000\000\000\000\006\000\006\000\000\000\006\000\006\000\006\000\ - \000\000\000\000\000\000\000\000\000\000\124\000\111\000\123\000\ - \111\000\122\000\006\000\133\000\006\000\006\000\006\000\006\000\ - \006\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\ - \000\000\006\000\006\000\006\000\000\000\255\255\000\000\006\000\ - \006\000\000\000\006\000\006\000\006\000\000\000\000\000\000\000\ - \000\000\133\000\000\000\133\000\000\000\132\000\006\000\006\000\ - \000\000\006\000\006\000\006\000\006\000\006\000\000\000\153\000\ - \172\000\000\000\154\000\173\000\000\000\006\000\000\000\000\000\ - \006\000\006\000\006\000\000\000\000\000\125\000\006\000\006\000\ - \000\000\006\000\006\000\006\000\006\000\131\000\006\000\198\000\ - \175\000\000\000\129\000\006\000\155\000\000\000\006\000\000\000\ - \006\000\006\000\006\000\006\000\006\000\000\000\000\000\000\000\ - \006\000\000\000\000\000\006\000\006\000\006\000\000\000\000\000\ - \000\000\006\000\006\000\000\000\120\000\006\000\006\000\000\000\ - \000\000\130\000\000\000\006\000\000\000\000\000\000\000\000\000\ - \000\000\006\000\006\000\006\000\006\000\006\000\006\000\006\000\ - \000\000\000\000\114\000\000\000\000\000\114\000\114\000\114\000\ - \000\000\151\000\174\000\114\000\114\000\000\000\114\000\115\000\ - \114\000\255\255\000\000\000\000\000\000\000\000\000\000\000\000\ - \006\000\000\000\006\000\114\000\000\000\006\000\114\000\114\000\ - \114\000\114\000\000\000\000\000\000\000\111\000\000\000\000\000\ - \111\000\111\000\111\000\000\000\255\255\000\000\111\000\111\000\ - \255\255\111\000\112\000\111\000\255\255\000\000\000\000\000\000\ - \000\000\255\255\000\000\006\000\000\000\006\000\111\000\114\000\ - \111\000\111\000\113\000\111\000\111\000\000\000\000\000\000\000\ - \006\000\000\000\000\000\006\000\006\000\110\000\000\000\000\000\ - \000\000\006\000\006\000\199\000\006\000\006\000\006\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\114\000\000\000\114\000\ - \000\000\006\000\111\000\006\000\006\000\006\000\006\000\006\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\082\000\082\000\082\000\082\000\082\000\082\000\ - \082\000\082\000\082\000\082\000\000\000\000\000\000\000\000\000\ - \111\000\000\000\111\000\000\000\000\000\006\000\086\000\086\000\ - \086\000\086\000\086\000\086\000\086\000\086\000\000\000\101\000\ - \083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ - \083\000\083\000\087\000\087\000\087\000\087\000\087\000\087\000\ - \087\000\087\000\000\000\006\000\000\000\006\000\101\000\099\000\ - \000\000\099\000\099\000\099\000\099\000\255\255\171\000\000\000\ - \099\000\099\000\101\000\099\000\099\000\099\000\100\000\100\000\ - \100\000\100\000\100\000\100\000\100\000\100\000\100\000\100\000\ - \099\000\000\000\099\000\099\000\099\000\099\000\099\000\000\000\ - \000\000\101\000\003\000\000\000\000\000\003\000\003\000\003\000\ - \000\000\000\000\098\000\097\000\003\000\000\000\003\000\003\000\ - \003\000\100\000\100\000\100\000\100\000\100\000\100\000\100\000\ - \100\000\100\000\100\000\003\000\099\000\003\000\003\000\003\000\ - \003\000\003\000\162\000\162\000\162\000\162\000\162\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\000\000\000\000\ - \000\000\000\000\099\000\067\000\099\000\000\000\069\000\003\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\000\000\068\000\000\000\003\000\069\000\003\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\049\000\068\000\000\000\000\000\000\000\000\000\ - \000\000\051\000\000\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\049\000\049\000\049\000\049\000\ - \050\000\049\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\000\000\000\000\ - \000\000\000\000\030\000\000\000\049\000\049\000\049\000\049\000\ - \050\000\049\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\049\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\051\000\000\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \049\000\053\000\049\000\049\000\050\000\049\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\054\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\055\000\ - \052\000\052\000\000\000\000\000\000\000\000\000\030\000\000\000\ - \049\000\053\000\049\000\049\000\050\000\049\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\054\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\055\000\ - \052\000\052\000\032\000\188\000\188\000\188\000\188\000\188\000\ - \188\000\188\000\188\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\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\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\032\000\000\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\033\000\189\000\ - \189\000\189\000\189\000\189\000\189\000\189\000\189\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\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\044\000\000\000\000\000\044\000\044\000\044\000\ - \000\000\000\000\000\000\044\000\044\000\000\000\044\000\044\000\ - \044\000\000\000\000\000\000\000\000\000\000\000\000\000\139\000\ - \000\000\000\000\140\000\044\000\000\000\044\000\044\000\044\000\ - \044\000\044\000\185\000\185\000\185\000\185\000\185\000\185\000\ - \185\000\185\000\185\000\185\000\000\000\000\000\000\000\144\000\ - \000\000\000\000\000\000\000\000\142\000\146\000\000\000\145\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\044\000\ - \047\000\000\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\000\000\044\000\044\000\044\000\ - \000\000\044\000\044\000\044\000\000\000\000\000\000\000\044\000\ - \044\000\000\000\044\000\044\000\044\000\186\000\186\000\186\000\ - \186\000\186\000\186\000\186\000\186\000\186\000\186\000\044\000\ - \000\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\000\000\000\000\ - \143\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\044\000\045\000\000\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \033\000\044\000\000\000\044\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\000\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\044\000\141\000\000\000\044\000\ - \044\000\044\000\000\000\000\000\000\000\044\000\044\000\000\000\ - \044\000\044\000\044\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\044\000\ - \044\000\044\000\044\000\044\000\000\000\000\000\000\000\000\000\ - \045\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\046\000\000\000\000\000\000\000\000\000\ - \000\000\044\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\000\000\000\000\000\000\044\000\ - \045\000\044\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\047\000\000\000\000\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\048\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\ - \047\000\047\000\047\000\047\000\047\000\047\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\047\000\000\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \049\000\000\000\000\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\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\049\000\049\000\049\000\049\000\ - \049\000\049\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\ - \049\000\000\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\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\ - \066\000\000\000\066\000\000\000\000\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\000\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\ - \049\000\049\000\049\000\049\000\049\000\049\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\049\000\000\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\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\000\000\000\000\000\000\ - \000\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\049\000\049\000\049\000\049\000\050\000\049\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\000\000\000\000\000\000\000\000\ - \051\000\000\000\049\000\049\000\049\000\049\000\050\000\049\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\049\000\000\000\000\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\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\ - \049\000\049\000\049\000\049\000\049\000\049\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\049\000\000\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\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\000\000\000\000\000\000\ - \000\000\064\000\064\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\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\049\000\049\000\049\000\049\000\ - \049\000\049\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\ - \049\000\000\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\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\000\000\000\000\000\000\000\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\049\000\049\000\000\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\ - \049\000\049\000\049\000\049\000\049\000\049\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\049\000\000\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\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\000\000\000\000\000\000\ - \000\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \056\000\056\000\056\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\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\ - \049\000\000\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\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\000\000\000\000\057\000\000\000\056\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\058\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \000\000\000\000\000\000\000\000\056\000\000\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\058\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \049\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\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\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\062\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\000\000\000\000\000\000\000\000\ - \057\000\000\000\057\000\057\000\057\000\057\000\057\000\057\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\062\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\049\000\000\000\000\000\000\000\ - \060\000\000\000\060\000\000\000\000\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\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\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\049\000\000\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\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\000\000\000\000\000\000\ - \000\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\049\000\049\000\049\000\049\000\049\000\049\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\000\000\000\000\000\000\000\000\ - \059\000\000\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\049\000\000\000\000\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\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\ - \049\000\049\000\049\000\049\000\049\000\049\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\049\000\000\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\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\060\000\000\000\060\000\000\000\ - \000\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\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\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\ - \049\000\000\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\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\000\000\000\000\000\000\000\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\049\000\049\000\000\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\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \000\000\000\000\000\000\000\000\063\000\000\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\064\000\064\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\000\000\ - \000\000\000\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\000\000\000\000\000\000\000\000\ - \064\000\000\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\049\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\000\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\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \000\000\000\000\000\000\000\000\065\000\000\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \080\000\000\000\080\000\000\000\000\000\000\000\000\000\080\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ - \079\000\079\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\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\080\000\000\000\000\000\000\000\ - \000\000\000\000\080\000\089\000\089\000\089\000\089\000\089\000\ - \089\000\000\000\000\000\000\000\000\000\000\000\080\000\078\000\ - \000\000\000\000\080\000\000\000\080\000\000\000\000\000\000\000\ - \077\000\090\000\090\000\090\000\090\000\090\000\090\000\090\000\ - \090\000\090\000\090\000\089\000\089\000\089\000\089\000\089\000\ - \089\000\000\000\090\000\090\000\090\000\090\000\090\000\090\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\097\000\ - \000\000\000\000\097\000\097\000\097\000\000\000\000\000\000\000\ - \097\000\097\000\000\000\097\000\097\000\097\000\000\000\000\000\ - \000\000\000\000\090\000\090\000\090\000\090\000\090\000\090\000\ - \097\000\000\000\097\000\097\000\097\000\097\000\097\000\106\000\ - \102\000\000\000\099\000\103\000\099\000\099\000\099\000\099\000\ - \000\000\000\000\000\000\099\000\099\000\000\000\099\000\099\000\ - \099\000\000\000\000\000\000\000\000\000\000\000\106\000\000\000\ - \105\000\000\000\000\000\099\000\097\000\099\000\099\000\099\000\ - \099\000\099\000\000\000\000\000\000\000\000\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\000\000\006\000\000\000\000\000\006\000\ - \006\000\006\000\097\000\000\000\097\000\006\000\006\000\099\000\ - \006\000\006\000\006\000\000\000\000\000\000\000\000\000\000\000\ - \255\255\000\000\000\000\000\000\000\000\006\000\000\000\006\000\ - \006\000\006\000\006\000\006\000\000\000\000\000\000\000\111\000\ - \000\000\000\000\111\000\111\000\111\000\099\000\000\000\099\000\ - \111\000\111\000\000\000\111\000\111\000\111\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \111\000\006\000\111\000\111\000\111\000\111\000\111\000\000\000\ - \000\000\000\000\111\000\000\000\000\000\111\000\111\000\111\000\ - \000\000\000\000\000\000\111\000\111\000\000\000\111\000\111\000\ - \111\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\ - \000\000\006\000\000\000\111\000\111\000\111\000\111\000\111\000\ - \111\000\111\000\000\000\000\000\000\000\111\000\000\000\000\000\ - \111\000\111\000\111\000\000\000\000\000\000\000\111\000\111\000\ - \000\000\111\000\111\000\111\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\111\000\000\000\111\000\000\000\111\000\111\000\ - \111\000\111\000\111\000\111\000\111\000\000\000\000\000\000\000\ - \114\000\000\000\000\000\114\000\114\000\114\000\000\000\000\000\ - \000\000\114\000\114\000\000\000\114\000\114\000\114\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\111\000\000\000\111\000\ - \000\000\114\000\111\000\114\000\114\000\114\000\114\000\114\000\ - \000\000\000\000\000\000\006\000\000\000\000\000\006\000\006\000\ - \006\000\000\000\000\000\000\000\006\000\006\000\000\000\006\000\ - \006\000\006\000\000\000\000\000\000\000\000\000\255\255\000\000\ - \111\000\000\000\111\000\000\000\006\000\114\000\006\000\006\000\ - \006\000\006\000\006\000\000\000\000\000\000\000\006\000\000\000\ - \000\000\006\000\006\000\006\000\000\000\000\000\000\000\006\000\ - \006\000\000\000\006\000\006\000\006\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\114\000\000\000\114\000\000\000\006\000\ - \006\000\006\000\006\000\006\000\006\000\006\000\000\000\000\000\ - \000\000\133\000\000\000\000\000\133\000\133\000\133\000\000\000\ - \000\000\000\000\133\000\133\000\000\000\133\000\133\000\133\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\ - \006\000\000\000\133\000\006\000\133\000\133\000\133\000\133\000\ - \133\000\000\000\000\000\000\000\133\000\000\000\000\000\133\000\ - \133\000\133\000\000\000\000\000\000\000\133\000\133\000\000\000\ - \133\000\133\000\133\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\006\000\000\000\006\000\000\000\133\000\133\000\133\000\ - \133\000\133\000\133\000\133\000\000\000\000\000\000\000\111\000\ - \000\000\000\000\111\000\111\000\111\000\000\000\000\000\000\000\ - \111\000\111\000\000\000\111\000\111\000\111\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\133\000\000\000\133\000\000\000\ - \111\000\133\000\111\000\111\000\111\000\111\000\111\000\000\000\ - \000\000\000\000\111\000\000\000\000\000\111\000\111\000\111\000\ - \000\000\000\000\000\000\111\000\111\000\000\000\111\000\111\000\ - \111\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\ - \000\000\133\000\000\000\111\000\111\000\111\000\111\000\111\000\ - \111\000\111\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\111\000\000\000\111\000\000\000\150\000\111\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\000\000\149\000\000\000\111\000\150\000\111\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\160\000\149\000\160\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\159\000\159\000\159\000\159\000\159\000\159\000\ - \159\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\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\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\160\000\000\000\ - \000\000\000\000\000\000\000\000\160\000\165\000\165\000\165\000\ - \165\000\165\000\165\000\000\000\000\000\000\000\000\000\000\000\ - \160\000\000\000\000\000\000\000\160\000\000\000\160\000\000\000\ - \000\000\000\000\158\000\166\000\166\000\166\000\166\000\166\000\ - \166\000\166\000\166\000\166\000\166\000\165\000\165\000\165\000\ - \165\000\165\000\165\000\000\000\166\000\166\000\166\000\166\000\ - \166\000\166\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\182\000\000\000\000\000\183\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\166\000\166\000\166\000\166\000\ - \166\000\166\000\181\000\000\000\181\000\000\000\000\000\000\000\ - \000\000\181\000\000\000\000\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\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\190\000\190\000\190\000\190\000\ - \190\000\190\000\190\000\190\000\190\000\190\000\181\000\000\000\ - \000\000\000\000\000\000\000\000\181\000\190\000\190\000\190\000\ - \190\000\190\000\190\000\000\000\000\000\000\000\000\000\000\000\ - \181\000\179\000\000\000\000\000\181\000\000\000\181\000\177\000\ - \000\000\000\000\178\000\191\000\191\000\191\000\191\000\191\000\ - \191\000\191\000\191\000\191\000\191\000\190\000\190\000\190\000\ - \190\000\190\000\190\000\000\000\191\000\191\000\191\000\191\000\ - \191\000\191\000\193\000\193\000\193\000\193\000\193\000\193\000\ - \193\000\193\000\193\000\193\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\193\000\193\000\193\000\193\000\193\000\ - \193\000\000\000\000\000\000\000\191\000\191\000\191\000\191\000\ - \191\000\191\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \193\000\193\000\193\000\193\000\193\000\193\000\193\000\193\000\ - \193\000\193\000\000\000\193\000\193\000\193\000\193\000\193\000\ - \193\000\193\000\193\000\193\000\193\000\193\000\193\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\193\000\193\000\193\000\193\000\193\000\193\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\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\204\000\194\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \000\000\204\000\203\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\000\000\000\000\203\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\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_check = - "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\000\000\000\000\039\000\000\000\000\000\039\000\040\000\ - \042\000\043\000\040\000\042\000\043\000\073\000\103\000\104\000\ - \073\000\103\000\104\000\107\000\109\000\212\000\107\000\109\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\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\ - \016\000\026\000\003\000\003\000\003\000\071\000\072\000\027\000\ - \003\000\003\000\027\000\003\000\003\000\003\000\017\000\080\000\ - \083\000\017\000\017\000\037\000\087\000\090\000\037\000\121\000\ - \003\000\122\000\003\000\003\000\003\000\003\000\003\000\092\000\ - \092\000\126\000\004\000\145\000\027\000\004\000\004\000\004\000\ - \094\000\094\000\037\000\004\000\004\000\146\000\004\000\004\000\ - \004\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\004\000\003\000\004\000\004\000\004\000\ - \004\000\004\000\096\000\096\000\140\000\005\000\152\000\140\000\ - \005\000\005\000\005\000\153\000\160\000\154\000\005\000\005\000\ - \154\000\005\000\005\000\005\000\078\000\078\000\078\000\078\000\ - \163\000\027\000\003\000\166\000\003\000\177\000\005\000\004\000\ - \005\000\005\000\005\000\005\000\005\000\182\000\168\000\173\000\ - \006\000\168\000\173\000\006\000\006\000\006\000\205\000\206\000\ - \183\000\006\000\006\000\183\000\006\000\006\000\006\000\179\000\ - \179\000\179\000\179\000\105\000\182\000\004\000\105\000\004\000\ - \000\000\006\000\005\000\006\000\006\000\006\000\006\000\006\000\ - \209\000\184\000\211\000\007\000\184\000\104\000\007\000\007\000\ - \007\000\107\000\255\255\105\000\007\000\007\000\207\000\007\000\ - \007\000\007\000\208\000\255\255\195\000\106\000\106\000\195\000\ - \005\000\106\000\005\000\210\000\007\000\006\000\007\000\007\000\ - \007\000\007\000\007\000\255\255\201\000\202\000\008\000\201\000\ - \202\000\008\000\008\000\008\000\106\000\255\255\106\000\008\000\ - \008\000\255\255\008\000\008\000\008\000\196\000\255\255\255\255\ - \196\000\255\255\255\255\006\000\255\255\006\000\255\255\008\000\ - \007\000\008\000\008\000\008\000\008\000\008\000\013\000\255\255\ - \255\255\010\000\255\255\255\255\010\000\010\000\010\000\255\255\ - \255\255\255\255\010\000\010\000\255\255\010\000\010\000\010\000\ - \255\255\255\255\255\255\255\255\255\255\013\000\007\000\013\000\ - \007\000\013\000\010\000\008\000\010\000\010\000\010\000\010\000\ - \010\000\255\255\255\255\255\255\255\255\255\255\011\000\255\255\ - \255\255\011\000\011\000\011\000\255\255\027\000\255\255\011\000\ - \011\000\255\255\011\000\011\000\011\000\255\255\255\255\255\255\ - \255\255\008\000\255\255\008\000\255\255\010\000\010\000\011\000\ - \255\255\011\000\011\000\011\000\011\000\011\000\255\255\142\000\ - \169\000\255\255\142\000\169\000\255\255\014\000\255\255\255\255\ - \014\000\014\000\014\000\255\255\255\255\013\000\014\000\014\000\ - \255\255\014\000\014\000\014\000\010\000\010\000\010\000\196\000\ - \169\000\255\255\011\000\011\000\142\000\255\255\014\000\255\255\ - \014\000\014\000\014\000\014\000\014\000\255\255\255\255\255\255\ - \015\000\255\255\255\255\015\000\015\000\015\000\255\255\255\255\ - \255\255\015\000\015\000\255\255\015\000\015\000\015\000\255\255\ - \255\255\011\000\255\255\011\000\255\255\255\255\255\255\255\255\ - \255\255\015\000\014\000\015\000\015\000\015\000\015\000\015\000\ - \255\255\255\255\018\000\255\255\255\255\018\000\018\000\018\000\ - \255\255\142\000\169\000\018\000\018\000\255\255\018\000\018\000\ - \018\000\105\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \014\000\255\255\014\000\018\000\255\255\015\000\018\000\018\000\ - \018\000\018\000\255\255\255\255\255\255\019\000\255\255\255\255\ - \019\000\019\000\019\000\255\255\207\000\255\255\019\000\019\000\ - \208\000\019\000\019\000\019\000\106\000\255\255\255\255\255\255\ - \255\255\210\000\255\255\015\000\255\255\015\000\019\000\018\000\ - \019\000\019\000\019\000\019\000\019\000\255\255\255\255\255\255\ - \023\000\255\255\255\255\023\000\023\000\023\000\255\255\255\255\ - \255\255\023\000\023\000\196\000\023\000\023\000\023\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\018\000\255\255\018\000\ - \255\255\023\000\019\000\023\000\023\000\023\000\023\000\023\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\079\000\079\000\079\000\079\000\079\000\079\000\ - \079\000\079\000\079\000\079\000\255\255\255\255\255\255\255\255\ - \019\000\255\255\019\000\255\255\255\255\023\000\085\000\085\000\ - \085\000\085\000\085\000\085\000\085\000\085\000\255\255\024\000\ - \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ - \082\000\082\000\086\000\086\000\086\000\086\000\086\000\086\000\ - \086\000\086\000\255\255\023\000\255\255\023\000\024\000\024\000\ - \255\255\024\000\024\000\024\000\024\000\142\000\169\000\255\255\ - \024\000\024\000\101\000\024\000\024\000\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\255\255\ - \255\255\101\000\025\000\255\255\255\255\025\000\025\000\025\000\ - \255\255\255\255\025\000\025\000\025\000\255\255\025\000\025\000\ - \025\000\101\000\101\000\101\000\101\000\101\000\101\000\101\000\ - \101\000\101\000\101\000\025\000\024\000\025\000\025\000\025\000\ - \025\000\025\000\159\000\159\000\159\000\159\000\159\000\159\000\ - \159\000\159\000\159\000\159\000\162\000\162\000\162\000\162\000\ - \162\000\162\000\162\000\162\000\162\000\162\000\255\255\255\255\ - \255\255\255\255\024\000\028\000\024\000\255\255\069\000\025\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\255\255\069\000\255\255\025\000\028\000\025\000\ - \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ - \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ - \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ - \028\000\028\000\030\000\028\000\255\255\255\255\255\255\255\255\ - \255\255\030\000\255\255\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\030\000\255\255\255\255\ - \255\255\255\255\030\000\255\255\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\030\000\030\000\030\000\031\000\255\255\ - \255\255\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\255\255\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\ - \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\ - \031\000\031\000\032\000\187\000\187\000\187\000\187\000\187\000\ - \187\000\187\000\187\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\255\255\255\255\ - \255\255\255\255\032\000\255\255\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\032\000\032\000\032\000\032\000\032\000\033\000\188\000\ - \188\000\188\000\188\000\188\000\188\000\188\000\188\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\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\034\000\255\255\255\255\034\000\034\000\034\000\ - \255\255\255\255\255\255\034\000\034\000\255\255\034\000\034\000\ - \034\000\255\255\255\255\255\255\255\255\255\255\255\255\137\000\ - \255\255\255\255\137\000\034\000\255\255\034\000\034\000\034\000\ - \034\000\034\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\137\000\ - \255\255\255\255\255\255\255\255\137\000\137\000\255\255\137\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\034\000\ - \034\000\255\255\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\034\000\034\000\034\000\255\255\034\000\035\000\034\000\ - \255\255\035\000\035\000\035\000\255\255\255\255\255\255\035\000\ - \035\000\255\255\035\000\035\000\035\000\185\000\185\000\185\000\ - \185\000\185\000\185\000\185\000\185\000\185\000\185\000\035\000\ - \255\255\035\000\035\000\035\000\035\000\035\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \137\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\035\000\035\000\255\255\035\000\035\000\ - \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \036\000\035\000\255\255\035\000\255\255\255\255\255\255\255\255\ - \255\255\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\255\255\255\255\255\255\255\255\ - \036\000\255\255\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\044\000\137\000\255\255\044\000\ - \044\000\044\000\255\255\255\255\255\255\044\000\044\000\255\255\ - \044\000\044\000\044\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\044\000\ - \044\000\044\000\044\000\044\000\255\255\255\255\255\255\255\255\ - \045\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\255\255\255\255\255\255\255\255\ - \255\255\044\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\255\255\255\255\255\255\044\000\ - \045\000\044\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\047\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \255\255\255\255\255\255\255\255\047\000\255\255\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \049\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\255\255\255\255\255\255\255\255\ - \049\000\255\255\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\050\000\255\255\255\255\255\255\ - \050\000\255\255\050\000\255\255\255\255\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \255\255\255\255\255\255\255\255\050\000\255\255\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \051\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\255\255\255\255\255\255\255\255\ - \051\000\255\255\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\052\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \255\255\255\255\255\255\255\255\052\000\255\255\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \053\000\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\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\ - \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\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\ - \053\000\255\255\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\054\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \255\255\255\255\255\255\255\255\054\000\255\255\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \055\000\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\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\ - \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\055\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\ - \055\000\255\255\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\055\000\055\000\055\000\056\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\056\000\255\255\056\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \255\255\255\255\255\255\255\255\056\000\255\255\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \057\000\255\255\255\255\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\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\057\000\057\000\057\000\057\000\ - \057\000\057\000\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\ - \057\000\255\255\057\000\057\000\057\000\057\000\057\000\057\000\ - \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ - \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ - \057\000\057\000\057\000\057\000\058\000\255\255\255\255\255\255\ - \058\000\255\255\058\000\255\255\255\255\058\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ - \255\255\255\255\255\255\255\255\058\000\255\255\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ - \059\000\255\255\255\255\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\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\059\000\059\000\059\000\059\000\ - \059\000\059\000\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\ - \059\000\255\255\059\000\059\000\059\000\059\000\059\000\059\000\ - \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ - \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ - \059\000\059\000\059\000\059\000\061\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \255\255\255\255\255\255\255\255\061\000\255\255\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \062\000\255\255\255\255\255\255\062\000\255\255\062\000\255\255\ - \255\255\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\255\255\255\255\255\255\255\255\ - \062\000\255\255\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\062\000\063\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \255\255\255\255\255\255\255\255\063\000\255\255\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \064\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\255\255\255\255\255\255\255\255\ - \064\000\255\255\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\064\000\064\000\064\000\065\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\065\000\065\000\065\000\ - \065\000\065\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\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \255\255\255\255\255\255\255\255\065\000\255\255\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \070\000\255\255\070\000\255\255\255\255\255\255\255\255\070\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\ - \070\000\070\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\077\000\077\000\077\000\077\000\077\000\077\000\ - \077\000\077\000\077\000\077\000\070\000\255\255\255\255\255\255\ - \255\255\255\255\070\000\077\000\077\000\077\000\077\000\077\000\ - \077\000\255\255\255\255\255\255\255\255\255\255\070\000\070\000\ - \255\255\255\255\070\000\255\255\070\000\255\255\255\255\255\255\ - \070\000\089\000\089\000\089\000\089\000\089\000\089\000\089\000\ - \089\000\089\000\089\000\077\000\077\000\077\000\077\000\077\000\ - \077\000\255\255\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\097\000\ - \255\255\255\255\097\000\097\000\097\000\255\255\255\255\255\255\ - \097\000\097\000\255\255\097\000\097\000\097\000\255\255\255\255\ - \255\255\255\255\089\000\089\000\089\000\089\000\089\000\089\000\ - \097\000\255\255\097\000\097\000\097\000\097\000\097\000\100\000\ - \100\000\255\255\099\000\100\000\099\000\099\000\099\000\099\000\ - \255\255\255\255\255\255\099\000\099\000\255\255\099\000\099\000\ - \099\000\255\255\255\255\255\255\255\255\255\255\100\000\255\255\ - \100\000\255\255\255\255\099\000\097\000\099\000\099\000\099\000\ - \099\000\099\000\255\255\255\255\255\255\255\255\100\000\100\000\ - \100\000\100\000\100\000\100\000\100\000\100\000\100\000\100\000\ - \255\255\255\255\255\255\255\255\110\000\255\255\255\255\110\000\ - \110\000\110\000\097\000\255\255\097\000\110\000\110\000\099\000\ - \110\000\110\000\110\000\255\255\255\255\255\255\255\255\255\255\ - \070\000\255\255\255\255\255\255\255\255\110\000\255\255\110\000\ - \110\000\110\000\110\000\110\000\255\255\255\255\255\255\111\000\ - \255\255\255\255\111\000\111\000\111\000\099\000\255\255\099\000\ - \111\000\111\000\255\255\111\000\111\000\111\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \111\000\110\000\111\000\111\000\111\000\111\000\111\000\255\255\ - \255\255\255\255\112\000\255\255\255\255\112\000\112\000\112\000\ - \255\255\255\255\255\255\112\000\112\000\255\255\112\000\112\000\ - \112\000\255\255\255\255\255\255\255\255\255\255\255\255\110\000\ - \255\255\110\000\255\255\112\000\111\000\112\000\112\000\112\000\ - \112\000\112\000\255\255\255\255\255\255\113\000\255\255\255\255\ - \113\000\113\000\113\000\255\255\255\255\255\255\113\000\113\000\ - \255\255\113\000\113\000\113\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\111\000\255\255\111\000\255\255\113\000\112\000\ - \113\000\113\000\113\000\113\000\113\000\255\255\255\255\255\255\ - \114\000\255\255\255\255\114\000\114\000\114\000\255\255\255\255\ - \255\255\114\000\114\000\255\255\114\000\114\000\114\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\112\000\255\255\112\000\ - \255\255\114\000\113\000\114\000\114\000\114\000\114\000\114\000\ - \255\255\255\255\255\255\120\000\255\255\255\255\120\000\120\000\ - \120\000\255\255\255\255\255\255\120\000\120\000\255\255\120\000\ - \120\000\120\000\255\255\255\255\255\255\255\255\100\000\255\255\ - \113\000\255\255\113\000\255\255\120\000\114\000\120\000\120\000\ - \120\000\120\000\120\000\255\255\255\255\255\255\130\000\255\255\ - \255\255\130\000\130\000\130\000\255\255\255\255\255\255\130\000\ - \130\000\255\255\130\000\130\000\130\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\114\000\255\255\114\000\255\255\130\000\ - \120\000\130\000\130\000\130\000\130\000\130\000\255\255\255\255\ - \255\255\133\000\255\255\255\255\133\000\133\000\133\000\255\255\ - \255\255\255\255\133\000\133\000\255\255\133\000\133\000\133\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\120\000\255\255\ - \120\000\255\255\133\000\130\000\133\000\133\000\133\000\133\000\ - \133\000\255\255\255\255\255\255\134\000\255\255\255\255\134\000\ - \134\000\134\000\255\255\255\255\255\255\134\000\134\000\255\255\ - \134\000\134\000\134\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\130\000\255\255\130\000\255\255\134\000\133\000\134\000\ - \134\000\134\000\134\000\134\000\255\255\255\255\255\255\135\000\ - \255\255\255\255\135\000\135\000\135\000\255\255\255\255\255\255\ - \135\000\135\000\255\255\135\000\135\000\135\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\133\000\255\255\133\000\255\255\ - \135\000\134\000\135\000\135\000\135\000\135\000\135\000\255\255\ - \255\255\255\255\136\000\255\255\255\255\136\000\136\000\136\000\ - \255\255\255\255\255\255\136\000\136\000\255\255\136\000\136\000\ - \136\000\255\255\255\255\255\255\255\255\255\255\255\255\134\000\ - \255\255\134\000\255\255\136\000\135\000\136\000\136\000\136\000\ - \136\000\136\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\135\000\255\255\135\000\255\255\143\000\136\000\ - \143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\ - \143\000\143\000\143\000\143\000\143\000\143\000\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\255\255\136\000\150\000\136\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\ - \150\000\150\000\151\000\150\000\151\000\255\255\255\255\255\255\ - \255\255\151\000\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\ - \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\158\000\158\000\158\000\158\000\ - \158\000\158\000\158\000\158\000\158\000\158\000\151\000\255\255\ - \255\255\255\255\255\255\255\255\151\000\158\000\158\000\158\000\ - \158\000\158\000\158\000\255\255\255\255\255\255\255\255\255\255\ - \151\000\255\255\255\255\255\255\151\000\255\255\151\000\255\255\ - \255\255\255\255\151\000\165\000\165\000\165\000\165\000\165\000\ - \165\000\165\000\165\000\165\000\165\000\158\000\158\000\158\000\ - \158\000\158\000\158\000\255\255\165\000\165\000\165\000\165\000\ - \165\000\165\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\174\000\255\255\255\255\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\165\000\165\000\165\000\165\000\ - \165\000\165\000\174\000\255\255\174\000\255\255\255\255\255\255\ - \255\255\174\000\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\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \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\174\000\255\255\ - \255\255\255\255\255\255\255\255\174\000\178\000\178\000\178\000\ - \178\000\178\000\178\000\255\255\255\255\255\255\255\255\255\255\ - \174\000\174\000\255\255\255\255\174\000\255\255\174\000\174\000\ - \255\255\255\255\174\000\190\000\190\000\190\000\190\000\190\000\ - \190\000\190\000\190\000\190\000\190\000\178\000\178\000\178\000\ - \178\000\178\000\178\000\255\255\190\000\190\000\190\000\190\000\ - \190\000\190\000\192\000\192\000\192\000\192\000\192\000\192\000\ - \192\000\192\000\192\000\192\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\192\000\192\000\192\000\192\000\192\000\ - \192\000\255\255\255\255\255\255\190\000\190\000\190\000\190\000\ - \190\000\190\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \193\000\193\000\193\000\193\000\193\000\193\000\193\000\193\000\ - \193\000\193\000\255\255\192\000\192\000\192\000\192\000\192\000\ - \192\000\193\000\193\000\193\000\193\000\193\000\193\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\193\000\193\000\193\000\193\000\193\000\193\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\174\000\255\255\198\000\193\000\198\000\198\000\ - \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\ - \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\ - \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\ - \255\255\204\000\198\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\204\000\204\000\204\000\ - \204\000\204\000\204\000\204\000\204\000\255\255\255\255\204\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\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\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\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \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\022\000\000\000\ - \000\000\000\000\005\000\000\000\039\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\002\000\ - \005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\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\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\053\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\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\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\031\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\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\050\000\050\000\000\000\009\000\050\000\ - \000\000\000\000\000\000\009\000\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\009\000\001\000\000\000\009\000\000\000\034\000\ - \000\000\000\000\009\000\000\000\012\000\001\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\017\000\017\000\017\000\017\000\017\000\017\000\ - \017\000\017\000\017\000\017\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\017\000\017\000\017\000\017\000\ - \017\000\017\000\017\000\017\000\017\000\017\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\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_check_code = - "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\024\000\105\000\174\000\183\000\105\000\106\000\184\000\ - \255\255\255\255\255\255\100\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\ - \024\000\255\255\105\000\000\000\255\255\106\000\255\255\106\000\ - \255\255\255\255\100\000\255\255\100\000\101\000\255\255\255\255\ - \024\000\024\000\024\000\024\000\024\000\024\000\024\000\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\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\255\255\255\255\101\000\101\000\101\000\101\000\ - \101\000\101\000\101\000\101\000\101\000\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\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \105\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"; - Lexing.lex_code = - "\255\005\255\255\007\255\006\255\255\007\255\255\009\255\008\255\ - \255\006\255\007\255\255\004\255\000\005\001\006\002\007\255\009\ - \255\255\008\255\009\255\255\000\005\001\006\004\008\003\009\002\ - \007\255\001\255\255\000\001\255"; -} - -let rec token lexbuf = - lexbuf.Lexing.lex_mem <- Array.make 10 (-1); __ocaml_lex_token_rec lexbuf 0 -and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = - match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with - | 0 -> -# 751 "ml/lexer.mll" - ( - if not !escaped_newlines then - raise (Error(Illegal_character (Lexing.lexeme_char lexbuf 0), - Location.curr lexbuf)); - update_loc lexbuf None 1 false 0; - token lexbuf ) -# 2017 "ml/lexer.ml" - - | 1 -> -# 758 "ml/lexer.mll" - ( update_loc lexbuf None 1 false 0; - EOL ) -# 2023 "ml/lexer.ml" - - | 2 -> -# 761 "ml/lexer.mll" - ( token lexbuf ) -# 2028 "ml/lexer.ml" - - | 3 -> -# 763 "ml/lexer.mll" - ( UNDERSCORE ) -# 2033 "ml/lexer.ml" - - | 4 -> -# 765 "ml/lexer.mll" - ( TILDE ) -# 2038 "ml/lexer.ml" - - | 5 -> -# 767 "ml/lexer.mll" - ( LABEL (get_label_name lexbuf) ) -# 2043 "ml/lexer.ml" - - | 6 -> -# 769 "ml/lexer.mll" - ( QUESTION ) -# 2048 "ml/lexer.ml" - - | 7 -> -# 771 "ml/lexer.mll" - ( OPTLABEL (get_label_name lexbuf) ) -# 2053 "ml/lexer.ml" - - | 8 -> -# 773 "ml/lexer.mll" - ( let s = Lexing.lexeme lexbuf in - try Hashtbl.find keyword_table s - with Not_found -> LIDENT s ) -# 2060 "ml/lexer.ml" - - | 9 -> -# 777 "ml/lexer.mll" - ( UIDENT(Lexing.lexeme lexbuf) ) -# 2065 "ml/lexer.ml" - - | 10 -> -# 778 "ml/lexer.mll" - ( INT (Lexing.lexeme lexbuf, None) ) -# 2070 "ml/lexer.ml" - - | 11 -> -let -# 779 "ml/lexer.mll" - lit -# 2076 "ml/lexer.ml" -= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos (lexbuf.Lexing.lex_curr_pos + -1) -and -# 779 "ml/lexer.mll" - modif -# 2081 "ml/lexer.ml" -= Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_curr_pos + -1) in -# 780 "ml/lexer.mll" - ( INT (lit, Some modif) ) -# 2085 "ml/lexer.ml" - - | 12 -> -# 782 "ml/lexer.mll" - ( FLOAT (Lexing.lexeme lexbuf, None) ) -# 2090 "ml/lexer.ml" - - | 13 -> -let -# 783 "ml/lexer.mll" - lit -# 2096 "ml/lexer.ml" -= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos (lexbuf.Lexing.lex_curr_pos + -1) -and -# 783 "ml/lexer.mll" - modif -# 2101 "ml/lexer.ml" -= Lexing.sub_lexeme_char lexbuf (lexbuf.Lexing.lex_curr_pos + -1) in -# 784 "ml/lexer.mll" - ( FLOAT (lit, Some modif) ) -# 2105 "ml/lexer.ml" - - | 14 -> -# 786 "ml/lexer.mll" - ( raise (Error(Invalid_literal (Lexing.lexeme lexbuf), - Location.curr lexbuf)) ) -# 2111 "ml/lexer.ml" - - | 15 -> -# 789 "ml/lexer.mll" - ( reset_string_buffer(); - is_in_string := true; - let string_start = lexbuf.lex_start_p in - string_start_loc := Location.curr lexbuf; - string lexbuf; - is_in_string := false; - lexbuf.lex_start_p <- string_start; - STRING (get_stored_string(), None) ) -# 2123 "ml/lexer.ml" - - | 16 -> -# 798 "ml/lexer.mll" - ( reset_string_buffer(); - let delim = Lexing.lexeme lexbuf in - let delim = String.sub delim 1 (String.length delim - 2) in - is_in_string := true; - let string_start = lexbuf.lex_start_p in - string_start_loc := Location.curr lexbuf; - quoted_string delim lexbuf; - is_in_string := false; - lexbuf.lex_start_p <- string_start; - STRING (get_stored_string(), Some delim) ) -# 2137 "ml/lexer.ml" - - | 17 -> -# 809 "ml/lexer.mll" - ( update_loc lexbuf None 1 false 1; - CHAR (Lexing.lexeme_char lexbuf 1) ) -# 2143 "ml/lexer.ml" - - | 18 -> -# 812 "ml/lexer.mll" - ( CHAR(Lexing.lexeme_char lexbuf 1) ) -# 2148 "ml/lexer.ml" - - | 19 -> -# 814 "ml/lexer.mll" - ( CHAR(char_for_backslash (Lexing.lexeme_char lexbuf 2)) ) -# 2153 "ml/lexer.ml" - - | 20 -> -# 816 "ml/lexer.mll" - ( CHAR(char_for_decimal_code lexbuf 2) ) -# 2158 "ml/lexer.ml" - - | 21 -> -# 818 "ml/lexer.mll" - ( CHAR(char_for_octal_code lexbuf 3) ) -# 2163 "ml/lexer.ml" - - | 22 -> -# 820 "ml/lexer.mll" - ( CHAR(char_for_hexadecimal_code lexbuf 3) ) -# 2168 "ml/lexer.ml" - - | 23 -> -# 822 "ml/lexer.mll" - ( let l = Lexing.lexeme lexbuf in - let esc = String.sub l 1 (String.length l - 1) in - raise (Error(Illegal_escape esc, Location.curr lexbuf)) - ) -# 2176 "ml/lexer.ml" - - | 24 -> -# 827 "ml/lexer.mll" - ( let s, loc = with_comment_buffer comment lexbuf in - COMMENT (s, loc) ) -# 2182 "ml/lexer.ml" - - | 25 -> -# 830 "ml/lexer.mll" - ( let s, loc = with_comment_buffer comment lexbuf in - if !handle_docstrings then - DOCSTRING (Docstrings.docstring s loc) - else - COMMENT ("*" ^ s, loc) - ) -# 2192 "ml/lexer.ml" - - | 26 -> -let -# 836 "ml/lexer.mll" - stars -# 2198 "ml/lexer.ml" -= Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 3) lexbuf.Lexing.lex_curr_pos in -# 837 "ml/lexer.mll" - ( let s, loc = - with_comment_buffer - (fun lexbuf -> - store_string ("*" ^ stars); - comment lexbuf) - lexbuf - in - COMMENT (s, loc) ) -# 2209 "ml/lexer.ml" - - | 27 -> -# 846 "ml/lexer.mll" - ( if !print_warnings then - Location.prerr_warning (Location.curr lexbuf) Warnings.Comment_start; - let s, loc = with_comment_buffer comment lexbuf in - COMMENT (s, loc) ) -# 2217 "ml/lexer.ml" - - | 28 -> -let -# 850 "ml/lexer.mll" - stars -# 2223 "ml/lexer.ml" -= Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 2) (lexbuf.Lexing.lex_curr_pos + -2) in -# 851 "ml/lexer.mll" - ( if !handle_docstrings && stars="" then - (* (**) is an empty docstring *) - DOCSTRING(Docstrings.docstring "" (Location.curr lexbuf)) - else - COMMENT (stars, Location.curr lexbuf) ) -# 2231 "ml/lexer.ml" - - | 29 -> -# 857 "ml/lexer.mll" - ( let loc = Location.curr lexbuf in - Location.prerr_warning loc Warnings.Comment_not_end; - lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_curr_pos - 1; - let curpos = lexbuf.lex_curr_p in - lexbuf.lex_curr_p <- { curpos with pos_cnum = curpos.pos_cnum - 1 }; - STAR - ) -# 2242 "ml/lexer.ml" - - | 30 -> -let -# 864 "ml/lexer.mll" - num -# 2248 "ml/lexer.ml" -= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_mem.(1) -and -# 865 "ml/lexer.mll" - name -# 2253 "ml/lexer.ml" -= Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(4) lexbuf.Lexing.lex_mem.(3) -and -# 865 "ml/lexer.mll" - directive -# 2258 "ml/lexer.ml" -= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(2) in -# 867 "ml/lexer.mll" - ( - match int_of_string num with - | exception _ -> - (* PR#7165 *) - let loc = Location.curr lexbuf in - let explanation = "line number out of range" in - let error = Invalid_directive (directive, Some explanation) in - raise (Error (error, loc)) - | line_num -> - (* Documentation says that the line number should be - positive, but we have never guarded against this and it - might have useful hackish uses. *) - update_loc lexbuf name line_num true 0; - token lexbuf - ) -# 2276 "ml/lexer.ml" - - | 31 -> -# 882 "ml/lexer.mll" - ( HASH ) -# 2281 "ml/lexer.ml" - - | 32 -> -# 883 "ml/lexer.mll" - ( AMPERSAND ) -# 2286 "ml/lexer.ml" - - | 33 -> -# 884 "ml/lexer.mll" - ( AMPERAMPER ) -# 2291 "ml/lexer.ml" - - | 34 -> -# 885 "ml/lexer.mll" - ( BACKQUOTE ) -# 2296 "ml/lexer.ml" - - | 35 -> -# 886 "ml/lexer.mll" - ( QUOTE ) -# 2301 "ml/lexer.ml" - - | 36 -> -# 887 "ml/lexer.mll" - ( LPAREN ) -# 2306 "ml/lexer.ml" - - | 37 -> -# 888 "ml/lexer.mll" - ( RPAREN ) -# 2311 "ml/lexer.ml" - - | 38 -> -# 889 "ml/lexer.mll" - ( STAR ) -# 2316 "ml/lexer.ml" - - | 39 -> -# 890 "ml/lexer.mll" - ( COMMA ) -# 2321 "ml/lexer.ml" - - | 40 -> -# 891 "ml/lexer.mll" - ( MINUSGREATER ) -# 2326 "ml/lexer.ml" - - | 41 -> -# 892 "ml/lexer.mll" - ( DOT ) -# 2331 "ml/lexer.ml" - - | 42 -> -# 893 "ml/lexer.mll" - ( DOTDOT ) -# 2336 "ml/lexer.ml" - - | 43 -> -let -# 894 "ml/lexer.mll" - s -# 2342 "ml/lexer.ml" -= Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 1) lexbuf.Lexing.lex_curr_pos in -# 894 "ml/lexer.mll" - ( DOTOP s ) -# 2346 "ml/lexer.ml" - - | 44 -> -# 895 "ml/lexer.mll" - ( COLON ) -# 2351 "ml/lexer.ml" - - | 45 -> -# 896 "ml/lexer.mll" - ( COLONCOLON ) -# 2356 "ml/lexer.ml" - - | 46 -> -# 897 "ml/lexer.mll" - ( COLONEQUAL ) -# 2361 "ml/lexer.ml" - - | 47 -> -# 898 "ml/lexer.mll" - ( COLONGREATER ) -# 2366 "ml/lexer.ml" - - | 48 -> -# 899 "ml/lexer.mll" - ( SEMI ) -# 2371 "ml/lexer.ml" - - | 49 -> -# 900 "ml/lexer.mll" - ( SEMISEMI ) -# 2376 "ml/lexer.ml" - - | 50 -> -# 901 "ml/lexer.mll" - ( LESS ) -# 2381 "ml/lexer.ml" - - | 51 -> -# 902 "ml/lexer.mll" - ( LESSMINUS ) -# 2386 "ml/lexer.ml" - - | 52 -> -# 903 "ml/lexer.mll" - ( EQUAL ) -# 2391 "ml/lexer.ml" - - | 53 -> -# 904 "ml/lexer.mll" - ( LBRACKET ) -# 2396 "ml/lexer.ml" - - | 54 -> -# 905 "ml/lexer.mll" - ( LBRACKETBAR ) -# 2401 "ml/lexer.ml" - - | 55 -> -# 906 "ml/lexer.mll" - ( LBRACKETLESS ) -# 2406 "ml/lexer.ml" - - | 56 -> -# 907 "ml/lexer.mll" - ( LBRACKETGREATER ) -# 2411 "ml/lexer.ml" - - | 57 -> -# 908 "ml/lexer.mll" - ( RBRACKET ) -# 2416 "ml/lexer.ml" - - | 58 -> -# 909 "ml/lexer.mll" - ( LBRACE ) -# 2421 "ml/lexer.ml" - - | 59 -> -# 910 "ml/lexer.mll" - ( LBRACELESS ) -# 2426 "ml/lexer.ml" - - | 60 -> -# 911 "ml/lexer.mll" - ( BAR ) -# 2431 "ml/lexer.ml" - - | 61 -> -# 912 "ml/lexer.mll" - ( BARBAR ) -# 2436 "ml/lexer.ml" - - | 62 -> -# 913 "ml/lexer.mll" - ( BARRBRACKET ) -# 2441 "ml/lexer.ml" - - | 63 -> -# 914 "ml/lexer.mll" - ( GREATER ) -# 2446 "ml/lexer.ml" - - | 64 -> -# 915 "ml/lexer.mll" - ( GREATERRBRACKET ) -# 2451 "ml/lexer.ml" - - | 65 -> -# 916 "ml/lexer.mll" - ( RBRACE ) -# 2456 "ml/lexer.ml" - - | 66 -> -# 917 "ml/lexer.mll" - ( GREATERRBRACE ) -# 2461 "ml/lexer.ml" - - | 67 -> -# 918 "ml/lexer.mll" - ( LBRACKETAT ) -# 2466 "ml/lexer.ml" - - | 68 -> -# 919 "ml/lexer.mll" - ( LBRACKETATAT ) -# 2471 "ml/lexer.ml" - - | 69 -> -# 920 "ml/lexer.mll" - ( LBRACKETATATAT ) -# 2476 "ml/lexer.ml" - - | 70 -> -# 921 "ml/lexer.mll" - ( LBRACKETPERCENT ) -# 2481 "ml/lexer.ml" - - | 71 -> -# 922 "ml/lexer.mll" - ( LBRACKETPERCENTPERCENT ) -# 2486 "ml/lexer.ml" - - | 72 -> -# 923 "ml/lexer.mll" - ( BANG ) -# 2491 "ml/lexer.ml" - - | 73 -> -# 924 "ml/lexer.mll" - ( INFIXOP0 "!=" ) -# 2496 "ml/lexer.ml" - - | 74 -> -# 925 "ml/lexer.mll" - ( PLUS ) -# 2501 "ml/lexer.ml" - - | 75 -> -# 926 "ml/lexer.mll" - ( PLUSDOT ) -# 2506 "ml/lexer.ml" - - | 76 -> -# 927 "ml/lexer.mll" - ( PLUSEQ ) -# 2511 "ml/lexer.ml" - - | 77 -> -# 928 "ml/lexer.mll" - ( MINUS ) -# 2516 "ml/lexer.ml" - - | 78 -> -# 929 "ml/lexer.mll" - ( MINUSDOT ) -# 2521 "ml/lexer.ml" - - | 79 -> -# 932 "ml/lexer.mll" - ( PREFIXOP(Lexing.lexeme lexbuf) ) -# 2526 "ml/lexer.ml" - - | 80 -> -# 934 "ml/lexer.mll" - ( PREFIXOP(Lexing.lexeme lexbuf) ) -# 2531 "ml/lexer.ml" - - | 81 -> -# 936 "ml/lexer.mll" - ( INFIXOP0(Lexing.lexeme lexbuf) ) -# 2536 "ml/lexer.ml" - - | 82 -> -# 938 "ml/lexer.mll" - ( INFIXOP1(Lexing.lexeme lexbuf) ) -# 2541 "ml/lexer.ml" - - | 83 -> -# 940 "ml/lexer.mll" - ( INFIXOP2(Lexing.lexeme lexbuf) ) -# 2546 "ml/lexer.ml" - - | 84 -> -# 942 "ml/lexer.mll" - ( INFIXOP4(Lexing.lexeme lexbuf) ) -# 2551 "ml/lexer.ml" - - | 85 -> -# 943 "ml/lexer.mll" - ( PERCENT ) -# 2556 "ml/lexer.ml" - - | 86 -> -# 945 "ml/lexer.mll" - ( INFIXOP3(Lexing.lexeme lexbuf) ) -# 2561 "ml/lexer.ml" - - | 87 -> -# 947 "ml/lexer.mll" - ( HASHOP(Lexing.lexeme lexbuf) ) -# 2566 "ml/lexer.ml" - - | 88 -> -# 948 "ml/lexer.mll" - ( - if !if_then_else <> Dir_out then - if !if_then_else = Dir_if_true then - raise (Error (Unterminated_if, Location.curr lexbuf)) - else raise (Error(Unterminated_else, Location.curr lexbuf)) - else - EOF - - ) -# 2579 "ml/lexer.ml" - - | 89 -> -# 958 "ml/lexer.mll" - ( raise (Error(Illegal_character (Lexing.lexeme_char lexbuf 0), - Location.curr lexbuf)) - ) -# 2586 "ml/lexer.ml" - - | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; - __ocaml_lex_token_rec lexbuf __ocaml_lex_state - -and comment lexbuf = - __ocaml_lex_comment_rec lexbuf 137 -and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = - match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with - | 0 -> -# 964 "ml/lexer.mll" - ( comment_start_loc := (Location.curr lexbuf) :: !comment_start_loc; - store_lexeme lexbuf; - comment lexbuf - ) -# 2601 "ml/lexer.ml" - - | 1 -> -# 969 "ml/lexer.mll" - ( match !comment_start_loc with - | [] -> assert false - | [_] -> comment_start_loc := []; Location.curr lexbuf - | _ :: l -> comment_start_loc := l; - store_lexeme lexbuf; - comment lexbuf - ) -# 2612 "ml/lexer.ml" - - | 2 -> -# 977 "ml/lexer.mll" - ( - string_start_loc := Location.curr lexbuf; - store_string_char '\"'; - is_in_string := true; - begin try string lexbuf - with Error (Unterminated_string, str_start) -> - match !comment_start_loc with - | [] -> assert false - | loc :: _ -> - let start = List.hd (List.rev !comment_start_loc) in - comment_start_loc := []; - raise (Error (Unterminated_string_in_comment (start, str_start), - loc)) - end; - is_in_string := false; - store_string_char '\"'; - comment lexbuf ) -# 2633 "ml/lexer.ml" - - | 3 -> -# 995 "ml/lexer.mll" - ( - let delim = Lexing.lexeme lexbuf in - let delim = String.sub delim 1 (String.length delim - 2) in - string_start_loc := Location.curr lexbuf; - store_lexeme lexbuf; - is_in_string := true; - begin try quoted_string delim lexbuf - with Error (Unterminated_string, str_start) -> - match !comment_start_loc with - | [] -> assert false - | loc :: _ -> - let start = List.hd (List.rev !comment_start_loc) in - comment_start_loc := []; - raise (Error (Unterminated_string_in_comment (start, str_start), - loc)) - end; - is_in_string := false; - store_string_char '|'; - store_string delim; - store_string_char '}'; - comment lexbuf ) -# 2658 "ml/lexer.ml" - - | 4 -> -# 1018 "ml/lexer.mll" - ( store_lexeme lexbuf; comment lexbuf ) -# 2663 "ml/lexer.ml" - - | 5 -> -# 1020 "ml/lexer.mll" - ( update_loc lexbuf None 1 false 1; - store_lexeme lexbuf; - comment lexbuf - ) -# 2671 "ml/lexer.ml" - - | 6 -> -# 1025 "ml/lexer.mll" - ( store_lexeme lexbuf; comment lexbuf ) -# 2676 "ml/lexer.ml" - - | 7 -> -# 1027 "ml/lexer.mll" - ( store_lexeme lexbuf; comment lexbuf ) -# 2681 "ml/lexer.ml" - - | 8 -> -# 1029 "ml/lexer.mll" - ( store_lexeme lexbuf; comment lexbuf ) -# 2686 "ml/lexer.ml" - - | 9 -> -# 1031 "ml/lexer.mll" - ( store_lexeme lexbuf; comment lexbuf ) -# 2691 "ml/lexer.ml" - - | 10 -> -# 1033 "ml/lexer.mll" - ( match !comment_start_loc with - | [] -> assert false - | loc :: _ -> - let start = List.hd (List.rev !comment_start_loc) in - comment_start_loc := []; - raise (Error (Unterminated_comment start, loc)) - ) -# 2702 "ml/lexer.ml" - - | 11 -> -# 1041 "ml/lexer.mll" - ( update_loc lexbuf None 1 false 0; - store_lexeme lexbuf; - comment lexbuf - ) -# 2710 "ml/lexer.ml" - - | 12 -> -# 1046 "ml/lexer.mll" - ( store_lexeme lexbuf; comment lexbuf ) -# 2715 "ml/lexer.ml" - - | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; - __ocaml_lex_comment_rec lexbuf __ocaml_lex_state - -and string lexbuf = - lexbuf.Lexing.lex_mem <- Array.make 2 (-1); __ocaml_lex_string_rec lexbuf 169 -and __ocaml_lex_string_rec lexbuf __ocaml_lex_state = - match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with - | 0 -> -# 1050 "ml/lexer.mll" - ( () ) -# 2727 "ml/lexer.ml" - - | 1 -> -let -# 1051 "ml/lexer.mll" - space -# 2733 "ml/lexer.ml" -= Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) lexbuf.Lexing.lex_curr_pos in -# 1052 "ml/lexer.mll" - ( update_loc lexbuf None 1 false (String.length space); - if in_comment () then store_lexeme lexbuf; - string lexbuf - ) -# 2740 "ml/lexer.ml" - - | 2 -> -# 1057 "ml/lexer.mll" - ( store_escaped_char lexbuf - (char_for_backslash(Lexing.lexeme_char lexbuf 1)); - string lexbuf ) -# 2747 "ml/lexer.ml" - - | 3 -> -# 1061 "ml/lexer.mll" - ( store_escaped_char lexbuf (char_for_decimal_code lexbuf 1); - string lexbuf ) -# 2753 "ml/lexer.ml" - - | 4 -> -# 1064 "ml/lexer.mll" - ( store_escaped_char lexbuf (char_for_octal_code lexbuf 2); - string lexbuf ) -# 2759 "ml/lexer.ml" - - | 5 -> -# 1067 "ml/lexer.mll" - ( store_escaped_char lexbuf (char_for_hexadecimal_code lexbuf 2); - string lexbuf ) -# 2765 "ml/lexer.ml" - - | 6 -> -# 1070 "ml/lexer.mll" - ( store_escaped_uchar lexbuf (uchar_for_uchar_escape lexbuf); - string lexbuf ) -# 2771 "ml/lexer.ml" - - | 7 -> -# 1073 "ml/lexer.mll" - ( if not (in_comment ()) then begin -(* Should be an error, but we are very lax. - raise (Error (Illegal_escape (Lexing.lexeme lexbuf), - Location.curr lexbuf)) -*) - let loc = Location.curr lexbuf in - Location.prerr_warning loc Warnings.Illegal_backslash; - end; - store_lexeme lexbuf; - string lexbuf - ) -# 2786 "ml/lexer.ml" - - | 8 -> -# 1085 "ml/lexer.mll" - ( if not (in_comment ()) then - Location.prerr_warning (Location.curr lexbuf) Warnings.Eol_in_string; - update_loc lexbuf None 1 false 0; - store_lexeme lexbuf; - string lexbuf - ) -# 2796 "ml/lexer.ml" - - | 9 -> -# 1092 "ml/lexer.mll" - ( is_in_string := false; - raise (Error (Unterminated_string, !string_start_loc)) ) -# 2802 "ml/lexer.ml" - - | 10 -> -# 1095 "ml/lexer.mll" - ( store_string_char(Lexing.lexeme_char lexbuf 0); - string lexbuf ) -# 2808 "ml/lexer.ml" - - | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; - __ocaml_lex_string_rec lexbuf __ocaml_lex_state - -and quoted_string delim lexbuf = - __ocaml_lex_quoted_string_rec delim lexbuf 196 -and __ocaml_lex_quoted_string_rec delim lexbuf __ocaml_lex_state = - match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with - | 0 -> -# 1100 "ml/lexer.mll" - ( update_loc lexbuf None 1 false 0; - store_lexeme lexbuf; - quoted_string delim lexbuf - ) -# 2823 "ml/lexer.ml" - - | 1 -> -# 1105 "ml/lexer.mll" - ( is_in_string := false; - raise (Error (Unterminated_string, !string_start_loc)) ) -# 2829 "ml/lexer.ml" - - | 2 -> -# 1108 "ml/lexer.mll" - ( - let edelim = Lexing.lexeme lexbuf in - let edelim = String.sub edelim 1 (String.length edelim - 2) in - if delim = edelim then () - else (store_lexeme lexbuf; quoted_string delim lexbuf) - ) -# 2839 "ml/lexer.ml" - - | 3 -> -# 1115 "ml/lexer.mll" - ( store_string_char(Lexing.lexeme_char lexbuf 0); - quoted_string delim lexbuf ) -# 2845 "ml/lexer.ml" - - | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; - __ocaml_lex_quoted_string_rec delim lexbuf __ocaml_lex_state - -and skip_hash_bang lexbuf = - __ocaml_lex_skip_hash_bang_rec lexbuf 205 -and __ocaml_lex_skip_hash_bang_rec lexbuf __ocaml_lex_state = - match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with - | 0 -> -# 1120 "ml/lexer.mll" - ( update_loc lexbuf None 3 false 0 ) -# 2857 "ml/lexer.ml" - - | 1 -> -# 1122 "ml/lexer.mll" - ( update_loc lexbuf None 1 false 0 ) -# 2862 "ml/lexer.ml" - - | 2 -> -# 1123 "ml/lexer.mll" - ( () ) -# 2867 "ml/lexer.ml" - - | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; - __ocaml_lex_skip_hash_bang_rec lexbuf __ocaml_lex_state - -;; - -# 1125 "ml/lexer.mll" - - let at_bol lexbuf = - let pos = Lexing.lexeme_start_p lexbuf in - pos.pos_cnum = pos.pos_bol - - let token_with_comments lexbuf = - match !preprocessor with - | None -> token lexbuf - | Some (_init, preprocess) -> preprocess token lexbuf - - type newline_state = - | NoLine (* There have been no blank lines yet. *) - | NewLine - (* There have been no blank lines, and the previous - token was a newline. *) - | BlankLine (* There have been blank lines. *) - - type doc_state = - | Initial (* There have been no docstrings yet *) - | After of docstring list - (* There have been docstrings, none of which were - preceded by a blank line *) - | Before of docstring list * docstring list * docstring list - (* There have been docstrings, some of which were - preceded by a blank line *) - - and docstring = Docstrings.docstring - - let interpret_directive lexbuf cont look_ahead = - let if_then_else = !if_then_else in - begin match token_with_comments lexbuf, if_then_else with - | IF, Dir_out -> - let rec skip_from_if_false () = - let token = token_with_comments lexbuf in - if token = EOF then - raise (Error (Unterminated_if, Location.curr lexbuf)) else - if token = HASH && at_bol lexbuf then - begin - let token = token_with_comments lexbuf in - match token with - | END -> - begin - update_if_then_else Dir_out; - cont lexbuf - end - | ELSE -> - begin - update_if_then_else Dir_if_false; - cont lexbuf - end - | IF -> - raise (Error (Unexpected_directive, Location.curr lexbuf)) - | _ -> - if is_elif token && - directive_parse token_with_comments lexbuf then - begin - update_if_then_else Dir_if_true; - cont lexbuf - end - else skip_from_if_false () - end - else skip_from_if_false () in - if directive_parse token_with_comments lexbuf then - begin - update_if_then_else Dir_if_true (* Next state: ELSE *); - cont lexbuf - end - else - skip_from_if_false () - | IF, (Dir_if_false | Dir_if_true)-> - raise (Error(Unexpected_directive, Location.curr lexbuf)) - | LIDENT "elif", (Dir_if_false | Dir_out) - -> (* when the predicate is false, it will continue eating `elif` *) - raise (Error(Unexpected_directive, Location.curr lexbuf)) - | (LIDENT "elif" | ELSE as token), Dir_if_true -> - (* looking for #end, however, it can not see #if anymore *) - let rec skip_from_if_true else_seen = - let token = token_with_comments lexbuf in - if token = EOF then - raise (Error (Unterminated_else, Location.curr lexbuf)) else - if token = HASH && at_bol lexbuf then - begin - let token = token_with_comments lexbuf in - match token with - | END -> - begin - update_if_then_else Dir_out; - cont lexbuf - end - | IF -> - raise (Error (Unexpected_directive, Location.curr lexbuf)) - | ELSE -> - if else_seen then - raise (Error (Unexpected_directive, Location.curr lexbuf)) - else - skip_from_if_true true - | _ -> - if else_seen && is_elif token then - raise (Error (Unexpected_directive, Location.curr lexbuf)) - else - skip_from_if_true else_seen - end - else skip_from_if_true else_seen in - skip_from_if_true (token = ELSE) - | ELSE, Dir_if_false - | ELSE, Dir_out -> - raise (Error(Unexpected_directive, Location.curr lexbuf)) - | END, (Dir_if_false | Dir_if_true ) -> - update_if_then_else Dir_out; - cont lexbuf - | END, Dir_out -> - raise (Error(Unexpected_directive, Location.curr lexbuf)) - | token, (Dir_if_true | Dir_if_false | Dir_out) -> - look_ahead token - end - - let token lexbuf = - let post_pos = lexeme_end_p lexbuf in - let attach lines docs pre_pos = - let open Docstrings in - match docs, lines with - | Initial, _ -> () - | After a, (NoLine | NewLine) -> - set_post_docstrings post_pos (List.rev a); - set_pre_docstrings pre_pos a; - | After a, BlankLine -> - set_post_docstrings post_pos (List.rev a); - set_pre_extra_docstrings pre_pos (List.rev a) - | Before(a, f, b), (NoLine | NewLine) -> - set_post_docstrings post_pos (List.rev a); - set_post_extra_docstrings post_pos - (List.rev_append f (List.rev b)); - set_floating_docstrings pre_pos (List.rev f); - set_pre_extra_docstrings pre_pos (List.rev a); - set_pre_docstrings pre_pos b - | Before(a, f, b), BlankLine -> - set_post_docstrings post_pos (List.rev a); - set_post_extra_docstrings post_pos - (List.rev_append f (List.rev b)); - set_floating_docstrings pre_pos - (List.rev_append f (List.rev b)); - set_pre_extra_docstrings pre_pos (List.rev a) - in - let rec loop lines docs lexbuf = - match token_with_comments lexbuf with - | COMMENT (s, loc) -> - add_comment (s, loc); - let lines' = - match lines with - | NoLine -> NoLine - | NewLine -> NoLine - | BlankLine -> BlankLine - in - loop lines' docs lexbuf - | EOL -> - let lines' = - match lines with - | NoLine -> NewLine - | NewLine -> BlankLine - | BlankLine -> BlankLine - in - loop lines' docs lexbuf - | HASH when at_bol lexbuf -> - interpret_directive lexbuf - (fun lexbuf -> loop lines docs lexbuf) - (fun token -> sharp_look_ahead := Some token; HASH) - | DOCSTRING doc -> - Docstrings.register doc; - add_docstring_comment doc; - let docs' = - if Docstrings.docstring_body doc = "/*" then - match docs with - | Initial -> Before([], [doc], []) - | After a -> Before (a, [doc], []) - | Before(a, f, b) -> Before(a, doc :: b @ f, []) - else - match docs, lines with - | Initial, (NoLine | NewLine) -> After [doc] - | Initial, BlankLine -> Before([], [], [doc]) - | After a, (NoLine | NewLine) -> After (doc :: a) - | After a, BlankLine -> Before (a, [], [doc]) - | Before(a, f, b), (NoLine | NewLine) -> Before(a, f, doc :: b) - | Before(a, f, b), BlankLine -> Before(a, b @ f, [doc]) - in - loop NoLine docs' lexbuf - | tok -> - attach lines docs (lexeme_start_p lexbuf); - tok - in - match !sharp_look_ahead with - | None -> - loop NoLine Initial lexbuf - | Some token -> - sharp_look_ahead := None ; - token - - let init () = - sharp_look_ahead := None; - update_if_then_else Dir_out; - is_in_string := false; - comment_start_loc := []; - comment_list := []; - match !preprocessor with - | None -> () - | Some (init, _preprocess) -> init () - - let rec filter_directive pos acc lexbuf : (int * int ) list = - match token_with_comments lexbuf with - | HASH when at_bol lexbuf -> - (* ^[start_pos]#if ... #then^[end_pos] *) - let start_pos = Lexing.lexeme_start lexbuf in - interpret_directive lexbuf - (fun lexbuf -> - filter_directive - (Lexing.lexeme_end lexbuf) - ((pos, start_pos) :: acc) - lexbuf - - ) - (fun _token -> filter_directive pos acc lexbuf ) - | EOF -> (pos, Lexing.lexeme_end lexbuf) :: acc - | _ -> filter_directive pos acc lexbuf - - let filter_directive_from_lexbuf lexbuf = - List.rev (filter_directive 0 [] lexbuf ) - - let set_preprocessor init preprocess = - escaped_newlines := true; - preprocessor := Some (init, preprocess) - - -# 3106 "ml/lexer.ml" diff --git a/src/compiler-libs-406/lexer.mli b/src/compiler-libs-406/lexer.mli deleted file mode 100644 index 16da2029..00000000 --- a/src/compiler-libs-406/lexer.mli +++ /dev/null @@ -1,84 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* The lexical analyzer *) - -val init : unit -> unit -val token: Lexing.lexbuf -> Parser.token -val skip_hash_bang: Lexing.lexbuf -> unit - -type directive_type - -type error = - | Illegal_character of char - | Illegal_escape of string - | Unterminated_comment of Location.t - | Unterminated_string - | Unterminated_string_in_comment of Location.t * Location.t - | Keyword_as_label of string - | Invalid_literal of string - | Invalid_directive of string * string option - | Unterminated_paren_in_conditional - | Unterminated_if - | Unterminated_else - | Unexpected_token_in_conditional - | Expect_hash_then_in_conditional - | Illegal_semver of string - | Unexpected_directive - | Conditional_expr_expected_type of directive_type * directive_type -;; - -exception Error of error * Location.t - - - -val in_comment : unit -> bool;; -val in_string : unit -> bool;; - - -val print_warnings : bool ref -val handle_docstrings: bool ref -val comments : unit -> (string * Location.t) list -val token_with_comments : Lexing.lexbuf -> Parser.token - -(* - [set_preprocessor init preprocessor] registers [init] as the function -to call to initialize the preprocessor when the lexer is initialized, -and [preprocessor] a function that is called when a new token is needed -by the parser, as [preprocessor lexer lexbuf] where [lexer] is the -lexing function. - -When a preprocessor is configured by calling [set_preprocessor], the lexer -changes its behavior to accept backslash-newline as a token-separating blank. -*) - -val set_preprocessor : - (unit -> unit) -> - ((Lexing.lexbuf -> Parser.token) -> Lexing.lexbuf -> Parser.token) -> - unit - -(** semantic version predicate *) -val semver : Location.t -> string -> string -> bool - -val filter_directive_from_lexbuf : Lexing.lexbuf -> (int * int) list - -val replace_directive_int : string -> int -> unit -val replace_directive_string : string -> string -> unit -val replace_directive_bool : string -> bool -> unit -val remove_directive_built_in_value : string -> unit - -(** @return false means failed to define *) -val define_key_value : string -> string -> bool -val list_variables : Format.formatter -> unit diff --git a/src/compiler-libs-406/location.ml b/src/compiler-libs-406/location.ml deleted file mode 100644 index 6d13cb82..00000000 --- a/src/compiler-libs-406/location.ml +++ /dev/null @@ -1,330 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Lexing - -let absname = ref false - (* This reference should be in Clflags, but it would create an additional - dependency and make bootstrapping Camlp4 more difficult. *) - -type t = Warnings.loc = { loc_start: position; loc_end: position; loc_ghost: bool };; - -let in_file name = - let loc = { - pos_fname = name; - pos_lnum = 1; - pos_bol = 0; - pos_cnum = -1; - } in - { loc_start = loc; loc_end = loc; loc_ghost = true } -;; - -let none = in_file "_none_";; - -let curr lexbuf = { - loc_start = lexbuf.lex_start_p; - loc_end = lexbuf.lex_curr_p; - loc_ghost = false -};; - -let init lexbuf fname = - lexbuf.lex_curr_p <- { - pos_fname = fname; - pos_lnum = 1; - pos_bol = 0; - pos_cnum = 0; - } -;; - -let symbol_rloc () = { - loc_start = Parsing.symbol_start_pos (); - loc_end = Parsing.symbol_end_pos (); - loc_ghost = false; -};; - -let symbol_gloc () = { - loc_start = Parsing.symbol_start_pos (); - loc_end = Parsing.symbol_end_pos (); - loc_ghost = true; -};; - -let rhs_loc n = { - loc_start = Parsing.rhs_start_pos n; - loc_end = Parsing.rhs_end_pos n; - loc_ghost = false; -};; - -let input_name = ref "_none_" -let input_lexbuf = ref (None : lexbuf option) -let set_input_name name = - if name <> "" then input_name := name -(* Terminal info *) - - - -let num_loc_lines = ref 0 (* number of lines already printed after input *) - -(* Print the location in some way or another *) - -open Format - -let absolute_path s = (* This function could go into Filename *) - let open Filename in - let s = if is_relative s then concat (Sys.getcwd ()) s else s in - (* Now simplify . and .. components *) - let rec aux s = - let base = basename s in - let dir = dirname s in - if dir = s then dir - else if base = current_dir_name then aux dir - else if base = parent_dir_name then dirname (aux dir) - else concat (aux dir) base - in - aux s - -let show_filename file = - let file = if file = "_none_" then !input_name else file in - if !absname then absolute_path file else file - -let print_filename ppf file = - Format.fprintf ppf "%s" (show_filename file) - -let reset () = - num_loc_lines := 0 - -let (msg_file, msg_line, msg_chars, msg_to, msg_colon) = - ("File \"", "\", line ", ", characters ", "-", ":") - -(* return file, line, char from the given position *) -let get_pos_info pos = - (pos.pos_fname, pos.pos_lnum, pos.pos_cnum - pos.pos_bol) -;; - -let setup_colors () = - Misc.Color.setup !Clflags.color - -let print_loc ppf loc = - setup_colors (); - let (file, line, startchar) = get_pos_info loc.loc_start in - let startchar = startchar + 1 in - let endchar = loc.loc_end.pos_cnum - loc.loc_start.pos_cnum + startchar in - if file = "//toplevel//" then begin - fprintf ppf "Characters %i-%i" - loc.loc_start.pos_cnum loc.loc_end.pos_cnum - end else begin - fprintf ppf "%s@{%a%s%i" msg_file print_filename file msg_line line; - if startchar >= 0 then - fprintf ppf "%s%i%s%i" msg_chars (startchar-1) msg_to (endchar-1); - fprintf ppf "@}" - end -;; - -let default_printer ppf loc = - setup_colors (); - fprintf ppf "@{%a@}%s@," print_loc loc msg_colon -;; - -let printer = ref default_printer -let print ppf loc = !printer ppf loc - -let error_prefix = "Error" -let warning_prefix = "Warning" - -let print_error_prefix ppf = - setup_colors (); - fprintf ppf "@{%s@}" error_prefix; -;; - -let print_compact ppf loc = - begin - let (file, line, startchar) = get_pos_info loc.loc_start in - let endchar = loc.loc_end.pos_cnum - loc.loc_start.pos_cnum + startchar in - fprintf ppf "%a:%i" print_filename file line; - if startchar >= 0 then fprintf ppf ",%i--%i" startchar endchar - end -;; - -let print_error ppf loc = - fprintf ppf "%a%t:" print loc print_error_prefix; -;; - -let print_error_cur_file ppf () = print_error ppf (in_file !input_name);; - -let default_warning_printer loc ppf w = - match Warnings.report w with - | `Inactive -> () - | `Active { Warnings. number; message; is_error; sub_locs } -> - setup_colors (); - fprintf ppf "@["; - print ppf loc; - if is_error - then - fprintf ppf "%t (%s %d): %s@," print_error_prefix - (String.uncapitalize_ascii warning_prefix) number message - else fprintf ppf "@{%s@} %d: %s@," warning_prefix number message; - List.iter - (fun (loc, msg) -> - if loc <> none then fprintf ppf " %a %s@," print loc msg - ) - sub_locs; - fprintf ppf "@]" -;; - -let warning_printer = ref default_warning_printer ;; - -let print_warning loc ppf w = - !warning_printer loc ppf w -;; - -let formatter_for_warnings = ref err_formatter;; -let prerr_warning loc w = - print_warning loc !formatter_for_warnings w;; - -let echo_eof () = - print_newline (); - incr num_loc_lines - -type 'a loc = { - txt : 'a; - loc : t; -} - -let mkloc txt loc = { txt ; loc } -let mknoloc txt = mkloc txt none - - -type error = - { - loc: t; - msg: string; - sub: error list; - if_highlight: string; (* alternative message if locations are highlighted *) - } - -let pp_ksprintf ?before k fmt = - let buf = Buffer.create 64 in - let ppf = Format.formatter_of_buffer buf in - Misc.Color.set_color_tag_handling ppf; - begin match before with - | None -> () - | Some f -> f ppf - end; - kfprintf - (fun _ -> - pp_print_flush ppf (); - let msg = Buffer.contents buf in - k msg) - ppf fmt - -(* Shift the formatter's offset by the length of the error prefix, which - is always added by the compiler after the message has been formatted *) -let print_phanton_error_prefix ppf = - Format.pp_print_as ppf (String.length error_prefix + 2 (* ": " *)) "" - -let errorf ?(loc = none) ?(sub = []) ?(if_highlight = "") fmt = - pp_ksprintf - ~before:print_phanton_error_prefix - (fun msg -> {loc; msg; sub; if_highlight}) - fmt - -let error ?(loc = none) ?(sub = []) ?(if_highlight = "") msg = - {loc; msg; sub; if_highlight} - -let error_of_exn : (exn -> error option) list ref = ref [] - -let register_error_of_exn f = error_of_exn := f :: !error_of_exn - -exception Already_displayed_error = Warnings.Errors - -let error_of_exn exn = - match exn with - | Already_displayed_error -> Some `Already_displayed - | _ -> - let rec loop = function - | [] -> None - | f :: rest -> - match f exn with - | Some error -> Some (`Ok error) - | None -> loop rest - in - loop !error_of_exn - - -let rec default_error_reporter ppf ({loc; msg; sub}) = - fprintf ppf "@[%a %s" print_error loc msg; - List.iter (Format.fprintf ppf "@,@[<2>%a@]" default_error_reporter) sub; - fprintf ppf "@]" - -let error_reporter = ref default_error_reporter - -let report_error ppf err = - !error_reporter ppf err -;; - -let error_of_printer loc print x = - errorf ~loc "%a@?" print x - -let error_of_printer_file print x = - error_of_printer (in_file !input_name) print x - -let () = - register_error_of_exn - (function - | Sys_error msg -> - Some (errorf ~loc:(in_file !input_name) - "I/O error: %s" msg) - - | Misc.HookExnWrapper {error = e; hook_name; - hook_info={Misc.sourcefile}} -> - let sub = match error_of_exn e with - | None | Some `Already_displayed -> error (Printexc.to_string e) - | Some (`Ok err) -> err - in - Some - (errorf ~loc:(in_file sourcefile) - "In hook %S:" hook_name - ~sub:[sub]) - | _ -> None - ) - -external reraise : exn -> 'a = "%reraise" - -let rec report_exception_rec n ppf exn = - try - match error_of_exn exn with - | None -> reraise exn - | Some `Already_displayed -> () - | Some (`Ok err) -> fprintf ppf "@[%a@]@." report_error err - with exn when n > 0 -> report_exception_rec (n-1) ppf exn - -let report_exception ppf exn = report_exception_rec 5 ppf exn - - -exception Error of error - -let () = - register_error_of_exn - (function - | Error e -> Some e - | _ -> None - ) - -let raise_errorf ?(loc = none) ?(sub = []) ?(if_highlight = "") = - pp_ksprintf - ~before:print_phanton_error_prefix - (fun msg -> raise (Error ({loc; msg; sub; if_highlight}))) - -let deprecated ?(def = none) ?(use = none) loc msg = - prerr_warning loc (Warnings.Deprecated (msg, def, use)) \ No newline at end of file diff --git a/src/compiler-libs-406/location.mli b/src/compiler-libs-406/location.mli deleted file mode 100644 index 7bea184d..00000000 --- a/src/compiler-libs-406/location.mli +++ /dev/null @@ -1,145 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Source code locations (ranges of positions), used in parsetree. *) - -open Format - -type t = Warnings.loc = { - loc_start: Lexing.position; - loc_end: Lexing.position; - loc_ghost: bool; -} - -(** Note on the use of Lexing.position in this module. - If [pos_fname = ""], then use [!input_name] instead. - If [pos_lnum = -1], then [pos_bol = 0]. Use [pos_cnum] and - re-parse the file to get the line and character numbers. - Else all fields are correct. -*) - -val none : t -(** An arbitrary value of type [t]; describes an empty ghost range. *) - -val in_file : string -> t -(** Return an empty ghost range located in a given file. *) - -val init : Lexing.lexbuf -> string -> unit -(** Set the file name and line number of the [lexbuf] to be the start - of the named file. *) - -val curr : Lexing.lexbuf -> t -(** Get the location of the current token from the [lexbuf]. *) - -val symbol_rloc: unit -> t -val symbol_gloc: unit -> t - -(** [rhs_loc n] returns the location of the symbol at position [n], starting - at 1, in the current parser rule. *) -val rhs_loc: int -> t - -val input_name: string ref -val set_input_name: string -> unit -val input_lexbuf: Lexing.lexbuf option ref - -val get_pos_info: Lexing.position -> string * int * int (* file, line, char *) -val print_loc: formatter -> t -> unit -val print_error: formatter -> t -> unit -val print_error_cur_file: formatter -> unit -> unit - -val prerr_warning: t -> Warnings.t -> unit -val echo_eof: unit -> unit -val reset: unit -> unit - -val default_printer : formatter -> t -> unit -val printer : (formatter -> t -> unit) ref - -val warning_printer : (t -> formatter -> Warnings.t -> unit) ref -(** Hook for intercepting warnings. *) - -val default_warning_printer : t -> formatter -> Warnings.t -> unit -(** Original warning printer for use in hooks. *) - -type 'a loc = { - txt : 'a; - loc : t; -} - -val mknoloc : 'a -> 'a loc -val mkloc : 'a -> t -> 'a loc - -val print: formatter -> t -> unit -val print_compact: formatter -> t -> unit -val print_filename: formatter -> string -> unit - -val absolute_path: string -> string - -val show_filename: string -> string - (** In -absname mode, return the absolute path for this filename. - Otherwise, returns the filename unchanged. *) - - -val absname: bool ref - -(** Support for located errors *) - -type error = - { - loc: t; - msg: string; - sub: error list; - if_highlight: string; (* alternative message if locations are highlighted *) - } - -exception Already_displayed_error -exception Error of error - -val error: ?loc:t -> ?sub:error list -> ?if_highlight:string -> string -> error - -val print_error_prefix : Format.formatter -> unit -val pp_ksprintf : ?before:(formatter -> unit) -> (string -> 'a) -> ('b, formatter, unit, 'a) format4 -> 'b - -val errorf: ?loc:t -> ?sub:error list -> ?if_highlight:string - -> ('a, Format.formatter, unit, error) format4 -> 'a - -val raise_errorf: ?loc:t -> ?sub:error list -> ?if_highlight:string - -> ('a, Format.formatter, unit, 'b) format4 -> 'a - -val error_of_printer: t -> (formatter -> 'a -> unit) -> 'a -> error - -val error_of_printer_file: (formatter -> 'a -> unit) -> 'a -> error - -val error_of_exn: exn -> [ `Ok of error | `Already_displayed ] option - -val register_error_of_exn: (exn -> error option) -> unit -(** Each compiler module which defines a custom type of exception - which can surface as a user-visible error should register - a "printer" for this exception using [register_error_of_exn]. - The result of the printer is an [error] value containing - a location, a message, and optionally sub-messages (each of them - being located as well). *) - -val report_error: formatter -> error -> unit - -val error_reporter : (formatter -> error -> unit) ref -(** Hook for intercepting error reports. *) - -val default_error_reporter : formatter -> error -> unit -(** Original error reporter for use in hooks. *) - -val report_exception: formatter -> exn -> unit -(** Reraise the exception if it is unknown. *) - -val deprecated: ?def:t -> ?use:t -> t -> string -> unit diff --git a/src/compiler-libs-406/longident.ml b/src/compiler-libs-406/longident.ml deleted file mode 100644 index 6f5d5398..00000000 --- a/src/compiler-libs-406/longident.ml +++ /dev/null @@ -1,49 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -type t = - Lident of string - | Ldot of t * string - | Lapply of t * t - -let rec flat accu = function - Lident s -> s :: accu - | Ldot(lid, s) -> flat (s :: accu) lid - | Lapply(_, _) -> Misc.fatal_error "Longident.flat" - -let flatten lid = flat [] lid - -let last = function - Lident s -> s - | Ldot(_, s) -> s - | Lapply(_, _) -> Misc.fatal_error "Longident.last" - -let rec split_at_dots s pos = - try - let dot = String.index_from s pos '.' in - String.sub s pos (dot - pos) :: split_at_dots s (dot + 1) - with Not_found -> - [String.sub s pos (String.length s - pos)] - -let unflatten l = - match l with - | [] -> None - | hd :: tl -> Some (List.fold_left (fun p s -> Ldot(p, s)) (Lident hd) tl) - -let parse s = - match unflatten (split_at_dots s 0) with - | None -> Lident "" (* should not happen, but don't put assert false - so as not to crash the toplevel (see Genprintval) *) - | Some v -> v diff --git a/src/compiler-libs-406/longident.mli b/src/compiler-libs-406/longident.mli deleted file mode 100644 index 5ffb16a8..00000000 --- a/src/compiler-libs-406/longident.mli +++ /dev/null @@ -1,26 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Long identifiers, used in parsetree. *) - -type t = - Lident of string - | Ldot of t * string - | Lapply of t * t - -val flatten: t -> string list -val unflatten: string list -> t option -val last: t -> string -val parse: string -> t diff --git a/src/compiler-libs-406/misc.ml b/src/compiler-libs-406/misc.ml deleted file mode 100644 index 446bcf31..00000000 --- a/src/compiler-libs-406/misc.ml +++ /dev/null @@ -1,745 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Errors *) - -exception Fatal_error - - - -let fatal_error msg = - prerr_string ">> Fatal error: "; prerr_endline msg; raise Fatal_error - -let fatal_errorf fmt = Format.kasprintf fatal_error fmt - -(* Exceptions *) - -let try_finally work cleanup = - let result = (try work () with e -> cleanup (); raise e) in - cleanup (); - result -;; - -type ref_and_value = R : 'a ref * 'a -> ref_and_value - -let protect_refs = - let set_refs l = List.iter (fun (R (r, v)) -> r := v) l in - fun refs f -> - let backup = List.map (fun (R (r, _)) -> R (r, !r)) refs in - set_refs refs; - match f () with - | x -> set_refs backup; x - | exception e -> set_refs backup; raise e - -(* List functions *) - -let rec map_end f l1 l2 = - match l1 with - [] -> l2 - | hd::tl -> f hd :: map_end f tl l2 - -let rec map_left_right f = function - [] -> [] - | hd::tl -> let res = f hd in res :: map_left_right f tl - -let rec for_all2 pred l1 l2 = - match (l1, l2) with - ([], []) -> true - | (hd1::tl1, hd2::tl2) -> pred hd1 hd2 && for_all2 pred tl1 tl2 - | (_, _) -> false - -let rec replicate_list elem n = - if n <= 0 then [] else elem :: replicate_list elem (n-1) - -let rec list_remove x = function - [] -> [] - | hd :: tl -> - if hd = x then tl else hd :: list_remove x tl - -let rec split_last = function - [] -> assert false - | [x] -> ([], x) - | hd :: tl -> - let (lst, last) = split_last tl in - (hd :: lst, last) - -module Stdlib = struct - module List = struct - type 'a t = 'a list - - let rec compare cmp l1 l2 = - match l1, l2 with - | [], [] -> 0 - | [], _::_ -> -1 - | _::_, [] -> 1 - | h1::t1, h2::t2 -> - let c = cmp h1 h2 in - if c <> 0 then c - else compare cmp t1 t2 - - let rec equal eq l1 l2 = - match l1, l2 with - | ([], []) -> true - | (hd1 :: tl1, hd2 :: tl2) -> eq hd1 hd2 && equal eq tl1 tl2 - | (_, _) -> false - - let filter_map f l = - let rec aux acc l = - match l with - | [] -> List.rev acc - | h :: t -> - match f h with - | None -> aux acc t - | Some v -> aux (v :: acc) t - in - aux [] l - - let map2_prefix f l1 l2 = - let rec aux acc l1 l2 = - match l1, l2 with - | [], _ -> (List.rev acc, l2) - | _ :: _, [] -> raise (Invalid_argument "map2_prefix") - | h1::t1, h2::t2 -> - let h = f h1 h2 in - aux (h :: acc) t1 t2 - in - aux [] l1 l2 - - let some_if_all_elements_are_some l = - let rec aux acc l = - match l with - | [] -> Some (List.rev acc) - | None :: _ -> None - | Some h :: t -> aux (h :: acc) t - in - aux [] l - - let split_at n l = - let rec aux n acc l = - if n = 0 - then List.rev acc, l - else - match l with - | [] -> raise (Invalid_argument "split_at") - | t::q -> aux (n-1) (t::acc) q - in - aux n [] l - end - - module Option = struct - type 'a t = 'a option - - let equal eq o1 o2 = - match o1, o2 with - | None, None -> true - | Some e1, Some e2 -> eq e1 e2 - | _, _ -> false - - let iter f = function - | Some x -> f x - | None -> () - - let map f = function - | Some x -> Some (f x) - | None -> None - - let fold f a b = - match a with - | None -> b - | Some a -> f a b - - let value_default f ~default a = - match a with - | None -> default - | Some a -> f a - end - - module Array = struct - let exists2 p a1 a2 = - let n = Array.length a1 in - if Array.length a2 <> n then invalid_arg "Misc.Stdlib.Array.exists2"; - let rec loop i = - if i = n then false - else if p (Array.unsafe_get a1 i) (Array.unsafe_get a2 i) then true - else loop (succ i) in - loop 0 - end -end - -let may = Stdlib.Option.iter -let may_map = Stdlib.Option.map - -(* File functions *) - -let find_in_path path name = - if not (Filename.is_implicit name) then - if Sys.file_exists name then name else raise Not_found - else begin - let rec try_dir = function - [] -> raise Not_found - | dir::rem -> - let fullname = Filename.concat dir name in - if Sys.file_exists fullname then fullname else try_dir rem - in try_dir path - end - -let find_in_path_rel path name = - let rec simplify s = - let open Filename in - let base = basename s in - let dir = dirname s in - if dir = s then dir - else if base = current_dir_name then simplify dir - else concat (simplify dir) base - in - let rec try_dir = function - [] -> raise Not_found - | dir::rem -> - let fullname = simplify (Filename.concat dir name) in - if Sys.file_exists fullname then fullname else try_dir rem - in try_dir path - -let find_in_path_uncap path name = - let uname = String.uncapitalize_ascii name in - let rec try_dir = function - [] -> raise Not_found - | dir::rem -> - let fullname = Filename.concat dir name - and ufullname = Filename.concat dir uname in - if Sys.file_exists ufullname then ufullname - else if Sys.file_exists fullname then fullname - else try_dir rem - in try_dir path - -let remove_file filename = - try - if Sys.file_exists filename - then Sys.remove filename - with Sys_error _msg -> - () - -(* Expand a -I option: if it starts with +, make it relative to the standard - library directory *) - -let expand_directory alt s = - if String.length s > 0 && s.[0] = '+' - then Filename.concat alt - (String.sub s 1 (String.length s - 1)) - else s - -(* Hashtable functions *) - -let create_hashtable size init = - let tbl = Hashtbl.create size in - List.iter (fun (key, data) -> Hashtbl.add tbl key data) init; - tbl - -(* File copy *) - -let copy_file ic oc = - let buff = Bytes.create 0x1000 in - let rec copy () = - let n = input ic buff 0 0x1000 in - if n = 0 then () else (output oc buff 0 n; copy()) - in copy() - -let copy_file_chunk ic oc len = - let buff = Bytes.create 0x1000 in - let rec copy n = - if n <= 0 then () else begin - let r = input ic buff 0 (min n 0x1000) in - if r = 0 then raise End_of_file else (output oc buff 0 r; copy(n-r)) - end - in copy len - -let string_of_file ic = - let b = Buffer.create 0x10000 in - let buff = Bytes.create 0x1000 in - let rec copy () = - let n = input ic buff 0 0x1000 in - if n = 0 then Buffer.contents b else - (Buffer.add_subbytes b buff 0 n; copy()) - in copy() - -let output_to_bin_file_directly filename fn = - let oc = open_out_bin filename in - match fn filename oc with - | v -> close_out oc ; v - | exception e -> close_out oc ; raise e - -let output_to_file_via_temporary ?(mode = [Open_text]) filename fn = - let (temp_filename, oc) = - Filename.open_temp_file - ~mode ~perms:0o666 ~temp_dir:(Filename.dirname filename) - (Filename.basename filename) ".tmp" in - (* The 0o666 permissions will be modified by the umask. It's just - like what [open_out] and [open_out_bin] do. - With temp_dir = dirname filename, we ensure that the returned - temp file is in the same directory as filename itself, making - it safe to rename temp_filename to filename later. - With prefix = basename filename, we are almost certain that - the first generated name will be unique. A fixed prefix - would work too but might generate more collisions if many - files are being produced simultaneously in the same directory. *) - match fn temp_filename oc with - | res -> - close_out oc; - begin try - Sys.rename temp_filename filename; res - with exn -> - remove_file temp_filename; raise exn - end - | exception exn -> - close_out oc; remove_file temp_filename; raise exn - -(* Integer operations *) - -let rec log2 n = - if n <= 1 then 0 else 1 + log2(n asr 1) - -let align n a = - if n >= 0 then (n + a - 1) land (-a) else n land (-a) - -let no_overflow_add a b = (a lxor b) lor (a lxor (lnot (a+b))) < 0 - -let no_overflow_sub a b = (a lxor (lnot b)) lor (b lxor (a-b)) < 0 - -let no_overflow_mul a b = b <> 0 && (a * b) / b = a - -let no_overflow_lsl a k = - 0 <= k && k < Sys.word_size && min_int asr k <= a && a <= max_int asr k - -module Int_literal_converter = struct - (* To convert integer literals, allowing max_int + 1 (PR#4210) *) - let cvt_int_aux str neg of_string = - if String.length str = 0 || str.[0]= '-' - then of_string str - else neg (of_string ("-" ^ str)) - let int s = cvt_int_aux s (~-) int_of_string - let int32 s = cvt_int_aux s Int32.neg Int32.of_string - let int64 s = cvt_int_aux s Int64.neg Int64.of_string - let nativeint s = cvt_int_aux s Nativeint.neg Nativeint.of_string -end - -(* String operations *) - -let chop_extensions file = - let dirname = Filename.dirname file and basename = Filename.basename file in - try - let pos = String.index basename '.' in - let basename = String.sub basename 0 pos in - if Filename.is_implicit file && dirname = Filename.current_dir_name then - basename - else - Filename.concat dirname basename - with Not_found -> file - -let search_substring pat str start = - let rec search i j = - if j >= String.length pat then i - else if i + j >= String.length str then raise Not_found - else if str.[i + j] = pat.[j] then search i (j+1) - else search (i+1) 0 - in search start 0 - -let replace_substring ~before ~after str = - let rec search acc curr = - match search_substring before str curr with - | next -> - let prefix = String.sub str curr (next - curr) in - search (prefix :: acc) (next + String.length before) - | exception Not_found -> - let suffix = String.sub str curr (String.length str - curr) in - List.rev (suffix :: acc) - in String.concat after (search [] 0) - -let rev_split_words s = - let rec split1 res i = - if i >= String.length s then res else begin - match s.[i] with - ' ' | '\t' | '\r' | '\n' -> split1 res (i+1) - | _ -> split2 res i (i+1) - end - and split2 res i j = - if j >= String.length s then String.sub s i (j-i) :: res else begin - match s.[j] with - ' ' | '\t' | '\r' | '\n' -> split1 (String.sub s i (j-i) :: res) (j+1) - | _ -> split2 res i (j+1) - end - in split1 [] 0 - -let get_ref r = - let v = !r in - r := []; v - -let fst3 (x, _, _) = x -let snd3 (_,x,_) = x -let thd3 (_,_,x) = x - -let fst4 (x, _, _, _) = x -let snd4 (_,x,_, _) = x -let thd4 (_,_,x,_) = x -let for4 (_,_,_,x) = x - - -module LongString = struct - type t = bytes array - - let create str_size = - let tbl_size = str_size / Sys.max_string_length + 1 in - let tbl = Array.make tbl_size Bytes.empty in - for i = 0 to tbl_size - 2 do - tbl.(i) <- Bytes.create Sys.max_string_length; - done; - tbl.(tbl_size - 1) <- Bytes.create (str_size mod Sys.max_string_length); - tbl - - let length tbl = - let tbl_size = Array.length tbl in - Sys.max_string_length * (tbl_size - 1) + Bytes.length tbl.(tbl_size - 1) - - let get tbl ind = - Bytes.get tbl.(ind / Sys.max_string_length) (ind mod Sys.max_string_length) - - let set tbl ind c = - Bytes.set tbl.(ind / Sys.max_string_length) (ind mod Sys.max_string_length) - c - - let blit src srcoff dst dstoff len = - for i = 0 to len - 1 do - set dst (dstoff + i) (get src (srcoff + i)) - done - - let output oc tbl pos len = - for i = pos to pos + len - 1 do - output_char oc (get tbl i) - done - - let unsafe_blit_to_bytes src srcoff dst dstoff len = - for i = 0 to len - 1 do - Bytes.unsafe_set dst (dstoff + i) (get src (srcoff + i)) - done - - let input_bytes ic len = - let tbl = create len in - Array.iter (fun str -> really_input ic str 0 (Bytes.length str)) tbl; - tbl -end - - -let edit_distance a b cutoff = - let la, lb = String.length a, String.length b in - let cutoff = - (* using max_int for cutoff would cause overflows in (i + cutoff + 1); - we bring it back to the (max la lb) worstcase *) - min (max la lb) cutoff in - if abs (la - lb) > cutoff then None - else begin - (* initialize with 'cutoff + 1' so that not-yet-written-to cases have - the worst possible cost; this is useful when computing the cost of - a case just at the boundary of the cutoff diagonal. *) - let m = Array.make_matrix (la + 1) (lb + 1) (cutoff + 1) in - m.(0).(0) <- 0; - for i = 1 to la do - m.(i).(0) <- i; - done; - for j = 1 to lb do - m.(0).(j) <- j; - done; - for i = 1 to la do - for j = max 1 (i - cutoff - 1) to min lb (i + cutoff + 1) do - let cost = if a.[i-1] = b.[j-1] then 0 else 1 in - let best = - (* insert, delete or substitute *) - min (1 + min m.(i-1).(j) m.(i).(j-1)) (m.(i-1).(j-1) + cost) - in - let best = - (* swap two adjacent letters; we use "cost" again in case of - a swap between two identical letters; this is slightly - redundant as this is a double-substitution case, but it - was done this way in most online implementations and - imitation has its virtues *) - if not (i > 1 && j > 1 && a.[i-1] = b.[j-2] && a.[i-2] = b.[j-1]) - then best - else min best (m.(i-2).(j-2) + cost) - in - m.(i).(j) <- best - done; - done; - let result = m.(la).(lb) in - if result > cutoff - then None - else Some result - end - -let spellcheck env name = - let cutoff = - match String.length name with - | 1 | 2 -> 0 - | 3 | 4 -> 1 - | 5 | 6 -> 2 - | _ -> 3 - in - let compare target acc head = - match edit_distance target head cutoff with - | None -> acc - | Some dist -> - let (best_choice, best_dist) = acc in - if dist < best_dist then ([head], dist) - else if dist = best_dist then (head :: best_choice, dist) - else acc - in - fst (List.fold_left (compare name) ([], max_int) env) - -let did_you_mean ppf get_choices = - (* flush now to get the error report early, in the (unheard of) case - where the search in the get_choices function would take a bit of - time; in the worst case, the user has seen the error, she can - interrupt the process before the spell-checking terminates. *) - Format.fprintf ppf "@?"; - match get_choices () with - | [] -> () - | choices -> - let rest, last = split_last choices in - Format.fprintf ppf "@\nHint: Did you mean %s%s%s?@?" - (String.concat ", " rest) - (if rest = [] then "" else " or ") - last - -let cut_at s c = - let pos = String.index s c in - String.sub s 0 pos, String.sub s (pos+1) (String.length s - pos - 1) - - -module StringSet = Set.Make(struct type t = string let compare = compare end) -module StringMap = Map.Make(struct type t = string let compare = compare end) - -(* Color handling *) -module Color = struct - (* use ANSI color codes, see https://en.wikipedia.org/wiki/ANSI_escape_code *) - type color = - | Black - | Red - | Green - | Yellow - | Blue - | Magenta - | Cyan - | White - ;; - - type style = - | FG of color (* foreground *) - | BG of color (* background *) - | Bold - | Reset - | Dim - - let ansi_of_color = function - | Black -> "0" - | Red -> "1" - | Green -> "2" - | Yellow -> "3" - | Blue -> "4" - | Magenta -> "5" - | Cyan -> "6" - | White -> "7" - - let code_of_style = function - | FG c -> "3" ^ ansi_of_color c - | BG c -> "4" ^ ansi_of_color c - | Bold -> "1" - | Reset -> "0" - | Dim -> "2" - - let ansi_of_style_l l = - let s = match l with - | [] -> code_of_style Reset - | [s] -> code_of_style s - | _ -> String.concat ";" (List.map code_of_style l) - in - "\x1b[" ^ s ^ "m" - - type styles = { - error: style list; - warning: style list; - loc: style list; - } - - let default_styles = { - warning = [Bold; FG Magenta]; - error = [Bold; FG Red]; - loc = [Bold]; - } - - let cur_styles = ref default_styles - let get_styles () = !cur_styles - let set_styles s = cur_styles := s - - (* map a tag to a style, if the tag is known. - @raise Not_found otherwise *) - let style_of_stag s = match s with - | Format.String_tag "error" -> (!cur_styles).error - | Format.String_tag "warning" -> (!cur_styles).warning - | Format.String_tag "loc" -> (!cur_styles).loc - | Format.String_tag "info" -> [Bold; FG Yellow] - | Format.String_tag "dim" -> [Dim] - | Format.String_tag "filename" -> [FG Cyan] - | _ -> raise Not_found - - let color_enabled = ref true - - (* either prints the tag of [s] or delegates to [or_else] *) - let mark_open_stag ~or_else s = - try - let style = style_of_stag s in - if !color_enabled then ansi_of_style_l style else "" - with Not_found -> or_else s - - let mark_close_stag ~or_else s = - try - let _ = style_of_stag s in - if !color_enabled then ansi_of_style_l [Reset] else "" - with Not_found -> or_else s - - (* add color handling to formatter [ppf] *) - let set_color_tag_handling ppf = - let open Format in - let functions = pp_get_formatter_stag_functions ppf () in - let functions' = {functions with - mark_open_stag=(mark_open_stag ~or_else:functions.mark_open_stag); - mark_close_stag=(mark_close_stag ~or_else:functions.mark_close_stag); - } in - pp_set_mark_tags ppf true; (* enable tags *) - pp_set_formatter_stag_functions ppf functions'; - (* also setup margins *) - pp_set_margin ppf (pp_get_margin std_formatter()); - () - - external isatty : out_channel -> bool = "caml_sys_isatty" - - (* reasonable heuristic on whether colors should be enabled *) - let should_enable_color () = - let term = try Sys.getenv "TERM" with Not_found -> "" in - term <> "dumb" - && term <> "" - && isatty stderr - - type setting = Auto | Always | Never - - let setup = - let first = ref true in (* initialize only once *) - let formatter_l = - [Format.std_formatter; Format.err_formatter; Format.str_formatter] - in - fun o -> - if !first then ( - first := false; - Format.set_mark_tags true; - List.iter set_color_tag_handling formatter_l; - color_enabled := (match o with - | Some Always -> true - | Some Auto -> should_enable_color () - | Some Never -> false - | None -> should_enable_color ()) - ); - () -end - -let normalise_eol s = - let b = Buffer.create 80 in - for i = 0 to String.length s - 1 do - if s.[i] <> '\r' then Buffer.add_char b s.[i] - done; - Buffer.contents b - -let delete_eol_spaces src = - let len_src = String.length src in - let dst = Bytes.create len_src in - let rec loop i_src i_dst = - if i_src = len_src then - i_dst - else - match src.[i_src] with - | ' ' | '\t' -> - loop_spaces 1 (i_src + 1) i_dst - | c -> - Bytes.set dst i_dst c; - loop (i_src + 1) (i_dst + 1) - and loop_spaces spaces i_src i_dst = - if i_src = len_src then - i_dst - else - match src.[i_src] with - | ' ' | '\t' -> - loop_spaces (spaces + 1) (i_src + 1) i_dst - | '\n' -> - Bytes.set dst i_dst '\n'; - loop (i_src + 1) (i_dst + 1) - | _ -> - for n = 0 to spaces do - Bytes.set dst (i_dst + n) src.[i_src - spaces + n] - done; - loop (i_src + 1) (i_dst + spaces + 1) - in - let stop = loop 0 0 in - Bytes.sub_string dst 0 stop - -type hook_info = { - sourcefile : string; -} - -exception HookExnWrapper of - { - error: exn; - hook_name: string; - hook_info: hook_info; - } - -exception HookExn of exn - -let raise_direct_hook_exn e = raise (HookExn e) - -let fold_hooks list hook_info ast = - List.fold_left (fun ast (hook_name,f) -> - try - f hook_info ast - with - | HookExn e -> raise e - | error -> raise (HookExnWrapper {error; hook_name; hook_info}) - (* when explicit reraise with backtrace will be available, - it should be used here *) - - ) ast (List.sort compare list) - -module type HookSig = sig - type t - - val add_hook : string -> (hook_info -> t -> t) -> unit - val apply_hooks : hook_info -> t -> t -end - -module MakeHooks(M: sig - type t - end) : HookSig with type t = M.t -= struct - - type t = M.t - - let hooks = ref [] - let add_hook name f = hooks := (name, f) :: !hooks - let apply_hooks sourcefile intf = - fold_hooks !hooks sourcefile intf -end diff --git a/src/compiler-libs-406/outcometree.mli b/src/compiler-libs-406/outcometree.mli deleted file mode 100644 index e4c62c31..00000000 --- a/src/compiler-libs-406/outcometree.mli +++ /dev/null @@ -1,144 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Daniel de Rauglaudre, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 2001 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Module [Outcometree]: results displayed by the toplevel *) - -(* These types represent messages that the toplevel displays as normal - results or errors. The real displaying is customisable using the hooks: - [Toploop.print_out_value] - [Toploop.print_out_type] - [Toploop.print_out_sig_item] - [Toploop.print_out_phrase] *) - -type out_ident = - | Oide_apply of out_ident * out_ident - | Oide_dot of out_ident * string - | Oide_ident of string - -type out_string = - | Ostr_string - | Ostr_bytes - -type out_attribute = - { oattr_name: string } - -type out_value = - | Oval_array of out_value list - | Oval_char of char - | Oval_constr of out_ident * out_value list - | Oval_ellipsis - | Oval_float of float - | Oval_int of int - | Oval_int32 of int32 - | Oval_int64 of int64 - | Oval_nativeint of nativeint - | Oval_list of out_value list - | Oval_printer of (Format.formatter -> unit) - | Oval_record of (out_ident * out_value) list - | Oval_string of string * int * out_string (* string, size-to-print, kind *) - | Oval_stuff of string - | Oval_tuple of out_value list - | Oval_variant of string * out_value option - -type out_type = - | Otyp_abstract - | Otyp_open - | Otyp_alias of out_type * string - | Otyp_arrow of string * out_type * out_type - | Otyp_class of bool * out_ident * out_type list - | Otyp_constr of out_ident * out_type list - | Otyp_manifest of out_type * out_type - | Otyp_object of (string * out_type) list * bool option - | Otyp_record of (string * bool * out_type) list - | Otyp_stuff of string - | Otyp_sum of (string * out_type list * out_type option) list - | Otyp_tuple of out_type list - | Otyp_var of bool * string - | Otyp_variant of - bool * out_variant * bool * (string list) option - | Otyp_poly of string list * out_type - | Otyp_module of string * string list * out_type list - | Otyp_attribute of out_type * out_attribute - -and out_variant = - | Ovar_fields of (string * bool * out_type list) list - | Ovar_typ of out_type - -type out_class_type = - | Octy_constr of out_ident * out_type list - | Octy_arrow of string * out_type * out_class_type - | Octy_signature of out_type option * out_class_sig_item list -and out_class_sig_item = - | Ocsg_constraint of out_type * out_type - | Ocsg_method of string * bool * bool * out_type - | Ocsg_value of string * bool * bool * out_type - -type out_module_type = - | Omty_abstract - | Omty_functor of string * out_module_type option * out_module_type - | Omty_ident of out_ident - | Omty_signature of out_sig_item list - | Omty_alias of out_ident -and out_sig_item = - | Osig_class of - bool * string * (string * (bool * bool)) list * out_class_type * - out_rec_status - | Osig_class_type of - bool * string * (string * (bool * bool)) list * out_class_type * - out_rec_status - | Osig_typext of out_extension_constructor * out_ext_status - | Osig_modtype of string * out_module_type - | Osig_module of string * out_module_type * out_rec_status - | Osig_type of out_type_decl * out_rec_status - | Osig_value of out_val_decl - | Osig_ellipsis -and out_type_decl = - { otype_name: string; - otype_params: (string * (bool * bool)) list; - otype_type: out_type; - otype_private: Asttypes.private_flag; - otype_immediate: bool; - otype_unboxed: bool; - otype_cstrs: (out_type * out_type) list } -and out_extension_constructor = - { oext_name: string; - oext_type_name: string; - oext_type_params: string list; - oext_args: out_type list; - oext_ret_type: out_type option; - oext_private: Asttypes.private_flag } -and out_type_extension = - { otyext_name: string; - otyext_params: string list; - otyext_constructors: (string * out_type list * out_type option) list; - otyext_private: Asttypes.private_flag } -and out_val_decl = - { oval_name: string; - oval_type: out_type; - oval_prims: string list; - oval_attributes: out_attribute list } -and out_rec_status = - | Orec_not - | Orec_first - | Orec_next -and out_ext_status = - | Oext_first - | Oext_next - | Oext_exception - -type out_phrase = - | Ophr_eval of out_value * out_type - | Ophr_signature of (out_sig_item * out_value option) list - | Ophr_exception of (exn * out_value) diff --git a/src/compiler-libs-406/parser.ml b/src/compiler-libs-406/parser.ml deleted file mode 100644 index cbe441b5..00000000 --- a/src/compiler-libs-406/parser.ml +++ /dev/null @@ -1,12782 +0,0 @@ -type token = - | AMPERAMPER - | AMPERSAND - | AND - | AS - | ASSERT - | BACKQUOTE - | BANG - | BAR - | BARBAR - | BARRBRACKET - | BEGIN - | CHAR of (char) - | CLASS - | COLON - | COLONCOLON - | COLONEQUAL - | COLONGREATER - | COMMA - | CONSTRAINT - | DO - | DONE - | DOT - | DOTDOT - | DOWNTO - | ELSE - | END - | EOF - | EQUAL - | EXCEPTION - | EXTERNAL - | FALSE - | FLOAT of (string * char option) - | FOR - | FUN - | FUNCTION - | FUNCTOR - | GREATER - | GREATERRBRACE - | GREATERRBRACKET - | IF - | IN - | INCLUDE - | INFIXOP0 of (string) - | INFIXOP1 of (string) - | INFIXOP2 of (string) - | INFIXOP3 of (string) - | INFIXOP4 of (string) - | DOTOP of (string) - | INHERIT - | INITIALIZER - | INT of (string * char option) - | LABEL of (string) - | LAZY - | LBRACE - | LBRACELESS - | LBRACKET - | LBRACKETBAR - | LBRACKETLESS - | LBRACKETGREATER - | LBRACKETPERCENT - | LBRACKETPERCENTPERCENT - | LESS - | LESSMINUS - | LET - | LIDENT of (string) - | LPAREN - | LBRACKETAT - | LBRACKETATAT - | LBRACKETATATAT - | MATCH - | METHOD - | MINUS - | MINUSDOT - | MINUSGREATER - | MODULE - | MUTABLE - | NEW - | NONREC - | OBJECT - | OF - | OPEN - | OPTLABEL of (string) - | OR - | PERCENT - | PLUS - | PLUSDOT - | PLUSEQ - | PREFIXOP of (string) - | PRIVATE - | QUESTION - | QUOTE - | RBRACE - | RBRACKET - | REC - | RPAREN - | SEMI - | SEMISEMI - | HASH - | HASHOP of (string) - | SIG - | STAR - | STRING of (string * string option) - | STRUCT - | THEN - | TILDE - | TO - | TRUE - | TRY - | TYPE - | UIDENT of (string) - | UNDERSCORE - | VAL - | VIRTUAL - | WHEN - | WHILE - | WITH - | COMMENT of (string * Location.t) - | DOCSTRING of (Docstrings.docstring) - | EOL - -open Parsing;; -let _ = parse_error;; -# 19 "ml/parser.mly" -open Location -open Asttypes -open Longident -open Parsetree -open Ast_helper -open Docstrings - -let mktyp d = Typ.mk ~loc:(symbol_rloc()) d -let mkpat d = Pat.mk ~loc:(symbol_rloc()) d -let mkexp d = Exp.mk ~loc:(symbol_rloc()) d -let mkmty ?attrs d = Mty.mk ~loc:(symbol_rloc()) ?attrs d -let mksig d = Sig.mk ~loc:(symbol_rloc()) d -let mkmod ?attrs d = Mod.mk ~loc:(symbol_rloc()) ?attrs d -let mkstr d = Str.mk ~loc:(symbol_rloc()) d -let mkcty ?attrs d = Cty.mk ~loc:(symbol_rloc()) ?attrs d -let mkctf ?attrs ?docs d = - Ctf.mk ~loc:(symbol_rloc()) ?attrs ?docs d -let mkcf ?attrs ?docs d = - Cf.mk ~loc:(symbol_rloc()) ?attrs ?docs d - -let mkrhs rhs pos = mkloc rhs (rhs_loc pos) - -let reloc_pat x = { x with ppat_loc = symbol_rloc () };; -let reloc_exp x = { x with pexp_loc = symbol_rloc () };; - -let mkoperator name pos = - let loc = rhs_loc pos in - Exp.mk ~loc (Pexp_ident(mkloc (Lident name) loc)) - -let mkpatvar name pos = - Pat.mk ~loc:(rhs_loc pos) (Ppat_var (mkrhs name pos)) - -(* - Ghost expressions and patterns: - expressions and patterns that do not appear explicitly in the - source file they have the loc_ghost flag set to true. - Then the profiler will not try to instrument them and the - -annot option will not try to display their type. - - Every grammar rule that generates an element with a location must - make at most one non-ghost element, the topmost one. - - How to tell whether your location must be ghost: - A location corresponds to a range of characters in the source file. - If the location contains a piece of code that is syntactically - valid (according to the documentation), and corresponds to the - AST node, then the location must be real; in all other cases, - it must be ghost. -*) -let ghexp d = Exp.mk ~loc:(symbol_gloc ()) d -let ghpat d = Pat.mk ~loc:(symbol_gloc ()) d -let ghtyp d = Typ.mk ~loc:(symbol_gloc ()) d -let ghloc d = { txt = d; loc = symbol_gloc () } -let ghstr d = Str.mk ~loc:(symbol_gloc()) d -let ghsig d = Sig.mk ~loc:(symbol_gloc()) d - -let mkinfix arg1 name arg2 = - mkexp(Pexp_apply(mkoperator name 2, [Nolabel, arg1; Nolabel, arg2])) - -let neg_string f = - if String.length f > 0 && f.[0] = '-' - then String.sub f 1 (String.length f - 1) - else "-" ^ f - -let mkuminus name arg = - match name, arg.pexp_desc with - | "-", Pexp_constant(Pconst_integer (n,m)) -> - mkexp(Pexp_constant(Pconst_integer(neg_string n,m))) - | ("-" | "-."), Pexp_constant(Pconst_float (f, m)) -> - mkexp(Pexp_constant(Pconst_float(neg_string f, m))) - | _ -> - mkexp(Pexp_apply(mkoperator ("~" ^ name) 1, [Nolabel, arg])) - -let mkuplus name arg = - let desc = arg.pexp_desc in - match name, desc with - | "+", Pexp_constant(Pconst_integer _) - | ("+" | "+."), Pexp_constant(Pconst_float _) -> mkexp desc - | _ -> - mkexp(Pexp_apply(mkoperator ("~" ^ name) 1, [Nolabel, arg])) - -let mkexp_cons consloc args loc = - Exp.mk ~loc (Pexp_construct(mkloc (Lident "::") consloc, Some args)) - -let mkpat_cons consloc args loc = - Pat.mk ~loc (Ppat_construct(mkloc (Lident "::") consloc, Some args)) - -let rec mktailexp nilloc = function - [] -> - let loc = { nilloc with loc_ghost = true } in - let nil = { txt = Lident "[]"; loc = loc } in - Exp.mk ~loc (Pexp_construct (nil, None)) - | e1 :: el -> - let exp_el = mktailexp nilloc el in - let loc = {loc_start = e1.pexp_loc.loc_start; - loc_end = exp_el.pexp_loc.loc_end; - loc_ghost = true} - in - let arg = Exp.mk ~loc (Pexp_tuple [e1; exp_el]) in - mkexp_cons {loc with loc_ghost = true} arg loc - -let rec mktailpat nilloc = function - [] -> - let loc = { nilloc with loc_ghost = true } in - let nil = { txt = Lident "[]"; loc = loc } in - Pat.mk ~loc (Ppat_construct (nil, None)) - | p1 :: pl -> - let pat_pl = mktailpat nilloc pl in - let loc = {loc_start = p1.ppat_loc.loc_start; - loc_end = pat_pl.ppat_loc.loc_end; - loc_ghost = true} - in - let arg = Pat.mk ~loc (Ppat_tuple [p1; pat_pl]) in - mkpat_cons {loc with loc_ghost = true} arg loc - -let mkstrexp e attrs = - { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc } - -let mkexp_constraint e (t1, t2) = - match t1, t2 with - | Some t, None -> ghexp(Pexp_constraint(e, t)) - | _, Some t -> ghexp(Pexp_coerce(e, t1, t)) - | None, None -> assert false - -let mkexp_opt_constraint e = function - | None -> e - | Some constraint_ -> mkexp_constraint e constraint_ - -let mkpat_opt_constraint p = function - | None -> p - | Some typ -> mkpat (Ppat_constraint(p, typ)) - -let array_function str name = - ghloc (Ldot(Lident str, (if !Clflags.fast then "unsafe_" ^ name else name))) - -let syntax_error () = - raise Syntaxerr.Escape_error - -let unclosed opening_name opening_num closing_name closing_num = - raise(Syntaxerr.Error(Syntaxerr.Unclosed(rhs_loc opening_num, opening_name, - rhs_loc closing_num, closing_name))) - -let expecting pos nonterm = - raise Syntaxerr.(Error(Expecting(rhs_loc pos, nonterm))) - -let not_expecting pos nonterm = - raise Syntaxerr.(Error(Not_expecting(rhs_loc pos, nonterm))) - - -let lapply p1 p2 = - if !Clflags.applicative_functors - then Lapply(p1, p2) - else raise (Syntaxerr.Error(Syntaxerr.Applicative_path (symbol_rloc()))) - -let exp_of_label lbl pos = - mkexp (Pexp_ident(mkrhs (Lident(Longident.last lbl)) pos)) - -let pat_of_label lbl pos = - mkpat (Ppat_var (mkrhs (Longident.last lbl) pos)) - -let mk_newtypes newtypes exp = - List.fold_right (fun newtype exp -> mkexp (Pexp_newtype (newtype, exp))) - newtypes exp - -let wrap_type_annotation newtypes core_type body = - let exp = mkexp(Pexp_constraint(body,core_type)) in - let exp = mk_newtypes newtypes exp in - (exp, ghtyp(Ptyp_poly(newtypes, Typ.varify_constructors newtypes core_type))) - -let wrap_exp_attrs body (ext, attrs) = - (* todo: keep exact location for the entire attribute *) - let body = {body with pexp_attributes = attrs @ body.pexp_attributes} in - match ext with - | None -> body - | Some id -> ghexp(Pexp_extension (id, PStr [mkstrexp body []])) - -let mkexp_attrs d attrs = - wrap_exp_attrs (mkexp d) attrs - -let wrap_typ_attrs typ (ext, attrs) = - (* todo: keep exact location for the entire attribute *) - let typ = {typ with ptyp_attributes = attrs @ typ.ptyp_attributes} in - match ext with - | None -> typ - | Some id -> ghtyp(Ptyp_extension (id, PTyp typ)) - -let mktyp_attrs d attrs = - wrap_typ_attrs (mktyp d) attrs - -let wrap_pat_attrs pat (ext, attrs) = - (* todo: keep exact location for the entire attribute *) - let pat = {pat with ppat_attributes = attrs @ pat.ppat_attributes} in - match ext with - | None -> pat - | Some id -> ghpat(Ppat_extension (id, PPat (pat, None))) - -let mkpat_attrs d attrs = - wrap_pat_attrs (mkpat d) attrs - -let wrap_class_type_attrs body attrs = - {body with pcty_attributes = attrs @ body.pcty_attributes} -let wrap_mod_attrs body attrs = - {body with pmod_attributes = attrs @ body.pmod_attributes} -let wrap_mty_attrs body attrs = - {body with pmty_attributes = attrs @ body.pmty_attributes} - -let wrap_str_ext body ext = - match ext with - | None -> body - | Some id -> ghstr(Pstr_extension ((id, PStr [body]), [])) - -let mkstr_ext d ext = - wrap_str_ext (mkstr d) ext - -let wrap_sig_ext body ext = - match ext with - | None -> body - | Some id -> ghsig(Psig_extension ((id, PSig [body]), [])) - -let mksig_ext d ext = - wrap_sig_ext (mksig d) ext - -let text_str pos = Str.text (rhs_text pos) -let text_sig pos = Sig.text (rhs_text pos) -let text_cstr pos = Cf.text (rhs_text pos) -let text_csig pos = Ctf.text (rhs_text pos) -let text_def pos = [Ptop_def (Str.text (rhs_text pos))] - -let extra_text text pos items = - let pre_extras = rhs_pre_extra_text pos in - let post_extras = rhs_post_extra_text pos in - text pre_extras @ items @ text post_extras - -let extra_str pos items = extra_text Str.text pos items -let extra_sig pos items = extra_text Sig.text pos items -let extra_cstr pos items = extra_text Cf.text pos items -let extra_csig pos items = extra_text Ctf.text pos items -let extra_def pos items = - extra_text (fun txt -> [Ptop_def (Str.text txt)]) pos items - -let extra_rhs_core_type ct ~pos = - let docs = rhs_info pos in - { ct with ptyp_attributes = add_info_attrs docs ct.ptyp_attributes } - -type let_binding = - { lb_pattern: pattern; - lb_expression: expression; - lb_attributes: attributes; - lb_docs: docs Lazy.t; - lb_text: text Lazy.t; - lb_loc: Location.t; } - -type let_bindings = - { lbs_bindings: let_binding list; - lbs_rec: rec_flag; - lbs_extension: string Asttypes.loc option; - lbs_loc: Location.t } - -let mklb first (p, e) attrs = - { lb_pattern = p; - lb_expression = e; - lb_attributes = attrs; - lb_docs = symbol_docs_lazy (); - lb_text = if first then empty_text_lazy - else symbol_text_lazy (); - lb_loc = symbol_rloc (); } - -let mklbs ext rf lb = - { lbs_bindings = [lb]; - lbs_rec = rf; - lbs_extension = ext ; - lbs_loc = symbol_rloc (); } - -let addlb lbs lb = - { lbs with lbs_bindings = lb :: lbs.lbs_bindings } - -let val_of_let_bindings lbs = - let bindings = - List.map - (fun lb -> - Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - ~docs:(Lazy.force lb.lb_docs) - ~text:(Lazy.force lb.lb_text) - lb.lb_pattern lb.lb_expression) - lbs.lbs_bindings - in - let str = mkstr(Pstr_value(lbs.lbs_rec, List.rev bindings)) in - match lbs.lbs_extension with - | None -> str - | Some id -> ghstr (Pstr_extension((id, PStr [str]), [])) - -let expr_of_let_bindings lbs body = - let bindings = - List.map - (fun lb -> - Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - lb.lb_pattern lb.lb_expression) - lbs.lbs_bindings - in - mkexp_attrs (Pexp_let(lbs.lbs_rec, List.rev bindings, body)) - (lbs.lbs_extension, []) - - - -(* Alternatively, we could keep the generic module type in the Parsetree - and extract the package type during type-checking. In that case, - the assertions below should be turned into explicit checks. *) -let package_type_of_module_type pmty = - let err loc s = - raise (Syntaxerr.Error (Syntaxerr.Invalid_package_type (loc, s))) - in - let map_cstr = function - | Pwith_type (lid, ptyp) -> - let loc = ptyp.ptype_loc in - if ptyp.ptype_params <> [] then - err loc "parametrized types are not supported"; - if ptyp.ptype_cstrs <> [] then - err loc "constrained types are not supported"; - if ptyp.ptype_private <> Public then - err loc "private types are not supported"; - - (* restrictions below are checked by the 'with_constraint' rule *) - assert (ptyp.ptype_kind = Ptype_abstract); - assert (ptyp.ptype_attributes = []); - let ty = - match ptyp.ptype_manifest with - | Some ty -> ty - | None -> assert false - in - (lid, ty) - | _ -> - err pmty.pmty_loc "only 'with type t =' constraints are supported" - in - match pmty with - | {pmty_desc = Pmty_ident lid} -> (lid, []) - | {pmty_desc = Pmty_with({pmty_desc = Pmty_ident lid}, cstrs)} -> - (lid, List.map map_cstr cstrs) - | _ -> - err pmty.pmty_loc - "only module type identifier and 'with type' constraints are supported" - - -# 468 "ml/parser.ml" -let yytransl_const = [| - 257 (* AMPERAMPER *); - 258 (* AMPERSAND *); - 259 (* AND *); - 260 (* AS *); - 261 (* ASSERT *); - 262 (* BACKQUOTE *); - 263 (* BANG *); - 264 (* BAR *); - 265 (* BARBAR *); - 266 (* BARRBRACKET *); - 267 (* BEGIN *); - 269 (* CLASS *); - 270 (* COLON *); - 271 (* COLONCOLON *); - 272 (* COLONEQUAL *); - 273 (* COLONGREATER *); - 274 (* COMMA *); - 275 (* CONSTRAINT *); - 276 (* DO *); - 277 (* DONE *); - 278 (* DOT *); - 279 (* DOTDOT *); - 280 (* DOWNTO *); - 281 (* ELSE *); - 282 (* END *); - 0 (* EOF *); - 283 (* EQUAL *); - 284 (* EXCEPTION *); - 285 (* EXTERNAL *); - 286 (* FALSE *); - 288 (* FOR *); - 289 (* FUN *); - 290 (* FUNCTION *); - 291 (* FUNCTOR *); - 292 (* GREATER *); - 293 (* GREATERRBRACE *); - 294 (* GREATERRBRACKET *); - 295 (* IF *); - 296 (* IN *); - 297 (* INCLUDE *); - 304 (* INHERIT *); - 305 (* INITIALIZER *); - 308 (* LAZY *); - 309 (* LBRACE *); - 310 (* LBRACELESS *); - 311 (* LBRACKET *); - 312 (* LBRACKETBAR *); - 313 (* LBRACKETLESS *); - 314 (* LBRACKETGREATER *); - 315 (* LBRACKETPERCENT *); - 316 (* LBRACKETPERCENTPERCENT *); - 317 (* LESS *); - 318 (* LESSMINUS *); - 319 (* LET *); - 321 (* LPAREN *); - 322 (* LBRACKETAT *); - 323 (* LBRACKETATAT *); - 324 (* LBRACKETATATAT *); - 325 (* MATCH *); - 326 (* METHOD *); - 327 (* MINUS *); - 328 (* MINUSDOT *); - 329 (* MINUSGREATER *); - 330 (* MODULE *); - 331 (* MUTABLE *); - 332 (* NEW *); - 333 (* NONREC *); - 334 (* OBJECT *); - 335 (* OF *); - 336 (* OPEN *); - 338 (* OR *); - 339 (* PERCENT *); - 340 (* PLUS *); - 341 (* PLUSDOT *); - 342 (* PLUSEQ *); - 344 (* PRIVATE *); - 345 (* QUESTION *); - 346 (* QUOTE *); - 347 (* RBRACE *); - 348 (* RBRACKET *); - 349 (* REC *); - 350 (* RPAREN *); - 351 (* SEMI *); - 352 (* SEMISEMI *); - 353 (* HASH *); - 355 (* SIG *); - 356 (* STAR *); - 358 (* STRUCT *); - 359 (* THEN *); - 360 (* TILDE *); - 361 (* TO *); - 362 (* TRUE *); - 363 (* TRY *); - 364 (* TYPE *); - 366 (* UNDERSCORE *); - 367 (* VAL *); - 368 (* VIRTUAL *); - 369 (* WHEN *); - 370 (* WHILE *); - 371 (* WITH *); - 374 (* EOL *); - 0|] - -let yytransl_block = [| - 268 (* CHAR *); - 287 (* FLOAT *); - 298 (* INFIXOP0 *); - 299 (* INFIXOP1 *); - 300 (* INFIXOP2 *); - 301 (* INFIXOP3 *); - 302 (* INFIXOP4 *); - 303 (* DOTOP *); - 306 (* INT *); - 307 (* LABEL *); - 320 (* LIDENT *); - 337 (* OPTLABEL *); - 343 (* PREFIXOP *); - 354 (* HASHOP *); - 357 (* STRING *); - 365 (* UIDENT *); - 372 (* COMMENT *); - 373 (* DOCSTRING *); - 0|] - -let yylhs = "\255\255\ -\001\000\002\000\003\000\003\000\003\000\010\000\010\000\014\000\ -\014\000\004\000\016\000\016\000\017\000\017\000\017\000\017\000\ -\017\000\017\000\017\000\005\000\006\000\007\000\020\000\020\000\ -\021\000\021\000\023\000\023\000\024\000\024\000\024\000\024\000\ -\024\000\024\000\024\000\024\000\024\000\027\000\027\000\027\000\ -\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ -\008\000\008\000\032\000\032\000\032\000\015\000\015\000\015\000\ -\015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ -\015\000\015\000\015\000\044\000\048\000\048\000\048\000\039\000\ -\040\000\040\000\049\000\050\000\022\000\022\000\022\000\022\000\ -\022\000\022\000\022\000\022\000\022\000\022\000\022\000\009\000\ -\009\000\009\000\053\000\053\000\053\000\053\000\053\000\053\000\ -\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ -\053\000\042\000\059\000\062\000\062\000\062\000\056\000\057\000\ -\058\000\058\000\063\000\064\000\065\000\065\000\041\000\067\000\ -\067\000\069\000\070\000\070\000\070\000\071\000\071\000\072\000\ -\072\000\072\000\072\000\072\000\072\000\073\000\073\000\073\000\ -\073\000\074\000\074\000\074\000\074\000\074\000\083\000\083\000\ -\083\000\083\000\083\000\084\000\084\000\084\000\084\000\084\000\ -\084\000\084\000\088\000\089\000\089\000\090\000\090\000\091\000\ -\091\000\091\000\091\000\091\000\091\000\092\000\092\000\092\000\ -\095\000\075\000\060\000\060\000\096\000\097\000\043\000\043\000\ -\098\000\099\000\012\000\012\000\012\000\012\000\101\000\101\000\ -\101\000\101\000\101\000\101\000\101\000\101\000\106\000\106\000\ -\103\000\103\000\102\000\102\000\104\000\105\000\105\000\030\000\ -\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ -\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ -\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ -\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ -\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ -\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ -\030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ -\030\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\ -\108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\ -\108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\ -\108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\ -\108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\ -\108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\ -\108\000\108\000\108\000\108\000\108\000\108\000\108\000\108\000\ -\108\000\108\000\108\000\108\000\108\000\108\000\108\000\109\000\ -\109\000\127\000\127\000\128\000\128\000\128\000\128\000\129\000\ -\082\000\082\000\130\000\130\000\130\000\130\000\130\000\130\000\ -\033\000\033\000\135\000\136\000\138\000\138\000\081\000\081\000\ -\081\000\112\000\112\000\139\000\139\000\139\000\113\000\113\000\ -\113\000\113\000\114\000\114\000\123\000\123\000\141\000\141\000\ -\141\000\142\000\142\000\126\000\126\000\144\000\144\000\124\000\ -\124\000\078\000\078\000\078\000\078\000\078\000\143\000\143\000\ -\019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\ -\019\000\019\000\133\000\133\000\133\000\133\000\133\000\133\000\ -\133\000\133\000\133\000\146\000\146\000\146\000\146\000\107\000\ -\107\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\150\000\ -\150\000\150\000\150\000\150\000\150\000\150\000\145\000\145\000\ -\145\000\147\000\147\000\147\000\152\000\152\000\151\000\151\000\ -\151\000\151\000\153\000\153\000\154\000\154\000\035\000\155\000\ -\155\000\034\000\036\000\036\000\156\000\157\000\161\000\161\000\ -\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\ -\160\000\160\000\160\000\159\000\159\000\159\000\164\000\165\000\ -\165\000\167\000\167\000\168\000\166\000\166\000\166\000\169\000\ -\068\000\068\000\162\000\162\000\162\000\170\000\171\000\038\000\ -\038\000\055\000\110\000\173\000\173\000\173\000\173\000\174\000\ -\174\000\163\000\163\000\163\000\176\000\177\000\037\000\054\000\ -\179\000\179\000\179\000\179\000\179\000\179\000\180\000\180\000\ -\180\000\181\000\182\000\183\000\184\000\052\000\052\000\185\000\ -\185\000\185\000\185\000\186\000\186\000\132\000\132\000\079\000\ -\079\000\178\000\178\000\018\000\018\000\187\000\187\000\189\000\ -\189\000\189\000\189\000\189\000\140\000\140\000\190\000\190\000\ -\190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ -\190\000\190\000\190\000\190\000\190\000\190\000\190\000\190\000\ -\190\000\031\000\194\000\194\000\195\000\195\000\193\000\193\000\ -\197\000\197\000\198\000\198\000\196\000\196\000\085\000\085\000\ -\086\000\086\000\175\000\175\000\191\000\191\000\191\000\191\000\ -\191\000\191\000\191\000\201\000\199\000\200\000\076\000\122\000\ -\122\000\122\000\122\000\148\000\148\000\148\000\148\000\148\000\ -\066\000\066\000\131\000\131\000\131\000\131\000\131\000\202\000\ -\202\000\202\000\202\000\202\000\202\000\202\000\202\000\202\000\ -\202\000\202\000\202\000\202\000\202\000\202\000\202\000\202\000\ -\202\000\202\000\202\000\202\000\202\000\202\000\202\000\202\000\ -\202\000\202\000\202\000\202\000\172\000\172\000\172\000\172\000\ -\172\000\172\000\121\000\121\000\115\000\115\000\115\000\115\000\ -\115\000\115\000\115\000\120\000\120\000\149\000\149\000\025\000\ -\025\000\188\000\188\000\188\000\051\000\051\000\087\000\087\000\ -\192\000\192\000\011\000\011\000\011\000\011\000\011\000\011\000\ -\011\000\116\000\137\000\137\000\158\000\158\000\117\000\117\000\ -\080\000\080\000\077\000\077\000\094\000\094\000\093\000\093\000\ -\093\000\093\000\093\000\061\000\061\000\111\000\111\000\125\000\ -\125\000\118\000\118\000\119\000\119\000\203\000\203\000\203\000\ -\203\000\203\000\203\000\203\000\203\000\203\000\203\000\203\000\ -\203\000\203\000\203\000\203\000\203\000\203\000\203\000\203\000\ -\203\000\203\000\203\000\203\000\203\000\203\000\203\000\203\000\ -\203\000\203\000\203\000\203\000\203\000\203\000\203\000\203\000\ -\203\000\203\000\203\000\203\000\203\000\203\000\203\000\203\000\ -\203\000\203\000\203\000\203\000\203\000\203\000\203\000\203\000\ -\100\000\100\000\028\000\205\000\046\000\013\000\013\000\026\000\ -\026\000\047\000\047\000\047\000\029\000\045\000\204\000\204\000\ -\204\000\204\000\204\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000" - -let yylen = "\002\000\ -\002\000\002\000\002\000\002\000\001\000\002\000\001\000\000\000\ -\002\000\001\000\001\000\003\000\001\000\002\000\004\000\003\000\ -\003\000\002\000\002\000\002\000\002\000\002\000\002\000\005\000\ -\001\000\001\000\002\000\001\000\001\000\004\000\004\000\005\000\ -\002\000\003\000\001\000\002\000\001\000\005\000\005\000\003\000\ -\003\000\005\000\007\000\009\000\007\000\006\000\006\000\005\000\ -\003\000\001\000\000\000\002\000\002\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\002\000\001\000\004\000\002\000\004\000\002\000\005\000\ -\001\000\002\000\006\000\005\000\001\000\004\000\004\000\005\000\ -\003\000\003\000\005\000\003\000\003\000\001\000\002\000\000\000\ -\002\000\002\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\002\000\ -\001\000\005\000\004\000\002\000\006\000\003\000\005\000\006\000\ -\001\000\002\000\007\000\006\000\000\000\002\000\006\000\000\000\ -\003\000\002\000\003\000\005\000\000\000\000\000\002\000\003\000\ -\003\000\004\000\004\000\002\000\001\000\007\000\007\000\006\000\ -\007\000\007\000\007\000\005\000\008\000\011\000\001\000\006\000\ -\004\000\005\000\003\000\004\000\001\000\004\000\004\000\002\000\ -\001\000\007\000\002\000\003\000\000\000\000\000\002\000\004\000\ -\004\000\007\000\004\000\002\000\001\000\005\000\005\000\003\000\ -\003\000\003\000\001\000\002\000\008\000\008\000\001\000\002\000\ -\009\000\008\000\001\000\002\000\003\000\005\000\005\000\002\000\ -\005\000\002\000\004\000\002\000\002\000\001\000\001\000\001\000\ -\000\000\002\000\001\000\003\000\001\000\001\000\003\000\001\000\ -\002\000\003\000\007\000\006\000\007\000\004\000\004\000\007\000\ -\006\000\006\000\005\000\001\000\002\000\002\000\007\000\005\000\ -\006\000\010\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\002\000\ -\002\000\005\000\007\000\007\000\007\000\007\000\007\000\009\000\ -\009\000\009\000\003\000\003\000\003\000\004\000\004\000\002\000\ -\001\000\001\000\001\000\001\000\001\000\003\000\003\000\004\000\ -\003\000\004\000\004\000\003\000\005\000\004\000\005\000\005\000\ -\005\000\005\000\005\000\005\000\005\000\005\000\005\000\005\000\ -\005\000\007\000\007\000\007\000\007\000\007\000\007\000\005\000\ -\003\000\003\000\005\000\005\000\004\000\004\000\002\000\006\000\ -\004\000\006\000\004\000\004\000\006\000\004\000\006\000\002\000\ -\002\000\003\000\003\000\002\000\005\000\004\000\005\000\003\000\ -\003\000\005\000\007\000\006\000\009\000\008\000\001\000\001\000\ -\002\000\001\000\001\000\002\000\002\000\002\000\002\000\001\000\ -\001\000\002\000\002\000\004\000\007\000\008\000\003\000\005\000\ -\001\000\002\000\005\000\004\000\001\000\003\000\002\000\002\000\ -\005\000\001\000\003\000\003\000\005\000\003\000\002\000\004\000\ -\002\000\005\000\003\000\003\000\003\000\001\000\001\000\003\000\ -\002\000\004\000\002\000\002\000\003\000\003\000\001\000\001\000\ -\003\000\002\000\004\000\002\000\002\000\002\000\001\000\000\000\ -\003\000\003\000\001\000\003\000\003\000\003\000\003\000\003\000\ -\002\000\001\000\003\000\003\000\001\000\003\000\003\000\003\000\ -\003\000\002\000\001\000\001\000\002\000\002\000\003\000\001\000\ -\001\000\001\000\001\000\003\000\001\000\001\000\002\000\001\000\ -\003\000\004\000\004\000\005\000\005\000\004\000\003\000\003\000\ -\005\000\005\000\004\000\005\000\007\000\007\000\001\000\003\000\ -\003\000\004\000\004\000\004\000\002\000\004\000\003\000\003\000\ -\003\000\003\000\003\000\003\000\001\000\003\000\001\000\002\000\ -\004\000\003\000\004\000\002\000\002\000\000\000\006\000\001\000\ -\002\000\008\000\001\000\002\000\008\000\007\000\003\000\000\000\ -\000\000\002\000\003\000\002\000\003\000\002\000\003\000\005\000\ -\005\000\005\000\007\000\000\000\001\000\003\000\002\000\001\000\ -\003\000\002\000\001\000\002\000\000\000\001\000\001\000\002\000\ -\001\000\003\000\001\000\001\000\002\000\003\000\004\000\001\000\ -\007\000\006\000\003\000\000\000\002\000\004\000\002\000\001\000\ -\003\000\001\000\001\000\002\000\005\000\007\000\009\000\009\000\ -\001\000\001\000\001\000\001\000\002\000\002\000\001\000\001\000\ -\002\000\003\000\004\000\004\000\005\000\001\000\003\000\006\000\ -\005\000\004\000\004\000\001\000\002\000\002\000\003\000\001\000\ -\003\000\001\000\003\000\001\000\002\000\001\000\004\000\001\000\ -\006\000\004\000\005\000\003\000\001\000\003\000\002\000\001\000\ -\001\000\002\000\004\000\003\000\002\000\002\000\003\000\005\000\ -\003\000\004\000\005\000\004\000\002\000\004\000\006\000\005\000\ -\001\000\001\000\001\000\003\000\001\000\001\000\005\000\002\000\ -\001\000\000\000\001\000\003\000\001\000\002\000\001\000\003\000\ -\001\000\003\000\001\000\003\000\002\000\002\000\001\000\001\000\ -\001\000\001\000\001\000\004\000\006\000\002\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\002\000\002\000\002\000\002\000\ -\001\000\001\000\001\000\003\000\003\000\002\000\003\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\003\000\004\000\003\000\ -\004\000\003\000\004\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\002\000\002\000\003\000\ -\001\000\001\000\001\000\003\000\001\000\005\000\002\000\002\000\ -\003\000\001\000\001\000\001\000\003\000\001\000\003\000\001\000\ -\003\000\001\000\003\000\004\000\001\000\003\000\001\000\003\000\ -\001\000\003\000\002\000\003\000\003\000\003\000\003\000\003\000\ -\003\000\002\000\000\000\001\000\000\000\001\000\001\000\001\000\ -\000\000\001\000\000\000\001\000\000\000\001\000\000\000\001\000\ -\001\000\002\000\002\000\000\000\001\000\000\000\001\000\000\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ -\001\000\003\000\004\000\004\000\004\000\000\000\002\000\000\000\ -\002\000\000\000\002\000\003\000\004\000\004\000\001\000\002\000\ -\002\000\002\000\004\000\002\000\002\000\002\000\002\000\002\000\ -\002\000\002\000" - -let yydefred = "\000\000\ -\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\002\000\000\000\000\000\000\ -\138\002\083\002\000\000\000\000\000\000\000\000\000\000\080\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\186\002\187\002\000\000\000\000\ -\000\000\188\002\189\002\000\000\000\000\082\002\139\002\000\000\ -\000\000\144\002\001\001\000\000\000\000\004\003\000\000\000\000\ -\000\000\000\000\063\001\000\000\050\000\000\000\055\000\056\000\ -\000\000\058\000\059\000\060\000\000\000\062\000\063\000\000\000\ -\065\000\000\000\067\000\073\000\232\001\000\000\175\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\002\001\003\001\131\002\ -\081\001\195\001\000\000\000\000\000\000\000\000\000\000\000\000\ -\005\003\000\000\092\000\091\000\000\000\099\000\100\000\000\000\ -\000\000\105\000\000\000\094\000\095\000\096\000\097\000\000\000\ -\101\000\000\000\113\000\171\000\005\000\000\000\006\003\000\000\ -\000\000\000\000\007\000\000\000\013\000\000\000\007\003\000\000\ -\000\000\000\000\010\000\011\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\146\002\032\002\ -\008\003\000\000\049\002\024\002\000\000\033\002\020\002\000\000\ -\000\000\000\000\009\003\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\091\002\000\000\000\000\000\000\000\000\146\001\ -\010\003\000\000\000\000\167\001\140\001\000\000\000\000\084\002\ -\144\001\145\001\000\000\130\001\000\000\152\001\000\000\000\000\ -\000\000\000\000\090\002\089\002\162\002\049\001\004\001\005\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\102\001\ -\000\000\052\001\079\002\000\000\000\000\000\000\135\002\000\000\ -\000\000\039\001\000\000\192\002\193\002\194\002\195\002\196\002\ -\197\002\198\002\199\002\200\002\201\002\202\002\203\002\204\002\ -\205\002\206\002\207\002\208\002\209\002\210\002\211\002\212\002\ -\213\002\214\002\215\002\216\002\190\002\217\002\218\002\219\002\ -\220\002\221\002\222\002\223\002\224\002\225\002\226\002\227\002\ -\228\002\229\002\230\002\231\002\232\002\233\002\234\002\235\002\ -\191\002\236\002\237\002\238\002\239\002\240\002\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\094\002\121\002\120\002\ -\000\000\119\002\000\000\122\002\115\002\117\002\097\002\098\002\ -\099\002\100\002\101\002\000\000\116\002\000\000\000\000\000\000\ -\118\002\124\002\000\000\000\000\123\002\000\000\136\002\108\002\ -\114\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\181\002\000\000\048\001\052\000\000\000\000\000\000\000\000\000\ -\001\000\000\000\000\000\000\000\000\000\053\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\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\082\001\000\000\196\001\000\000\074\000\000\000\ -\176\000\066\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\064\001\067\001\000\000\ -\000\000\000\000\240\000\241\000\000\000\000\000\000\000\000\000\ -\089\000\000\000\002\000\104\000\090\000\000\000\114\000\000\000\ -\172\000\000\000\003\000\004\000\006\000\009\000\014\000\000\000\ -\000\000\000\000\019\000\000\000\018\000\000\000\142\002\000\000\ -\054\002\000\000\000\000\183\002\000\000\045\002\000\000\075\002\ -\037\002\000\000\000\000\000\000\000\000\000\000\000\000\072\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\031\002\153\002\ -\000\000\038\002\020\000\021\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\034\002\021\000\000\000\000\000\140\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\173\001\000\000\109\002\ -\000\000\113\002\000\000\000\000\111\002\096\002\000\000\086\002\ -\085\002\088\002\087\002\151\001\000\000\000\000\000\000\000\000\ -\022\000\129\001\000\000\141\001\142\001\000\000\000\000\000\000\ -\000\000\251\002\000\000\000\000\000\000\000\000\009\001\000\000\ -\000\000\129\002\000\000\000\000\130\002\125\002\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\190\000\149\001\150\001\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\035\000\037\000\000\000\000\000\000\000\000\000\ -\000\000\119\001\000\000\034\001\033\001\000\000\000\000\051\001\ -\050\001\000\000\108\001\000\000\000\000\000\000\000\000\000\000\ -\255\002\000\000\000\000\000\000\000\000\000\000\000\000\164\002\ -\000\000\137\002\000\000\000\000\000\000\095\002\000\000\007\001\ -\006\001\000\000\093\002\092\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\126\000\000\000\000\000\166\002\000\000\ -\000\000\000\000\000\000\049\000\247\002\000\000\000\000\000\000\ -\000\000\000\000\145\002\132\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\181\000\000\000\000\000\202\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\072\001\070\001\056\001\000\000\ -\069\001\065\001\000\000\174\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\086\000\077\000\149\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\160\002\157\002\156\002\ -\161\002\000\000\158\002\017\000\000\000\016\000\012\000\053\002\ -\000\000\051\002\000\000\056\002\041\002\000\000\000\000\000\000\ -\000\000\078\002\036\002\069\002\070\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\067\002\000\000\143\002\147\002\ -\000\000\000\000\000\000\039\002\128\001\143\001\000\000\000\000\ -\000\000\169\001\168\001\000\000\000\000\000\000\000\000\000\000\ -\160\001\000\000\159\001\122\001\121\001\127\001\000\000\125\001\ -\000\000\177\001\000\000\000\000\000\000\153\001\000\000\148\001\ -\000\000\252\002\249\002\000\000\000\000\000\000\012\001\000\000\ -\000\000\000\000\010\001\008\001\000\000\126\002\000\000\127\002\ -\000\000\000\000\000\000\000\000\112\002\000\000\110\002\000\000\ -\000\000\189\000\000\000\191\000\000\000\192\000\186\000\197\000\ -\000\000\184\000\000\000\188\000\000\000\000\000\000\000\000\000\ -\207\000\000\000\000\000\090\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\068\000\033\000\036\000\000\000\000\000\101\001\ -\117\001\000\000\118\001\000\000\000\000\104\001\000\000\109\001\ -\000\000\044\001\043\001\038\001\037\001\000\003\000\000\000\000\ -\253\002\242\002\254\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\139\001\000\000\000\000\000\000\000\000\ -\000\000\011\001\245\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\255\000\254\000\000\000\000\000\ -\000\000\000\000\223\001\222\001\000\000\213\001\000\000\000\000\ -\000\000\000\000\000\000\054\001\000\000\046\001\000\000\041\001\ -\000\000\000\000\000\000\014\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\000\000\000\000\000\ -\000\000\000\000\000\000\107\000\087\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\042\002\057\002\000\000\000\000\000\000\046\002\044\002\ -\000\000\000\000\000\000\018\002\000\000\000\000\000\000\000\000\ -\000\000\035\002\000\000\000\000\154\002\000\000\000\000\148\002\ -\023\002\141\002\000\000\000\000\000\000\186\001\000\000\171\001\ -\170\001\174\001\172\001\000\000\163\001\000\000\154\001\158\001\ -\155\001\000\000\243\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\128\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\237\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\ -\095\001\097\001\000\000\000\000\000\000\000\000\028\000\000\000\ -\000\000\041\000\000\000\040\000\000\000\034\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\083\001\000\000\000\000\ -\000\000\000\000\075\001\000\000\000\000\000\000\000\000\000\000\ -\000\000\138\001\000\000\000\000\107\002\105\002\103\002\000\000\ -\058\001\000\000\000\000\000\000\000\000\000\000\000\000\023\000\ -\025\000\026\000\000\000\071\000\072\000\000\000\123\000\000\000\ -\000\000\000\000\000\000\000\000\133\000\127\000\106\000\211\000\ -\000\000\216\001\000\000\000\000\000\000\000\000\219\001\215\001\ -\000\000\000\000\244\002\036\001\035\001\055\001\053\001\000\000\ -\000\000\134\002\000\000\015\001\013\001\182\000\084\001\000\000\ -\000\000\000\000\032\001\019\001\000\000\017\001\000\000\000\000\ -\000\000\000\000\000\000\025\001\000\000\021\001\000\000\023\001\ -\000\000\000\000\000\000\225\001\000\000\000\000\085\000\084\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\006\002\000\000\ -\150\002\000\000\000\000\000\000\000\000\000\000\111\000\000\000\ -\000\000\000\000\052\002\059\002\000\000\043\002\061\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\048\002\040\002\000\000\ -\068\002\000\000\185\002\185\001\000\000\164\001\162\001\161\001\ -\157\001\156\001\018\001\016\001\000\000\000\000\000\000\024\001\ -\020\001\022\001\000\000\172\002\000\000\000\000\242\001\000\000\ -\000\000\000\000\000\000\234\001\000\000\168\002\167\002\000\000\ -\074\001\000\000\000\000\000\000\000\000\000\000\000\000\187\000\ -\000\000\000\000\094\001\092\001\000\000\091\001\000\000\000\000\ -\027\000\000\000\000\000\031\000\030\000\000\000\003\003\204\000\ -\235\001\000\000\000\000\000\000\000\000\087\001\000\000\000\000\ -\000\000\085\001\088\001\132\001\131\001\137\001\000\000\135\001\ -\000\000\180\001\000\000\079\001\000\000\000\000\060\001\000\000\ -\000\000\000\000\119\000\075\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\000\ -\214\001\000\000\200\001\000\000\218\001\191\001\217\000\047\001\ -\045\001\042\001\040\001\000\000\200\001\076\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\121\000\000\000\220\001\000\000\000\000\000\000\079\000\078\000\ -\000\000\000\000\000\000\000\000\112\000\110\000\000\000\000\000\ -\000\000\000\000\000\000\055\002\047\002\062\002\019\002\015\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\241\001\244\001\238\001\000\000\233\001\000\000\000\000\000\000\ -\208\000\000\000\194\000\185\000\183\000\000\000\096\001\000\000\ -\000\000\000\000\000\000\048\000\000\000\000\000\042\000\039\000\ -\038\000\203\000\205\000\000\000\000\000\000\000\076\001\000\000\ -\000\000\059\001\000\000\000\000\124\000\000\000\000\000\000\000\ -\000\000\129\000\000\000\128\000\217\001\000\000\206\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\227\001\228\001\ -\000\000\000\000\170\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\031\001\000\000\027\001\000\000\029\001\000\000\000\000\ -\000\000\000\000\226\001\224\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\007\002\115\000\000\000\ -\000\000\116\000\000\000\060\002\077\002\166\001\165\001\030\001\ -\026\001\028\001\000\000\151\002\153\000\000\000\000\000\000\000\ -\193\001\194\001\000\000\098\001\093\001\046\000\000\000\047\000\ -\000\000\000\000\000\000\000\000\086\001\080\001\024\000\000\000\ -\130\000\131\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\207\001\000\000\000\000\000\000\000\000\229\001\000\000\ -\000\000\197\001\000\000\000\000\000\000\249\001\250\001\251\001\ -\252\001\062\001\000\000\198\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\ -\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\255\001\000\002\000\000\177\000\ -\000\000\000\000\000\000\000\000\043\000\045\000\000\000\000\000\ -\089\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\230\001\000\000\199\001\000\000\000\000\ -\000\000\247\001\253\001\254\001\061\001\178\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\158\000\000\000\ -\000\000\147\000\000\000\009\002\013\002\200\001\109\000\000\000\ -\248\001\001\002\174\000\152\002\000\000\218\000\000\000\000\000\ -\077\001\000\000\000\000\000\000\140\000\000\000\000\000\000\000\ -\000\000\231\001\210\001\000\000\000\000\208\001\000\000\000\000\ -\000\000\000\000\002\002\148\000\000\000\000\000\000\000\151\000\ -\150\000\000\000\145\000\000\000\000\000\000\000\044\000\078\001\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\136\000\000\000\000\000\000\000\000\000\003\002\004\002\000\000\ -\146\000\156\000\000\000\000\000\000\000\000\000\000\000\165\000\ -\159\000\000\000\246\001\138\000\139\000\000\000\000\000\000\000\ -\000\000\000\000\137\000\211\001\005\002\000\000\000\000\000\000\ -\000\000\000\000\164\000\144\000\000\000\141\000\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\160\000\178\002\179\002\000\000\000\000\ -\000\000\000\000\161\000\000\000\000\000\000\000\000\000\000\000\ -\142\000\000\000\000\000\000\000\162\000\000\000\000\000" - -let yydgoto = "\008\000\ -\054\000\097\000\119\000\127\000\145\000\155\000\169\000\025\002\ -\098\000\120\000\128\000\056\000\067\001\123\000\057\000\131\000\ -\132\000\171\001\207\001\042\003\227\003\118\003\184\003\248\002\ -\058\000\226\001\003\002\096\001\059\000\060\000\119\003\061\000\ -\157\000\063\000\064\000\065\000\066\000\067\000\068\000\069\000\ -\070\000\071\000\072\000\073\000\074\000\075\000\021\001\043\003\ -\076\000\103\001\126\002\038\004\107\000\108\000\077\000\110\000\ -\111\000\112\000\113\000\114\000\058\001\099\003\115\000\135\001\ -\220\003\127\002\085\003\026\004\051\002\052\002\047\003\238\003\ -\157\004\155\004\255\004\078\000\085\004\129\004\237\005\013\005\ -\130\004\169\003\044\005\045\005\148\000\172\001\047\005\182\005\ -\183\005\226\005\001\006\033\006\029\006\117\002\166\005\116\000\ -\137\001\079\000\105\001\015\001\240\002\172\003\101\004\173\003\ -\171\003\231\002\173\000\080\000\117\001\020\003\157\001\243\002\ -\241\002\081\000\082\000\083\000\096\004\084\000\085\000\206\000\ -\086\000\087\000\207\000\217\000\019\002\213\000\118\001\119\001\ -\110\002\024\003\088\000\238\005\026\003\178\000\089\000\099\001\ -\033\002\131\004\244\002\149\000\208\000\209\000\011\002\214\000\ -\179\000\180\000\029\003\181\000\150\000\182\000\194\001\197\001\ -\195\001\177\002\223\004\090\000\101\001\056\002\053\003\163\004\ -\018\005\014\005\086\004\054\003\243\003\055\003\248\003\028\004\ -\187\004\015\005\016\005\017\005\220\002\158\003\159\003\087\004\ -\088\004\115\003\109\005\140\005\110\005\111\005\112\005\113\005\ -\039\004\136\005\151\000\152\000\153\000\154\000\165\001\178\001\ -\144\002\145\002\146\002\056\004\108\003\053\004\166\001\167\001\ -\168\001\051\001\016\001\026\002\068\001" - -let yysindex = "\078\009\ -\091\065\200\012\136\050\049\050\129\046\096\068\132\071\000\000\ -\201\255\065\001\016\071\201\255\000\000\045\000\201\255\201\255\ -\000\000\000\000\201\255\201\255\201\255\201\255\201\255\000\000\ -\201\255\161\073\046\255\177\065\009\066\094\061\094\061\017\005\ -\000\000\204\058\094\061\201\255\000\000\000\000\150\004\201\255\ -\153\000\000\000\000\000\016\071\091\065\000\000\000\000\201\255\ -\201\255\000\000\000\000\201\255\201\255\000\000\005\002\173\001\ -\135\007\028\002\000\000\085\077\000\000\240\001\000\000\000\000\ -\054\002\000\000\000\000\000\000\006\003\000\000\000\000\072\003\ -\000\000\173\001\000\000\000\000\000\000\165\002\000\000\041\073\ -\233\002\016\071\016\071\096\068\096\068\000\000\000\000\000\000\ -\000\000\000\000\204\004\201\255\201\255\150\004\200\012\201\255\ -\000\000\111\004\000\000\000\000\054\002\000\000\000\000\072\003\ -\173\001\000\000\200\012\000\000\000\000\000\000\000\000\129\003\ -\000\000\161\003\000\000\000\000\000\000\065\001\000\000\154\003\ -\194\003\173\001\000\000\035\009\000\000\255\050\000\000\184\007\ -\173\001\184\007\000\000\000\000\178\033\073\004\086\000\174\010\ -\070\004\086\045\129\046\037\004\065\001\142\001\000\000\000\000\ -\000\000\059\000\000\000\000\000\015\004\000\000\000\000\173\002\ -\138\001\084\002\000\000\135\005\240\001\201\255\201\255\217\002\ -\135\070\198\070\000\000\060\063\170\003\038\004\028\003\000\000\ -\000\000\097\000\144\004\000\000\000\000\132\071\132\071\000\000\ -\000\000\000\000\152\004\000\000\184\004\000\000\094\061\094\061\ -\164\004\016\071\000\000\000\000\000\000\000\000\000\000\000\000\ -\094\066\201\255\245\001\025\255\132\071\012\070\073\004\096\068\ -\132\003\016\071\000\000\219\004\009\001\123\005\122\255\000\000\ -\181\004\000\000\000\000\021\005\063\003\226\004\000\000\189\077\ -\240\004\000\000\240\004\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\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\065\146\005\ -\004\065\201\255\201\255\153\000\132\005\000\000\000\000\000\000\ -\016\071\000\000\097\005\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\198\005\000\000\000\000\000\000\083\001\ -\000\000\000\000\000\000\000\000\000\000\016\071\000\000\000\000\ -\000\000\136\001\155\255\004\065\096\068\201\255\239\004\166\005\ -\000\000\201\255\000\000\000\000\096\068\159\005\025\255\096\068\ -\000\000\094\061\135\007\173\001\201\255\000\000\239\005\151\006\ -\096\068\096\068\096\068\096\068\096\068\096\068\096\068\096\068\ -\096\068\096\068\096\068\096\068\096\068\096\068\096\068\096\068\ -\096\068\096\068\096\068\096\068\096\068\179\066\096\068\000\000\ -\164\004\096\068\000\000\164\004\000\000\164\004\000\000\164\004\ -\000\000\000\000\096\068\091\002\031\006\016\071\016\071\204\005\ -\212\005\016\071\204\005\040\002\101\073\000\000\000\000\096\068\ -\040\002\040\002\000\000\000\000\145\005\245\001\164\003\032\005\ -\000\000\159\005\000\000\000\000\000\000\164\004\000\000\164\004\ -\000\000\173\004\000\000\000\000\000\000\000\000\000\000\184\007\ -\173\001\184\007\000\000\184\007\000\000\200\008\000\000\019\255\ -\000\000\190\005\023\006\000\000\200\008\000\000\200\008\000\000\ -\000\000\000\000\020\006\210\005\001\006\133\008\133\008\000\000\ -\129\046\201\255\164\004\066\001\224\005\036\006\000\000\000\000\ -\030\006\000\000\000\000\000\000\163\010\057\003\200\005\237\005\ -\129\046\142\001\000\000\000\000\132\071\201\072\000\000\055\006\ -\044\006\138\255\242\005\094\004\244\005\000\000\244\005\000\000\ -\170\003\000\000\083\001\038\004\000\000\000\000\023\002\000\000\ -\000\000\000\000\000\000\000\000\064\002\087\015\211\063\016\064\ -\000\000\000\000\109\002\000\000\000\000\132\071\125\001\004\065\ -\164\004\000\000\164\004\040\002\015\006\032\006\000\000\097\003\ -\145\005\000\000\246\005\126\255\000\000\000\000\072\002\122\074\ -\064\006\067\004\201\072\239\061\183\003\046\005\098\005\160\069\ -\000\000\000\000\000\000\132\071\241\005\164\004\194\002\164\004\ -\137\005\068\006\000\000\000\000\040\002\202\006\217\002\185\009\ -\051\011\000\000\067\006\000\000\000\000\217\002\096\068\000\000\ -\000\000\212\005\000\000\096\068\116\255\067\003\060\078\132\071\ -\000\000\010\006\094\061\012\006\245\001\252\005\201\255\000\000\ -\052\072\000\000\016\006\019\006\014\006\000\000\132\003\000\000\ -\000\000\028\006\000\000\000\000\039\006\021\006\065\001\034\006\ -\038\003\132\071\211\003\000\000\046\006\047\006\000\000\077\005\ -\131\006\139\006\004\065\000\000\000\000\161\073\067\001\008\067\ -\096\067\059\059\000\000\000\000\210\016\210\016\026\078\205\007\ -\189\077\026\078\029\006\029\006\029\006\029\006\199\002\105\006\ -\105\006\029\006\199\002\199\002\026\078\105\006\199\002\199\002\ -\199\002\094\061\000\000\105\006\052\072\000\000\077\005\052\006\ -\145\005\189\077\096\068\096\068\096\068\220\002\103\006\096\068\ -\096\068\096\068\040\002\040\002\000\000\000\000\000\000\224\002\ -\000\000\000\000\026\078\000\000\113\006\024\001\164\004\164\003\ -\070\006\164\004\000\000\198\003\000\000\000\000\000\000\093\003\ -\066\006\116\003\077\005\072\006\145\005\000\000\000\000\000\000\ -\000\000\154\006\000\000\000\000\184\007\000\000\000\000\000\000\ -\120\000\000\000\177\006\000\000\000\000\200\008\008\001\042\001\ -\167\050\000\000\000\000\000\000\000\000\109\006\164\003\129\046\ -\145\003\129\046\129\046\087\003\000\000\085\006\000\000\000\000\ -\215\255\065\001\114\006\000\000\000\000\000\000\185\003\129\046\ -\161\006\000\000\000\000\026\003\132\071\224\255\019\005\082\006\ -\000\000\009\014\000\000\000\000\000\000\000\000\016\003\000\000\ -\179\006\000\000\018\002\003\071\150\063\000\000\018\002\000\000\ -\100\006\000\000\000\000\096\068\096\068\171\004\000\000\096\068\ -\096\068\096\068\000\000\000\000\113\006\000\000\101\006\000\000\ -\100\036\000\002\100\036\164\004\000\000\197\006\000\000\129\046\ -\096\068\000\000\135\006\000\000\132\071\000\000\000\000\000\000\ -\136\006\000\000\136\006\000\000\163\010\094\062\096\068\160\069\ -\000\000\199\255\204\006\000\000\096\068\145\006\164\004\085\000\ -\091\065\020\003\000\000\000\000\000\000\104\006\000\000\000\000\ -\000\000\074\001\000\000\164\004\096\068\000\000\189\077\000\000\ -\189\077\000\000\000\000\000\000\000\000\000\000\164\004\122\000\ -\000\000\000\000\000\000\178\006\024\001\038\003\046\006\173\001\ -\072\069\009\005\206\006\000\000\203\006\162\006\164\006\167\006\ -\156\001\000\000\000\000\073\004\207\006\038\003\164\003\132\003\ -\049\000\038\003\173\001\070\005\000\000\000\000\149\002\003\004\ -\186\001\198\255\000\000\000\000\225\003\000\000\167\000\129\046\ -\096\068\149\006\096\000\000\000\193\003\000\000\240\004\000\000\ -\240\004\148\006\083\001\000\000\219\255\096\068\173\001\169\006\ -\038\003\113\006\189\077\042\002\029\000\225\255\065\006\096\068\ -\201\074\233\074\055\075\198\255\181\006\145\006\118\255\174\006\ -\200\012\164\003\007\255\000\000\000\000\244\003\233\006\164\003\ -\046\006\246\254\173\001\225\003\245\006\113\006\108\003\000\000\ -\200\008\000\000\000\000\129\046\043\001\255\006\000\000\000\000\ -\065\001\130\001\164\004\000\000\129\046\210\002\175\006\164\004\ -\142\001\000\000\114\006\191\006\000\000\163\010\159\006\000\000\ -\000\000\000\000\164\004\132\071\185\006\000\000\094\004\000\000\ -\000\000\000\000\000\000\001\001\000\000\161\255\000\000\000\000\ -\000\000\169\002\000\000\082\000\231\255\089\006\087\075\165\075\ -\197\075\208\006\000\000\195\006\000\000\200\006\085\006\192\006\ -\132\255\008\007\164\004\000\000\173\001\241\003\194\000\135\006\ -\198\006\025\006\010\007\010\007\021\007\205\006\227\006\135\006\ -\000\000\000\000\182\067\096\068\132\071\157\077\000\000\190\004\ -\096\068\000\000\164\003\000\000\116\004\000\000\129\046\189\077\ -\096\068\096\068\164\004\002\007\215\002\000\000\041\008\096\068\ -\205\062\023\007\000\000\133\069\114\002\077\064\138\064\199\064\ -\096\068\000\000\129\046\132\071\000\000\000\000\000\000\086\255\ -\000\000\132\071\164\003\173\001\173\001\213\000\119\005\000\000\ -\000\000\000\000\042\007\000\000\000\000\129\046\000\000\164\004\ -\164\004\153\000\153\000\173\001\000\000\000\000\000\000\000\000\ -\132\071\000\000\084\001\025\007\229\006\065\001\000\000\000\000\ -\193\005\036\007\000\000\000\000\000\000\000\000\000\000\144\000\ -\220\005\000\000\132\003\000\000\000\000\000\000\000\000\025\007\ -\173\001\001\007\000\000\000\000\009\007\000\000\011\007\096\068\ -\096\068\096\068\189\077\000\000\014\007\000\000\016\007\000\000\ -\018\007\253\255\238\006\000\000\070\007\040\005\000\000\000\000\ -\164\004\189\004\210\002\046\006\077\005\083\007\000\000\000\000\ -\000\000\164\003\210\002\003\004\226\255\074\007\000\000\007\007\ -\164\003\030\007\000\000\000\000\038\002\000\000\000\000\008\000\ -\000\000\129\046\065\001\005\007\114\006\000\000\000\000\129\046\ -\000\000\094\004\000\000\000\000\164\003\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\096\068\096\068\096\068\000\000\ -\000\000\000\000\069\007\000\000\212\005\006\007\000\000\195\006\ -\163\010\180\255\173\001\000\000\000\007\000\000\000\000\096\068\ -\000\000\160\069\129\046\096\068\013\007\015\007\129\046\000\000\ -\096\068\017\007\000\000\000\000\029\007\000\000\096\068\132\003\ -\000\000\034\074\124\255\000\000\000\000\164\004\000\000\000\000\ -\000\000\096\068\096\068\135\006\166\001\000\000\135\006\096\068\ -\076\007\000\000\000\000\000\000\000\000\000\000\016\003\000\000\ -\179\006\000\000\018\002\000\000\156\004\018\002\000\000\019\007\ -\204\006\210\002\000\000\000\000\132\003\164\003\218\001\129\046\ -\096\068\164\004\173\001\164\004\173\001\000\000\204\006\198\255\ -\000\000\221\073\000\000\020\007\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\096\003\000\000\000\000\087\007\096\068\ -\096\068\028\076\060\076\138\076\096\068\096\068\096\068\198\255\ -\000\000\065\001\000\000\100\049\164\003\132\003\000\000\000\000\ -\201\005\217\002\007\255\198\003\000\000\000\000\164\003\020\007\ -\198\003\101\007\129\046\000\000\000\000\000\000\000\000\000\000\ -\164\004\114\006\246\255\170\076\248\076\024\077\168\006\103\007\ -\000\000\000\000\000\000\104\007\000\000\000\007\173\001\100\007\ -\000\000\164\004\000\000\000\000\000\000\164\004\000\000\160\069\ -\096\068\189\077\119\005\000\000\076\002\054\003\000\000\000\000\ -\000\000\000\000\000\000\099\007\129\046\028\007\000\000\096\068\ -\096\068\000\000\119\005\044\004\000\000\212\004\173\001\173\001\ -\179\003\000\000\021\003\000\000\000\000\245\001\000\000\122\015\ -\082\074\243\044\000\000\225\004\072\007\118\007\000\000\000\000\ -\024\001\245\002\000\000\150\255\091\003\245\002\168\006\189\077\ -\189\077\000\000\065\007\000\000\066\007\000\000\080\007\189\077\ -\189\077\189\077\000\000\000\000\186\013\052\007\131\007\164\004\ -\163\010\086\007\000\000\173\001\164\004\079\007\000\000\213\003\ -\210\002\119\005\200\005\200\005\106\002\000\000\000\000\153\004\ -\159\000\000\000\100\049\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\129\046\000\000\000\000\193\005\028\004\167\050\ -\000\000\000\000\096\068\000\000\000\000\000\000\038\001\000\000\ -\059\007\129\046\250\004\133\069\000\000\000\000\000\000\129\046\ -\000\000\000\000\043\007\020\007\212\005\045\007\195\006\212\005\ -\024\001\000\000\164\004\118\007\020\007\195\006\000\000\164\004\ -\129\046\000\000\245\001\212\002\067\002\000\000\000\000\000\000\ -\000\000\000\000\064\007\000\000\193\005\096\068\096\068\096\068\ -\107\001\015\004\153\000\163\010\094\007\088\007\146\007\000\000\ -\000\000\100\049\025\004\042\004\042\004\129\046\078\007\129\046\ -\226\255\245\001\024\001\069\002\000\000\000\000\173\001\000\000\ -\060\004\164\004\141\007\164\003\000\000\000\000\001\005\096\068\ -\000\000\164\004\212\005\212\005\241\069\212\005\212\005\199\005\ -\164\004\160\000\082\007\000\000\006\005\000\000\248\002\000\002\ -\164\004\000\000\000\000\000\000\000\000\000\000\189\077\189\077\ -\189\077\077\004\164\004\096\007\129\046\214\004\000\000\100\049\ -\163\010\000\000\000\000\000\000\000\000\000\000\000\000\024\001\ -\000\000\000\000\000\000\000\000\084\007\000\000\077\007\096\068\ -\000\000\160\007\161\007\030\046\000\000\163\007\166\007\096\068\ -\162\007\000\000\000\000\195\006\118\007\000\000\129\046\000\002\ -\164\004\164\004\000\000\000\000\046\006\100\049\097\002\000\000\ -\000\000\099\001\000\000\114\007\171\007\164\004\000\000\000\000\ -\167\050\167\050\135\006\164\004\164\007\195\001\129\046\129\046\ -\000\000\096\068\102\007\164\004\164\004\000\000\000\000\082\005\ -\000\000\000\000\164\004\164\004\164\004\164\004\173\001\000\000\ -\000\000\100\049\000\000\000\000\000\000\170\007\096\068\129\046\ -\164\004\164\004\000\000\000\000\000\000\168\006\129\046\168\006\ -\007\005\037\003\000\000\000\000\129\046\000\000\164\004\164\004\ -\173\001\193\005\092\007\111\007\212\005\145\005\195\006\186\007\ -\173\001\030\005\000\000\000\000\000\000\000\000\191\007\212\005\ -\212\005\129\046\000\000\096\068\167\050\194\007\196\007\164\004\ -\000\000\173\001\129\046\129\046\000\000\164\004\164\004" - -let yyrindex = "\000\000\ -\211\008\214\008\120\007\000\000\000\000\000\000\000\000\000\000\ -\168\073\000\000\000\000\011\068\000\000\000\000\115\002\202\005\ -\000\000\000\000\193\071\073\070\071\071\181\068\088\004\000\000\ -\168\073\000\000\000\000\000\000\000\000\000\000\000\000\220\071\ -\027\018\000\000\000\000\181\068\000\000\000\000\064\005\013\003\ -\183\002\000\000\000\000\000\000\055\000\000\000\000\000\181\068\ -\117\007\000\000\000\000\202\005\181\068\000\000\000\000\065\009\ -\055\000\213\022\000\000\010\044\000\000\222\056\000\000\000\000\ -\231\056\000\000\000\000\000\000\047\057\000\000\000\000\068\057\ -\000\000\112\057\000\000\000\000\000\000\000\000\000\000\026\025\ -\143\025\227\014\124\016\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\103\002\115\002\255\004\064\005\064\000\117\007\ -\000\000\000\000\000\000\000\000\000\004\000\000\000\000\158\040\ -\001\041\000\000\064\000\000\000\000\000\000\000\000\000\204\041\ -\000\000\047\042\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\121\007\000\000\120\007\000\000\000\000\000\000\000\000\ -\140\008\000\000\000\000\000\000\000\000\110\009\110\009\000\000\ -\234\038\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\161\045\000\000\000\000\000\000\ -\247\047\219\044\000\000\000\000\000\000\193\071\228\072\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\111\051\000\000\000\000\109\000\139\002\000\000\ -\000\000\000\000\014\003\000\000\219\051\000\000\000\000\000\000\ -\089\058\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\103\002\000\000\000\000\000\000\000\000\025\072\000\000\ -\000\000\000\000\160\003\180\001\000\000\092\255\000\000\000\000\ -\172\000\000\000\000\000\103\255\000\000\010\004\000\000\107\255\ -\170\000\000\000\229\005\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\126\007\232\057\ -\126\007\115\002\112\007\183\002\113\072\000\000\000\000\000\000\ -\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\060\086\060\088\004\ -\000\000\000\000\172\060\002\061\000\000\038\000\000\000\000\000\ -\000\000\000\000\000\000\126\007\000\000\086\004\000\000\197\001\ -\000\000\112\007\000\000\000\000\000\000\176\008\000\000\000\000\ -\000\000\000\000\055\000\003\017\220\071\000\000\222\056\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\220\015\000\000\000\000\ -\140\072\000\000\000\000\109\008\000\000\113\007\000\000\186\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\189\023\120\017\000\000\000\000\000\000\ -\003\026\119\026\000\000\000\000\134\005\000\000\000\000\000\000\ -\000\000\176\008\000\000\000\000\000\000\113\007\000\000\186\002\ -\000\000\055\010\000\000\000\000\000\000\000\000\000\000\000\000\ -\140\008\000\000\000\000\000\000\000\000\000\000\000\000\027\001\ -\000\000\216\007\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\240\000\000\000\193\007\000\000\197\007\198\007\000\000\ -\000\000\255\004\018\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\000\000\000\000\000\000\000\ -\139\255\000\000\173\000\165\255\170\000\000\000\229\005\000\000\ -\047\000\000\000\112\007\103\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\126\007\ -\089\058\000\000\193\049\236\026\000\000\000\000\000\000\000\000\ -\134\005\000\000\000\000\000\000\000\000\000\000\167\055\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\165\007\000\000\170\059\ -\112\057\222\006\000\000\000\000\096\027\000\000\000\000\000\000\ -\000\000\000\000\082\255\000\000\000\000\227\000\000\000\000\000\ -\000\000\145\004\000\000\221\000\000\000\000\000\140\007\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\112\007\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\003\ -\000\000\000\000\126\007\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\111\036\220\036\068\037\189\033\ -\082\039\172\037\049\034\165\034\026\035\142\035\003\031\212\027\ -\073\028\002\036\119\031\235\031\020\038\189\028\096\032\212\032\ -\072\033\000\000\000\000\049\029\000\000\000\000\222\003\000\000\ -\134\005\181\039\000\000\000\000\000\000\000\000\184\018\000\000\ -\000\000\000\000\050\024\166\024\000\000\000\000\000\000\073\023\ -\000\000\000\000\124\038\000\000\173\007\038\007\165\007\000\000\ -\000\000\050\012\047\008\001\041\000\000\000\000\000\000\000\000\ -\000\000\000\000\212\003\000\000\134\005\000\000\000\000\000\000\ -\000\000\240\011\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\061\052\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\062\045\000\000\000\000\000\000\000\000\006\046\000\000\000\000\ -\000\000\000\000\105\046\000\000\000\000\000\000\000\000\000\000\ -\153\255\000\000\000\000\251\000\221\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\244\001\000\000\ -\204\003\000\000\045\004\000\000\000\000\000\000\120\005\000\000\ -\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\007\000\000\000\000\000\000\ -\000\000\000\000\000\000\225\055\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\166\029\000\000\000\000\000\000\010\069\000\000\ -\004\005\000\000\000\000\000\000\000\000\000\000\042\006\000\000\ -\000\000\073\255\000\000\111\000\000\000\000\000\206\255\000\000\ -\232\255\000\000\000\000\000\000\000\000\000\000\143\007\149\007\ -\000\000\000\000\000\000\000\000\173\003\000\000\000\000\209\012\ -\035\005\000\000\172\005\000\000\192\005\114\000\135\000\148\000\ -\000\000\000\000\000\000\025\072\026\056\000\000\000\000\000\000\ -\000\000\000\000\112\057\000\000\000\000\000\000\015\005\112\057\ -\025\072\224\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\170\000\000\000\ -\229\005\000\000\088\004\000\000\000\000\000\000\209\012\000\000\ -\000\000\173\007\000\000\250\077\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\148\007\000\000\000\000\000\000\000\000\ -\044\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\001\041\000\000\000\000\173\007\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\002\000\000\000\000\087\000\000\000\155\001\ -\000\000\000\000\204\046\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\241\255\000\000\017\001\000\000\246\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\178\007\037\052\000\000\106\013\000\000\ -\000\000\130\011\225\055\000\000\112\057\000\000\000\000\236\000\ -\000\000\137\001\151\007\151\007\188\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\109\044\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\ -\000\000\000\000\208\007\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\112\057\070\056\000\000\106\006\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\097\059\ -\010\069\090\004\114\003\095\004\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\200\053\000\000\000\000\000\000\000\000\ -\112\057\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\072\054\ -\070\056\000\000\000\000\000\000\050\019\000\000\166\019\000\000\ -\000\000\000\000\024\040\000\000\027\020\000\000\143\020\000\000\ -\003\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\122\004\000\000\211\052\000\000\212\003\044\009\000\000\015\014\ -\000\000\000\000\161\057\001\041\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\027\001\000\000\000\000\000\000\ -\162\061\000\000\000\000\217\007\049\047\000\000\000\000\000\000\ -\000\000\157\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\095\003\ -\000\000\000\000\112\057\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\032\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\197\005\000\000\ -\068\003\000\000\131\005\000\000\000\000\161\005\000\000\000\000\ -\026\030\079\056\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\030\002\095\004\141\003\095\004\000\000\142\030\224\001\ -\000\000\204\007\000\000\161\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\148\007\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\211\039\000\000\000\000\000\000\161\000\ -\211\039\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\106\014\148\047\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\128\056\112\057\000\000\ -\000\000\198\001\000\000\000\000\000\000\207\001\000\000\000\000\ -\000\000\128\040\050\048\000\000\000\000\000\000\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\054\000\000\000\000\000\000\095\004\095\004\ -\195\007\000\000\178\007\000\000\000\000\000\000\000\000\000\000\ -\000\000\207\007\054\011\134\054\000\000\187\054\000\000\000\000\ -\017\053\070\056\000\000\000\000\000\000\070\056\000\000\227\040\ -\070\041\000\000\120\021\000\000\236\021\000\000\096\022\174\041\ -\017\042\116\042\000\000\000\000\000\000\000\000\086\005\073\001\ -\000\000\000\000\095\052\211\039\130\051\000\000\000\000\000\000\ -\075\053\080\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\070\056\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\199\007\195\007\000\000\201\007\178\007\000\000\ -\017\053\000\000\240\054\037\055\249\002\178\007\000\000\019\054\ -\000\000\000\000\000\000\046\055\112\057\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\070\056\000\000\000\000\000\000\ -\000\000\040\004\021\004\000\000\061\005\000\000\000\000\000\000\ -\000\000\000\000\000\000\108\048\170\048\000\000\200\074\000\000\ -\000\000\000\000\201\056\001\041\000\000\000\000\211\039\000\000\ -\000\000\252\254\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\107\005\000\000\000\000\000\000\000\000\000\000\000\000\ -\019\054\000\000\000\000\000\000\000\000\000\000\046\055\000\000\ -\176\055\000\000\000\000\000\000\000\000\000\000\220\042\063\043\ -\162\043\000\000\113\007\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\153\052\000\000\000\000\000\000\000\000\201\056\ -\000\000\000\000\000\000\000\000\175\007\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\178\007\118\055\000\000\000\000\000\000\ -\176\055\176\055\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\051\005\000\000\000\000\229\048\013\255\000\000\000\000\ -\000\000\000\000\000\000\176\003\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\031\049\176\055\000\000\000\000\000\000\ -\000\000\000\000\097\059\246\006\030\002\141\003\022\007\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\141\006\170\006\000\000\000\000\000\000\000\000\000\000\000\000\ -\210\007\000\000\000\000\000\000\000\000\000\000\243\005\147\053\ -\022\007\022\007\211\007\214\007\000\000\215\007\178\007\000\000\ -\022\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\228\255\ -\000\000\022\007\000\000\000\000\000\000\255\001\194\004" - -let yygindex = "\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\000\ -\184\255\000\000\075\000\179\002\184\003\137\008\048\000\000\000\ -\182\255\017\000\185\004\077\253\000\000\159\254\176\005\071\255\ -\071\009\096\012\018\254\152\005\251\255\099\014\085\252\012\000\ -\178\000\016\000\018\000\019\000\000\000\000\000\000\000\000\000\ -\035\000\037\000\041\000\000\000\255\255\001\000\225\006\150\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\250\254\005\252\000\000\000\000\ -\000\000\002\000\114\253\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\253\002\053\000\057\251\055\255\027\253\185\251\ -\006\253\126\252\016\251\104\251\163\251\214\251\104\003\000\000\ -\000\000\000\000\000\000\000\000\000\000\038\254\000\000\000\000\ -\000\000\000\000\000\000\027\000\064\255\049\006\099\005\025\005\ -\000\000\000\000\062\255\051\001\000\000\000\000\169\255\117\252\ -\057\253\186\006\229\008\101\011\000\000\000\000\000\000\113\255\ -\158\007\183\011\224\006\013\000\065\255\133\003\152\007\000\000\ -\187\007\211\006\018\011\130\253\000\000\106\255\000\000\000\000\ -\000\000\215\003\126\005\133\255\118\001\000\000\000\000\000\000\ -\000\000\206\000\000\000\085\007\142\255\091\007\133\006\152\008\ -\000\000\000\000\097\004\000\000\000\000\203\007\195\253\053\005\ -\144\251\047\251\215\251\242\252\000\000\221\252\000\000\139\004\ -\000\000\000\000\062\251\068\255\012\253\107\006\147\007\000\000\ -\000\000\014\004\000\000\000\000\030\004\004\253\000\000\236\003\ -\151\004\000\000\128\253\138\254\146\255\000\000\114\005\102\254\ -\134\255\171\254\131\255\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\049\255\000\000" - -let yytablesize = 20395 -let yytable = "\147\000\ -\105\000\172\000\106\000\249\001\010\002\248\001\239\001\155\001\ -\128\002\153\001\154\001\189\000\164\001\031\002\213\002\001\002\ -\193\001\099\000\252\002\100\000\101\000\146\000\129\001\055\000\ -\116\003\021\002\114\003\022\002\173\001\124\002\203\003\172\002\ -\195\003\072\003\133\001\242\003\102\000\097\004\103\000\187\001\ -\178\003\219\000\104\000\109\000\144\004\106\004\218\004\159\001\ -\027\004\198\004\124\000\130\000\212\001\147\001\051\000\149\001\ -\100\005\017\001\179\001\096\005\022\005\052\001\070\005\088\000\ -\169\002\028\002\183\003\060\001\070\001\100\003\154\003\151\002\ -\114\001\152\002\143\005\103\005\248\002\121\000\145\004\212\000\ -\036\004\107\001\210\000\045\004\183\000\143\004\248\002\248\002\ -\163\000\240\001\248\002\120\001\020\005\105\000\046\005\106\000\ -\217\001\147\002\046\004\114\001\045\002\159\004\111\001\248\002\ -\042\002\105\000\112\001\106\000\149\001\211\000\099\000\252\001\ -\100\000\101\000\037\004\010\003\112\001\031\004\120\001\138\001\ -\119\002\012\002\099\000\240\004\100\000\101\000\117\005\147\000\ -\057\005\102\000\147\000\103\000\147\000\147\000\074\003\104\000\ -\109\000\178\002\190\001\111\001\215\002\102\000\175\001\103\000\ -\030\000\186\005\027\001\104\000\109\000\187\000\120\002\159\005\ -\188\001\211\004\043\002\172\000\172\000\107\005\172\000\121\002\ -\071\004\103\005\183\003\114\001\181\001\190\001\114\001\114\001\ -\172\000\172\000\102\003\124\000\107\001\146\001\181\001\130\000\ -\107\001\130\000\062\000\234\001\062\000\062\000\120\001\183\000\ -\122\002\093\005\120\001\010\004\163\001\183\000\090\003\172\000\ -\172\000\118\002\123\002\004\002\090\003\111\001\112\001\227\005\ -\144\001\112\001\213\001\126\005\235\001\110\001\214\001\011\003\ -\213\005\224\001\225\001\032\004\013\002\215\001\236\001\050\004\ -\216\001\241\004\004\004\216\002\103\002\046\005\062\000\136\003\ -\014\004\047\001\183\000\168\000\179\002\190\001\014\004\113\001\ -\091\003\190\001\071\001\052\004\127\003\249\005\091\003\096\003\ -\189\001\113\001\110\001\188\001\220\004\062\005\168\000\188\001\ -\044\002\244\004\121\005\174\002\246\004\168\000\072\004\237\001\ -\181\001\128\002\238\001\181\001\113\004\182\002\106\001\183\002\ -\183\000\252\002\183\000\189\001\051\003\010\000\184\004\179\003\ -\201\002\020\006\103\005\168\000\156\005\109\002\087\003\183\001\ -\121\005\052\003\153\001\184\000\012\004\162\005\180\005\168\000\ -\067\002\153\001\098\003\153\001\046\005\096\002\168\000\168\000\ -\128\002\168\000\164\001\164\001\110\001\071\001\112\002\062\000\ -\226\002\071\001\252\002\071\001\128\003\249\001\051\000\180\003\ -\005\004\165\002\158\002\137\003\163\005\190\000\015\004\088\000\ -\109\003\079\005\081\005\113\001\076\004\140\002\113\001\142\002\ -\125\004\143\002\171\002\189\001\205\000\229\005\060\002\189\001\ -\051\000\012\004\168\000\063\005\186\003\207\002\050\002\041\006\ -\185\004\088\000\046\005\228\005\059\002\156\001\059\001\252\003\ -\021\003\106\001\187\003\205\004\213\001\106\001\110\002\050\002\ -\214\001\115\005\113\004\058\003\149\001\033\003\116\001\215\001\ -\149\001\106\002\216\001\109\002\149\001\024\006\149\001\026\006\ -\013\004\125\002\149\001\149\001\183\000\213\001\149\001\105\003\ -\046\005\214\001\116\001\096\002\121\001\122\001\104\002\149\001\ -\215\001\116\001\027\003\216\001\112\002\191\005\224\003\168\004\ -\147\000\005\005\051\000\102\002\027\004\250\002\183\000\147\000\ -\194\000\147\000\225\004\088\000\187\001\225\003\226\003\057\001\ -\147\000\147\000\183\000\147\000\046\005\111\002\138\005\006\005\ -\169\002\184\002\243\005\103\001\183\001\075\004\149\001\147\000\ -\128\002\158\001\188\003\147\000\050\002\149\001\211\005\172\000\ -\172\000\207\004\253\003\183\000\234\001\234\001\169\002\130\000\ -\062\000\130\000\062\000\130\000\110\002\222\003\027\003\149\001\ -\149\001\116\001\149\001\149\001\116\001\116\001\014\003\106\002\ -\172\000\172\000\172\000\106\003\212\005\235\001\235\001\169\002\ -\172\000\094\004\163\001\163\001\185\002\149\001\063\004\236\001\ -\236\001\169\002\105\001\128\002\104\002\062\000\185\002\194\004\ -\199\005\128\002\193\003\169\004\228\001\172\000\172\000\149\004\ -\252\002\102\002\172\000\126\001\071\001\182\001\172\000\187\001\ -\035\004\004\002\184\001\187\001\005\002\079\002\043\004\182\001\ -\246\003\073\001\147\000\147\000\065\001\184\002\103\001\183\001\ -\237\001\237\001\169\002\238\001\238\001\169\002\069\004\105\003\ -\184\002\147\000\172\000\142\002\247\003\105\000\183\000\106\000\ -\002\003\004\003\153\001\172\000\104\005\090\003\229\001\115\001\ -\076\005\004\002\248\002\065\002\193\001\217\002\099\000\015\003\ -\100\000\101\000\095\004\110\003\172\000\249\001\122\003\142\002\ -\037\003\105\003\105\003\123\003\124\003\018\003\148\005\230\001\ -\185\002\102\000\115\001\103\000\142\005\105\001\248\002\104\000\ -\109\000\071\001\104\003\071\001\128\002\071\001\212\000\091\003\ -\248\002\073\001\060\005\190\000\063\003\065\003\142\002\202\003\ -\142\002\182\001\038\002\160\002\182\001\184\001\249\001\172\000\ -\204\003\115\004\191\003\248\002\142\002\157\003\070\004\165\002\ -\059\001\128\002\248\002\111\003\128\002\160\004\219\002\060\003\ -\006\006\113\001\114\001\184\002\161\005\065\002\223\003\065\002\ -\171\005\175\003\125\002\212\000\070\003\251\005\248\002\169\005\ -\248\002\146\004\115\001\007\002\160\002\115\001\115\001\000\004\ -\187\000\001\004\211\000\149\005\248\002\112\003\054\004\040\002\ -\013\000\248\002\150\001\183\000\248\002\184\001\248\002\194\005\ -\147\000\062\000\252\005\147\000\183\000\008\002\169\005\058\004\ -\009\002\125\002\147\000\018\000\147\000\147\000\031\000\161\002\ -\107\002\108\002\205\005\198\000\112\002\184\000\035\000\116\001\ -\253\005\216\003\147\000\129\003\066\002\188\000\024\000\172\000\ -\120\003\161\004\217\005\128\002\147\000\122\000\129\000\248\002\ -\156\000\240\003\128\002\245\004\130\000\252\002\172\000\172\000\ -\131\003\156\001\245\003\165\000\125\000\068\004\178\005\116\003\ -\196\004\114\003\142\003\217\005\218\003\176\001\128\002\201\004\ -\166\000\254\005\185\001\147\000\050\001\147\000\195\000\125\000\ -\008\006\241\003\147\000\059\004\250\002\183\000\125\000\172\000\ -\199\000\046\000\133\002\154\004\156\004\041\002\198\000\147\000\ -\172\000\196\000\172\000\051\004\062\000\153\001\028\003\066\001\ -\166\003\048\004\097\001\126\001\004\002\125\000\066\002\126\001\ -\066\002\217\003\050\000\126\001\252\002\126\001\167\000\059\004\ -\125\000\126\001\065\004\004\006\005\006\188\005\061\004\190\005\ -\125\000\249\001\125\000\204\003\252\002\123\001\126\001\189\003\ -\034\004\167\000\234\001\172\000\133\002\133\002\185\002\098\001\ -\167\000\195\000\213\001\183\000\059\004\017\000\214\001\128\002\ -\215\001\125\002\004\002\199\000\186\002\215\001\133\002\203\004\ -\216\001\011\004\028\003\235\001\196\000\236\003\167\000\237\003\ -\145\001\072\001\147\000\125\000\252\004\236\001\160\003\253\004\ -\100\001\221\001\167\000\120\001\126\001\229\001\071\001\188\002\ -\161\003\167\000\167\000\252\002\167\000\048\005\128\002\050\006\ -\249\003\172\004\107\005\078\005\138\005\221\001\126\001\126\001\ -\128\002\126\001\126\001\183\000\125\002\217\002\230\001\105\000\ -\183\000\106\000\125\002\049\005\248\002\248\002\237\001\041\004\ -\071\005\238\001\218\002\147\000\126\001\056\005\147\000\183\000\ -\099\000\047\000\100\000\101\000\050\000\167\000\119\002\147\000\ -\205\000\132\004\057\004\232\001\187\002\248\002\128\002\128\002\ -\147\000\134\005\253\001\102\000\000\003\103\000\172\000\163\000\ -\240\001\104\000\109\000\006\003\135\005\066\001\030\000\066\001\ -\113\001\114\001\150\001\187\000\120\002\248\002\150\001\099\002\ -\250\002\100\002\150\001\151\001\150\001\121\002\219\002\248\002\ -\150\001\150\001\191\001\101\002\150\001\250\002\128\002\249\001\ -\071\005\160\000\183\000\196\002\162\000\150\001\250\002\232\003\ -\073\004\250\002\062\000\196\003\213\001\197\002\122\002\172\000\ -\214\001\163\000\240\001\250\002\186\001\125\002\235\004\215\001\ -\123\002\147\000\216\001\221\003\132\005\133\005\250\005\228\003\ -\143\000\147\000\182\001\172\000\048\005\233\003\172\000\050\000\ -\172\000\172\000\172\000\124\001\150\001\147\000\172\000\118\004\ -\031\000\210\004\125\002\150\001\172\000\125\002\250\002\002\003\ -\035\000\067\002\234\003\251\004\250\002\219\004\009\004\250\002\ -\147\000\217\002\107\001\141\004\254\001\150\001\150\001\046\002\ -\150\001\150\001\183\000\172\000\254\002\183\001\168\005\054\002\ -\248\002\175\002\058\002\084\001\085\001\229\001\151\004\165\004\ -\180\002\248\002\120\001\150\001\030\000\004\002\123\004\093\000\ -\169\002\106\001\255\001\235\003\050\005\217\002\074\004\105\005\ -\102\001\180\002\079\003\048\005\250\002\123\001\230\001\169\002\ -\091\002\123\001\216\005\183\000\094\002\123\001\169\002\123\001\ -\191\001\090\001\090\003\123\001\123\001\128\002\215\001\250\002\ -\132\001\216\001\219\002\180\002\125\002\249\001\250\002\000\002\ -\123\001\248\002\095\001\125\002\176\001\169\002\050\000\169\002\ -\247\002\141\001\053\005\039\003\147\000\080\005\254\001\066\001\ -\148\001\169\002\147\000\071\005\208\004\250\002\016\002\125\002\ -\040\003\048\005\012\003\040\006\091\003\050\000\219\002\134\001\ -\250\002\097\005\104\001\134\001\013\003\250\002\030\000\123\001\ -\250\002\183\000\250\002\147\000\255\001\134\001\123\001\108\005\ -\119\002\191\001\114\005\151\001\172\000\147\000\134\001\094\005\ -\211\002\147\000\169\002\017\002\211\000\169\002\041\003\048\005\ -\123\001\123\001\004\002\123\001\123\001\021\005\131\001\030\006\ -\030\000\190\003\094\003\226\004\179\005\187\000\120\002\230\004\ -\167\002\000\002\212\002\250\002\139\005\119\002\123\001\121\002\ -\050\000\096\003\247\002\134\001\095\005\134\001\050\000\133\003\ -\143\000\216\004\155\001\048\005\153\001\154\001\097\003\004\002\ -\125\002\249\001\147\000\204\003\031\006\030\000\125\003\071\005\ -\122\002\071\005\187\000\120\002\147\000\183\001\171\002\140\002\ -\250\002\183\000\123\002\136\001\121\002\168\002\254\001\155\001\ -\254\004\122\005\154\001\163\000\240\001\140\002\167\005\016\002\ -\140\002\180\002\012\005\180\002\098\003\091\002\043\005\125\002\ -\004\002\243\001\140\002\036\005\180\002\122\002\030\000\170\000\ -\254\003\125\002\016\002\067\002\255\001\147\000\119\002\123\002\ -\208\001\016\002\016\002\124\001\248\002\192\005\091\002\124\001\ -\151\001\069\005\045\003\124\001\236\001\124\001\209\005\248\002\ -\067\002\124\001\249\001\209\001\204\003\124\001\030\000\016\002\ -\016\002\180\002\172\000\187\000\120\002\255\003\124\001\125\002\ -\125\002\000\002\131\005\016\002\046\003\121\002\236\001\147\000\ -\050\000\121\003\016\002\016\002\069\003\016\002\228\002\229\002\ -\130\003\139\001\140\002\061\002\248\002\143\000\140\002\093\000\ -\091\002\091\002\147\000\147\000\147\000\083\005\122\002\183\000\ -\066\001\184\002\091\005\093\004\093\000\124\001\090\003\125\002\ -\123\002\069\005\091\002\212\001\124\001\183\001\077\003\078\003\ -\254\002\093\000\099\005\093\000\093\000\212\001\016\002\147\000\ -\244\003\140\001\092\005\147\000\230\002\067\002\124\001\124\001\ -\093\000\124\001\124\001\063\002\176\001\221\001\184\002\054\002\ -\176\001\145\005\183\000\187\000\176\001\043\005\176\001\221\001\ -\091\003\063\002\176\001\093\000\124\001\147\000\176\001\127\003\ -\212\001\221\001\147\000\093\000\210\001\066\001\213\001\176\001\ -\141\002\093\000\214\001\221\001\147\000\143\000\172\000\093\000\ -\156\001\215\001\147\000\169\001\216\001\151\002\180\002\211\001\ -\187\005\196\001\196\001\093\000\183\001\225\002\246\002\093\000\ -\040\004\213\001\151\005\147\000\174\001\214\001\220\001\221\001\ -\154\005\063\002\183\001\093\000\215\001\183\000\093\000\216\001\ -\063\002\246\002\181\001\116\004\090\003\176\001\147\000\175\001\ -\246\002\165\005\250\002\196\005\043\005\242\001\148\003\149\003\ -\147\000\180\002\147\000\063\002\183\000\168\002\188\001\176\001\ -\176\001\087\005\176\001\176\001\068\005\117\004\125\002\246\002\ -\185\002\157\005\250\002\167\003\160\005\250\002\008\003\172\000\ -\250\002\180\002\246\002\180\002\248\002\176\001\091\003\183\000\ -\185\000\177\003\246\002\185\000\246\002\219\001\185\000\185\000\ -\168\002\222\001\185\000\185\000\185\000\185\000\185\000\147\000\ -\185\000\180\002\043\005\147\000\248\002\185\002\249\004\185\000\ -\251\002\143\000\248\002\185\000\191\004\250\002\185\000\185\000\ -\175\002\166\000\250\002\061\003\250\002\223\005\147\000\185\000\ -\185\000\180\002\134\002\185\000\185\000\246\002\223\001\202\005\ -\203\005\147\000\206\005\207\005\166\000\224\005\192\004\183\000\ -\043\005\150\003\183\000\166\000\236\005\183\000\135\002\248\002\ -\255\005\090\003\000\006\147\000\147\000\183\000\248\002\244\005\ -\184\000\147\000\147\000\250\003\163\000\240\001\088\005\225\005\ -\006\002\166\000\185\000\185\000\185\000\185\000\137\005\185\000\ -\006\004\236\005\236\005\101\005\043\005\166\000\041\003\009\006\ -\010\006\054\001\147\000\051\000\166\000\166\000\112\004\166\000\ -\069\005\147\000\069\005\091\003\205\003\183\000\122\000\147\000\ -\206\003\136\002\138\003\014\002\152\005\183\000\137\002\207\003\ -\023\006\050\000\208\003\200\005\139\003\051\000\184\000\254\004\ -\215\005\250\002\183\000\209\003\147\000\034\006\144\001\147\000\ -\122\000\180\001\144\001\088\000\018\001\147\000\147\000\015\002\ -\166\000\144\001\155\000\092\003\144\001\185\000\185\000\194\000\ -\044\006\250\002\048\006\183\000\157\000\236\005\250\002\250\002\ -\018\002\218\001\183\000\054\006\055\006\088\000\032\006\183\000\ -\250\002\213\001\183\000\048\002\155\000\214\001\020\002\157\000\ -\227\001\039\006\183\000\230\003\215\001\151\002\157\000\216\001\ -\151\002\185\000\019\001\049\002\046\006\047\006\027\006\183\000\ -\020\001\250\002\151\002\184\000\144\001\108\004\109\004\254\002\ -\041\003\069\000\170\000\250\002\157\000\232\002\233\002\151\002\ -\189\004\151\002\151\002\119\004\120\004\173\002\028\006\175\001\ -\157\000\014\006\126\004\175\001\129\002\170\000\151\002\175\001\ -\157\000\175\001\157\000\140\004\170\000\175\001\179\001\183\000\ -\008\002\175\001\179\001\009\002\130\002\050\003\191\002\193\002\ -\195\002\151\002\175\001\051\003\179\001\142\002\199\002\151\002\ -\151\002\151\002\170\000\170\000\250\002\179\001\142\002\151\002\ -\052\003\232\002\235\002\231\003\178\001\151\002\170\000\027\002\ -\178\001\185\000\185\000\157\000\250\002\170\000\170\000\145\001\ -\170\000\151\002\178\001\145\001\242\002\151\002\142\002\250\002\ -\183\000\142\002\145\001\178\001\173\002\145\001\034\002\185\000\ -\175\001\151\002\142\002\133\001\151\002\173\002\145\001\133\001\ -\136\001\250\002\183\000\066\001\136\001\185\000\133\001\198\003\ -\016\003\185\000\175\001\175\001\008\002\175\001\175\001\009\002\ -\051\005\170\000\133\001\170\004\185\000\029\000\254\002\136\001\ -\032\002\208\005\229\003\052\005\184\002\171\004\050\002\239\003\ -\175\001\186\000\044\003\055\002\193\000\145\001\184\002\195\000\ -\196\000\097\001\017\002\197\000\198\000\199\000\200\000\201\000\ -\227\001\202\000\035\002\227\001\036\002\227\001\007\004\227\001\ -\116\002\133\001\183\000\066\001\053\001\017\002\037\002\055\001\ -\056\001\250\002\250\002\109\002\017\002\017\002\234\002\236\002\ -\061\001\062\001\224\004\211\000\063\001\064\001\227\004\156\002\ -\157\002\149\002\047\004\231\004\213\001\227\001\150\002\227\001\ -\214\001\153\002\017\002\017\002\155\002\236\001\099\004\215\001\ -\162\002\141\002\216\001\076\001\242\004\243\004\017\002\227\001\ -\154\002\163\002\247\004\164\002\143\000\017\002\017\002\141\002\ -\017\002\176\002\141\002\125\001\126\001\127\001\128\001\091\002\ -\130\001\185\000\180\001\099\002\141\002\204\002\170\002\082\001\ -\083\001\084\001\085\001\000\005\175\002\224\002\191\001\205\002\ -\180\002\214\002\181\002\104\002\208\002\105\002\209\002\245\002\ -\091\002\254\002\183\000\218\001\092\004\005\003\183\000\106\002\ -\210\002\017\002\185\000\087\001\088\001\017\003\218\001\019\003\ -\022\003\069\000\030\003\032\003\069\000\135\003\031\003\090\001\ -\091\001\092\001\093\001\218\001\218\001\016\004\069\000\017\004\ -\227\001\034\003\227\001\050\000\196\001\146\003\189\001\190\001\ -\095\001\018\004\035\003\069\000\141\002\069\000\069\000\036\003\ -\141\002\218\001\091\002\091\002\134\000\077\004\038\003\078\004\ -\056\003\069\000\069\000\147\004\148\004\227\001\085\001\227\001\ -\253\002\079\004\050\000\077\005\091\002\170\003\057\003\134\000\ -\073\003\049\003\233\001\158\004\080\003\069\000\134\000\084\003\ -\069\000\135\000\085\005\086\005\069\000\069\000\095\003\103\003\ -\166\004\088\003\107\003\069\000\101\003\117\003\185\000\125\000\ -\126\003\069\000\185\001\132\003\135\000\134\000\140\003\147\003\ -\174\004\215\001\155\003\135\000\038\002\069\000\168\003\232\002\ -\134\000\069\000\069\000\062\002\063\002\064\002\065\002\134\000\ -\134\000\041\003\134\000\181\003\067\002\069\000\163\000\066\002\ -\069\000\194\003\135\000\211\003\212\003\029\000\067\005\213\003\ -\029\000\214\003\030\000\197\004\215\003\135\000\038\005\068\005\ -\008\004\219\003\029\000\029\000\135\000\135\000\029\000\135\000\ -\251\003\002\004\029\002\030\002\029\004\040\005\042\004\029\000\ -\029\000\029\000\029\000\134\000\033\004\147\005\062\002\063\002\ -\064\002\065\002\049\004\067\002\010\000\029\000\029\000\064\004\ -\039\002\255\002\066\002\168\002\062\004\084\004\227\001\083\004\ -\089\004\227\001\221\004\093\003\143\000\246\002\047\002\067\004\ -\135\000\029\000\053\002\215\000\029\000\090\004\029\000\029\000\ -\029\000\029\000\103\004\098\004\100\004\236\001\029\000\029\000\ -\246\002\122\004\104\004\105\004\248\002\029\000\089\002\246\002\ -\248\002\128\004\236\001\162\004\248\002\248\002\067\002\150\004\ -\167\004\029\000\164\004\029\000\066\004\029\000\029\000\236\001\ -\175\004\236\001\236\001\248\002\218\001\246\002\176\004\186\004\ -\177\004\029\000\201\005\181\004\029\000\182\004\236\001\183\004\ -\029\000\246\002\002\005\188\004\004\005\195\004\218\001\199\004\ -\218\001\246\002\218\001\246\002\200\004\202\004\218\001\215\004\ -\217\004\236\001\248\002\209\004\222\004\233\004\248\004\236\001\ -\236\001\236\001\228\004\019\005\229\004\242\002\232\004\236\001\ -\250\004\023\005\059\005\227\001\072\005\236\001\066\003\075\005\ -\082\005\084\005\232\005\055\005\102\005\006\005\118\005\119\005\ -\058\005\236\001\241\005\123\005\246\002\236\001\135\004\137\004\ -\139\004\218\001\159\002\246\002\142\004\120\005\227\001\253\002\ -\124\005\236\001\242\002\014\000\236\001\127\005\074\005\130\005\ -\150\005\180\001\155\005\180\001\158\005\173\005\181\005\185\005\ -\184\005\198\005\015\000\016\000\011\006\189\005\180\001\218\001\ -\222\005\242\002\231\005\184\002\214\005\233\005\234\005\023\000\ -\239\005\210\003\230\005\240\005\250\002\250\002\089\005\090\005\ -\253\002\022\006\002\006\250\002\242\005\105\005\007\006\021\006\ -\012\006\250\002\031\000\218\001\014\000\069\001\038\006\042\006\ -\250\002\106\005\035\000\037\006\045\006\116\005\250\002\051\006\ -\039\000\052\006\051\000\015\000\016\000\088\000\041\000\008\000\ -\246\002\051\000\185\000\076\001\250\002\248\002\049\006\053\002\ -\023\000\250\002\250\002\128\005\074\002\248\002\045\000\088\000\ -\071\002\073\002\001\003\174\000\120\000\221\001\093\003\191\000\ -\002\003\171\002\049\000\031\000\193\000\052\000\069\001\248\002\ -\083\001\084\001\085\001\035\000\076\002\144\005\191\000\023\003\ -\169\002\039\000\169\002\170\002\142\001\030\004\170\002\041\000\ -\172\002\245\001\227\001\025\006\114\002\093\003\102\004\180\001\ -\191\000\175\002\176\002\087\001\088\001\177\002\173\002\126\000\ -\118\000\220\005\180\001\174\003\076\003\059\003\218\001\090\001\ -\091\001\092\001\093\001\049\000\170\005\180\001\052\000\139\002\ -\001\003\218\001\153\005\082\000\174\005\113\002\089\002\071\003\ -\095\001\089\002\110\004\200\002\191\000\198\002\191\000\191\000\ -\134\003\199\001\227\001\089\002\173\004\180\001\073\005\089\002\ -\246\002\218\001\035\005\193\005\146\002\164\003\195\005\166\002\ -\089\002\089\002\089\002\089\002\131\002\171\000\001\000\002\000\ -\003\000\004\000\005\000\006\000\007\000\146\005\141\005\089\002\ -\172\005\054\005\227\001\000\000\000\000\000\000\000\000\133\000\ -\204\000\134\000\135\000\030\000\000\000\136\000\000\000\000\000\ -\137\000\138\000\089\002\000\000\000\000\089\002\000\000\146\002\ -\089\002\089\002\089\002\000\000\000\000\093\003\253\002\089\002\ -\089\002\139\000\000\000\000\000\000\000\000\000\089\002\227\001\ -\227\001\140\000\113\003\000\000\000\000\174\000\174\000\000\000\ -\174\000\142\000\089\002\000\000\089\002\000\000\089\002\089\002\ -\180\001\000\000\174\000\174\000\124\004\143\000\144\000\000\000\ -\246\002\000\000\089\002\160\001\000\000\089\002\191\000\000\000\ -\000\000\089\002\000\000\000\000\000\000\000\000\000\000\246\002\ -\246\002\174\000\250\001\000\000\248\002\248\002\191\000\000\000\ -\000\000\000\000\000\000\248\002\246\002\000\000\019\006\000\000\ -\227\001\000\000\093\003\133\000\000\000\134\000\135\000\030\000\ -\248\002\136\000\093\003\000\000\162\001\138\000\248\002\246\002\ -\000\000\000\000\246\002\000\000\227\001\010\000\000\000\246\002\ -\035\006\036\006\000\000\000\000\177\001\246\002\000\000\000\000\ -\043\006\218\001\248\002\246\002\000\000\000\000\141\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\142\000\192\001\171\000\ -\171\000\053\006\171\000\246\002\246\002\000\000\000\000\165\002\ -\165\002\143\000\144\000\000\000\171\000\171\000\165\002\246\002\ -\000\000\000\000\246\002\000\000\000\000\191\000\133\000\000\000\ -\134\000\135\000\030\000\165\002\136\000\000\000\000\000\151\001\ -\138\000\165\002\093\003\171\000\171\000\180\001\000\000\002\002\ -\000\000\000\000\191\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\165\002\165\002\218\001\000\000\ -\218\001\141\000\218\001\003\004\180\001\218\001\000\000\000\000\ -\142\000\093\003\000\000\082\000\000\000\000\000\180\001\014\000\ -\000\000\227\001\000\000\227\001\143\000\144\000\155\002\000\000\ -\082\000\000\000\000\000\000\000\082\000\000\000\015\000\016\000\ -\246\002\000\000\000\000\253\002\000\000\082\000\082\000\082\000\ -\082\000\000\000\000\000\023\000\000\000\246\002\000\000\000\000\ -\000\000\000\000\191\000\191\000\082\000\000\000\191\000\000\000\ -\000\000\191\000\246\002\093\003\246\002\246\002\031\000\000\000\ -\093\003\069\001\000\000\000\000\000\000\000\000\035\000\082\000\ -\227\001\246\002\082\000\000\000\039\000\082\000\082\000\082\000\ -\000\000\000\000\041\000\182\002\082\000\082\000\000\000\000\000\ -\000\000\180\001\000\000\082\000\246\002\180\001\000\000\246\002\ -\000\000\000\000\253\002\000\000\246\002\000\000\000\000\082\000\ -\000\000\082\000\246\002\082\000\082\000\000\000\049\000\000\000\ -\246\002\052\000\253\002\093\003\000\000\180\001\000\000\082\000\ -\000\000\000\000\082\000\000\000\246\002\000\000\082\000\000\000\ -\246\002\174\000\250\001\180\001\182\002\000\000\182\002\182\002\ -\182\002\000\000\182\002\000\000\246\002\182\002\182\002\246\002\ -\000\000\000\000\102\002\000\000\000\000\000\000\000\000\000\000\ -\001\003\000\000\174\000\174\000\174\000\000\000\000\000\227\001\ -\000\000\000\000\174\000\000\000\129\005\000\000\000\000\182\002\ -\093\003\253\002\000\000\000\000\000\000\000\000\182\002\093\003\ -\138\002\000\000\000\000\000\000\000\000\000\000\000\000\250\001\ -\174\000\000\000\182\002\182\002\250\001\129\005\000\000\000\000\ -\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\180\001\000\000\000\000\000\000\000\000\133\000\ -\000\000\134\000\135\000\030\000\000\000\136\000\000\000\000\000\ -\137\000\138\000\180\001\000\000\174\000\000\000\000\000\227\001\ -\177\001\000\000\000\000\171\000\171\000\174\000\000\000\000\000\ -\000\000\139\000\000\000\000\000\129\005\000\000\000\000\000\000\ -\000\000\140\000\141\000\000\000\000\000\000\000\174\000\000\000\ -\177\000\142\000\000\000\000\000\171\000\171\000\171\000\000\000\ -\000\000\000\000\191\000\000\000\171\000\143\000\144\000\000\000\ -\000\000\227\001\000\000\206\002\000\000\000\000\180\001\000\000\ -\000\000\180\001\000\000\000\000\000\000\125\002\000\000\000\000\ -\227\001\171\000\171\000\000\000\180\001\000\000\171\000\000\000\ -\227\001\174\000\171\000\155\002\000\000\002\002\000\000\000\000\ -\000\000\000\000\227\001\000\000\000\000\192\001\000\000\000\000\ -\000\000\000\000\155\002\155\002\192\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\171\000\155\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\171\000\ -\000\000\000\000\000\000\175\000\000\000\002\002\000\000\192\000\ -\227\001\227\001\155\002\000\000\000\000\155\002\180\001\000\000\ -\171\000\000\000\155\002\048\003\000\000\227\001\192\000\000\000\ -\155\002\133\002\000\000\180\001\204\000\000\000\155\002\000\000\ -\000\000\000\000\000\000\180\001\227\001\000\000\000\000\000\000\ -\192\000\000\000\227\001\227\001\227\001\227\001\155\002\155\002\ -\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\180\001\180\001\155\002\171\000\000\000\155\002\000\000\000\000\ -\174\000\174\000\000\000\000\000\000\000\000\000\180\001\129\005\ -\000\000\129\005\177\000\177\000\192\000\177\000\192\000\192\000\ -\000\000\180\001\000\000\000\000\000\000\176\000\163\003\177\000\ -\177\000\000\000\000\000\000\000\160\001\000\000\000\000\180\001\ -\000\000\174\000\000\000\000\000\000\000\180\001\180\001\000\000\ -\000\000\161\001\174\000\000\000\250\001\241\001\177\000\177\000\ -\000\000\133\000\000\000\134\000\135\000\030\000\000\000\136\000\ -\000\000\000\000\151\001\138\000\133\000\000\000\134\000\135\000\ -\030\000\152\001\136\000\000\000\000\000\162\001\138\000\159\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\192\001\171\000\141\000\250\001\000\000\000\000\ -\000\000\000\000\000\000\142\000\000\000\175\000\175\000\141\000\ -\175\000\000\000\171\000\171\000\000\000\000\000\142\000\143\000\ -\144\000\000\000\175\000\175\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\143\000\144\000\000\000\000\000\192\000\000\000\ -\162\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\175\000\251\001\171\000\000\000\000\000\192\000\000\000\ -\000\000\000\000\003\003\000\000\171\000\125\002\171\000\000\000\ -\125\002\000\000\000\000\000\000\000\000\125\002\000\000\000\000\ -\002\002\000\000\125\002\125\002\000\000\000\000\000\000\000\000\ -\125\002\000\000\000\000\146\002\000\000\000\000\000\000\125\002\ -\057\002\125\002\125\002\000\000\000\000\000\000\000\000\176\000\ -\176\000\068\002\176\000\000\000\000\000\197\003\125\002\171\000\ -\000\000\000\000\000\000\000\000\176\000\176\000\000\000\000\000\ -\174\000\133\000\000\000\134\000\135\000\030\000\002\002\136\000\ -\000\000\125\002\137\000\138\000\125\002\000\000\146\002\125\002\ -\125\002\125\002\000\000\176\000\176\000\192\000\000\000\125\002\ -\000\000\133\002\000\000\139\000\125\002\125\002\000\000\000\000\ -\000\000\133\002\000\000\140\000\141\000\000\000\133\002\000\000\ -\000\000\125\002\192\000\142\000\000\000\125\002\125\002\000\000\ -\000\000\174\000\000\000\133\002\000\000\133\002\133\002\143\000\ -\144\000\125\002\000\000\000\000\125\002\000\000\000\000\044\004\ -\000\000\000\000\133\002\000\000\000\000\174\000\000\000\000\000\ -\250\001\000\000\174\000\174\000\174\000\000\000\000\000\000\000\ -\174\000\000\000\000\000\000\000\000\000\133\002\174\000\177\001\ -\133\002\000\000\000\000\133\002\133\002\133\002\000\000\000\000\ -\000\000\000\000\171\000\133\002\000\000\000\000\177\000\177\000\ -\246\002\133\002\192\000\192\000\000\000\174\000\192\000\000\000\ -\000\000\192\000\000\000\000\000\000\000\133\002\000\000\000\000\ -\000\000\133\002\133\002\000\000\000\000\000\000\189\002\177\000\ -\177\000\177\000\000\000\000\000\000\000\133\002\000\000\177\000\ -\133\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\152\001\171\000\159\002\000\000\000\000\000\000\ -\000\000\152\001\000\000\152\001\177\000\177\000\000\000\000\000\ -\000\000\177\000\000\000\159\002\159\002\177\000\000\000\171\000\ -\000\000\000\000\171\000\000\000\171\000\171\000\171\000\068\002\ -\159\002\000\000\171\000\000\000\000\000\000\000\000\000\000\000\ -\171\000\175\000\251\001\000\000\000\000\000\000\000\000\000\000\ -\000\000\177\000\000\000\159\002\000\000\000\000\159\002\000\000\ -\000\000\248\002\025\003\159\002\000\000\000\000\000\000\171\000\ -\000\000\159\002\175\000\175\000\175\000\000\000\248\002\159\002\ -\000\000\000\000\175\000\177\000\000\000\000\000\250\001\000\000\ -\000\000\002\002\000\000\248\002\000\000\248\002\248\002\159\002\ -\159\002\000\000\000\000\000\000\000\000\000\000\000\000\251\001\ -\175\000\000\000\248\002\159\002\251\001\000\000\159\002\000\000\ -\175\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\240\001\193\004\000\000\000\000\248\002\025\003\000\000\ -\000\000\000\000\000\000\176\000\176\000\248\002\000\000\000\000\ -\000\000\000\000\000\000\248\002\175\000\000\000\000\000\000\000\ -\000\000\248\002\000\000\000\000\000\000\175\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\176\000\176\000\176\000\000\000\ -\000\000\248\002\000\000\000\000\176\000\176\000\175\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\248\002\000\000\000\000\ -\248\002\000\000\192\000\000\000\000\000\000\000\000\000\000\000\ -\171\000\176\000\176\000\000\000\000\000\000\000\176\000\000\000\ -\000\000\000\000\176\000\000\000\000\000\000\000\002\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\093\002\175\000\000\000\095\002\000\000\096\002\177\000\097\002\ -\000\000\000\000\000\000\000\000\250\001\000\000\176\000\000\000\ -\246\002\000\000\000\000\246\002\091\000\177\000\177\000\176\000\ -\000\000\000\000\000\000\002\002\000\000\246\002\000\000\000\000\ -\000\000\000\000\000\000\092\000\016\000\132\002\000\000\133\002\ -\176\000\000\000\246\002\000\000\246\002\246\002\000\000\000\000\ -\093\000\000\000\000\000\000\000\000\000\000\000\177\000\148\002\ -\246\002\246\002\152\001\000\000\000\000\000\000\000\000\177\000\ -\000\000\177\000\000\000\031\000\002\002\000\000\000\000\000\000\ -\192\001\000\000\000\000\035\000\246\002\000\000\089\002\246\002\ -\000\000\094\000\000\000\176\000\246\002\000\000\000\000\041\000\ -\000\000\175\000\246\002\000\000\000\000\000\000\000\000\000\000\ -\246\002\000\000\000\000\000\000\000\000\000\000\000\000\095\000\ -\175\000\175\000\177\000\000\000\246\002\000\000\171\000\000\000\ -\246\002\246\002\000\000\096\000\000\000\000\000\052\000\000\000\ -\250\001\000\000\000\000\000\000\246\002\000\000\000\000\246\002\ -\202\002\000\000\203\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\175\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\175\000\000\000\251\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\246\002\000\000\249\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\240\001\000\000\176\000\240\001\000\000\000\000\000\000\ -\000\000\240\001\000\000\000\000\000\000\000\000\240\001\000\000\ -\068\002\000\000\176\000\176\000\240\001\251\001\216\000\216\000\ -\000\000\250\001\000\000\240\001\000\000\240\001\240\001\000\000\ -\000\000\000\000\000\000\000\000\218\005\000\000\000\000\000\000\ -\000\000\240\001\240\001\000\000\000\000\177\000\000\000\000\000\ -\000\000\000\000\171\000\176\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\176\000\240\001\176\000\000\000\ -\240\001\000\000\000\000\240\001\240\001\240\001\000\000\000\000\ -\000\000\000\000\240\001\240\001\000\000\000\000\123\001\124\001\ -\000\000\240\001\000\000\000\000\245\005\000\000\000\000\010\000\ -\000\000\150\001\000\000\000\000\000\000\240\001\177\000\000\000\ -\000\000\240\001\240\001\000\000\000\000\152\001\000\000\176\000\ -\000\000\000\000\055\004\000\000\000\000\240\001\086\003\000\000\ -\240\001\089\003\177\000\000\000\000\000\177\000\133\004\177\000\ -\177\000\177\000\004\001\171\000\000\000\177\000\000\000\000\000\ -\175\000\000\000\000\000\177\000\000\000\000\000\162\003\000\000\ -\133\000\000\000\134\000\135\000\030\000\000\000\136\000\000\000\ -\000\000\137\000\138\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\ -\141\003\000\000\139\000\000\000\000\000\000\000\089\002\000\000\ -\000\000\089\002\140\000\141\000\000\000\000\000\000\000\000\000\ -\000\000\175\000\142\000\089\002\000\000\000\000\162\003\089\002\ -\000\000\000\000\000\000\248\005\147\002\000\000\143\000\144\000\ -\089\002\089\002\089\002\089\002\000\000\175\000\000\000\000\000\ -\251\001\000\000\175\000\175\000\175\000\000\000\000\000\089\002\ -\175\000\000\000\176\000\165\003\000\000\000\000\175\000\133\000\ -\000\000\134\000\135\000\030\000\000\000\136\000\000\000\000\000\ -\137\000\138\000\089\002\000\000\000\000\089\002\000\000\147\002\ -\089\002\089\002\089\002\000\000\000\000\175\000\185\003\089\002\ -\089\002\139\000\000\000\000\000\000\000\000\000\089\002\000\000\ -\000\000\140\000\141\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\142\000\089\002\176\000\089\002\000\000\089\002\089\002\ -\000\000\000\000\000\000\177\000\000\000\143\000\144\000\000\000\ -\000\000\000\000\089\002\000\000\000\000\089\002\000\000\176\000\ -\248\002\089\002\176\000\000\000\176\000\176\000\176\000\000\000\ -\000\000\000\000\176\000\000\000\000\000\248\002\000\000\000\000\ -\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\206\004\000\000\000\000\000\000\ -\248\002\000\000\248\002\248\002\248\002\000\000\248\002\176\000\ -\000\000\248\002\248\002\069\002\070\002\071\002\072\002\073\002\ -\074\002\075\002\076\002\077\002\078\002\079\002\080\002\081\002\ -\082\002\083\002\084\002\085\002\086\002\087\002\088\002\089\002\ -\000\000\092\002\000\000\248\002\000\000\000\000\251\001\000\000\ -\000\000\000\000\248\002\000\000\000\000\098\002\000\000\000\000\ -\000\000\000\000\060\004\000\000\000\000\000\000\248\002\248\002\ -\000\000\000\000\115\002\180\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\004\001\004\001\004\001\004\001\000\000\000\000\ -\000\000\000\000\004\001\004\001\004\001\000\000\000\000\004\001\ -\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\ -\004\001\177\000\004\001\004\001\004\001\004\001\004\001\004\001\ -\000\000\000\000\091\004\000\000\000\000\000\000\004\001\004\001\ -\000\000\000\000\004\001\004\001\004\001\004\001\004\001\004\001\ -\004\001\004\001\000\000\004\001\000\000\004\001\000\000\000\000\ -\176\000\000\000\000\000\000\000\000\000\000\000\004\001\004\001\ -\000\000\004\001\121\004\000\000\004\001\004\001\004\001\000\000\ -\004\001\004\001\004\001\004\001\004\001\000\000\000\000\000\000\ -\000\000\000\000\004\001\004\001\004\001\004\001\004\001\004\001\ -\004\001\000\000\000\000\004\001\000\000\004\001\004\001\000\000\ -\004\001\004\001\004\001\004\001\004\001\000\000\004\001\152\004\ -\153\004\004\001\004\001\004\001\251\001\000\000\004\001\000\000\ -\000\000\004\001\000\000\000\000\000\000\004\001\190\002\000\000\ -\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\ -\000\000\000\000\013\000\000\000\000\000\177\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\152\001\000\000\000\000\000\000\ -\000\000\007\003\158\000\000\000\017\000\018\000\009\003\000\000\ -\000\000\000\000\000\000\005\001\000\000\000\000\000\000\010\000\ -\190\004\150\001\000\000\000\000\000\000\000\000\000\000\000\000\ -\024\000\152\001\159\000\160\000\000\000\161\000\162\000\000\000\ -\000\000\030\000\000\000\000\000\204\004\000\000\163\000\164\000\ -\000\000\000\000\000\000\000\000\000\000\165\000\176\000\000\000\ -\000\000\000\000\216\000\216\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\166\000\000\000\000\000\000\000\177\000\000\000\ -\133\000\000\000\134\000\135\000\030\000\000\000\136\000\167\000\ -\251\001\151\001\138\000\046\000\000\000\000\000\000\000\000\000\ -\047\000\000\000\000\000\050\000\168\000\075\003\000\000\000\000\ -\000\000\000\000\081\003\082\003\083\003\000\000\000\000\000\000\ -\000\000\000\000\000\000\141\000\000\000\214\002\000\000\000\000\ -\000\000\000\000\142\000\180\000\180\000\180\000\180\000\000\000\ -\000\000\000\000\000\000\180\000\180\000\180\000\143\000\144\000\ -\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\ -\180\000\000\000\000\000\180\000\180\000\180\000\180\000\180\000\ -\180\000\001\005\000\000\003\005\000\000\000\000\000\000\180\000\ -\180\000\251\001\246\002\180\000\180\000\180\000\180\000\180\000\ -\180\000\180\000\176\000\000\000\180\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\180\000\ -\180\000\000\000\000\000\000\000\000\000\180\000\180\000\180\000\ -\000\000\180\000\000\000\000\000\180\000\180\000\000\000\000\000\ -\000\000\000\000\000\000\180\000\000\000\180\000\000\000\000\000\ -\061\005\180\000\151\003\152\003\153\003\000\000\180\000\180\000\ -\000\000\180\000\180\000\180\000\180\000\000\000\000\000\180\000\ -\000\000\000\000\180\000\000\000\180\000\000\000\000\000\180\000\ -\000\000\000\000\180\000\000\000\000\000\000\000\180\000\000\000\ -\000\000\000\000\000\000\176\000\000\000\000\000\000\000\182\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\192\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\201\000\ -\000\000\000\000\000\000\005\001\005\001\005\001\005\001\000\000\ -\000\000\000\000\000\000\005\001\005\001\005\001\000\000\125\005\ -\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\ -\005\001\005\001\000\000\005\001\005\001\005\001\005\001\005\001\ -\005\001\000\000\000\000\000\000\000\000\000\000\000\000\005\001\ -\005\001\000\000\000\000\005\001\005\001\005\001\005\001\005\001\ -\005\001\005\001\005\001\000\000\005\001\000\000\005\001\000\000\ -\000\000\000\000\019\004\000\000\000\000\000\000\000\000\005\001\ -\005\001\000\000\005\001\000\000\000\000\005\001\005\001\005\001\ -\000\000\005\001\005\001\005\001\005\001\005\001\000\000\164\005\ -\000\000\000\000\000\000\005\001\005\001\005\001\005\001\005\001\ -\005\001\005\001\073\001\074\001\005\001\000\000\005\001\005\001\ -\000\000\005\001\005\001\005\001\005\001\005\001\000\000\005\001\ -\076\001\000\000\005\001\005\001\005\001\000\000\000\000\005\001\ -\000\000\000\000\005\001\000\000\079\001\000\000\005\001\000\000\ -\000\000\197\005\000\000\000\000\000\000\080\001\000\000\000\000\ -\000\000\000\000\000\000\081\001\082\001\083\001\084\001\085\001\ -\210\005\000\000\246\002\000\000\000\000\246\002\000\000\000\000\ -\219\005\000\000\000\000\000\000\000\000\000\000\086\001\246\002\ -\000\000\000\000\221\005\183\000\000\000\246\002\000\000\000\000\ -\087\001\088\001\091\002\114\004\246\002\000\000\246\002\246\002\ -\000\000\000\000\000\000\000\000\090\001\091\001\092\001\093\001\ -\000\000\000\000\246\002\246\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\246\002\246\002\000\000\095\001\000\000\000\000\ -\246\005\247\005\000\000\000\000\000\000\000\000\246\002\000\000\ -\000\000\246\002\000\000\000\000\000\000\003\006\246\002\000\000\ -\246\002\000\000\000\000\000\000\246\002\000\000\000\000\000\000\ -\000\000\000\000\246\002\000\000\013\006\000\000\000\000\000\000\ -\000\000\000\000\015\006\016\006\017\006\018\006\246\002\000\000\ -\000\000\000\000\246\002\246\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\246\002\000\000\ -\000\000\246\002\178\004\179\004\180\004\000\000\000\000\201\000\ -\201\000\201\000\201\000\000\000\000\000\000\000\000\000\201\000\ -\201\000\201\000\000\000\000\000\201\000\201\000\201\000\201\000\ -\201\000\201\000\201\000\201\000\201\000\000\000\000\000\201\000\ -\201\000\201\000\201\000\201\000\201\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\201\000\201\000\000\000\000\000\201\000\ -\201\000\201\000\201\000\201\000\201\000\201\000\000\000\000\000\ -\201\000\000\000\000\000\000\000\000\000\000\000\000\000\212\004\ -\213\004\214\004\000\000\201\000\201\000\000\000\201\000\012\001\ -\000\000\201\000\201\000\201\000\000\000\201\000\201\000\201\000\ -\201\000\201\000\000\000\000\000\000\000\000\000\000\000\201\000\ -\000\000\201\000\201\000\201\000\201\000\201\000\000\000\000\000\ -\000\000\234\004\201\000\201\000\000\000\201\000\201\000\201\000\ -\201\000\000\000\000\000\201\000\000\000\000\000\201\000\000\000\ -\201\000\000\000\000\000\201\000\000\000\000\000\201\000\000\000\ -\000\000\000\000\201\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\024\005\025\005\000\000\000\000\000\000\032\005\ -\033\005\034\005\091\002\091\002\091\002\091\002\000\000\000\000\ -\091\002\091\002\091\002\091\002\091\002\091\002\091\002\091\002\ -\091\002\091\002\091\002\091\002\091\002\091\002\091\002\091\002\ -\091\002\018\001\091\002\091\002\091\002\091\002\091\002\091\002\ -\091\002\091\002\000\000\000\000\000\000\000\000\091\002\091\002\ -\000\000\000\000\091\002\091\002\091\002\091\002\091\002\091\002\ -\091\002\091\002\000\000\091\002\091\002\091\002\000\000\091\002\ -\091\002\091\002\091\002\000\000\000\000\091\002\091\002\091\002\ -\079\002\091\002\091\002\091\002\091\002\091\002\091\002\000\000\ -\091\002\091\002\091\002\091\002\091\002\000\000\000\000\000\000\ -\000\000\000\000\091\002\091\002\091\002\091\002\091\002\091\002\ -\091\002\091\002\000\000\091\002\000\000\091\002\091\002\000\000\ -\091\002\091\002\091\002\091\002\091\002\000\000\091\002\091\002\ -\000\000\091\002\091\002\091\002\091\002\000\000\091\002\091\002\ -\000\000\091\002\000\000\000\000\000\000\091\002\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\016\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\012\001\ -\012\001\012\001\012\001\000\000\000\000\012\001\012\001\012\001\ -\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\ -\012\001\012\001\012\001\012\001\012\001\012\001\000\000\012\001\ -\012\001\012\001\012\001\012\001\012\001\012\001\012\001\000\000\ -\175\005\176\005\177\005\012\001\012\001\000\000\000\000\012\001\ -\012\001\012\001\012\001\012\001\012\001\012\001\012\001\000\000\ -\012\001\012\001\012\001\000\000\012\001\012\001\012\001\012\001\ -\000\000\000\000\012\001\012\001\012\001\000\000\012\001\012\001\ -\012\001\012\001\012\001\012\001\000\000\012\001\012\001\012\001\ -\012\001\012\001\000\000\000\000\000\000\000\000\000\000\012\001\ -\012\001\012\001\012\001\012\001\012\001\012\001\012\001\000\000\ -\012\001\000\000\012\001\012\001\000\000\012\001\012\001\012\001\ -\012\001\012\001\024\001\012\001\012\001\000\000\012\001\012\001\ -\012\001\012\001\000\000\012\001\012\001\000\000\012\001\000\000\ -\000\000\000\000\012\001\000\000\000\000\000\000\000\000\000\000\ -\000\000\018\001\018\001\018\001\018\001\000\000\000\000\018\001\ -\018\001\018\001\018\001\018\001\018\001\018\001\018\001\018\001\ -\018\001\018\001\018\001\018\001\018\001\018\001\018\001\018\001\ -\000\000\018\001\018\001\018\001\018\001\018\001\018\001\018\001\ -\018\001\000\000\000\000\000\000\000\000\018\001\018\001\000\000\ -\000\000\018\001\018\001\018\001\018\001\018\001\018\001\018\001\ -\018\001\000\000\018\001\018\001\018\001\000\000\018\001\018\001\ -\018\001\018\001\000\000\000\000\018\001\018\001\018\001\000\000\ -\018\001\018\001\018\001\018\001\018\001\018\001\000\000\018\001\ -\018\001\018\001\018\001\018\001\000\000\000\000\000\000\000\000\ -\000\000\018\001\018\001\018\001\018\001\018\001\018\001\018\001\ -\018\001\000\000\018\001\000\000\018\001\018\001\020\001\018\001\ -\018\001\018\001\018\001\018\001\000\000\018\001\018\001\000\000\ -\018\001\018\001\018\001\018\001\000\000\018\001\018\001\000\000\ -\018\001\000\000\000\000\000\000\018\001\016\001\016\001\016\001\ -\016\001\000\000\000\000\016\001\016\001\016\001\016\001\016\001\ -\016\001\016\001\016\001\016\001\016\001\016\001\016\001\016\001\ -\016\001\016\001\016\001\016\001\000\000\016\001\016\001\016\001\ -\016\001\016\001\016\001\016\001\016\001\000\000\000\000\000\000\ -\000\000\016\001\016\001\000\000\000\000\016\001\016\001\016\001\ -\016\001\016\001\016\001\016\001\016\001\000\000\016\001\016\001\ -\016\001\000\000\016\001\016\001\016\001\016\001\000\000\000\000\ -\016\001\016\001\016\001\000\000\016\001\016\001\016\001\016\001\ -\016\001\016\001\000\000\016\001\016\001\016\001\016\001\016\001\ -\000\000\000\000\000\000\000\000\000\000\016\001\016\001\016\001\ -\016\001\016\001\016\001\016\001\016\001\000\000\016\001\000\000\ -\016\001\016\001\022\001\016\001\016\001\016\001\016\001\016\001\ -\000\000\016\001\016\001\000\000\016\001\016\001\016\001\016\001\ -\000\000\016\001\016\001\000\000\016\001\000\000\000\000\000\000\ -\016\001\000\000\024\001\024\001\024\001\024\001\000\000\000\000\ -\024\001\024\001\024\001\024\001\024\001\024\001\024\001\024\001\ -\024\001\024\001\024\001\024\001\024\001\024\001\024\001\024\001\ -\024\001\000\000\024\001\024\001\024\001\024\001\024\001\024\001\ -\024\001\024\001\000\000\000\000\000\000\000\000\024\001\024\001\ -\000\000\000\000\024\001\024\001\024\001\024\001\024\001\024\001\ -\024\001\024\001\000\000\024\001\024\001\024\001\000\000\024\001\ -\024\001\024\001\024\001\000\000\000\000\024\001\024\001\024\001\ -\000\000\024\001\024\001\024\001\024\001\024\001\024\001\000\000\ -\024\001\024\001\024\001\024\001\024\001\000\000\000\000\000\000\ -\000\000\000\000\024\001\024\001\024\001\024\001\024\001\024\001\ -\024\001\024\001\000\000\024\001\000\000\024\001\024\001\030\001\ -\024\001\024\001\024\001\024\001\024\001\000\000\024\001\024\001\ -\000\000\024\001\024\001\024\001\024\001\000\000\024\001\024\001\ -\000\000\024\001\000\000\000\000\000\000\024\001\020\001\020\001\ -\020\001\020\001\000\000\000\000\020\001\020\001\020\001\020\001\ -\020\001\020\001\020\001\020\001\020\001\020\001\020\001\020\001\ -\020\001\020\001\020\001\020\001\020\001\000\000\020\001\020\001\ -\020\001\020\001\020\001\020\001\020\001\020\001\000\000\000\000\ -\000\000\000\000\020\001\020\001\000\000\000\000\020\001\020\001\ -\020\001\020\001\020\001\020\001\020\001\020\001\000\000\020\001\ -\020\001\020\001\000\000\020\001\020\001\020\001\020\001\000\000\ -\000\000\020\001\020\001\020\001\000\000\020\001\020\001\020\001\ -\020\001\020\001\020\001\000\000\020\001\020\001\020\001\020\001\ -\020\001\000\000\000\000\000\000\000\000\000\000\020\001\020\001\ -\020\001\020\001\020\001\020\001\020\001\020\001\000\000\020\001\ -\000\000\020\001\020\001\026\001\020\001\020\001\020\001\020\001\ -\020\001\000\000\020\001\020\001\000\000\020\001\020\001\020\001\ -\020\001\000\000\020\001\020\001\000\000\020\001\000\000\000\000\ -\000\000\020\001\022\001\022\001\022\001\022\001\000\000\000\000\ -\022\001\022\001\022\001\022\001\022\001\022\001\022\001\022\001\ -\022\001\022\001\022\001\022\001\022\001\022\001\022\001\022\001\ -\022\001\000\000\022\001\022\001\022\001\022\001\022\001\022\001\ -\022\001\022\001\000\000\000\000\000\000\000\000\022\001\022\001\ -\000\000\000\000\022\001\022\001\022\001\022\001\022\001\022\001\ -\022\001\022\001\000\000\022\001\022\001\022\001\000\000\022\001\ -\022\001\022\001\022\001\000\000\000\000\022\001\022\001\022\001\ -\000\000\022\001\022\001\022\001\022\001\022\001\022\001\000\000\ -\022\001\022\001\022\001\022\001\022\001\000\000\000\000\000\000\ -\000\000\000\000\022\001\022\001\022\001\022\001\022\001\022\001\ -\022\001\022\001\000\000\022\001\000\000\022\001\022\001\028\001\ -\022\001\022\001\022\001\022\001\022\001\000\000\022\001\022\001\ -\000\000\022\001\022\001\022\001\022\001\000\000\022\001\022\001\ -\000\000\022\001\000\000\000\000\000\000\022\001\000\000\030\001\ -\030\001\030\001\030\001\000\000\000\000\030\001\030\001\030\001\ -\030\001\030\001\030\001\030\001\030\001\030\001\030\001\030\001\ -\030\001\030\001\030\001\030\001\030\001\030\001\000\000\030\001\ -\030\001\030\001\030\001\030\001\030\001\030\001\030\001\000\000\ -\000\000\000\000\000\000\030\001\030\001\000\000\000\000\030\001\ -\030\001\030\001\030\001\030\001\030\001\030\001\030\001\000\000\ -\030\001\030\001\030\001\000\000\030\001\030\001\030\001\030\001\ -\000\000\000\000\030\001\030\001\030\001\000\000\030\001\030\001\ -\030\001\030\001\030\001\030\001\000\000\030\001\030\001\030\001\ -\030\001\030\001\000\000\000\000\000\000\000\000\000\000\030\001\ -\030\001\030\001\030\001\030\001\030\001\030\001\030\001\000\000\ -\030\001\000\000\030\001\030\001\133\002\030\001\030\001\030\001\ -\030\001\030\001\000\000\030\001\030\001\000\000\030\001\030\001\ -\030\001\030\001\000\000\030\001\030\001\000\000\030\001\000\000\ -\000\000\000\000\030\001\026\001\026\001\026\001\026\001\000\000\ -\000\000\026\001\026\001\026\001\026\001\026\001\026\001\026\001\ -\026\001\026\001\026\001\026\001\026\001\026\001\026\001\026\001\ -\026\001\026\001\000\000\026\001\026\001\026\001\026\001\026\001\ -\026\001\026\001\026\001\000\000\000\000\000\000\000\000\026\001\ -\026\001\000\000\000\000\026\001\026\001\026\001\026\001\026\001\ -\026\001\026\001\026\001\000\000\026\001\026\001\026\001\000\000\ -\026\001\026\001\026\001\026\001\000\000\000\000\026\001\026\001\ -\026\001\000\000\026\001\026\001\026\001\026\001\026\001\026\001\ -\000\000\026\001\026\001\026\001\026\001\026\001\000\000\000\000\ -\000\000\000\000\000\000\026\001\026\001\026\001\026\001\026\001\ -\026\001\026\001\026\001\000\000\026\001\000\000\026\001\026\001\ -\057\001\026\001\026\001\026\001\026\001\026\001\000\000\026\001\ -\026\001\000\000\026\001\026\001\026\001\026\001\000\000\026\001\ -\026\001\000\000\026\001\000\000\000\000\000\000\026\001\028\001\ -\028\001\028\001\028\001\000\000\000\000\028\001\028\001\028\001\ -\028\001\028\001\028\001\028\001\028\001\028\001\028\001\028\001\ -\028\001\028\001\028\001\028\001\028\001\028\001\000\000\028\001\ -\028\001\028\001\028\001\028\001\028\001\028\001\028\001\000\000\ -\000\000\000\000\000\000\028\001\028\001\000\000\000\000\028\001\ -\028\001\028\001\028\001\028\001\028\001\028\001\028\001\000\000\ -\028\001\028\001\028\001\000\000\028\001\028\001\028\001\028\001\ -\000\000\000\000\028\001\028\001\028\001\000\000\028\001\028\001\ -\028\001\028\001\028\001\028\001\000\000\028\001\028\001\028\001\ -\028\001\028\001\000\000\000\000\000\000\000\000\000\000\028\001\ -\028\001\028\001\028\001\028\001\028\001\028\001\028\001\000\000\ -\028\001\000\000\028\001\028\001\066\001\028\001\028\001\028\001\ -\028\001\028\001\000\000\028\001\028\001\000\000\028\001\028\001\ -\028\001\028\001\000\000\028\001\028\001\000\000\028\001\000\000\ -\000\000\000\000\028\001\000\000\133\002\133\002\133\002\133\002\ -\000\000\000\000\133\002\133\002\133\002\133\002\133\002\133\002\ -\133\002\133\002\133\002\133\002\133\002\133\002\133\002\133\002\ -\133\002\133\002\000\000\000\000\133\002\133\002\133\002\133\002\ -\133\002\133\002\133\002\133\002\000\000\000\000\000\000\000\000\ -\133\002\133\002\000\000\000\000\133\002\133\002\133\002\133\002\ -\133\002\133\002\133\002\133\002\000\000\133\002\133\002\133\002\ -\000\000\133\002\133\002\133\002\133\002\000\000\000\000\133\002\ -\133\002\133\002\000\000\133\002\133\002\133\002\133\002\133\002\ -\133\002\000\000\133\002\133\002\133\002\133\002\133\002\000\000\ -\000\000\000\000\000\000\000\000\133\002\133\002\133\002\133\002\ -\133\002\133\002\133\002\133\002\000\000\133\002\000\000\133\002\ -\133\002\068\001\133\002\133\002\133\002\133\002\133\002\000\000\ -\133\002\133\002\000\000\133\002\133\002\133\002\133\002\000\000\ -\133\002\133\002\000\000\133\002\000\000\000\000\000\000\133\002\ -\057\001\057\001\057\001\057\001\000\000\000\000\057\001\057\001\ -\057\001\057\001\057\001\057\001\057\001\057\001\057\001\057\001\ -\057\001\057\001\057\001\057\001\057\001\057\001\000\000\000\000\ -\057\001\057\001\057\001\057\001\057\001\057\001\057\001\057\001\ -\000\000\000\000\000\000\000\000\057\001\057\001\000\000\000\000\ -\057\001\057\001\057\001\057\001\057\001\057\001\057\001\000\000\ -\000\000\057\001\057\001\057\001\000\000\057\001\057\001\057\001\ -\057\001\000\000\000\000\057\001\057\001\057\001\000\000\057\001\ -\057\001\057\001\057\001\057\001\057\001\000\000\057\001\057\001\ -\057\001\057\001\057\001\000\000\000\000\000\000\000\000\000\000\ -\057\001\057\001\057\001\057\001\057\001\057\001\057\001\057\001\ -\000\000\057\001\000\000\057\001\057\001\071\001\057\001\057\001\ -\057\001\057\001\057\001\000\000\057\001\057\001\000\000\057\001\ -\057\001\057\001\057\001\000\000\057\001\057\001\000\000\057\001\ -\000\000\000\000\000\000\057\001\066\001\066\001\066\001\066\001\ -\000\000\000\000\066\001\066\001\066\001\066\001\066\001\066\001\ -\066\001\066\001\066\001\066\001\066\001\066\001\066\001\066\001\ -\066\001\066\001\000\000\000\000\066\001\066\001\066\001\066\001\ -\066\001\066\001\066\001\066\001\000\000\000\000\000\000\000\000\ -\066\001\066\001\000\000\000\000\066\001\066\001\066\001\066\001\ -\066\001\066\001\066\001\000\000\000\000\066\001\066\001\066\001\ -\000\000\066\001\066\001\066\001\066\001\000\000\000\000\066\001\ -\066\001\066\001\000\000\066\001\066\001\066\001\066\001\066\001\ -\066\001\000\000\066\001\066\001\066\001\066\001\066\001\000\000\ -\000\000\000\000\000\000\000\000\066\001\066\001\066\001\066\001\ -\066\001\066\001\066\001\066\001\000\000\066\001\000\000\066\001\ -\066\001\200\000\066\001\066\001\066\001\000\000\000\000\000\000\ -\066\001\066\001\000\000\066\001\066\001\066\001\066\001\000\000\ -\066\001\066\001\000\000\066\001\000\000\000\000\000\000\066\001\ -\000\000\068\001\068\001\068\001\068\001\000\000\000\000\068\001\ -\068\001\068\001\068\001\068\001\068\001\068\001\068\001\068\001\ -\068\001\068\001\068\001\068\001\068\001\068\001\068\001\000\000\ -\000\000\068\001\068\001\068\001\068\001\068\001\068\001\068\001\ -\068\001\000\000\000\000\000\000\000\000\068\001\068\001\000\000\ -\000\000\068\001\068\001\068\001\068\001\068\001\068\001\068\001\ -\000\000\000\000\068\001\068\001\068\001\000\000\068\001\068\001\ -\068\001\068\001\000\000\000\000\068\001\068\001\068\001\000\000\ -\068\001\068\001\068\001\068\001\068\001\068\001\000\000\068\001\ -\068\001\068\001\068\001\068\001\000\000\000\000\000\000\000\000\ -\000\000\068\001\068\001\068\001\068\001\068\001\068\001\068\001\ -\068\001\000\000\068\001\000\000\068\001\068\001\212\000\068\001\ -\068\001\068\001\000\000\000\000\000\000\068\001\068\001\000\000\ -\068\001\068\001\068\001\068\001\000\000\068\001\068\001\000\000\ -\068\001\000\000\000\000\000\000\068\001\071\001\071\001\071\001\ -\071\001\000\000\000\000\071\001\071\001\071\001\071\001\071\001\ -\071\001\071\001\071\001\071\001\071\001\071\001\071\001\071\001\ -\071\001\071\001\071\001\000\000\000\000\071\001\071\001\071\001\ -\071\001\071\001\071\001\071\001\071\001\000\000\000\000\000\000\ -\000\000\071\001\071\001\000\000\000\000\071\001\071\001\071\001\ -\071\001\071\001\071\001\071\001\000\000\000\000\071\001\071\001\ -\071\001\000\000\071\001\071\001\071\001\071\001\000\000\000\000\ -\071\001\071\001\071\001\000\000\071\001\071\001\071\001\071\001\ -\071\001\071\001\000\000\071\001\071\001\071\001\071\001\071\001\ -\000\000\000\000\000\000\000\000\000\000\071\001\071\001\071\001\ -\071\001\071\001\071\001\071\001\071\001\000\000\071\001\000\000\ -\071\001\071\001\213\000\071\001\071\001\071\001\000\000\000\000\ -\000\000\071\001\071\001\000\000\071\001\071\001\071\001\071\001\ -\000\000\071\001\071\001\000\000\071\001\000\000\000\000\000\000\ -\071\001\200\000\200\000\200\000\200\000\000\000\000\000\000\000\ -\000\000\200\000\200\000\200\000\000\000\000\000\200\000\200\000\ -\200\000\200\000\200\000\200\000\200\000\200\000\200\000\000\000\ -\000\000\200\000\200\000\200\000\200\000\200\000\200\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\200\000\200\000\000\000\ -\000\000\200\000\200\000\200\000\200\000\200\000\200\000\200\000\ -\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\200\000\200\000\000\000\ -\200\000\000\000\000\000\200\000\200\000\200\000\000\000\200\000\ -\200\000\200\000\200\000\200\000\000\000\000\000\000\000\000\000\ -\000\000\200\000\000\000\200\000\200\000\200\000\200\000\200\000\ -\000\000\000\000\000\000\000\000\200\000\200\000\214\000\200\000\ -\200\000\200\000\000\000\000\000\000\000\200\000\000\000\000\000\ -\200\000\000\000\200\000\000\000\000\000\200\000\000\000\000\000\ -\200\000\000\000\000\000\000\000\200\000\000\000\212\000\212\000\ -\212\000\212\000\000\000\000\000\000\000\000\000\212\000\212\000\ -\212\000\000\000\000\000\212\000\212\000\212\000\212\000\212\000\ -\000\000\212\000\212\000\212\000\000\000\000\000\212\000\212\000\ -\212\000\212\000\212\000\212\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\212\000\212\000\000\000\000\000\212\000\212\000\ -\212\000\212\000\212\000\212\000\212\000\000\000\000\000\212\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\212\000\212\000\000\000\212\000\000\000\000\000\ -\212\000\212\000\212\000\000\000\212\000\212\000\212\000\212\000\ -\212\000\000\000\000\000\000\000\000\000\000\000\212\000\000\000\ -\212\000\212\000\212\000\212\000\212\000\000\000\000\000\000\000\ -\000\000\212\000\212\000\252\000\212\000\212\000\212\000\212\000\ -\000\000\000\000\212\000\000\000\000\000\212\000\000\000\212\000\ -\000\000\000\000\212\000\000\000\000\000\212\000\000\000\000\000\ -\000\000\212\000\213\000\213\000\213\000\213\000\000\000\000\000\ -\000\000\000\000\213\000\213\000\213\000\000\000\000\000\213\000\ -\213\000\213\000\213\000\213\000\213\000\213\000\213\000\213\000\ -\000\000\000\000\213\000\213\000\213\000\213\000\213\000\213\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\213\000\213\000\ -\000\000\000\000\213\000\213\000\213\000\213\000\213\000\213\000\ -\213\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\213\000\213\000\ -\000\000\213\000\000\000\000\000\213\000\213\000\213\000\000\000\ -\213\000\213\000\213\000\213\000\213\000\000\000\000\000\000\000\ -\000\000\000\000\213\000\000\000\213\000\213\000\213\000\213\000\ -\213\000\000\000\000\000\000\000\000\000\213\000\213\000\253\000\ -\213\000\213\000\213\000\000\000\000\000\000\000\213\000\000\000\ -\000\000\213\000\000\000\213\000\000\000\000\000\213\000\000\000\ -\000\000\213\000\000\000\000\000\000\000\213\000\214\000\214\000\ -\214\000\214\000\000\000\000\000\000\000\000\000\214\000\214\000\ -\214\000\000\000\000\000\214\000\214\000\214\000\214\000\214\000\ -\214\000\214\000\214\000\214\000\000\000\000\000\214\000\214\000\ -\214\000\214\000\214\000\214\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\214\000\214\000\000\000\000\000\214\000\214\000\ -\214\000\214\000\214\000\214\000\214\000\000\000\000\000\214\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\214\000\214\000\000\000\214\000\000\000\000\000\ -\214\000\214\000\214\000\000\000\214\000\214\000\214\000\214\000\ -\214\000\000\000\000\000\000\000\000\000\000\000\214\000\000\000\ -\214\000\214\000\214\000\214\000\214\000\000\000\000\000\000\000\ -\000\000\214\000\214\000\223\000\214\000\214\000\214\000\000\000\ -\000\000\000\000\214\000\000\000\000\000\214\000\000\000\214\000\ -\000\000\000\000\214\000\000\000\000\000\214\000\000\000\000\000\ -\000\000\214\000\000\000\252\000\252\000\252\000\252\000\000\000\ -\000\000\000\000\000\000\252\000\252\000\252\000\000\000\000\000\ -\252\000\252\000\252\000\252\000\252\000\252\000\252\000\252\000\ -\252\000\000\000\000\000\252\000\252\000\252\000\252\000\252\000\ -\252\000\000\000\000\000\000\000\000\000\000\000\000\000\252\000\ -\252\000\000\000\000\000\252\000\252\000\252\000\252\000\252\000\ -\252\000\252\000\000\000\000\000\252\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\252\000\ -\252\000\000\000\252\000\000\000\000\000\252\000\252\000\252\000\ -\000\000\252\000\252\000\252\000\252\000\252\000\000\000\000\000\ -\000\000\000\000\000\000\252\000\000\000\252\000\252\000\252\000\ -\252\000\252\000\000\000\000\000\000\000\000\000\252\000\252\000\ -\224\000\252\000\252\000\252\000\000\000\000\000\000\000\252\000\ -\000\000\000\000\252\000\000\000\252\000\000\000\000\000\252\000\ -\000\000\000\000\252\000\000\000\000\000\000\000\252\000\253\000\ -\253\000\253\000\253\000\000\000\000\000\000\000\000\000\253\000\ -\253\000\253\000\000\000\000\000\253\000\253\000\253\000\253\000\ -\253\000\253\000\253\000\253\000\253\000\000\000\000\000\253\000\ -\253\000\253\000\253\000\253\000\253\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\253\000\253\000\000\000\000\000\253\000\ -\253\000\253\000\253\000\253\000\253\000\253\000\000\000\000\000\ -\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\253\000\253\000\000\000\253\000\000\000\ -\000\000\253\000\253\000\253\000\000\000\253\000\253\000\253\000\ -\253\000\253\000\000\000\000\000\000\000\000\000\000\000\253\000\ -\000\000\253\000\253\000\253\000\253\000\253\000\000\000\000\000\ -\000\000\000\000\253\000\253\000\231\000\253\000\253\000\253\000\ -\000\000\000\000\000\000\253\000\000\000\000\000\253\000\000\000\ -\253\000\000\000\000\000\253\000\000\000\000\000\253\000\000\000\ -\000\000\000\000\253\000\223\000\223\000\223\000\223\000\000\000\ -\000\000\000\000\000\000\223\000\223\000\223\000\000\000\000\000\ -\223\000\223\000\223\000\223\000\223\000\223\000\223\000\223\000\ -\223\000\000\000\000\000\223\000\223\000\223\000\223\000\223\000\ -\223\000\000\000\000\000\000\000\000\000\000\000\000\000\223\000\ -\223\000\000\000\000\000\223\000\223\000\223\000\223\000\223\000\ -\223\000\000\000\000\000\000\000\223\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\223\000\ -\223\000\000\000\223\000\000\000\000\000\223\000\223\000\223\000\ -\000\000\223\000\223\000\223\000\223\000\223\000\000\000\000\000\ -\000\000\000\000\000\000\223\000\000\000\223\000\223\000\223\000\ -\223\000\223\000\000\000\000\000\000\000\000\000\223\000\223\000\ -\230\000\223\000\223\000\223\000\223\000\000\000\000\000\223\000\ -\000\000\000\000\223\000\000\000\223\000\000\000\000\000\223\000\ -\000\000\000\000\223\000\000\000\000\000\000\000\223\000\000\000\ -\224\000\224\000\224\000\224\000\000\000\000\000\000\000\000\000\ -\224\000\224\000\224\000\000\000\000\000\224\000\224\000\224\000\ -\224\000\224\000\224\000\224\000\224\000\224\000\000\000\000\000\ -\224\000\224\000\224\000\224\000\224\000\224\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\224\000\224\000\000\000\000\000\ -\224\000\224\000\224\000\224\000\224\000\224\000\000\000\000\000\ -\000\000\224\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\224\000\224\000\000\000\224\000\ -\000\000\000\000\224\000\224\000\224\000\000\000\224\000\224\000\ -\224\000\224\000\224\000\000\000\000\000\000\000\000\000\000\000\ -\224\000\000\000\224\000\224\000\224\000\224\000\224\000\000\000\ -\000\000\000\000\000\000\224\000\224\000\206\000\224\000\224\000\ -\224\000\224\000\000\000\000\000\224\000\000\000\000\000\224\000\ -\000\000\224\000\000\000\000\000\224\000\000\000\000\000\224\000\ -\000\000\000\000\000\000\224\000\231\000\231\000\231\000\231\000\ -\000\000\000\000\000\000\000\000\231\000\231\000\231\000\000\000\ -\000\000\231\000\231\000\231\000\231\000\231\000\231\000\231\000\ -\231\000\231\000\000\000\000\000\231\000\231\000\231\000\231\000\ -\231\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\231\000\231\000\000\000\000\000\231\000\231\000\231\000\231\000\ -\231\000\231\000\000\000\000\000\000\000\231\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\231\000\231\000\000\000\231\000\000\000\000\000\231\000\231\000\ -\231\000\000\000\231\000\231\000\231\000\231\000\231\000\000\000\ -\000\000\000\000\000\000\000\000\231\000\000\000\231\000\231\000\ -\231\000\231\000\231\000\000\000\000\000\000\000\000\000\231\000\ -\231\000\209\000\231\000\231\000\231\000\231\000\000\000\000\000\ -\231\000\000\000\000\000\231\000\000\000\231\000\000\000\000\000\ -\231\000\000\000\000\000\231\000\000\000\000\000\000\000\231\000\ -\230\000\230\000\230\000\230\000\000\000\000\000\000\000\000\000\ -\230\000\230\000\230\000\000\000\000\000\230\000\230\000\230\000\ -\230\000\230\000\230\000\230\000\230\000\230\000\000\000\000\000\ -\230\000\230\000\230\000\230\000\230\000\230\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\230\000\230\000\000\000\000\000\ -\230\000\230\000\230\000\230\000\230\000\230\000\000\000\000\000\ -\000\000\230\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\230\000\230\000\000\000\230\000\ -\000\000\000\000\230\000\230\000\230\000\000\000\230\000\230\000\ -\230\000\230\000\230\000\000\000\000\000\000\000\000\000\000\000\ -\230\000\000\000\230\000\230\000\230\000\230\000\230\000\000\000\ -\000\000\000\000\000\000\230\000\230\000\210\000\230\000\230\000\ -\230\000\230\000\000\000\000\000\230\000\000\000\000\000\230\000\ -\000\000\230\000\000\000\000\000\230\000\000\000\000\000\230\000\ -\000\000\000\000\000\000\230\000\000\000\206\000\206\000\206\000\ -\206\000\000\000\000\000\000\000\000\000\000\000\206\000\206\000\ -\000\000\000\000\206\000\206\000\206\000\206\000\206\000\206\000\ -\206\000\206\000\206\000\000\000\000\000\206\000\206\000\206\000\ -\206\000\206\000\206\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\206\000\206\000\000\000\000\000\206\000\206\000\206\000\ -\206\000\206\000\206\000\206\000\000\000\000\000\206\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\206\000\206\000\000\000\206\000\000\000\000\000\206\000\ -\206\000\206\000\000\000\206\000\206\000\206\000\206\000\206\000\ -\000\000\000\000\000\000\000\000\000\000\206\000\000\000\206\000\ -\206\000\206\000\206\000\206\000\000\000\000\000\000\000\000\000\ -\206\000\206\000\222\000\206\000\206\000\206\000\206\000\000\000\ -\000\000\206\000\000\000\000\000\206\000\000\000\206\000\000\000\ -\000\000\206\000\000\000\000\000\206\000\000\000\000\000\000\000\ -\206\000\209\000\209\000\209\000\209\000\000\000\000\000\000\000\ -\000\000\000\000\209\000\209\000\000\000\000\000\209\000\209\000\ -\209\000\209\000\209\000\209\000\209\000\209\000\209\000\000\000\ -\000\000\209\000\209\000\209\000\209\000\209\000\209\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\209\000\209\000\000\000\ -\000\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\ -\000\000\000\000\209\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\209\000\209\000\000\000\ -\209\000\000\000\000\000\209\000\209\000\209\000\000\000\209\000\ -\209\000\209\000\209\000\209\000\000\000\000\000\000\000\000\000\ -\000\000\209\000\000\000\209\000\209\000\209\000\209\000\209\000\ -\000\000\000\000\000\000\000\000\209\000\209\000\228\000\209\000\ -\209\000\209\000\209\000\000\000\000\000\209\000\000\000\000\000\ -\209\000\000\000\209\000\000\000\000\000\209\000\000\000\000\000\ -\209\000\000\000\000\000\000\000\209\000\210\000\210\000\210\000\ -\210\000\000\000\000\000\000\000\000\000\000\000\210\000\210\000\ -\000\000\000\000\210\000\210\000\210\000\210\000\210\000\210\000\ -\210\000\210\000\210\000\000\000\000\000\210\000\210\000\210\000\ -\210\000\210\000\210\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\210\000\210\000\000\000\000\000\210\000\210\000\210\000\ -\210\000\210\000\210\000\210\000\000\000\000\000\210\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\210\000\210\000\000\000\210\000\000\000\000\000\210\000\ -\210\000\210\000\000\000\210\000\210\000\210\000\210\000\210\000\ -\000\000\000\000\000\000\000\000\000\000\210\000\000\000\210\000\ -\210\000\210\000\210\000\210\000\000\000\000\000\000\000\000\000\ -\210\000\210\000\229\000\210\000\210\000\210\000\210\000\000\000\ -\000\000\210\000\000\000\000\000\210\000\000\000\210\000\000\000\ -\000\000\210\000\000\000\000\000\210\000\000\000\000\000\000\000\ -\210\000\000\000\222\000\222\000\222\000\222\000\000\000\000\000\ -\000\000\000\000\222\000\222\000\222\000\000\000\000\000\222\000\ -\222\000\222\000\222\000\222\000\222\000\222\000\222\000\222\000\ -\000\000\000\000\222\000\222\000\222\000\222\000\222\000\222\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\222\000\222\000\ -\000\000\000\000\222\000\222\000\222\000\222\000\222\000\000\000\ -\000\000\000\000\000\000\222\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\222\000\222\000\ -\000\000\222\000\000\000\000\000\222\000\222\000\222\000\000\000\ -\222\000\222\000\222\000\222\000\222\000\000\000\000\000\000\000\ -\000\000\000\000\222\000\000\000\222\000\000\000\222\000\222\000\ -\222\000\000\000\000\000\000\000\000\000\222\000\222\000\225\000\ -\222\000\222\000\222\000\222\000\000\000\000\000\000\000\000\000\ -\000\000\222\000\000\000\222\000\000\000\000\000\222\000\000\000\ -\000\000\222\000\000\000\000\000\000\000\222\000\228\000\228\000\ -\228\000\228\000\000\000\000\000\000\000\000\000\228\000\228\000\ -\228\000\000\000\000\000\228\000\228\000\228\000\228\000\228\000\ -\228\000\228\000\228\000\228\000\000\000\000\000\228\000\228\000\ -\228\000\228\000\228\000\228\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\228\000\228\000\000\000\000\000\228\000\228\000\ -\228\000\228\000\228\000\000\000\000\000\000\000\000\000\228\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\228\000\228\000\000\000\228\000\000\000\000\000\ -\228\000\228\000\228\000\000\000\228\000\228\000\228\000\228\000\ -\228\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\ -\228\000\000\000\228\000\228\000\228\000\000\000\000\000\000\000\ -\000\000\228\000\228\000\226\000\228\000\228\000\228\000\228\000\ -\000\000\000\000\000\000\000\000\000\000\228\000\000\000\228\000\ -\000\000\000\000\228\000\000\000\000\000\228\000\000\000\000\000\ -\000\000\228\000\229\000\229\000\229\000\229\000\000\000\000\000\ -\000\000\000\000\229\000\229\000\229\000\000\000\000\000\229\000\ -\229\000\229\000\229\000\229\000\229\000\229\000\229\000\229\000\ -\000\000\000\000\229\000\229\000\229\000\229\000\229\000\229\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\229\000\229\000\ -\000\000\000\000\229\000\229\000\229\000\229\000\229\000\000\000\ -\000\000\000\000\000\000\229\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\229\000\229\000\ -\000\000\229\000\000\000\000\000\229\000\229\000\229\000\000\000\ -\229\000\229\000\229\000\229\000\229\000\000\000\000\000\000\000\ -\000\000\000\000\229\000\000\000\229\000\000\000\229\000\229\000\ -\229\000\000\000\000\000\000\000\000\000\229\000\229\000\227\000\ -\229\000\229\000\229\000\229\000\000\000\000\000\000\000\000\000\ -\000\000\229\000\000\000\229\000\000\000\000\000\229\000\000\000\ -\000\000\229\000\000\000\000\000\000\000\229\000\000\000\225\000\ -\225\000\225\000\225\000\000\000\000\000\000\000\000\000\225\000\ -\225\000\225\000\000\000\000\000\225\000\225\000\225\000\225\000\ -\225\000\225\000\225\000\225\000\225\000\000\000\000\000\225\000\ -\225\000\225\000\225\000\225\000\225\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\225\000\225\000\000\000\000\000\225\000\ -\225\000\225\000\225\000\225\000\000\000\000\000\000\000\000\000\ -\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\225\000\225\000\000\000\225\000\000\000\ -\000\000\225\000\225\000\225\000\000\000\225\000\225\000\225\000\ -\225\000\225\000\000\000\000\000\000\000\000\000\000\000\225\000\ -\000\000\225\000\000\000\225\000\225\000\225\000\000\000\000\000\ -\000\000\000\000\225\000\225\000\219\000\225\000\225\000\225\000\ -\225\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\ -\225\000\000\000\000\000\225\000\000\000\000\000\225\000\000\000\ -\000\000\000\000\225\000\226\000\226\000\226\000\226\000\000\000\ -\000\000\000\000\000\000\226\000\226\000\226\000\000\000\000\000\ -\226\000\226\000\226\000\226\000\226\000\226\000\226\000\226\000\ -\226\000\000\000\000\000\226\000\226\000\226\000\226\000\226\000\ -\226\000\000\000\000\000\000\000\000\000\000\000\000\000\226\000\ -\226\000\000\000\000\000\226\000\226\000\226\000\226\000\226\000\ -\000\000\000\000\000\000\000\000\226\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\226\000\ -\226\000\000\000\226\000\000\000\000\000\226\000\226\000\226\000\ -\000\000\226\000\226\000\226\000\226\000\226\000\000\000\000\000\ -\000\000\000\000\000\000\226\000\000\000\226\000\000\000\226\000\ -\226\000\226\000\000\000\000\000\000\000\000\000\226\000\226\000\ -\232\000\226\000\226\000\226\000\226\000\000\000\000\000\000\000\ -\000\000\000\000\226\000\000\000\226\000\000\000\000\000\226\000\ -\000\000\000\000\226\000\000\000\000\000\000\000\226\000\227\000\ -\227\000\227\000\227\000\000\000\000\000\000\000\000\000\227\000\ -\227\000\227\000\000\000\000\000\227\000\227\000\227\000\227\000\ -\227\000\227\000\227\000\227\000\227\000\000\000\000\000\227\000\ -\227\000\227\000\227\000\227\000\227\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\227\000\227\000\000\000\000\000\227\000\ -\227\000\227\000\227\000\227\000\000\000\000\000\000\000\000\000\ -\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\227\000\227\000\000\000\227\000\000\000\ -\000\000\227\000\227\000\227\000\000\000\227\000\227\000\227\000\ -\227\000\227\000\000\000\000\000\000\000\000\000\000\000\227\000\ -\000\000\227\000\000\000\227\000\227\000\227\000\000\000\000\000\ -\000\000\000\000\227\000\227\000\234\000\227\000\227\000\227\000\ -\227\000\000\000\000\000\000\000\000\000\000\000\227\000\000\000\ -\227\000\000\000\000\000\227\000\000\000\000\000\227\000\010\000\ -\000\000\150\001\227\000\000\000\219\000\219\000\219\000\219\000\ -\000\000\000\000\000\000\000\000\219\000\219\000\219\000\000\000\ -\000\000\219\000\219\000\000\000\219\000\219\000\219\000\219\000\ -\219\000\219\000\000\000\000\000\219\000\219\000\219\000\219\000\ -\219\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\219\000\219\000\000\000\000\000\219\000\219\000\219\000\219\000\ -\133\000\000\000\134\000\135\000\030\000\219\000\136\000\000\000\ -\000\000\151\001\138\000\000\000\000\000\000\000\000\000\000\000\ -\219\000\219\000\000\000\219\000\000\000\000\000\219\000\219\000\ -\219\000\000\000\219\000\000\000\000\000\219\000\219\000\000\000\ -\000\000\000\000\000\000\141\000\219\000\000\000\219\000\000\000\ -\000\000\000\000\142\000\000\000\000\000\000\000\000\000\219\000\ -\219\000\220\000\219\000\219\000\219\000\219\000\143\000\144\000\ -\000\000\000\000\000\000\219\000\000\000\219\000\000\000\000\000\ -\219\000\000\000\000\000\219\000\000\000\000\000\000\000\219\000\ -\232\000\232\000\232\000\232\000\000\000\000\000\000\000\000\000\ -\232\000\232\000\232\000\000\000\000\000\232\000\232\000\000\000\ -\232\000\232\000\232\000\232\000\232\000\232\000\000\000\000\000\ -\232\000\232\000\232\000\232\000\232\000\232\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\232\000\232\000\000\000\000\000\ -\232\000\232\000\232\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\232\000\232\000\000\000\232\000\ -\000\000\000\000\000\000\232\000\232\000\000\000\232\000\000\000\ -\000\000\232\000\232\000\000\000\000\000\000\000\000\000\000\000\ -\232\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\232\000\232\000\221\000\232\000\232\000\ -\232\000\232\000\000\000\000\000\000\000\000\000\000\000\232\000\ -\000\000\232\000\000\000\000\000\232\000\000\000\000\000\232\000\ -\000\000\000\000\000\000\232\000\234\000\234\000\234\000\234\000\ -\000\000\000\000\000\000\000\000\234\000\234\000\234\000\000\000\ -\000\000\234\000\234\000\000\000\234\000\234\000\234\000\234\000\ -\234\000\234\000\000\000\000\000\234\000\234\000\234\000\234\000\ -\234\000\234\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\234\000\234\000\000\000\000\000\234\000\234\000\234\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\234\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\234\000\234\000\000\000\234\000\000\000\000\000\000\000\234\000\ -\234\000\000\000\234\000\000\000\000\000\234\000\234\000\000\000\ -\000\000\000\000\000\000\000\000\234\000\000\000\234\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\234\000\ -\234\000\233\000\234\000\234\000\234\000\234\000\000\000\000\000\ -\000\000\000\000\000\000\234\000\000\000\234\000\000\000\000\000\ -\234\000\000\000\000\000\234\000\000\000\000\000\000\000\234\000\ -\000\000\220\000\220\000\220\000\220\000\000\000\000\000\000\000\ -\000\000\220\000\220\000\220\000\000\000\000\000\220\000\220\000\ -\000\000\220\000\220\000\220\000\220\000\220\000\220\000\000\000\ -\000\000\220\000\220\000\220\000\220\000\220\000\220\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\220\000\220\000\000\000\ -\000\000\220\000\220\000\220\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\220\000\220\000\000\000\ -\220\000\000\000\000\000\000\000\220\000\220\000\000\000\220\000\ -\000\000\000\000\220\000\220\000\000\000\000\000\000\000\000\000\ -\000\000\220\000\000\000\220\000\000\000\000\000\238\000\000\000\ -\000\000\000\000\000\000\000\000\220\000\220\000\000\000\220\000\ -\220\000\220\000\220\000\000\000\000\000\000\000\000\000\000\000\ -\220\000\000\000\220\000\000\000\000\000\220\000\000\000\000\000\ -\220\000\000\000\000\000\000\000\220\000\221\000\221\000\221\000\ -\221\000\000\000\000\000\000\000\000\000\221\000\221\000\221\000\ -\000\000\000\000\221\000\221\000\000\000\221\000\221\000\221\000\ -\221\000\221\000\221\000\000\000\000\000\221\000\221\000\221\000\ -\221\000\221\000\221\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\221\000\221\000\000\000\000\000\221\000\221\000\221\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\221\000\221\000\000\000\221\000\000\000\000\000\000\000\ -\221\000\221\000\000\000\221\000\000\000\000\000\221\000\221\000\ -\000\000\000\000\000\000\237\000\000\000\221\000\000\000\221\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\221\000\221\000\000\000\221\000\221\000\221\000\221\000\000\000\ -\000\000\000\000\000\000\000\000\221\000\000\000\221\000\000\000\ -\000\000\221\000\000\000\000\000\221\000\000\000\000\000\000\000\ -\221\000\233\000\233\000\233\000\233\000\000\000\000\000\000\000\ -\000\000\233\000\233\000\233\000\000\000\000\000\233\000\233\000\ -\000\000\233\000\233\000\233\000\233\000\233\000\233\000\000\000\ -\000\000\233\000\233\000\233\000\233\000\233\000\233\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\000\ -\000\000\233\000\233\000\233\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\233\000\233\000\000\000\ -\233\000\000\000\000\000\236\000\233\000\233\000\000\000\233\000\ -\000\000\000\000\233\000\233\000\000\000\000\000\000\000\000\000\ -\000\000\233\000\000\000\233\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\233\000\233\000\000\000\233\000\ -\233\000\233\000\233\000\000\000\000\000\000\000\000\000\000\000\ -\233\000\000\000\233\000\000\000\000\000\233\000\238\000\000\000\ -\233\000\238\000\000\000\000\000\233\000\000\000\238\000\238\000\ -\238\000\000\000\000\000\238\000\238\000\000\000\238\000\238\000\ -\238\000\238\000\238\000\238\000\000\000\000\000\238\000\238\000\ -\238\000\000\000\238\000\238\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\238\000\000\000\000\000\238\000\238\000\ -\156\003\000\000\133\000\000\000\134\000\135\000\030\000\238\000\ -\136\000\000\000\000\000\151\001\138\000\000\000\000\000\000\000\ -\000\000\000\000\238\000\100\001\000\000\238\000\000\000\000\000\ -\000\000\238\000\238\000\000\000\238\000\000\000\000\000\238\000\ -\238\000\000\000\000\000\000\000\000\000\141\000\238\000\000\000\ -\238\000\000\000\000\000\000\000\142\000\000\000\000\000\000\000\ -\000\000\238\000\238\000\000\000\238\000\238\000\238\000\238\000\ -\143\000\144\000\000\000\000\000\000\000\238\000\000\000\238\000\ -\000\000\000\000\238\000\237\000\000\000\238\000\237\000\000\000\ -\000\000\238\000\000\000\237\000\237\000\237\000\000\000\000\000\ -\237\000\237\000\000\000\237\000\237\000\237\000\237\000\237\000\ -\237\000\000\000\000\000\237\000\237\000\237\000\000\000\237\000\ -\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\237\000\000\000\000\000\237\000\237\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\237\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\235\000\000\000\000\000\000\000\237\000\ -\000\000\000\000\237\000\000\000\000\000\000\000\237\000\237\000\ -\000\000\237\000\000\000\000\000\237\000\237\000\000\000\000\000\ -\000\000\000\000\000\000\237\000\000\000\237\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\237\000\237\000\ -\000\000\237\000\237\000\237\000\237\000\000\000\000\000\000\000\ -\000\000\000\000\237\000\236\000\237\000\000\000\236\000\237\000\ -\000\000\000\000\237\000\236\000\000\000\236\000\237\000\000\000\ -\236\000\236\000\000\000\236\000\236\000\236\000\236\000\236\000\ -\236\000\000\000\000\000\236\000\236\000\236\000\000\000\236\000\ -\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\236\000\000\000\000\000\236\000\236\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\236\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\099\001\000\000\000\000\000\000\236\000\ -\000\000\000\000\236\000\000\000\000\000\000\000\236\000\236\000\ -\000\000\236\000\000\000\000\000\236\000\236\000\000\000\000\000\ -\000\000\000\000\000\000\236\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\236\000\236\000\ -\000\000\236\000\236\000\236\000\236\000\000\000\000\000\000\000\ -\000\000\000\000\236\000\100\001\236\000\000\000\100\001\236\000\ -\000\000\000\000\236\000\100\001\000\000\100\001\236\000\000\000\ -\100\001\100\001\000\000\100\001\100\001\100\001\100\001\100\001\ -\100\001\000\000\000\000\100\001\100\001\100\001\000\000\100\001\ -\100\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\100\001\000\000\000\000\100\001\100\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\100\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\100\001\ -\000\000\142\002\100\001\000\000\000\000\000\000\100\001\100\001\ -\000\000\100\001\000\000\000\000\100\001\100\001\000\000\000\000\ -\000\000\000\000\000\000\100\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\100\001\100\001\ -\000\000\100\001\100\001\100\001\100\001\000\000\000\000\000\000\ -\000\000\000\000\100\001\235\000\100\001\000\000\235\000\100\001\ -\000\000\000\000\100\001\235\000\000\000\235\000\100\001\000\000\ -\235\000\235\000\000\000\235\000\235\000\235\000\235\000\235\000\ -\235\000\000\000\000\000\235\000\235\000\235\000\000\000\235\000\ -\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\235\000\000\000\000\000\235\000\235\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\235\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\235\000\ -\000\000\239\000\235\000\000\000\000\000\000\000\235\000\235\000\ -\000\000\235\000\000\000\000\000\235\000\235\000\000\000\000\000\ -\000\000\000\000\000\000\235\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\235\000\235\000\ -\000\000\235\000\235\000\235\000\235\000\000\000\000\000\000\000\ -\000\000\000\000\235\000\099\001\235\000\000\000\099\001\235\000\ -\000\000\000\000\235\000\099\001\000\000\099\001\235\000\000\000\ -\099\001\099\001\000\000\099\001\099\001\099\001\099\001\099\001\ -\099\001\000\000\000\000\099\001\099\001\099\001\000\000\099\001\ -\099\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\099\001\000\000\000\000\099\001\099\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\099\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\251\000\000\000\000\000\099\001\ -\000\000\000\000\099\001\000\000\000\000\000\000\099\001\099\001\ -\000\000\099\001\000\000\000\000\099\001\099\001\000\000\000\000\ -\000\000\000\000\000\000\099\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\246\002\000\000\000\000\000\000\099\001\099\001\ -\000\000\099\001\099\001\099\001\099\001\000\000\000\000\000\000\ -\000\000\000\000\099\001\000\000\099\001\000\000\000\000\099\001\ -\000\000\142\002\099\001\142\002\142\002\142\002\099\001\000\000\ -\000\000\142\002\000\000\000\000\000\000\000\000\142\002\000\000\ -\000\000\000\000\142\002\142\002\142\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\142\002\142\002\142\002\142\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\142\002\000\000\000\000\ -\000\000\000\000\142\002\000\000\000\000\000\000\000\000\242\000\ -\000\000\142\002\142\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\142\002\000\000\000\000\ -\142\002\142\002\000\000\142\002\142\002\142\002\000\000\142\002\ -\000\000\000\000\142\002\142\002\000\000\000\000\000\000\000\000\ -\000\000\142\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\142\002\142\002\000\000\142\002\ -\142\002\142\002\142\002\000\000\000\000\142\002\000\000\000\000\ -\000\000\239\000\000\000\000\000\239\000\142\002\142\002\000\000\ -\142\002\239\000\000\000\239\000\142\002\000\000\239\000\239\000\ -\000\000\000\000\239\000\000\000\239\000\239\000\239\000\000\000\ -\000\000\239\000\239\000\239\000\000\000\239\000\239\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\239\000\000\000\ -\000\000\239\000\239\000\000\000\000\000\000\000\000\000\215\000\ -\000\000\000\000\239\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\239\000\000\000\000\000\ -\239\000\000\000\000\000\000\000\239\000\239\000\000\000\239\000\ -\000\000\000\000\239\000\239\000\000\000\103\000\000\000\000\000\ -\000\000\239\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\239\000\239\000\000\000\239\000\ -\239\000\239\000\239\000\000\000\251\000\000\000\000\000\251\000\ -\239\000\000\000\239\000\000\000\251\000\239\000\251\000\000\000\ -\239\000\251\000\251\000\000\000\239\000\251\000\000\000\251\000\ -\251\000\251\000\000\000\000\000\251\000\251\000\251\000\000\000\ -\251\000\251\000\246\002\000\000\000\000\246\002\000\000\000\000\ -\000\000\251\000\000\000\000\000\251\000\251\000\000\000\246\002\ -\000\000\000\000\244\000\000\000\000\000\251\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\246\002\000\000\246\002\246\002\ -\251\000\000\000\000\000\251\000\000\000\000\000\000\000\251\000\ -\251\000\000\000\251\000\246\002\000\000\251\000\251\000\000\000\ -\246\002\000\000\000\000\000\000\251\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\246\002\251\000\ -\251\000\000\000\251\000\251\000\251\000\251\000\246\002\242\000\ -\000\000\000\000\242\000\251\000\246\002\251\000\000\000\242\000\ -\251\000\242\000\246\002\251\000\242\000\242\000\000\000\251\000\ -\242\000\000\000\242\000\242\000\242\000\000\000\246\002\242\000\ -\242\000\242\000\246\002\242\000\242\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\242\000\000\000\246\002\242\000\ -\242\000\246\002\000\000\000\000\000\000\243\000\000\000\000\000\ -\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\242\000\000\000\000\000\242\000\000\000\ -\000\000\000\000\242\000\242\000\000\000\242\000\000\000\000\000\ -\242\000\242\000\000\000\000\000\000\000\000\000\000\000\242\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\242\000\242\000\000\000\242\000\242\000\242\000\ -\242\000\000\000\000\000\000\000\000\000\000\000\242\000\215\000\ -\242\000\000\000\215\000\242\000\000\000\000\000\242\000\215\000\ -\000\000\215\000\242\000\000\000\215\000\215\000\000\000\000\000\ -\215\000\000\000\215\000\215\000\215\000\000\000\000\000\215\000\ -\215\000\215\000\000\000\215\000\215\000\103\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\215\000\000\000\000\000\215\000\ -\215\000\000\000\103\000\000\000\000\000\247\000\000\000\000\000\ -\215\000\000\000\000\000\000\000\000\000\000\000\000\000\103\000\ -\000\000\103\000\103\000\215\000\000\000\000\000\215\000\000\000\ -\000\000\000\000\215\000\215\000\000\000\215\000\103\000\000\000\ -\215\000\215\000\000\000\098\000\000\000\000\000\000\000\215\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\103\000\215\000\215\000\000\000\215\000\215\000\215\000\ -\215\000\103\000\244\000\000\000\000\000\244\000\215\000\103\000\ -\215\000\000\000\244\000\215\000\244\000\103\000\215\000\244\000\ -\244\000\000\000\215\000\244\000\000\000\244\000\244\000\244\000\ -\000\000\103\000\244\000\244\000\244\000\103\000\244\000\244\000\ -\246\002\000\000\000\000\000\000\000\000\000\000\000\000\244\000\ -\000\000\103\000\244\000\244\000\103\000\246\002\000\000\000\000\ -\245\000\000\000\000\000\244\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\246\002\000\000\246\002\246\002\244\000\000\000\ -\000\000\244\000\000\000\000\000\000\000\244\000\244\000\000\000\ -\244\000\246\002\000\000\244\000\244\000\000\000\102\000\000\000\ -\000\000\000\000\244\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\246\002\244\000\244\000\000\000\ -\244\000\244\000\244\000\244\000\246\002\243\000\000\000\000\000\ -\243\000\244\000\246\002\244\000\000\000\243\000\244\000\243\000\ -\246\002\244\000\243\000\243\000\000\000\244\000\243\000\000\000\ -\243\000\243\000\243\000\000\000\246\002\243\000\243\000\243\000\ -\246\002\243\000\243\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\243\000\000\000\246\002\243\000\243\000\246\002\ -\000\000\000\000\000\000\246\000\000\000\000\000\243\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\243\000\000\000\000\000\243\000\000\000\000\000\000\000\ -\243\000\243\000\000\000\243\000\000\000\000\000\243\000\243\000\ -\000\000\000\000\000\000\000\000\000\000\243\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\243\000\243\000\000\000\243\000\243\000\243\000\243\000\000\000\ -\000\000\000\000\000\000\000\000\243\000\247\000\243\000\000\000\ -\247\000\243\000\000\000\000\000\243\000\247\000\000\000\247\000\ -\243\000\000\000\247\000\247\000\000\000\000\000\247\000\000\000\ -\247\000\247\000\247\000\000\000\000\000\247\000\247\000\247\000\ -\000\000\247\000\247\000\098\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\247\000\000\000\000\000\247\000\247\000\000\000\ -\098\000\000\000\000\000\250\000\000\000\000\000\247\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\098\000\000\000\098\000\ -\098\000\247\000\000\000\000\000\247\000\000\000\000\000\000\000\ -\247\000\247\000\000\000\247\000\098\000\000\000\247\000\247\000\ -\000\000\000\000\000\000\000\000\000\000\247\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\098\000\ -\247\000\247\000\000\000\247\000\247\000\247\000\247\000\098\000\ -\245\000\000\000\000\000\245\000\247\000\098\000\247\000\000\000\ -\245\000\247\000\245\000\098\000\247\000\245\000\245\000\000\000\ -\247\000\245\000\000\000\245\000\245\000\245\000\000\000\098\000\ -\245\000\245\000\245\000\098\000\245\000\245\000\102\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\245\000\000\000\098\000\ -\245\000\245\000\098\000\102\000\000\000\000\000\248\000\000\000\ -\000\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\102\000\000\000\102\000\102\000\245\000\000\000\000\000\245\000\ -\000\000\000\000\000\000\245\000\245\000\000\000\245\000\102\000\ -\000\000\245\000\245\000\000\000\000\000\000\000\000\000\000\000\ -\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\102\000\245\000\245\000\000\000\245\000\245\000\ -\245\000\245\000\102\000\246\000\000\000\000\000\246\000\245\000\ -\102\000\245\000\000\000\246\000\245\000\246\000\102\000\245\000\ -\246\000\246\000\000\000\245\000\246\000\000\000\246\000\246\000\ -\246\000\000\000\102\000\246\000\246\000\246\000\102\000\246\000\ -\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\246\000\000\000\102\000\246\000\246\000\102\000\000\000\000\000\ -\000\000\249\000\000\000\000\000\246\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\246\000\ -\000\000\000\000\246\000\000\000\000\000\000\000\246\000\246\000\ -\000\000\246\000\000\000\000\000\246\000\246\000\000\000\000\000\ -\000\000\000\000\000\000\246\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\246\000\246\000\ -\000\000\246\000\246\000\246\000\246\000\000\000\000\000\000\000\ -\000\000\000\000\246\000\250\000\246\000\000\000\250\000\246\000\ -\000\000\000\000\246\000\250\000\000\000\250\000\246\000\000\000\ -\250\000\250\000\000\000\000\000\250\000\000\000\250\000\250\000\ -\250\000\000\000\000\000\250\000\250\000\250\000\000\000\250\000\ -\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\250\000\000\000\000\000\250\000\250\000\000\000\000\000\000\000\ -\000\000\179\000\000\000\000\000\250\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\250\000\ -\000\000\000\000\250\000\000\000\000\000\000\000\250\000\250\000\ -\000\000\250\000\000\000\000\000\250\000\250\000\000\000\000\000\ -\000\000\000\000\000\000\250\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\250\000\250\000\ -\000\000\250\000\250\000\250\000\250\000\000\000\248\000\000\000\ -\000\000\248\000\250\000\000\000\250\000\000\000\248\000\250\000\ -\248\000\000\000\250\000\248\000\248\000\000\000\250\000\248\000\ -\000\000\248\000\248\000\248\000\000\000\000\000\248\000\248\000\ -\248\000\000\000\248\000\248\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\248\000\000\000\000\000\248\000\248\000\ -\000\000\000\000\000\000\000\000\216\000\000\000\000\000\248\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\248\000\000\000\000\000\248\000\000\000\000\000\ -\000\000\248\000\248\000\000\000\248\000\000\000\000\000\248\000\ -\248\000\000\000\000\000\000\000\000\000\000\000\248\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\248\000\248\000\000\000\248\000\248\000\248\000\248\000\ -\000\000\249\000\000\000\000\000\249\000\248\000\000\000\248\000\ -\000\000\249\000\248\000\249\000\000\000\248\000\249\000\249\000\ -\000\000\248\000\249\000\000\000\249\000\249\000\249\000\000\000\ -\000\000\249\000\249\000\249\000\000\000\249\000\249\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\ -\000\000\249\000\249\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\029\002\000\000\000\000\249\000\000\000\000\000\ -\249\000\000\000\000\000\000\000\249\000\249\000\000\000\249\000\ -\000\000\000\000\249\000\249\000\000\000\000\000\000\000\000\000\ -\000\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\249\000\249\000\000\000\249\000\ -\249\000\249\000\249\000\000\000\000\000\000\000\000\000\000\000\ -\249\000\179\000\249\000\000\000\179\000\249\000\000\000\000\000\ -\249\000\179\000\000\000\179\000\249\000\000\000\179\000\179\000\ -\000\000\000\000\179\000\000\000\179\000\179\000\179\000\000\000\ -\000\000\179\000\179\000\179\000\000\000\179\000\179\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\179\000\000\000\ -\000\000\179\000\179\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\179\000\000\000\000\000\030\002\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\179\000\000\000\000\000\ -\179\000\000\000\000\000\000\000\179\000\179\000\000\000\179\000\ -\000\000\000\000\179\000\179\000\000\000\000\000\000\000\000\000\ -\000\000\179\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\179\000\179\000\000\000\179\000\ -\000\000\179\000\179\000\000\000\216\000\000\000\000\000\216\000\ -\179\000\000\000\179\000\000\000\216\000\179\000\216\000\000\000\ -\179\000\216\000\216\000\000\000\179\000\216\000\000\000\216\000\ -\216\000\216\000\000\000\000\000\216\000\000\000\216\000\000\000\ -\216\000\216\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\216\000\000\000\000\000\216\000\216\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\216\000\000\000\000\000\ -\063\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\216\000\000\000\000\000\216\000\000\000\000\000\000\000\216\000\ -\216\000\000\000\216\000\000\000\000\000\216\000\216\000\000\000\ -\000\000\000\000\000\000\000\000\216\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\216\000\ -\216\000\000\000\216\000\216\000\216\000\216\000\000\000\000\000\ -\000\000\000\000\000\000\216\000\000\000\216\000\000\000\000\000\ -\216\000\000\000\029\002\216\000\029\002\029\002\029\002\216\000\ -\000\000\000\000\029\002\000\000\000\000\000\000\000\000\029\002\ -\000\000\000\000\000\000\029\002\029\002\029\002\000\000\000\000\ -\000\000\000\000\000\000\000\000\029\002\029\002\029\002\029\002\ -\000\000\000\000\006\005\000\000\000\000\000\000\029\002\000\000\ -\000\000\000\000\029\002\029\002\000\000\064\002\000\000\000\000\ -\000\000\098\005\029\002\029\002\000\000\000\000\000\000\000\000\ -\234\001\000\000\000\000\000\000\000\000\000\000\029\002\000\000\ -\000\000\029\002\000\000\000\000\029\002\029\002\029\002\000\000\ -\029\002\000\000\000\000\029\002\029\002\000\000\000\000\000\000\ -\000\000\008\005\029\002\134\000\135\000\030\000\000\000\136\000\ -\000\000\000\000\137\000\009\005\000\000\029\002\029\002\000\000\ -\029\002\029\002\029\002\000\000\000\000\030\002\029\002\030\002\ -\030\002\030\002\000\000\139\000\000\000\030\002\029\002\000\000\ -\000\000\029\002\030\002\140\000\141\000\029\002\030\002\030\002\ -\030\002\000\000\000\000\142\000\000\000\000\000\000\000\030\002\ -\030\002\030\002\030\002\000\000\237\001\000\000\000\000\011\005\ -\144\000\030\002\000\000\000\000\000\000\030\002\030\002\000\000\ -\028\002\000\000\000\000\000\000\000\000\030\002\030\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\030\002\000\000\000\000\030\002\000\000\000\000\030\002\ -\030\002\030\002\000\000\030\002\000\000\000\000\030\002\030\002\ -\000\000\000\000\000\000\000\000\133\000\030\002\134\000\135\000\ -\030\000\000\000\136\000\000\000\000\000\137\000\138\000\000\000\ -\030\002\030\002\000\000\030\002\030\002\030\002\000\000\170\001\ -\063\002\030\002\063\002\063\002\063\002\000\000\139\000\000\000\ -\063\002\030\002\000\000\000\000\030\002\063\002\140\000\141\000\ -\030\002\063\002\063\002\063\002\000\000\000\000\142\000\000\000\ -\000\000\000\000\063\002\063\002\063\002\063\002\000\000\000\000\ -\000\000\000\000\143\000\144\000\063\002\000\000\000\000\000\000\ -\000\000\063\002\000\000\026\002\000\000\000\000\000\000\000\000\ -\063\002\063\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\063\002\000\000\000\000\063\002\ -\000\000\000\000\063\002\063\002\063\002\000\000\063\002\000\000\ -\000\000\063\002\063\002\000\000\000\000\000\000\000\000\000\000\ -\063\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\063\002\063\002\000\000\063\002\063\002\ -\063\002\063\002\000\000\000\000\000\000\064\002\000\000\064\002\ -\064\002\064\002\000\000\000\000\063\002\064\002\000\000\063\002\ -\000\000\000\000\064\002\063\002\000\000\000\000\064\002\064\002\ -\064\002\000\000\000\000\000\000\000\000\000\000\000\000\064\002\ -\064\002\064\002\064\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\064\002\000\000\000\000\000\000\000\000\064\002\000\000\ -\027\002\000\000\000\000\000\000\000\000\064\002\064\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\064\002\000\000\000\000\064\002\000\000\000\000\064\002\ -\064\002\064\002\000\000\064\002\000\000\000\000\064\002\064\002\ -\000\000\000\000\000\000\000\000\133\000\064\002\134\000\135\000\ -\030\000\000\000\136\000\000\000\000\000\137\000\138\000\000\000\ -\064\002\064\002\000\000\064\002\064\002\064\002\064\002\000\000\ -\028\002\000\000\028\002\028\002\028\002\000\000\139\000\000\000\ -\028\002\064\002\000\000\000\000\064\002\028\002\140\000\113\003\ -\064\002\028\002\028\002\028\002\000\000\000\000\142\000\000\000\ -\000\000\000\000\028\002\028\002\028\002\028\002\000\000\000\000\ -\000\000\235\005\143\000\144\000\028\002\000\000\000\000\000\000\ -\000\000\028\002\000\000\025\002\000\000\000\000\000\000\000\000\ -\028\002\028\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\028\002\000\000\000\000\028\002\ -\000\000\000\000\028\002\028\002\028\002\000\000\028\002\000\000\ -\000\000\000\000\028\002\000\000\000\000\000\000\000\000\133\000\ -\028\002\134\000\135\000\030\000\000\000\136\000\000\000\000\000\ -\137\000\138\000\000\000\028\002\028\002\000\000\028\002\028\002\ -\028\002\028\002\000\000\026\002\000\000\026\002\026\002\026\002\ -\000\000\139\000\000\000\026\002\028\002\000\000\000\000\028\002\ -\026\002\140\000\141\000\028\002\026\002\026\002\026\002\000\000\ -\000\000\142\000\000\000\000\000\000\000\026\002\026\002\026\002\ -\026\002\000\000\000\000\000\000\000\000\143\000\144\000\026\002\ -\000\000\000\000\000\000\000\000\026\002\000\000\022\002\000\000\ -\000\000\000\000\000\000\026\002\026\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\002\ -\000\000\000\000\026\002\000\000\000\000\026\002\026\002\026\002\ -\000\000\026\002\000\000\000\000\000\000\026\002\000\000\000\000\ -\000\000\000\000\000\000\026\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\026\002\026\002\ -\000\000\026\002\026\002\026\002\026\002\000\000\000\000\000\000\ -\027\002\032\000\027\002\027\002\027\002\000\000\000\000\026\002\ -\027\002\000\000\026\002\000\000\000\000\027\002\026\002\000\000\ -\000\000\027\002\027\002\027\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\027\002\027\002\027\002\027\002\000\000\000\000\ -\000\000\000\000\000\000\000\000\027\002\000\000\000\000\000\000\ -\000\000\027\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\027\002\027\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\011\002\027\002\000\000\000\000\027\002\ -\000\000\000\000\027\002\027\002\027\002\000\000\027\002\000\000\ -\000\000\000\000\027\002\000\000\000\000\000\000\000\000\000\000\ -\027\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\027\002\027\002\000\000\027\002\027\002\ -\027\002\027\002\000\000\025\002\000\000\025\002\025\002\025\002\ -\000\000\000\000\000\000\025\002\027\002\000\000\000\000\027\002\ -\025\002\000\000\000\000\027\002\025\002\025\002\025\002\000\000\ -\000\000\010\002\000\000\000\000\000\000\025\002\025\002\025\002\ -\025\002\000\000\000\000\000\000\000\000\000\000\000\000\025\002\ -\000\000\000\000\000\000\000\000\025\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\025\002\025\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\002\ -\000\000\000\000\025\002\000\000\000\000\025\002\025\002\025\002\ -\000\000\025\002\000\000\000\000\000\000\025\002\000\000\000\000\ -\000\000\000\000\000\000\025\002\008\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\025\002\025\002\ -\000\000\025\002\025\002\025\002\025\002\000\000\022\002\000\000\ -\022\002\022\002\000\000\000\000\000\000\000\000\022\002\025\002\ -\000\000\000\000\025\002\022\002\000\000\000\000\025\002\022\002\ -\022\002\022\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\022\002\022\002\022\002\022\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\022\002\000\000\000\000\000\000\169\000\022\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\022\002\022\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\032\000\022\002\000\000\032\000\022\002\000\000\000\000\ -\022\002\022\002\022\002\000\000\022\002\000\000\032\000\032\000\ -\022\002\000\000\032\000\000\000\000\000\000\000\022\002\000\000\ -\000\000\000\000\000\000\032\000\032\000\032\000\032\000\083\000\ -\000\000\022\002\022\002\000\000\022\002\022\002\022\002\022\002\ -\000\000\032\000\032\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\022\002\000\000\000\000\022\002\000\000\000\000\ -\000\000\022\002\000\000\011\002\000\000\032\000\011\002\000\000\ -\032\000\000\000\000\000\000\000\032\000\032\000\000\000\000\000\ -\011\002\000\000\032\000\032\000\011\002\000\000\000\000\000\000\ -\000\000\032\000\000\000\000\000\000\000\011\002\011\002\011\002\ -\011\002\000\000\000\000\000\000\000\000\032\000\000\000\032\000\ -\000\000\032\000\032\000\000\000\011\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\032\000\000\000\000\000\ -\032\000\000\000\000\000\000\000\032\000\000\000\000\000\011\002\ -\000\000\010\002\011\002\000\000\010\002\011\002\011\002\011\002\ -\000\000\000\000\000\000\000\000\011\002\011\002\010\002\000\000\ -\000\000\000\000\010\002\011\002\000\000\000\000\000\000\000\000\ -\248\002\000\000\000\000\010\002\010\002\010\002\010\002\011\002\ -\000\000\011\002\000\000\011\002\011\002\000\000\000\000\000\000\ -\000\000\000\000\010\002\000\000\000\000\000\000\000\000\011\002\ -\000\000\000\000\011\002\000\000\000\000\000\000\011\002\000\000\ -\000\000\000\000\000\000\000\000\008\002\010\002\000\000\008\002\ -\010\002\000\000\000\000\010\002\010\002\010\002\000\000\000\000\ -\000\000\008\002\010\002\010\002\000\000\008\002\000\000\000\000\ -\000\000\010\002\000\000\000\000\000\000\000\000\008\002\008\002\ -\008\002\008\002\000\000\000\000\000\000\010\002\000\000\010\002\ -\000\000\010\002\010\002\000\000\000\000\008\002\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\010\002\000\000\000\000\ -\010\002\000\000\000\000\000\000\010\002\000\000\169\000\000\000\ -\008\002\169\000\000\000\008\002\000\000\000\000\008\002\008\002\ -\008\002\000\000\000\000\169\000\000\000\008\002\008\002\169\000\ -\125\000\169\000\000\000\000\000\008\002\000\000\000\000\000\000\ -\169\000\169\000\169\000\169\000\000\000\000\000\000\000\000\000\ -\008\002\000\000\008\002\000\000\008\002\008\002\000\000\169\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\083\000\ -\008\002\000\000\083\000\008\002\000\000\000\000\000\000\008\002\ -\000\000\000\000\169\000\000\000\083\000\169\000\000\000\000\000\ -\083\000\169\000\169\000\000\000\000\000\000\000\000\000\169\000\ -\169\000\083\000\083\000\083\000\083\000\000\000\169\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\083\000\000\000\169\000\000\000\169\000\000\000\169\000\169\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\117\000\ -\000\000\000\000\169\000\083\000\000\000\169\000\083\000\000\000\ -\000\000\169\000\083\000\083\000\000\000\000\000\000\000\000\000\ -\083\000\083\000\037\005\000\000\134\000\135\000\030\000\083\000\ -\136\000\000\000\038\005\039\005\138\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\083\000\000\000\083\000\000\000\083\000\ -\083\000\040\005\000\000\000\000\041\005\000\000\000\000\000\000\ -\000\000\000\000\000\000\083\000\042\005\141\000\083\000\000\000\ -\248\002\000\000\083\000\248\002\142\000\248\002\248\002\248\002\ -\248\002\000\000\000\000\248\002\248\002\248\002\000\000\000\000\ -\143\000\144\000\000\000\248\002\000\000\000\000\000\000\248\002\ -\000\000\000\000\248\002\000\000\248\002\248\002\248\002\248\002\ -\248\002\248\002\248\002\248\002\248\002\000\000\000\000\248\002\ -\248\002\248\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\248\002\248\002\248\002\248\002\248\002\248\002\248\002\248\002\ -\248\002\248\002\248\002\248\002\248\002\248\002\143\001\248\002\ -\248\002\248\002\000\000\248\002\248\002\248\002\248\002\248\002\ -\248\002\000\000\248\002\248\002\000\000\248\002\248\002\000\000\ -\248\002\248\002\000\000\000\000\248\002\248\002\000\000\248\002\ -\248\002\248\002\248\002\248\002\248\002\248\002\000\000\248\002\ -\248\002\248\002\000\000\248\002\000\000\248\002\248\002\000\000\ -\248\002\000\000\248\002\248\002\248\002\248\002\248\002\248\002\ -\248\002\000\000\248\002\000\000\000\000\009\000\010\000\011\000\ -\000\000\000\000\000\000\012\000\013\000\014\000\000\000\000\000\ -\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\016\000\017\000\018\000\ -\019\000\020\000\021\000\000\000\000\000\000\000\000\000\022\000\ -\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\024\000\000\000\025\000\026\000\027\000\028\000\ -\029\000\000\000\000\000\030\000\031\000\000\000\133\002\032\000\ -\033\000\034\000\000\000\000\000\035\000\036\000\000\000\037\000\ -\038\000\000\000\039\000\000\000\000\000\000\000\040\000\000\000\ -\041\000\143\000\000\000\000\000\042\000\043\000\000\000\044\000\ -\000\000\000\000\000\000\000\000\009\000\010\000\011\000\000\000\ -\126\000\118\000\012\000\013\000\014\000\046\000\000\000\000\000\ -\000\000\000\000\047\000\048\000\049\000\050\000\051\000\052\000\ -\000\000\000\000\053\000\015\000\016\000\017\000\018\000\019\000\ -\020\000\021\000\000\000\000\000\000\000\000\000\022\000\000\000\ -\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\024\000\000\000\025\000\026\000\027\000\028\000\029\000\ -\000\000\000\000\030\000\031\000\000\000\000\000\032\000\033\000\ -\034\000\000\000\000\000\035\000\036\000\000\000\037\000\038\000\ -\000\000\039\000\000\000\000\000\000\000\040\000\000\000\041\000\ -\000\000\000\000\147\001\042\000\043\000\133\000\044\000\134\000\ -\135\000\030\000\000\000\136\000\000\000\000\000\137\000\138\000\ -\118\000\000\000\000\000\000\000\046\000\000\000\000\000\000\000\ -\000\000\047\000\048\000\049\000\050\000\051\000\052\000\139\000\ -\000\000\053\000\000\000\000\000\000\000\000\000\000\000\140\000\ -\113\003\000\000\000\000\009\000\010\000\011\000\000\000\142\000\ -\000\000\012\000\013\000\014\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\143\000\144\000\000\000\000\000\000\000\ -\000\000\000\000\015\000\016\000\017\000\018\000\019\000\020\000\ -\021\000\000\000\000\000\000\000\239\001\022\000\000\000\023\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\024\000\000\000\025\000\026\000\027\000\028\000\029\000\000\000\ -\000\000\030\000\031\000\000\000\000\000\032\000\033\000\034\000\ -\000\000\000\000\035\000\036\000\000\000\037\000\038\000\000\000\ -\039\000\000\000\000\000\000\000\040\000\000\000\041\000\000\000\ -\000\000\000\000\042\000\043\000\000\000\044\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\153\000\118\000\ -\000\000\000\000\000\000\046\000\000\000\000\000\000\000\000\000\ -\047\000\048\000\049\000\050\000\051\000\052\000\133\002\000\000\ -\053\000\000\000\133\002\000\000\133\002\000\000\133\002\000\000\ -\133\002\000\000\133\002\000\000\133\002\133\002\000\000\133\002\ -\133\002\143\000\000\000\000\000\143\000\000\000\000\000\000\000\ -\000\000\133\002\133\002\000\000\133\002\133\002\143\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\152\002\000\000\000\000\143\000\000\000\143\000\143\000\000\000\ -\133\002\133\002\133\002\133\002\000\000\133\002\133\002\000\000\ -\000\000\133\002\143\000\000\000\000\000\000\000\133\002\133\002\ -\133\002\000\000\000\000\000\000\000\000\133\002\000\000\133\002\ -\000\000\000\000\000\000\000\000\000\000\143\000\000\000\133\002\ -\000\000\000\000\133\002\000\000\143\000\143\000\000\000\133\002\ -\000\000\133\002\133\002\143\000\133\002\133\002\000\000\133\002\ -\000\000\143\000\081\000\133\002\000\000\000\000\133\002\000\000\ -\133\002\000\000\147\001\133\002\133\002\143\000\147\001\133\002\ -\147\001\143\000\147\001\000\000\147\001\000\000\147\001\000\000\ -\147\001\147\001\000\000\147\001\147\001\143\000\000\000\000\000\ -\143\000\000\000\000\000\000\000\000\000\147\001\000\000\000\000\ -\147\001\147\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\000\147\001\147\001\000\000\147\001\ -\236\001\147\001\147\001\000\000\000\000\147\001\000\000\000\000\ -\000\000\000\000\147\001\147\001\147\001\000\000\000\000\000\000\ -\000\000\147\001\000\000\147\001\239\001\000\000\000\000\239\001\ -\000\000\000\000\000\000\147\001\239\001\000\000\147\001\000\000\ -\000\000\239\001\000\000\147\001\000\000\147\001\147\001\239\001\ -\147\001\147\001\000\000\147\001\000\000\000\000\239\001\147\001\ -\239\001\239\001\147\001\000\000\147\001\000\000\000\000\147\001\ -\147\001\000\000\080\000\147\001\239\001\239\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\153\000\000\000\ -\239\001\153\000\000\000\239\001\000\000\000\000\239\001\239\001\ -\239\001\000\000\000\000\153\000\000\000\067\002\239\001\000\000\ -\000\000\000\000\000\000\058\002\239\001\058\002\058\002\058\002\ -\153\000\058\002\153\000\153\000\058\002\058\002\000\000\000\000\ -\239\001\000\000\000\000\000\000\239\001\239\001\000\000\153\000\ -\067\002\000\000\000\000\000\000\000\000\058\002\000\000\000\000\ -\239\001\000\000\154\000\239\001\000\000\058\002\058\002\000\000\ -\152\002\000\000\153\000\152\002\000\000\058\002\049\002\000\000\ -\153\000\153\000\153\000\000\000\000\000\152\002\000\000\049\002\ -\153\000\058\002\058\002\000\000\000\000\000\000\153\000\000\000\ -\000\000\000\000\152\002\000\000\152\002\152\002\000\000\000\000\ -\000\000\000\000\153\000\000\000\000\000\000\000\153\000\049\002\ -\000\000\152\002\049\002\000\000\000\000\000\000\000\000\201\001\ -\000\000\000\000\153\000\049\002\000\000\153\000\000\000\000\000\ -\000\000\000\000\081\000\000\000\152\002\081\000\000\000\000\000\ -\143\002\000\000\152\002\152\002\152\002\000\000\000\000\081\000\ -\000\000\143\002\152\002\081\000\000\000\000\000\000\000\000\000\ -\152\002\000\000\000\000\000\000\081\000\081\000\081\000\081\000\ -\000\000\000\000\000\000\000\000\152\002\000\000\000\000\000\000\ -\152\002\143\002\000\000\081\000\143\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\152\002\143\002\000\000\152\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\081\000\000\000\ -\236\001\081\000\248\002\236\001\000\000\081\000\081\000\000\000\ -\236\001\000\000\000\000\000\000\081\000\236\001\000\000\000\000\ -\000\000\000\000\081\000\236\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\236\001\000\000\236\001\236\001\081\000\000\000\ -\081\000\000\000\081\000\081\000\000\000\000\000\000\000\000\000\ -\000\000\236\001\000\000\000\000\000\000\000\000\081\000\000\000\ -\000\000\081\000\000\000\000\000\000\000\000\000\000\000\201\001\ -\000\000\000\000\080\000\000\000\236\001\080\000\000\000\236\001\ -\070\000\000\000\236\001\236\001\236\001\000\000\000\000\080\000\ -\000\000\000\000\236\001\080\000\000\000\000\000\000\000\000\000\ -\236\001\000\000\000\000\000\000\080\000\080\000\080\000\080\000\ -\000\000\000\000\000\000\000\000\236\001\000\000\000\000\000\000\ -\236\001\236\001\000\000\080\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\236\001\000\000\000\000\236\001\ -\000\000\000\000\000\000\000\000\000\000\202\001\080\000\000\000\ -\000\000\080\000\000\000\000\000\000\000\080\000\080\000\000\000\ -\000\000\000\000\154\000\000\000\080\000\154\000\000\000\000\000\ -\000\000\000\000\080\000\000\000\000\000\000\000\000\000\154\000\ -\000\000\000\000\000\000\000\000\000\000\154\000\080\000\000\000\ -\080\000\000\000\080\000\080\000\154\000\000\000\154\000\154\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\080\000\000\000\ -\000\000\080\000\204\001\154\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\154\000\000\000\000\000\000\000\000\000\201\001\ -\000\000\000\000\201\001\000\000\000\000\000\000\154\000\000\000\ -\000\000\154\000\000\000\000\000\201\001\154\000\154\000\000\000\ -\154\000\000\000\201\001\000\000\154\000\000\000\000\000\000\000\ -\000\000\201\001\154\000\201\001\201\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\154\000\203\001\ -\201\001\000\000\154\000\154\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\154\000\000\000\ -\000\000\154\000\000\000\201\001\000\000\000\000\201\001\000\000\ -\000\000\000\000\201\001\201\001\000\000\000\000\000\000\000\000\ -\000\000\201\001\248\002\000\000\000\000\248\002\000\000\201\001\ -\000\000\000\000\248\002\000\000\000\000\142\002\000\000\248\002\ -\000\000\000\000\000\000\201\001\205\001\248\002\000\000\201\001\ -\201\001\000\000\000\000\000\000\248\002\236\001\248\002\248\002\ -\000\000\000\000\000\000\201\001\000\000\000\000\201\001\000\000\ -\000\000\000\000\000\000\248\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\201\001\ -\000\000\000\000\201\001\000\000\000\000\000\000\248\002\000\000\ -\070\000\248\002\000\000\070\000\201\001\248\002\248\002\000\000\ -\000\000\000\000\201\001\000\000\248\002\070\000\000\000\000\000\ -\000\000\201\001\248\002\201\001\201\001\000\000\000\000\000\000\ -\000\000\000\000\070\000\000\000\070\000\070\000\248\002\000\000\ -\201\001\000\000\248\002\248\002\000\000\209\001\000\000\000\000\ -\070\000\070\000\000\000\000\000\000\000\000\000\248\002\000\000\ -\000\000\248\002\000\000\201\001\000\000\202\001\201\001\000\000\ -\202\001\000\000\201\001\201\001\070\000\000\000\000\000\070\000\ -\000\000\201\001\202\001\070\000\070\000\000\000\000\000\201\001\ -\202\001\000\000\070\000\000\000\000\000\000\000\000\000\202\001\ -\070\000\202\001\202\001\201\001\000\000\000\000\236\001\201\001\ -\201\001\000\000\000\000\000\000\070\000\000\000\202\001\248\002\ -\070\000\070\000\000\000\201\001\000\000\000\000\201\001\000\000\ -\000\000\000\000\204\001\000\000\070\000\204\001\000\000\070\000\ -\000\000\202\001\000\000\000\000\202\001\000\000\000\000\204\001\ -\202\001\202\001\000\000\000\000\000\000\204\001\000\000\202\001\ -\000\000\000\000\000\000\000\000\204\001\202\001\204\001\204\001\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\248\002\202\001\000\000\204\001\000\000\202\001\202\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\203\001\ -\000\000\202\001\203\001\000\000\202\001\000\000\204\001\000\000\ -\000\000\204\001\000\000\000\000\203\001\204\001\204\001\000\000\ -\000\000\000\000\203\001\000\000\204\001\000\000\000\000\000\000\ -\000\000\203\001\204\001\203\001\203\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\204\001\000\000\ -\203\001\117\000\204\001\204\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\205\001\000\000\204\001\205\001\ -\000\000\204\001\000\000\203\001\000\000\236\001\203\001\000\000\ -\000\000\205\001\203\001\203\001\000\000\236\001\000\000\205\001\ -\000\000\203\001\236\001\000\000\000\000\000\000\205\001\203\001\ -\205\001\205\001\000\000\000\000\000\000\246\002\000\000\236\001\ -\000\000\236\001\236\001\203\001\000\000\205\001\118\000\203\001\ -\203\001\000\000\000\000\000\000\000\000\000\000\236\001\000\000\ -\000\000\000\000\000\000\203\001\000\000\000\000\203\001\000\000\ -\205\001\000\000\000\000\205\001\000\000\000\000\000\000\205\001\ -\205\001\236\001\000\000\000\000\236\001\000\000\205\001\236\001\ -\236\001\236\001\000\000\000\000\205\001\209\001\000\000\236\001\ -\209\001\000\000\000\000\000\000\000\000\236\001\000\000\192\001\ -\205\001\000\000\209\001\000\000\205\001\205\001\000\000\000\000\ -\209\001\236\001\000\000\000\000\000\000\236\001\236\001\209\001\ -\205\001\209\001\209\001\205\001\000\000\000\000\000\000\000\000\ -\000\000\236\001\000\000\000\000\236\001\000\000\209\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\236\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\248\002\ -\000\000\209\001\000\000\236\001\209\001\000\000\000\000\248\002\ -\209\001\209\001\000\000\000\000\248\002\000\000\000\000\209\001\ -\236\001\000\000\236\001\236\001\000\000\209\001\000\000\000\000\ -\236\001\248\002\000\000\248\002\248\002\000\000\000\000\236\001\ -\000\000\209\001\000\000\000\000\000\000\209\001\209\001\000\000\ -\248\002\000\000\000\000\000\000\000\000\054\000\000\000\000\000\ -\248\002\209\001\236\001\000\000\209\001\236\001\057\000\000\000\ -\236\001\236\001\236\001\248\002\000\000\248\002\248\002\000\000\ -\236\001\000\000\248\002\248\002\000\000\000\000\236\001\000\000\ -\000\000\248\002\248\002\000\000\248\002\248\002\000\000\248\002\ -\000\000\000\000\236\001\000\000\000\000\000\000\236\001\236\001\ -\000\000\248\002\000\000\248\002\000\000\000\000\000\000\248\002\ -\248\002\000\000\236\001\000\000\000\000\236\001\000\000\000\000\ -\000\000\117\000\000\000\248\002\248\002\000\000\248\002\248\002\ -\000\000\000\000\000\000\248\002\248\002\000\000\117\000\000\000\ -\000\000\000\000\248\002\000\000\000\000\000\000\061\000\000\000\ -\248\002\000\000\000\000\117\000\000\000\117\000\117\000\000\000\ -\000\000\000\000\000\000\000\000\248\002\000\000\000\000\000\000\ -\248\002\248\002\117\000\064\000\000\000\246\002\000\000\000\000\ -\246\002\000\000\000\000\000\000\248\002\000\000\118\000\248\002\ -\000\000\000\000\246\002\000\000\000\000\117\000\000\000\000\000\ -\117\000\000\000\000\000\118\000\117\000\117\000\000\000\246\002\ -\000\000\246\002\246\002\117\000\000\000\000\000\000\000\000\000\ -\118\000\117\000\118\000\118\000\000\000\000\000\246\002\246\002\ -\000\000\000\000\000\000\000\000\000\000\117\000\000\000\118\000\ -\000\000\117\000\117\000\000\000\000\000\000\000\000\000\192\001\ -\000\000\246\002\000\000\000\000\246\002\117\000\000\000\000\000\ -\117\000\246\002\118\000\000\000\192\001\118\000\000\000\246\002\ -\000\000\118\000\118\000\000\000\000\000\246\002\000\000\000\000\ -\118\000\192\001\000\000\192\001\192\001\000\000\118\000\000\000\ -\108\000\246\002\000\000\000\000\000\000\246\002\246\002\000\000\ -\192\001\000\000\118\000\000\000\000\000\000\000\118\000\118\000\ -\000\000\246\002\000\000\000\000\246\002\000\000\000\000\000\000\ -\000\000\000\000\118\000\192\001\000\000\118\000\192\001\000\000\ -\000\000\000\000\192\001\192\001\000\000\000\000\000\000\000\000\ -\236\001\192\001\000\000\000\000\000\000\000\000\000\000\192\001\ -\236\001\000\000\000\000\000\000\000\000\236\001\000\000\000\000\ -\000\000\000\000\000\000\192\001\000\000\054\000\000\000\192\001\ -\192\001\000\000\236\001\000\000\236\001\236\001\057\000\000\000\ -\000\000\000\000\054\000\192\001\000\000\000\000\192\001\000\000\ -\000\000\236\001\000\000\057\000\000\000\000\000\000\000\054\000\ -\000\000\054\000\054\000\000\000\000\000\000\000\000\000\000\000\ -\057\000\000\000\057\000\057\000\236\001\000\000\054\000\000\000\ -\000\000\000\000\236\001\236\001\236\001\000\000\000\000\057\000\ -\000\000\000\000\236\001\000\000\000\000\000\000\000\000\000\000\ -\236\001\054\000\000\000\000\000\054\000\000\000\000\000\000\000\ -\000\000\054\000\057\000\000\000\236\001\057\000\000\000\054\000\ -\236\001\000\000\057\000\000\000\000\000\054\000\061\000\000\000\ -\057\000\000\000\000\000\000\000\236\001\000\000\057\000\236\001\ -\000\000\054\000\000\000\061\000\000\000\054\000\054\000\000\000\ -\000\000\000\000\057\000\064\000\000\000\000\000\057\000\057\000\ -\061\000\054\000\061\000\061\000\054\000\000\000\000\000\000\000\ -\064\000\000\000\057\000\000\000\000\000\057\000\000\000\061\000\ -\000\000\000\000\000\000\000\000\000\000\064\000\000\000\064\000\ -\064\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\061\000\000\000\064\000\061\000\000\000\246\002\ -\000\000\000\000\061\000\000\000\000\000\000\000\000\000\000\000\ -\061\000\000\000\000\000\000\000\246\002\000\000\061\000\064\000\ -\000\000\000\000\064\000\000\000\000\000\000\000\000\000\064\000\ -\000\000\246\002\061\000\246\002\246\002\064\000\061\000\061\000\ -\000\000\000\000\000\000\064\000\000\000\000\000\000\000\000\000\ -\246\002\000\000\061\000\000\000\000\000\061\000\000\000\064\000\ -\108\000\000\000\000\000\064\000\064\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\246\002\000\000\108\000\246\002\064\000\ -\000\000\000\000\064\000\246\002\000\000\000\000\000\000\000\000\ -\000\000\246\002\108\000\000\000\108\000\108\000\000\000\246\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\108\000\000\000\246\002\000\000\000\000\000\000\246\002\ -\246\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\246\002\108\000\000\000\246\002\000\000\ -\000\000\000\000\000\000\108\000\108\000\000\000\000\000\241\002\ -\000\000\000\000\108\000\000\000\241\002\241\002\241\002\241\002\ -\108\000\000\000\241\002\241\002\241\002\241\002\000\000\000\000\ -\000\000\000\000\241\002\000\000\108\000\000\000\000\000\000\000\ -\108\000\241\002\000\000\241\002\241\002\241\002\241\002\241\002\ -\241\002\241\002\241\002\000\000\108\000\000\000\241\002\108\000\ -\241\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\ -\000\000\000\000\241\002\241\002\000\000\000\000\241\002\241\002\ -\241\002\241\002\000\000\241\002\241\002\241\002\241\002\241\002\ -\000\000\241\002\000\000\000\000\241\002\241\002\000\000\241\002\ -\241\002\000\000\000\000\241\002\241\002\000\000\241\002\000\000\ -\241\002\241\002\000\000\241\002\241\002\000\000\000\000\241\002\ -\241\002\000\000\241\002\000\000\241\002\241\002\000\000\241\002\ -\000\000\241\002\241\002\241\002\241\002\241\002\241\002\241\002\ -\248\002\241\002\000\000\000\000\000\000\248\002\248\002\248\002\ -\248\002\000\000\000\000\248\002\248\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\248\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\248\002\000\000\248\002\000\000\248\002\248\002\ -\248\002\248\002\248\002\248\002\000\000\000\000\000\000\248\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\248\002\248\002\248\002\248\002\248\002\248\002\248\002\ -\248\002\000\000\000\000\248\002\248\002\000\000\000\000\248\002\ -\248\002\248\002\000\000\000\000\248\002\248\002\248\002\248\002\ -\248\002\000\000\248\002\000\000\000\000\248\002\248\002\000\000\ -\000\000\248\002\000\000\000\000\248\002\248\002\000\000\248\002\ -\000\000\248\002\248\002\000\000\000\000\248\002\000\000\000\000\ -\000\000\248\002\000\000\248\002\000\000\248\002\248\002\000\000\ -\248\002\000\000\248\002\248\002\000\000\248\002\248\002\248\002\ -\248\002\000\000\248\002\022\001\023\001\024\001\000\000\000\000\ -\009\000\010\000\025\001\000\000\026\001\000\000\012\000\013\000\ -\000\000\000\000\027\001\028\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\029\001\000\000\ -\000\000\017\000\018\000\019\000\020\000\021\000\000\000\030\001\ -\000\000\000\000\022\000\000\000\000\000\031\001\032\001\033\001\ -\034\001\035\001\036\001\000\000\000\000\024\000\000\000\025\000\ -\026\000\027\000\028\000\029\000\000\000\000\000\030\000\000\000\ -\037\001\000\000\032\000\033\000\034\000\000\000\000\000\000\000\ -\036\000\000\000\038\001\039\001\000\000\040\001\000\000\000\000\ -\000\000\040\000\000\000\000\000\000\000\041\001\042\001\043\001\ -\044\001\045\001\046\001\000\000\000\000\000\000\000\000\000\000\ -\000\000\047\001\000\000\000\000\000\000\048\001\000\000\049\001\ -\046\000\000\000\000\000\000\000\000\000\047\000\048\000\000\000\ -\050\000\051\000\022\001\023\001\024\001\053\000\000\000\009\000\ -\010\000\025\001\000\000\026\001\000\000\012\000\013\000\000\000\ -\000\000\066\003\028\001\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\029\001\000\000\000\000\ -\017\000\018\000\019\000\020\000\021\000\000\000\030\001\000\000\ -\000\000\022\000\000\000\000\000\031\001\032\001\033\001\034\001\ -\035\001\036\001\000\000\000\000\024\000\000\000\025\000\026\000\ -\027\000\028\000\029\000\000\000\000\000\030\000\000\000\037\001\ -\000\000\032\000\033\000\034\000\000\000\000\000\000\000\036\000\ -\000\000\038\001\039\001\000\000\067\003\000\000\000\000\000\000\ -\040\000\000\000\000\000\000\000\041\001\042\001\043\001\044\001\ -\045\001\046\001\000\000\000\000\000\000\000\000\000\000\248\002\ -\068\003\248\002\248\002\248\002\048\001\248\002\049\001\046\000\ -\248\002\248\002\000\000\000\000\047\000\048\000\000\000\050\000\ -\051\000\248\002\000\000\000\000\053\000\000\000\248\002\248\002\ -\248\002\248\002\000\000\000\000\248\002\248\002\248\002\000\000\ -\000\000\248\002\248\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\248\002\000\000\248\002\000\000\248\002\248\002\248\002\ -\248\002\248\002\248\002\248\002\000\000\248\002\248\002\000\000\ -\248\002\000\000\248\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\248\002\000\000\248\002\248\002\248\002\ -\248\002\248\002\000\000\000\000\248\002\248\002\000\000\000\000\ -\248\002\248\002\248\002\000\000\000\000\248\002\248\002\000\000\ -\248\002\248\002\000\000\248\002\000\000\000\000\000\000\248\002\ -\000\000\248\002\000\000\000\000\000\000\248\002\248\002\112\002\ -\248\002\000\000\000\000\000\000\186\002\186\002\186\002\000\000\ -\000\000\248\002\186\002\186\002\000\000\000\000\248\002\000\000\ -\000\000\000\000\000\000\248\002\248\002\248\002\248\002\248\002\ -\248\002\000\000\000\000\248\002\000\000\186\002\186\002\186\002\ -\186\002\186\002\000\000\000\000\000\000\000\000\186\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\186\002\000\000\186\002\186\002\186\002\186\002\186\002\ -\000\000\000\000\186\002\000\000\000\000\000\000\186\002\186\002\ -\186\002\000\000\000\000\000\000\186\002\000\000\186\002\186\002\ -\000\000\000\000\000\000\000\000\000\000\186\002\000\000\000\000\ -\000\000\000\000\000\000\186\002\186\002\113\002\186\002\000\000\ -\000\000\000\000\187\002\187\002\187\002\112\002\000\000\000\000\ -\187\002\187\002\000\000\000\000\186\002\000\000\000\000\000\000\ -\000\000\186\002\186\002\000\000\186\002\186\002\000\000\000\000\ -\000\000\186\002\000\000\187\002\187\002\187\002\187\002\187\002\ -\000\000\000\000\000\000\000\000\187\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\187\002\ -\000\000\187\002\187\002\187\002\187\002\187\002\000\000\000\000\ -\187\002\000\000\000\000\000\000\187\002\187\002\187\002\000\000\ -\000\000\000\000\187\002\000\000\187\002\187\002\000\000\000\000\ -\000\000\000\000\000\000\187\002\000\000\000\000\000\000\000\000\ -\000\000\187\002\187\002\110\002\187\002\000\000\000\000\000\000\ -\188\002\188\002\188\002\113\002\000\000\000\000\188\002\188\002\ -\000\000\000\000\187\002\000\000\000\000\000\000\000\000\187\002\ -\187\002\000\000\187\002\187\002\000\000\000\000\000\000\187\002\ -\000\000\188\002\188\002\188\002\188\002\188\002\000\000\000\000\ -\000\000\000\000\188\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\188\002\000\000\188\002\ -\188\002\188\002\188\002\188\002\000\000\000\000\188\002\000\000\ -\000\000\000\000\188\002\188\002\188\002\000\000\000\000\000\000\ -\188\002\000\000\188\002\188\002\000\000\000\000\000\000\000\000\ -\000\000\188\002\000\000\000\000\000\000\000\000\000\000\188\002\ -\188\002\111\002\188\002\000\000\000\000\000\000\189\002\189\002\ -\189\002\110\002\000\000\000\000\189\002\189\002\000\000\000\000\ -\188\002\000\000\000\000\000\000\000\000\188\002\188\002\000\000\ -\188\002\188\002\000\000\000\000\000\000\188\002\000\000\189\002\ -\189\002\189\002\189\002\189\002\000\000\000\000\000\000\000\000\ -\189\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\189\002\000\000\189\002\189\002\189\002\ -\189\002\189\002\000\000\000\000\189\002\000\000\000\000\000\000\ -\189\002\189\002\189\002\000\000\000\000\000\000\189\002\000\000\ -\189\002\189\002\000\000\000\000\000\000\000\000\000\000\189\002\ -\000\000\000\000\000\000\000\000\000\000\189\002\189\002\000\000\ -\189\002\000\000\000\000\000\000\000\000\000\000\000\000\111\002\ -\220\000\221\000\222\000\000\000\000\000\000\000\189\002\000\000\ -\223\000\000\000\224\000\189\002\189\002\000\000\189\002\189\002\ -\225\000\226\000\227\000\189\002\000\000\228\000\229\000\230\000\ -\000\000\231\000\232\000\233\000\000\000\234\000\235\000\236\000\ -\237\000\000\000\000\000\000\000\238\000\239\000\240\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\241\000\242\000\000\000\ -\000\000\243\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\244\000\245\000\000\000\000\000\ -\000\000\031\002\246\000\247\000\000\000\031\002\000\000\248\000\ -\249\000\250\000\251\000\252\000\253\000\254\000\000\000\255\000\ -\000\000\000\000\031\002\000\000\031\002\000\001\000\000\014\002\ -\000\000\000\000\001\001\031\002\031\002\000\000\000\000\000\000\ -\002\001\000\000\000\000\003\001\004\001\031\002\005\001\006\001\ -\007\001\008\001\009\001\000\000\010\001\011\001\012\001\013\001\ -\014\001\031\002\031\002\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\031\002\000\000\000\000\ -\000\000\031\002\000\000\031\002\031\002\031\002\000\000\031\002\ -\000\000\000\000\031\002\000\000\000\000\000\000\022\001\023\001\ -\024\001\000\000\000\000\000\000\010\000\200\001\000\000\026\001\ -\000\000\000\000\013\000\014\002\031\002\027\001\028\001\000\000\ -\031\002\000\000\031\002\000\000\000\000\031\002\000\000\000\000\ -\000\000\029\001\158\000\000\000\017\000\018\000\031\002\000\000\ -\031\002\000\000\030\001\000\000\000\000\000\000\000\000\000\000\ -\031\001\032\001\033\001\034\001\035\001\036\001\000\000\000\000\ -\024\000\000\000\159\000\160\000\000\000\161\000\162\000\000\000\ -\000\000\030\000\000\000\037\001\000\000\000\000\163\000\164\000\ -\000\000\000\000\000\000\000\000\000\000\201\001\202\001\000\000\ -\203\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\041\001\042\001\204\001\205\001\045\001\206\001\000\000\000\000\ -\000\000\000\000\000\000\000\000\047\001\000\000\000\000\167\000\ -\048\001\000\000\049\001\046\000\000\000\000\000\000\000\000\000\ -\047\000\000\000\227\002\050\000\168\000\022\001\023\001\024\001\ -\000\000\000\000\000\000\010\000\200\001\000\000\026\001\000\000\ -\000\000\013\000\000\000\000\000\027\001\028\001\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\029\001\158\000\000\000\017\000\018\000\000\000\000\000\000\000\ -\000\000\030\001\000\000\000\000\000\000\000\000\000\000\031\001\ -\032\001\033\001\034\001\035\001\036\001\000\000\000\000\024\000\ -\000\000\159\000\160\000\000\000\161\000\162\000\000\000\000\000\ -\030\000\000\000\037\001\000\000\000\000\163\000\164\000\000\000\ -\000\000\000\000\000\000\000\000\201\001\202\001\000\000\203\001\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\041\001\ -\042\001\204\001\205\001\045\001\206\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\047\001\000\000\000\000\167\000\048\001\ -\000\000\049\001\046\000\000\000\000\000\000\000\000\000\047\000\ -\000\000\176\003\050\000\168\000\022\001\023\001\024\001\000\000\ -\000\000\000\000\010\000\200\001\000\000\026\001\000\000\000\000\ -\013\000\000\000\000\000\027\001\028\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\001\ -\158\000\000\000\017\000\018\000\000\000\000\000\000\000\000\000\ -\030\001\000\000\000\000\000\000\000\000\000\000\031\001\032\001\ -\033\001\034\001\035\001\036\001\000\000\000\000\024\000\000\000\ -\159\000\160\000\000\000\161\000\162\000\000\000\000\000\030\000\ -\000\000\037\001\000\000\000\000\163\000\164\000\000\000\000\000\ -\000\000\000\000\000\000\201\001\202\001\000\000\203\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\041\001\042\001\ -\204\001\205\001\045\001\206\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\047\001\000\000\000\000\167\000\048\001\000\000\ -\049\001\046\000\000\000\000\000\000\000\000\000\047\000\000\000\ -\127\004\050\000\168\000\022\001\023\001\024\001\000\000\000\000\ -\000\000\010\000\200\001\000\000\026\001\000\000\000\000\013\000\ -\000\000\000\000\027\001\028\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\029\001\158\000\ -\000\000\017\000\018\000\000\000\000\000\000\000\000\000\030\001\ -\000\000\000\000\000\000\000\000\000\000\031\001\032\001\033\001\ -\034\001\035\001\036\001\000\000\000\000\024\000\000\000\159\000\ -\160\000\000\000\161\000\162\000\000\000\000\000\030\000\000\000\ -\037\001\000\000\000\000\163\000\164\000\000\000\000\000\000\000\ -\000\000\000\000\201\001\202\001\000\000\203\001\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\041\001\042\001\204\001\ -\205\001\045\001\206\001\000\000\000\000\144\003\000\000\000\000\ -\000\000\047\001\000\000\010\000\167\000\048\001\000\000\049\001\ -\046\000\013\000\000\000\000\000\066\003\047\000\000\000\000\000\ -\050\000\168\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\158\000\000\000\017\000\018\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\ -\000\000\159\000\160\000\000\000\161\000\162\000\000\000\000\000\ -\030\000\000\000\192\002\000\000\000\000\163\000\164\000\000\000\ -\010\000\000\000\000\000\000\000\165\000\000\000\013\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\166\000\000\000\000\000\000\000\000\000\158\000\000\000\ -\017\000\018\000\000\000\145\003\000\000\000\000\167\000\000\000\ -\000\000\000\000\046\000\000\000\000\000\000\000\000\000\047\000\ -\000\000\000\000\050\000\168\000\024\000\000\000\159\000\160\000\ -\000\000\161\000\162\000\000\000\000\000\030\000\000\000\194\002\ -\000\000\000\000\163\000\164\000\000\000\010\000\000\000\000\000\ -\000\000\165\000\000\000\013\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\166\000\000\000\ -\000\000\000\000\000\000\158\000\000\000\017\000\018\000\000\000\ -\000\000\000\000\000\000\167\000\000\000\000\000\000\000\046\000\ -\000\000\000\000\000\000\000\000\047\000\000\000\000\000\050\000\ -\168\000\024\000\000\000\159\000\160\000\000\000\161\000\162\000\ -\000\000\000\000\030\000\000\000\134\004\000\000\000\000\163\000\ -\164\000\000\000\010\000\000\000\000\000\000\000\165\000\000\000\ -\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\166\000\000\000\000\000\000\000\000\000\ -\158\000\000\000\017\000\018\000\000\000\000\000\000\000\000\000\ -\167\000\000\000\000\000\000\000\046\000\000\000\000\000\000\000\ -\000\000\047\000\000\000\000\000\050\000\168\000\024\000\000\000\ -\159\000\160\000\000\000\161\000\162\000\000\000\000\000\030\000\ -\000\000\136\004\000\000\000\000\163\000\164\000\000\000\010\000\ -\000\000\000\000\000\000\165\000\000\000\013\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\166\000\000\000\000\000\000\000\000\000\158\000\000\000\017\000\ -\018\000\000\000\000\000\000\000\000\000\167\000\000\000\000\000\ -\000\000\046\000\000\000\000\000\000\000\000\000\047\000\000\000\ -\000\000\050\000\168\000\024\000\000\000\159\000\160\000\000\000\ -\161\000\162\000\000\000\000\000\030\000\000\000\138\004\000\000\ -\000\000\163\000\164\000\000\000\010\000\000\000\000\000\000\000\ -\165\000\000\000\013\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\166\000\000\000\000\000\ -\000\000\000\000\158\000\000\000\017\000\018\000\000\000\000\000\ -\000\000\000\000\167\000\000\000\000\000\000\000\046\000\000\000\ -\000\000\000\000\000\000\047\000\000\000\000\000\050\000\168\000\ -\024\000\000\000\159\000\160\000\000\000\161\000\162\000\000\000\ -\000\000\030\000\000\000\000\000\000\000\000\000\163\000\164\000\ -\009\000\010\000\011\000\000\000\000\000\165\000\012\000\013\000\ -\014\000\023\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\166\000\000\000\000\000\000\000\000\000\015\000\ -\016\000\017\000\018\000\019\000\020\000\021\000\000\000\167\000\ -\000\000\000\000\022\000\046\000\023\000\000\000\000\000\000\000\ -\047\000\000\000\000\000\050\000\168\000\024\000\000\000\025\000\ -\026\000\027\000\028\000\029\000\000\000\000\000\030\000\031\000\ -\000\000\000\000\032\000\033\000\034\000\000\000\000\000\035\000\ -\036\000\000\000\037\000\038\000\000\000\039\000\000\000\000\000\ -\000\000\040\000\000\000\041\000\000\000\000\000\000\000\042\000\ -\043\000\000\000\044\000\000\000\024\002\000\000\000\000\009\000\ -\010\000\011\000\000\000\045\000\000\000\012\000\013\000\014\000\ -\046\000\000\000\000\000\000\000\000\000\047\000\048\000\049\000\ -\050\000\051\000\052\000\000\000\000\000\053\000\015\000\016\000\ -\017\000\018\000\019\000\020\000\021\000\000\000\000\000\000\000\ -\000\000\022\000\000\000\023\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\024\000\000\000\025\000\026\000\ -\027\000\028\000\029\000\000\000\000\000\030\000\031\000\000\000\ -\000\000\032\000\033\000\034\000\000\000\000\000\035\000\036\000\ -\000\000\037\000\038\000\000\000\039\000\000\000\000\000\000\000\ -\040\000\000\000\041\000\000\000\000\000\000\000\042\000\043\000\ -\000\000\044\000\000\000\000\000\000\000\009\000\010\000\011\000\ -\000\000\000\000\045\000\012\000\013\000\000\000\000\000\046\000\ -\000\000\000\000\000\000\000\000\047\000\048\000\049\000\050\000\ -\051\000\052\000\000\000\000\000\053\000\000\000\017\000\018\000\ -\019\000\020\000\021\000\000\000\000\000\000\000\000\000\022\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\024\000\000\000\025\000\026\000\027\000\028\000\ -\029\000\000\000\000\000\030\000\000\000\000\000\000\000\032\000\ -\033\000\034\000\000\000\000\000\000\000\036\000\000\000\037\000\ -\038\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\ -\000\000\000\000\000\000\000\000\042\000\043\000\000\000\044\000\ -\000\000\000\000\000\000\000\000\215\000\009\000\010\000\011\000\ -\000\000\000\000\218\000\012\000\013\000\046\000\000\000\000\000\ -\000\000\000\000\047\000\048\000\000\000\050\000\051\000\000\000\ -\000\000\000\000\053\000\000\000\000\000\000\000\017\000\018\000\ -\019\000\020\000\021\000\000\000\000\000\000\000\000\000\022\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\024\000\000\000\025\000\026\000\027\000\028\000\ -\029\000\000\000\000\000\030\000\000\000\000\000\000\000\032\000\ -\033\000\034\000\000\000\000\000\000\000\036\000\000\000\037\000\ -\038\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\ -\000\000\000\000\000\000\000\000\042\000\043\000\000\000\044\000\ -\000\000\000\000\009\000\010\000\011\000\000\000\000\000\000\000\ -\012\000\013\000\000\000\000\000\000\000\046\000\000\000\000\000\ -\000\000\000\000\047\000\048\000\000\000\050\000\051\000\231\001\ -\000\000\000\000\053\000\017\000\018\000\019\000\020\000\021\000\ -\000\000\000\000\000\000\000\000\022\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\ -\000\000\025\000\026\000\027\000\028\000\029\000\000\000\000\000\ -\030\000\000\000\000\000\000\000\032\000\033\000\034\000\000\000\ -\000\000\000\000\036\000\000\000\037\000\038\000\000\000\000\000\ -\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\ -\000\000\042\000\043\000\000\000\044\000\000\000\000\000\009\000\ -\010\000\011\000\000\000\000\000\000\000\012\000\013\000\000\000\ -\000\000\000\000\046\000\000\000\000\000\000\000\000\000\047\000\ -\048\000\000\000\050\000\051\000\000\000\000\000\000\000\053\000\ -\017\000\018\000\019\000\020\000\021\000\000\000\000\000\000\000\ -\000\000\022\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\024\000\000\000\025\000\026\000\ -\027\000\028\000\029\000\000\000\000\000\030\000\000\000\000\000\ -\000\000\032\000\033\000\034\000\000\000\000\000\000\000\036\000\ -\000\000\037\000\038\000\000\000\000\000\000\000\000\000\000\000\ -\040\000\000\000\000\000\000\000\000\000\090\002\042\000\043\000\ -\000\000\044\000\000\000\000\000\009\000\010\000\011\000\000\000\ -\000\000\000\000\012\000\013\000\000\000\000\000\000\000\046\000\ -\000\000\000\000\000\000\000\000\047\000\048\000\000\000\050\000\ -\051\000\000\000\000\000\000\000\053\000\017\000\018\000\019\000\ -\020\000\021\000\000\000\000\000\000\000\000\000\022\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\024\000\000\000\025\000\026\000\027\000\028\000\029\000\ -\000\000\000\000\030\000\000\000\000\000\000\000\032\000\033\000\ -\034\000\000\000\000\000\000\000\036\000\000\000\037\000\038\000\ -\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\ -\000\000\000\000\000\000\042\000\043\000\000\000\044\000\000\000\ -\000\000\000\000\000\000\062\003\009\000\010\000\011\000\000\000\ -\000\000\064\003\012\000\013\000\046\000\000\000\000\000\000\000\ -\000\000\047\000\048\000\000\000\050\000\051\000\000\000\000\000\ -\000\000\053\000\000\000\000\000\000\000\017\000\018\000\019\000\ -\020\000\021\000\000\000\000\000\000\000\000\000\022\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\024\000\000\000\025\000\026\000\027\000\028\000\029\000\ -\000\000\000\000\030\000\000\000\000\000\000\000\032\000\033\000\ -\034\000\000\000\000\000\000\000\036\000\000\000\037\000\038\000\ -\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\ -\000\000\000\000\000\000\042\000\043\000\000\000\044\000\000\000\ -\000\000\000\000\009\000\010\000\011\000\000\000\000\000\000\000\ -\012\000\013\000\000\000\000\000\046\000\000\000\000\000\000\000\ -\000\000\047\000\048\000\107\004\050\000\051\000\000\000\000\000\ -\000\000\053\000\000\000\017\000\018\000\019\000\020\000\021\000\ -\000\000\000\000\000\000\000\000\022\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\ -\000\000\025\000\026\000\027\000\028\000\029\000\000\000\000\000\ -\030\000\000\000\000\000\000\000\032\000\033\000\034\000\000\000\ -\000\000\000\000\036\000\000\000\037\000\038\000\000\000\000\000\ -\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\ -\000\000\042\000\043\000\000\000\044\000\000\000\000\000\250\002\ -\250\002\250\002\000\000\000\000\000\000\250\002\250\002\000\000\ -\000\000\000\000\046\000\000\000\000\000\000\000\000\000\047\000\ -\048\000\000\000\050\000\051\000\250\002\000\000\000\000\053\000\ -\250\002\250\002\250\002\250\002\250\002\000\000\000\000\000\000\ -\000\000\250\002\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\250\002\000\000\250\002\250\002\ -\250\002\250\002\250\002\000\000\000\000\250\002\000\000\000\000\ -\000\000\250\002\250\002\250\002\000\000\000\000\000\000\250\002\ -\000\000\250\002\250\002\000\000\000\000\000\000\000\000\000\000\ -\250\002\000\000\000\000\000\000\000\000\000\000\250\002\250\002\ -\000\000\250\002\000\000\000\000\009\000\010\000\011\000\000\000\ -\000\000\000\000\012\000\013\000\000\000\000\000\000\000\250\002\ -\000\000\000\000\000\000\000\000\250\002\250\002\000\000\250\002\ -\250\002\000\000\000\000\000\000\250\002\017\000\018\000\019\000\ -\020\000\021\000\000\000\000\000\000\000\000\000\022\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\024\000\000\000\025\000\026\000\027\000\028\000\029\000\ -\000\000\000\000\030\000\000\000\000\000\000\000\032\000\033\000\ -\034\000\000\000\000\000\000\000\036\000\000\000\037\000\038\000\ -\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\ -\000\000\000\000\000\000\042\000\043\000\000\000\044\000\000\000\ -\000\000\250\002\250\002\250\002\000\000\000\000\000\000\250\002\ -\250\002\000\000\000\000\000\000\046\000\000\000\000\000\000\000\ -\000\000\047\000\048\000\000\000\050\000\051\000\000\000\000\000\ -\000\000\053\000\250\002\250\002\250\002\250\002\250\002\000\000\ -\000\000\000\000\000\000\250\002\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\250\002\000\000\ -\250\002\250\002\250\002\250\002\250\002\000\000\000\000\250\002\ -\000\000\000\000\000\000\250\002\250\002\250\002\000\000\000\000\ -\000\000\250\002\000\000\250\002\250\002\000\000\000\000\000\000\ -\000\000\000\000\250\002\000\000\000\000\000\000\000\000\000\000\ -\250\002\250\002\000\000\250\002\000\000\000\000\248\002\248\002\ -\248\002\000\000\000\000\000\000\248\002\248\002\000\000\000\000\ -\000\000\250\002\000\000\000\000\000\000\000\000\250\002\250\002\ -\000\000\250\002\250\002\000\000\000\000\000\000\250\002\248\002\ -\248\002\248\002\248\002\248\002\000\000\000\000\000\000\000\000\ -\248\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\248\002\000\000\248\002\248\002\248\002\ -\248\002\248\002\000\000\000\000\248\002\000\000\000\000\000\000\ -\248\002\248\002\248\002\000\000\000\000\010\000\248\002\000\000\ -\248\002\248\002\000\000\013\000\000\000\199\003\000\000\248\002\ -\009\002\000\000\000\000\000\000\000\000\248\002\248\002\000\000\ -\248\002\000\000\200\003\000\000\000\000\017\000\018\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\248\002\000\000\ -\000\000\000\000\000\000\248\002\248\002\000\000\248\002\248\002\ -\000\000\024\000\243\001\248\002\160\000\000\000\161\000\162\000\ -\000\000\000\000\030\000\000\000\000\000\000\000\000\000\163\000\ -\201\003\000\000\010\000\000\000\000\000\000\000\165\000\000\000\ -\013\000\000\000\008\002\000\000\000\000\009\002\000\000\000\000\ -\245\001\000\000\000\000\166\000\000\000\000\000\000\000\200\003\ -\246\001\000\000\017\000\018\000\000\000\010\000\000\000\000\000\ -\167\000\000\000\000\000\013\000\046\000\237\002\000\000\247\001\ -\000\000\047\000\000\000\000\000\050\000\168\000\024\000\243\001\ -\000\000\160\000\000\000\161\000\162\000\017\000\018\000\030\000\ -\000\000\000\000\000\000\000\000\163\000\201\003\000\000\000\000\ -\000\000\000\000\000\000\165\000\000\000\000\000\000\000\000\000\ -\000\000\024\000\243\001\000\000\160\000\245\001\161\000\162\000\ -\166\000\000\000\030\000\000\000\000\000\246\001\000\000\163\000\ -\238\002\000\000\000\000\000\000\000\000\167\000\165\000\000\000\ -\239\002\046\000\000\000\000\000\247\001\000\000\047\000\000\000\ -\245\001\050\000\168\000\166\000\000\000\000\000\010\000\000\000\ -\246\001\000\000\000\000\000\000\013\000\000\000\204\005\000\000\ -\167\000\000\000\000\000\000\000\046\000\000\000\000\000\247\001\ -\000\000\047\000\000\000\200\003\050\000\168\000\017\000\018\000\ -\000\000\010\000\000\000\000\000\000\000\000\000\000\000\013\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\024\000\243\001\000\000\160\000\000\000\161\000\ -\162\000\017\000\018\000\030\000\000\000\000\000\000\000\000\000\ -\163\000\201\003\000\000\000\000\000\000\000\000\000\000\165\000\ -\000\000\000\000\000\000\000\000\000\000\024\000\243\001\000\000\ -\160\000\245\001\161\000\162\000\166\000\000\000\030\000\000\000\ -\000\000\246\001\000\000\163\000\244\001\000\000\250\002\000\000\ -\000\000\167\000\165\000\000\000\250\002\046\000\000\000\000\000\ -\247\001\000\000\047\000\000\000\245\001\050\000\168\000\166\000\ -\000\000\000\000\000\000\000\000\246\001\000\000\250\002\250\002\ -\000\000\000\000\000\000\000\000\167\000\000\000\000\000\000\000\ -\046\000\000\000\000\000\247\001\000\000\047\000\000\000\000\000\ -\050\000\168\000\250\002\250\002\000\000\250\002\000\000\250\002\ -\250\002\000\000\000\000\250\002\000\000\000\000\000\000\000\000\ -\250\002\250\002\000\000\000\000\010\000\000\000\000\000\250\002\ -\000\000\000\000\013\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\250\002\000\000\000\000\250\002\000\000\000\000\000\000\ -\000\000\250\002\158\000\000\000\017\000\018\000\000\000\000\000\ -\000\000\250\002\000\000\000\000\000\000\250\002\000\000\000\000\ -\250\002\000\000\250\002\000\000\000\000\250\002\250\002\000\000\ -\024\000\000\000\159\000\160\000\000\000\161\000\162\000\000\000\ -\000\000\030\000\000\000\000\000\000\000\000\000\163\000\164\000\ -\000\000\000\000\000\000\010\000\000\000\165\000\000\000\198\001\ -\000\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\166\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\158\000\215\000\017\000\018\000\000\000\000\000\167\000\ -\000\000\000\000\000\000\046\000\000\000\000\000\000\000\000\000\ -\047\000\000\000\000\000\050\000\168\000\000\000\000\000\024\000\ -\000\000\159\000\160\000\000\000\161\000\162\000\000\000\000\000\ -\030\000\000\000\000\000\000\000\000\000\163\000\164\000\000\000\ -\010\000\000\000\000\000\000\000\165\000\000\000\013\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\010\000\011\000\000\000\ -\000\000\166\000\012\000\013\000\000\000\000\000\158\000\000\000\ -\017\000\018\000\000\000\000\000\000\000\000\000\167\000\000\000\ -\000\000\000\000\046\000\000\000\000\000\017\000\018\000\047\000\ -\000\000\000\000\050\000\168\000\024\000\000\000\159\000\160\000\ -\000\000\161\000\162\000\000\000\000\000\030\000\000\000\000\000\ -\000\000\024\000\163\000\164\000\026\000\027\000\028\000\029\000\ -\000\000\165\000\030\000\000\000\250\002\000\000\250\002\163\000\ -\034\000\000\000\250\002\000\000\000\000\000\000\166\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\143\003\000\000\ -\000\000\000\000\250\002\167\000\250\002\250\002\044\000\046\000\ -\000\000\000\000\000\000\000\000\047\000\000\000\000\000\050\000\ -\168\000\000\000\000\000\000\000\046\000\000\000\000\000\000\000\ -\250\002\047\000\250\002\250\002\050\000\250\002\250\002\000\000\ -\000\000\250\002\000\000\000\000\000\000\000\000\250\002\250\002\ -\000\000\010\000\000\000\000\000\000\000\250\002\000\000\013\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\250\002\000\000\000\000\000\000\000\000\158\000\ -\000\000\017\000\018\000\000\000\000\000\000\000\000\000\250\002\ -\000\000\000\000\000\000\250\002\000\000\000\000\000\000\000\000\ -\250\002\000\000\000\000\250\002\250\002\024\000\000\000\159\000\ -\160\000\000\000\161\000\162\000\000\000\000\000\030\000\000\000\ -\000\000\000\000\000\000\163\000\164\000\000\000\250\002\000\000\ -\000\000\000\000\165\000\000\000\250\002\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\166\000\ -\000\000\000\000\000\000\000\000\250\002\000\000\250\002\250\002\ -\000\000\250\002\000\000\000\000\167\000\000\000\000\000\250\002\ -\046\000\000\000\000\000\000\000\000\000\047\000\000\000\000\000\ -\050\000\168\000\250\002\000\000\250\002\250\002\000\000\250\002\ -\250\002\250\002\250\002\250\002\000\000\000\000\000\000\000\000\ -\250\002\250\002\000\000\000\000\000\000\000\000\000\000\250\002\ -\000\000\000\000\000\000\000\000\000\000\250\002\000\000\250\002\ -\250\002\000\000\250\002\250\002\250\002\000\000\250\002\000\000\ -\000\000\000\000\000\000\250\002\250\002\000\000\182\002\000\000\ -\000\000\250\002\250\002\000\000\182\002\250\002\000\000\000\000\ -\000\000\000\000\250\002\000\000\000\000\250\002\250\002\250\002\ -\000\000\000\000\000\000\000\000\182\002\000\000\182\002\182\002\ -\250\002\010\000\000\000\000\000\250\002\000\000\000\000\013\000\ -\250\002\000\000\000\000\000\000\000\000\250\002\000\000\000\000\ -\250\002\250\002\182\002\000\000\182\002\182\002\000\000\182\002\ -\182\002\017\000\018\000\182\002\000\000\000\000\000\000\000\000\ -\182\002\182\002\000\000\000\000\000\000\000\000\000\000\182\002\ -\000\000\000\000\000\000\000\000\000\000\024\000\000\000\159\000\ -\160\000\000\000\161\000\162\000\182\002\000\000\030\000\000\000\ -\000\000\000\000\000\000\163\000\164\000\000\000\163\002\000\000\ -\000\000\182\002\165\000\000\000\163\002\182\002\000\000\000\000\ -\000\000\000\000\182\002\000\000\000\000\182\002\182\002\166\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\163\002\163\002\ -\000\000\248\002\000\000\000\000\167\000\000\000\000\000\248\002\ -\046\000\000\000\000\000\000\000\000\000\047\000\000\000\000\000\ -\050\000\168\000\163\002\000\000\163\002\163\002\000\000\163\002\ -\163\002\248\002\248\002\163\002\000\000\000\000\000\000\000\000\ -\163\002\163\002\000\000\000\000\000\000\000\000\000\000\163\002\ -\000\000\000\000\000\000\000\000\000\000\248\002\000\000\248\002\ -\248\002\000\000\248\002\248\002\163\002\000\000\248\002\000\000\ -\000\000\000\000\000\000\248\002\248\002\000\000\010\000\000\000\ -\000\000\163\002\248\002\000\000\013\000\163\002\000\000\000\000\ -\000\000\000\000\163\002\000\000\000\000\163\002\163\002\248\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\017\000\018\000\ -\000\000\250\002\000\000\000\000\248\002\000\000\000\000\250\002\ -\248\002\000\000\000\000\000\000\000\000\248\002\000\000\000\000\ -\248\002\248\002\024\000\000\000\000\000\160\000\000\000\161\000\ -\162\000\250\002\250\002\030\000\000\000\000\000\000\000\000\000\ -\163\000\164\000\000\000\000\000\000\000\000\000\000\000\165\000\ -\000\000\000\000\000\000\000\000\000\000\250\002\000\000\000\000\ -\250\002\000\000\250\002\250\002\166\000\000\000\250\002\000\000\ -\000\000\000\000\000\000\250\002\250\002\000\000\000\000\000\000\ -\000\000\167\000\250\002\000\000\000\000\046\000\010\000\011\000\ -\000\000\000\000\047\000\012\000\013\000\050\000\168\000\250\002\ -\000\000\000\000\000\000\000\000\000\000\000\000\108\001\000\000\ -\000\000\000\000\000\000\000\000\250\002\000\000\017\000\018\000\ -\250\002\000\000\000\000\000\000\000\000\250\002\000\000\000\000\ -\250\002\250\002\000\000\000\000\000\000\000\000\000\000\109\001\ -\000\000\000\000\024\000\110\001\000\000\026\000\027\000\028\000\ -\029\000\000\000\000\000\030\000\000\000\000\000\000\000\000\000\ -\163\000\034\000\010\000\011\000\000\000\000\000\000\000\012\000\ -\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\111\001\000\000\000\000\000\000\000\000\000\000\044\000\ -\000\000\112\001\017\000\018\000\000\000\000\000\000\000\000\000\ -\000\000\113\001\114\001\000\000\000\000\046\000\000\000\000\000\ -\115\001\000\000\047\000\000\000\000\000\050\000\024\000\110\001\ -\000\000\026\000\027\000\028\000\029\000\000\000\000\000\030\000\ -\000\000\000\000\000\000\000\000\163\000\034\000\010\000\011\000\ -\000\000\000\000\000\000\012\000\013\000\250\002\250\002\000\000\ -\000\000\000\000\250\002\250\002\000\000\111\001\000\000\000\000\ -\000\000\000\000\000\000\044\000\000\000\112\001\017\000\018\000\ -\000\000\000\000\000\000\000\000\000\000\250\002\250\002\000\000\ -\000\000\046\000\000\000\000\000\115\001\000\000\047\000\000\000\ -\000\000\050\000\024\000\000\000\000\000\026\000\027\000\028\000\ -\029\000\250\002\000\000\030\000\250\002\250\002\250\002\250\002\ -\203\000\034\000\250\002\000\000\006\005\000\000\000\000\250\002\ -\250\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\007\005\000\000\000\000\000\000\044\000\ -\000\000\000\000\234\001\000\000\000\000\000\000\250\002\000\000\ -\000\000\000\000\000\000\000\000\000\000\046\000\000\000\000\000\ -\000\000\000\000\047\000\000\000\250\002\050\000\000\000\000\000\ -\000\000\250\002\000\000\008\005\250\002\134\000\135\000\030\000\ -\000\000\136\000\000\000\000\000\137\000\009\005\000\000\000\000\ -\000\000\236\004\073\001\074\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\075\001\000\000\000\000\139\000\000\000\237\004\ -\076\001\077\001\238\004\078\001\010\005\140\000\141\000\000\000\ -\000\000\000\000\000\000\000\000\079\001\142\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\080\001\237\001\000\000\ -\000\000\011\005\144\000\081\001\082\001\083\001\084\001\085\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\086\001\000\000\ -\215\002\000\000\000\000\183\000\000\000\000\000\000\000\000\000\ -\087\001\088\001\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\089\001\090\001\091\001\092\001\093\001\ -\000\000\022\001\023\001\024\001\000\000\000\000\000\000\239\004\ -\200\001\000\000\026\001\000\000\000\000\095\001\000\000\000\000\ -\133\000\028\001\134\000\135\000\030\000\000\000\136\000\000\000\ -\000\000\137\000\138\000\000\000\029\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\170\001\000\000\030\001\000\000\000\000\ -\000\000\000\000\139\000\031\001\032\001\033\001\034\001\035\001\ -\036\001\000\000\140\000\141\000\000\000\000\000\000\000\216\002\ -\000\000\000\000\142\000\000\000\000\000\000\000\037\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\143\000\144\000\ -\221\002\202\001\000\000\222\002\000\000\000\000\000\000\000\000\ -\020\004\073\001\074\001\041\001\042\001\223\002\205\001\045\001\ -\206\001\075\001\000\000\000\000\000\000\000\000\000\000\076\001\ -\077\001\000\000\078\001\048\001\000\000\049\001\000\000\000\000\ -\000\000\000\000\000\000\079\001\000\000\000\000\000\000\000\000\ -\022\004\073\001\074\001\000\000\080\001\000\000\000\000\000\000\ -\000\000\075\001\081\001\082\001\083\001\084\001\085\001\076\001\ -\077\001\000\000\078\001\000\000\000\000\000\000\012\002\000\000\ -\012\002\012\002\012\002\079\001\012\002\086\001\000\000\012\002\ -\012\002\000\000\183\000\000\000\080\001\000\000\000\000\087\001\ -\088\001\000\000\081\001\082\001\083\001\084\001\085\001\000\000\ -\012\002\000\000\089\001\090\001\091\001\092\001\093\001\000\000\ -\012\002\012\002\000\000\021\004\000\000\086\001\000\000\000\000\ -\012\002\000\000\183\000\000\000\095\001\000\000\000\000\087\001\ -\088\001\000\000\000\000\000\000\012\002\012\002\024\004\073\001\ -\074\001\000\000\089\001\090\001\091\001\092\001\093\001\075\001\ -\000\000\000\000\000\000\000\000\023\004\076\001\077\001\000\000\ -\078\001\000\000\000\000\000\000\095\001\000\000\000\000\000\000\ -\000\000\079\001\000\000\000\000\000\000\000\000\020\004\073\001\ -\074\001\000\000\080\001\000\000\000\000\000\000\000\000\075\001\ -\081\001\082\001\083\001\084\001\085\001\076\001\077\001\000\000\ -\078\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\079\001\000\000\086\001\000\000\000\000\000\000\000\000\ -\183\000\000\000\080\001\000\000\000\000\087\001\088\001\000\000\ -\081\001\082\001\083\001\084\001\085\001\000\000\000\000\000\000\ -\089\001\090\001\091\001\092\001\093\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\086\001\025\004\000\000\000\000\000\000\ -\183\000\000\000\095\001\000\000\000\000\087\001\088\001\000\000\ -\000\000\000\000\000\000\000\000\022\004\073\001\074\001\000\000\ -\089\001\090\001\091\001\092\001\093\001\075\001\000\000\000\000\ -\000\000\080\004\000\000\076\001\077\001\000\000\078\001\000\000\ -\000\000\000\000\095\001\000\000\000\000\000\000\000\000\079\001\ -\000\000\000\000\000\000\000\000\024\004\073\001\074\001\000\000\ -\080\001\000\000\000\000\000\000\000\000\075\001\081\001\082\001\ -\083\001\084\001\085\001\076\001\077\001\000\000\078\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\079\001\ -\000\000\086\001\000\000\000\000\000\000\000\000\183\000\000\000\ -\080\001\000\000\000\000\087\001\088\001\000\000\081\001\082\001\ -\083\001\084\001\085\001\000\000\000\000\000\000\089\001\090\001\ -\091\001\092\001\093\001\000\000\000\000\000\000\000\000\000\000\ -\081\004\086\001\000\000\000\000\000\000\000\000\183\000\000\000\ -\095\001\000\000\000\000\087\001\088\001\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\089\001\090\001\ -\091\001\092\001\093\001\026\005\073\001\074\001\000\000\000\000\ -\000\000\000\000\082\004\000\000\075\001\000\000\000\000\000\000\ -\095\001\000\000\076\001\077\001\000\000\078\001\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\079\001\000\000\ -\000\000\000\000\000\000\028\005\073\001\074\001\000\000\080\001\ -\000\000\000\000\000\000\000\000\075\001\081\001\082\001\083\001\ -\084\001\085\001\076\001\077\001\000\000\078\001\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\079\001\000\000\ -\086\001\000\000\000\000\000\000\000\000\183\000\000\000\080\001\ -\000\000\000\000\087\001\088\001\000\000\081\001\082\001\083\001\ -\084\001\085\001\000\000\000\000\000\000\089\001\090\001\091\001\ -\092\001\093\001\000\000\000\000\000\000\000\000\027\005\000\000\ -\086\001\000\000\000\000\000\000\000\000\183\000\000\000\095\001\ -\000\000\000\000\087\001\088\001\000\000\000\000\000\000\000\000\ -\000\000\030\005\073\001\074\001\000\000\089\001\090\001\091\001\ -\092\001\093\001\075\001\000\000\000\000\000\000\000\000\029\005\ -\076\001\077\001\000\000\078\001\000\000\000\000\000\000\095\001\ -\000\000\000\000\000\000\000\000\079\001\000\000\000\000\000\000\ -\000\000\026\005\073\001\074\001\000\000\080\001\000\000\000\000\ -\000\000\000\000\075\001\081\001\082\001\083\001\084\001\085\001\ -\076\001\077\001\000\000\078\001\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\079\001\000\000\086\001\000\000\ -\000\000\000\000\000\000\183\000\000\000\080\001\000\000\000\000\ -\087\001\088\001\000\000\081\001\082\001\083\001\084\001\085\001\ -\000\000\000\000\000\000\089\001\090\001\091\001\092\001\093\001\ -\000\000\000\000\000\000\000\000\000\000\000\000\086\001\031\005\ -\000\000\000\000\000\000\183\000\000\000\095\001\000\000\000\000\ -\087\001\088\001\000\000\000\000\000\000\000\000\000\000\028\005\ -\073\001\074\001\000\000\089\001\090\001\091\001\092\001\093\001\ -\075\001\000\000\000\000\000\000\064\005\000\000\076\001\077\001\ -\000\000\078\001\000\000\000\000\000\000\095\001\000\000\000\000\ -\000\000\000\000\079\001\000\000\000\000\000\000\000\000\030\005\ -\073\001\074\001\000\000\080\001\000\000\000\000\000\000\000\000\ -\075\001\081\001\082\001\083\001\084\001\085\001\076\001\077\001\ -\000\000\078\001\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\079\001\000\000\086\001\000\000\000\000\000\000\ -\000\000\183\000\000\000\080\001\000\000\000\000\087\001\088\001\ -\000\000\081\001\082\001\083\001\084\001\085\001\000\000\000\000\ -\000\000\089\001\090\001\091\001\092\001\093\001\000\000\000\000\ -\000\000\000\000\000\000\065\005\086\001\073\001\074\001\000\000\ -\000\000\183\000\000\000\095\001\000\000\075\001\087\001\088\001\ -\000\000\000\000\000\000\076\001\077\001\000\000\078\001\000\000\ -\000\000\089\001\090\001\091\001\092\001\093\001\000\000\079\001\ -\000\000\000\000\000\000\000\000\000\000\066\005\000\000\000\000\ -\080\001\000\000\000\000\095\001\000\000\000\000\081\001\082\001\ -\083\001\084\001\085\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\086\001\000\000\000\000\000\000\000\000\183\000\000\000\ -\000\000\000\000\000\000\087\001\088\001\073\001\074\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\075\001\089\001\090\001\ -\091\001\092\001\093\001\076\001\077\001\000\000\078\001\000\000\ -\000\000\000\000\000\000\094\001\000\000\111\004\000\000\079\001\ -\095\001\000\000\000\000\000\000\000\000\073\001\074\001\000\000\ -\080\001\000\000\000\000\000\000\000\000\075\001\081\001\082\001\ -\083\001\084\001\085\001\076\001\077\001\000\000\078\001\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\079\001\ -\000\000\086\001\000\000\000\000\000\000\000\000\183\000\000\000\ -\080\001\000\000\000\000\087\001\088\001\000\000\081\001\082\001\ -\083\001\084\001\085\001\000\000\000\000\000\000\089\001\090\001\ -\091\001\092\001\093\001\000\000\000\000\000\000\000\000\000\000\ -\000\000\086\001\212\000\212\000\000\000\000\000\183\000\000\000\ -\095\001\000\000\212\000\087\001\088\001\000\000\000\000\000\000\ -\212\000\212\000\000\000\000\000\000\000\000\000\089\001\090\001\ -\091\001\092\001\093\001\000\000\212\000\000\000\000\000\000\000\ -\000\000\000\000\073\001\074\001\000\000\212\000\000\000\000\000\ -\095\001\000\000\075\001\212\000\212\000\212\000\212\000\212\000\ -\076\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\079\001\000\000\212\000\000\000\ -\000\000\000\000\000\000\212\000\000\000\080\001\000\000\000\000\ -\212\000\212\000\000\000\081\001\082\001\083\001\084\001\085\001\ -\091\000\000\000\000\000\212\000\212\000\212\000\212\000\212\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\086\001\092\000\ -\016\000\000\000\000\000\183\000\000\000\212\000\000\000\000\000\ -\087\001\088\001\000\000\000\000\093\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\089\001\090\001\091\001\092\001\093\001\ -\000\000\000\000\133\000\000\000\134\000\135\000\030\000\031\000\ -\136\000\000\000\000\000\137\000\138\000\095\001\000\000\035\000\ -\000\000\000\000\000\000\000\000\000\000\094\000\000\000\000\000\ -\000\000\000\000\000\000\041\000\139\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\140\000\141\000\000\000\000\000\ -\000\000\000\000\000\000\095\000\142\000\000\000\000\000\000\000\ -\000\000\000\000\000\000\000\000\000\000\000\000\000\000\096\000\ -\143\000\144\000\052\000" - -let yycheck = "\005\000\ -\002\000\007\000\002\000\198\000\206\000\198\000\195\000\133\000\ -\127\001\133\000\133\000\010\000\136\000\020\001\233\001\201\000\ -\160\000\002\000\001\002\002\000\002\000\005\000\095\000\001\000\ -\153\002\217\000\153\002\219\000\139\000\127\001\025\003\186\001\ -\021\003\095\002\107\000\050\003\002\000\168\003\002\000\154\000\ -\240\002\029\000\002\000\002\000\216\003\176\003\088\004\135\000\ -\084\003\045\004\003\000\004\000\167\000\128\000\000\000\130\000\ -\010\005\031\000\000\000\003\005\173\004\035\000\215\004\000\000\ -\183\001\017\001\246\002\045\000\057\000\131\002\213\002\157\001\ -\000\001\159\001\059\005\014\005\064\001\003\000\218\003\027\000\ -\074\001\000\001\037\001\094\001\066\001\000\001\091\001\075\001\ -\064\001\065\001\095\001\000\001\164\004\095\000\188\004\095\000\ -\000\000\079\001\109\001\027\001\052\001\241\003\000\001\091\001\ -\050\001\107\000\000\001\107\000\000\000\064\001\095\000\199\000\ -\095\000\095\000\108\001\000\001\010\001\000\001\027\001\118\000\ -\035\001\000\001\107\000\000\001\107\000\107\000\023\005\133\000\ -\200\004\095\000\136\000\095\000\138\000\139\000\097\002\095\000\ -\095\000\000\001\000\001\037\001\015\001\107\000\141\000\107\000\ -\059\001\130\005\015\001\107\000\107\000\064\001\065\001\095\005\ -\000\001\069\004\000\001\161\000\162\000\008\001\164\000\074\001\ -\000\001\100\005\086\003\091\001\000\001\027\001\094\001\095\001\ -\174\000\175\000\133\002\124\000\091\001\126\000\010\001\128\000\ -\095\001\130\000\001\000\030\001\003\000\004\000\091\001\066\001\ -\099\001\001\005\095\001\074\003\136\000\066\001\073\001\197\000\ -\198\000\126\001\109\001\201\000\073\001\095\001\092\001\184\005\ -\126\000\095\001\004\001\041\005\055\001\000\001\008\001\092\001\ -\162\005\183\000\184\000\094\001\091\001\015\001\065\001\102\003\ -\018\001\094\001\000\001\094\001\108\001\059\005\045\000\000\001\ -\000\001\094\001\066\001\000\001\091\001\091\001\000\001\000\001\ -\115\001\095\001\057\000\108\003\022\001\222\005\115\001\014\001\ -\000\001\010\001\037\001\091\001\065\001\000\001\019\001\095\001\ -\094\001\124\004\037\005\190\001\127\004\026\001\094\001\106\001\ -\092\001\120\002\109\001\095\001\184\003\197\001\000\001\199\001\ -\066\001\248\002\066\001\027\001\071\001\006\001\018\001\073\001\ -\224\001\002\006\213\005\048\001\092\005\000\001\120\002\065\001\ -\067\005\084\001\150\001\083\001\000\001\101\005\124\005\060\001\ -\109\001\157\001\065\001\159\001\130\005\000\001\067\001\068\001\ -\159\002\070\001\166\001\167\001\095\001\124\000\000\001\126\000\ -\243\001\128\000\033\003\130\000\094\001\248\001\000\001\113\001\ -\094\001\181\001\169\001\092\001\102\005\011\000\094\001\000\001\ -\150\002\237\004\238\004\092\001\094\001\144\001\095\001\146\001\ -\199\003\148\001\185\001\091\001\026\000\190\005\067\001\095\001\ -\026\001\000\001\111\001\094\001\000\001\229\001\000\001\031\006\ -\092\001\026\001\184\005\185\005\066\001\008\001\044\000\000\001\ -\029\002\091\001\014\001\092\001\004\001\095\001\000\001\017\001\ -\008\001\021\005\030\004\059\002\000\001\039\002\000\001\015\001\ -\004\001\000\001\018\001\094\001\008\001\014\006\010\001\016\006\ -\092\001\127\001\014\001\015\001\066\001\004\001\018\001\008\001\ -\222\005\008\001\080\000\094\001\082\000\083\000\000\001\027\001\ -\015\001\027\001\033\002\018\001\094\001\137\005\094\001\000\001\ -\150\001\160\004\092\001\000\001\184\004\065\001\066\001\157\001\ -\108\001\159\001\098\004\092\001\000\001\109\001\110\001\007\001\ -\166\001\167\001\066\001\169\001\002\006\113\001\008\001\008\001\ -\008\001\000\001\212\005\000\001\000\001\092\001\066\001\181\001\ -\039\003\092\001\094\001\185\001\094\001\073\001\023\001\189\001\ -\190\001\058\004\091\001\066\001\030\001\030\001\030\001\144\001\ -\015\001\146\001\017\001\148\001\094\001\039\003\093\002\091\001\ -\092\001\091\001\094\001\095\001\094\001\095\001\023\002\094\001\ -\214\001\215\001\216\001\092\001\053\001\055\001\055\001\055\001\ -\222\001\024\001\166\001\167\001\000\001\113\001\121\003\065\001\ -\065\001\065\001\000\001\090\003\094\001\052\001\010\001\037\004\ -\148\005\096\003\113\001\092\001\186\000\243\001\244\001\027\001\ -\223\003\094\001\248\001\000\000\067\001\000\001\252\001\091\001\ -\090\003\255\001\000\001\095\001\202\000\014\001\096\003\010\001\ -\090\001\022\001\008\002\009\002\000\000\092\001\091\001\091\001\ -\106\001\106\001\106\001\109\001\109\001\109\001\014\001\008\001\ -\000\001\023\002\024\002\036\001\110\001\023\002\066\001\023\002\ -\008\002\009\002\150\002\033\002\017\005\073\001\022\001\000\001\ -\232\004\039\002\008\001\018\001\180\002\014\001\023\002\023\002\ -\023\002\023\002\105\001\036\001\050\002\240\002\161\002\064\001\ -\047\002\008\001\008\001\162\002\163\002\027\002\017\001\047\001\ -\092\001\023\002\027\001\023\002\057\005\091\001\036\001\023\002\ -\023\002\144\001\141\002\146\001\187\003\148\001\018\002\115\001\ -\000\001\094\001\203\004\025\001\064\002\065\002\095\001\025\003\ -\097\001\092\001\000\001\018\001\095\001\091\001\025\003\093\002\ -\025\003\187\003\017\001\019\001\109\001\217\002\094\001\219\002\ -\046\001\216\003\026\001\092\001\219\003\018\001\079\001\037\001\ -\235\005\097\001\098\001\091\001\097\005\092\001\040\003\094\001\ -\109\005\237\002\120\002\063\002\090\002\019\001\092\001\108\005\ -\048\001\219\003\091\001\115\001\018\001\094\001\095\001\063\003\ -\064\001\065\003\064\001\094\001\060\001\092\001\092\001\000\001\ -\012\001\065\001\000\000\066\001\068\001\004\001\070\001\140\005\ -\150\002\224\001\048\001\153\002\066\001\014\001\139\005\022\001\ -\017\001\159\002\160\002\031\001\162\002\163\002\060\001\094\001\ -\110\001\111\001\157\005\027\001\114\001\083\001\068\001\117\001\ -\070\001\014\001\176\002\170\002\018\001\109\001\050\001\181\002\ -\160\002\094\001\167\005\042\004\186\002\003\000\004\000\111\001\ -\006\000\000\001\049\004\022\001\141\002\172\004\196\002\197\002\ -\176\002\008\001\053\003\071\001\000\001\133\003\092\001\072\005\ -\042\004\072\005\186\002\192\005\036\003\064\001\069\004\049\004\ -\084\001\111\001\073\001\217\002\034\000\219\002\027\001\019\001\ -\022\001\049\003\224\002\090\001\065\001\066\001\026\001\229\002\ -\027\001\101\001\047\001\234\003\235\003\094\001\094\001\237\002\ -\238\002\027\001\240\002\105\003\059\002\105\003\033\002\067\001\ -\224\002\100\003\003\001\000\001\250\002\049\001\092\001\004\001\ -\094\001\094\001\109\001\008\001\235\004\010\001\000\001\090\001\ -\060\001\014\001\126\003\233\005\234\005\134\005\117\003\136\005\ -\068\001\204\003\070\001\204\003\251\004\000\000\027\001\249\002\ -\089\003\019\001\030\001\025\003\097\001\098\001\000\001\040\001\ -\026\001\094\001\004\001\066\001\090\001\030\001\008\001\150\004\ -\015\001\039\003\040\003\094\001\014\001\015\001\115\001\002\001\ -\018\001\000\001\093\002\055\001\094\001\047\003\048\001\047\003\ -\126\000\022\001\056\003\111\001\150\004\065\001\055\001\094\001\ -\003\001\090\001\060\001\018\001\073\001\022\001\141\002\000\001\ -\065\001\067\001\068\001\050\005\070\001\188\004\189\004\045\006\ -\056\003\003\004\008\001\000\001\008\001\110\001\091\001\092\001\ -\199\004\094\001\095\001\066\001\090\003\014\001\047\001\089\003\ -\066\001\089\003\096\003\189\004\036\001\064\001\106\001\094\003\ -\215\004\109\001\027\001\105\003\113\001\199\004\108\003\066\001\ -\089\003\106\001\089\003\089\003\109\001\111\001\035\001\117\003\ -\062\002\000\001\113\003\193\000\094\001\088\001\237\004\238\004\ -\126\003\016\001\200\000\089\003\007\002\089\003\132\003\064\001\ -\065\001\089\003\089\003\014\002\027\001\067\001\059\001\067\001\ -\097\001\098\001\000\001\064\001\065\001\112\001\004\001\053\001\ -\030\001\055\001\008\001\064\001\010\001\074\001\079\001\095\001\ -\014\001\015\001\064\001\065\001\018\001\055\001\021\005\098\004\ -\023\005\053\001\066\001\055\001\056\001\027\001\064\001\019\001\ -\000\001\055\001\249\002\022\003\004\001\065\001\099\001\181\003\ -\008\001\064\001\065\001\065\001\097\001\187\003\112\004\015\001\ -\109\001\191\003\018\001\038\003\051\005\052\005\094\001\042\003\ -\109\001\199\003\022\001\201\003\059\005\049\001\204\003\109\001\ -\206\003\207\003\208\003\000\000\066\001\211\003\212\003\191\003\ -\060\001\064\004\216\003\073\001\218\003\219\003\112\001\199\003\ -\068\001\109\001\070\001\149\004\106\001\089\004\073\003\109\001\ -\230\003\014\001\062\001\211\003\035\001\091\001\092\001\053\001\ -\094\001\095\001\066\001\241\003\022\001\065\001\027\001\061\001\ -\055\001\022\001\064\001\045\001\046\001\022\001\230\003\246\003\ -\066\001\064\001\018\001\113\001\059\001\003\004\040\001\000\000\ -\008\001\074\000\065\001\111\001\190\004\014\001\094\001\019\001\ -\003\001\083\001\047\001\130\005\000\001\000\001\047\001\023\001\ -\094\001\004\001\027\001\066\001\098\001\008\001\030\001\010\001\ -\064\001\083\001\073\001\014\001\015\001\148\005\015\001\019\001\ -\105\000\018\001\079\001\109\001\042\004\232\004\026\001\102\001\ -\027\001\112\001\100\001\049\004\000\000\053\001\109\001\055\001\ -\111\001\122\000\194\004\014\001\058\004\000\001\035\001\067\001\ -\129\000\065\001\064\004\178\005\059\004\049\001\000\001\069\004\ -\027\001\184\005\000\001\030\006\115\001\109\001\079\001\004\001\ -\060\001\006\005\003\001\008\001\010\001\065\001\059\001\066\001\ -\068\001\066\001\070\001\089\004\065\001\018\001\073\001\020\005\ -\035\001\064\001\000\001\064\001\098\004\099\004\027\001\075\001\ -\000\001\103\004\106\001\037\001\064\001\109\001\065\001\222\005\ -\091\001\092\001\112\004\094\001\095\001\014\001\000\000\075\001\ -\059\001\094\001\022\001\099\004\123\005\064\001\065\001\103\004\ -\064\001\102\001\026\001\111\001\057\005\035\001\113\001\074\001\ -\109\001\014\001\111\001\003\001\112\001\066\001\109\001\110\001\ -\109\001\085\004\008\005\002\006\008\005\008\005\027\001\149\004\ -\150\004\084\005\152\004\084\005\112\001\059\001\064\001\014\006\ -\099\001\016\006\064\001\065\001\162\004\065\001\064\001\000\001\ -\065\001\066\001\109\001\003\001\074\001\109\001\035\001\037\005\ -\152\004\037\005\037\005\064\001\065\001\014\001\107\005\000\001\ -\017\001\064\001\162\004\066\001\065\001\022\001\188\004\189\004\ -\190\004\091\001\027\001\186\004\075\001\099\001\059\001\007\000\ -\000\001\199\004\019\001\109\001\065\001\203\004\035\001\109\001\ -\031\001\026\001\027\001\000\001\064\001\138\005\047\001\004\001\ -\064\001\215\004\000\001\008\001\040\001\010\001\160\005\075\001\ -\109\001\014\001\157\005\050\001\157\005\018\001\059\001\048\001\ -\049\001\112\001\232\004\064\001\065\001\037\001\027\001\237\004\ -\238\004\102\001\022\001\060\001\026\001\074\001\066\001\245\004\ -\109\001\097\001\067\001\068\001\066\002\070\001\064\001\065\001\ -\064\001\096\001\091\001\068\001\112\001\109\001\095\001\000\001\ -\097\001\098\001\008\005\009\005\010\005\245\004\099\001\066\001\ -\067\001\000\001\088\001\027\001\013\001\066\001\073\001\021\005\ -\109\001\023\005\115\001\064\001\073\001\065\001\100\002\101\002\ -\022\001\026\001\010\005\028\001\029\001\064\001\111\001\037\005\ -\064\001\096\001\112\001\041\005\110\001\109\001\091\001\092\001\ -\041\001\094\001\095\001\004\001\000\001\090\001\037\001\008\001\ -\004\001\022\001\066\001\064\001\008\001\059\005\010\001\090\001\ -\115\001\018\001\014\001\060\001\113\001\067\005\018\001\022\001\ -\109\001\110\001\072\005\068\001\031\001\067\001\004\001\027\001\ -\145\001\074\001\008\001\110\001\082\005\109\001\084\005\080\001\ -\008\001\015\001\088\005\014\001\018\001\000\000\066\001\050\001\ -\064\001\161\000\162\000\092\001\065\001\027\001\000\001\096\001\ -\109\001\004\001\082\005\105\005\064\001\008\001\174\000\175\000\ -\088\005\066\001\065\001\108\001\015\001\066\001\111\001\018\001\ -\073\001\019\001\100\001\000\001\073\001\073\001\124\005\000\000\ -\026\001\105\005\035\001\064\001\130\005\197\000\204\002\205\002\ -\134\005\109\001\136\005\092\001\066\001\109\001\000\000\091\001\ -\092\001\094\001\094\001\095\001\064\001\026\001\148\005\049\001\ -\000\001\093\005\059\001\225\002\096\005\064\001\018\002\157\005\ -\065\001\064\001\060\001\066\001\035\001\113\001\115\001\066\001\ -\009\000\239\002\068\001\012\000\070\001\022\001\015\000\016\000\ -\109\001\018\001\019\000\020\000\021\000\022\000\023\000\181\005\ -\025\000\088\001\184\005\185\005\059\001\037\001\027\001\032\000\ -\001\002\109\001\065\001\036\000\000\001\102\001\039\000\040\000\ -\022\001\000\001\109\001\063\002\109\001\181\005\204\005\048\000\ -\049\000\112\001\030\001\052\000\053\000\111\001\023\001\155\005\ -\156\005\215\005\158\005\159\005\019\001\000\001\026\001\066\001\ -\222\005\047\001\066\001\026\001\204\005\066\001\050\001\102\001\ -\226\005\073\001\226\005\233\005\234\005\066\001\109\001\215\005\ -\083\001\239\005\240\005\057\003\064\001\065\001\027\001\026\001\ -\022\001\048\001\091\000\092\000\093\000\094\000\094\001\096\000\ -\070\003\233\005\234\005\027\001\002\006\060\001\065\001\239\005\ -\240\005\108\001\008\006\000\001\067\001\068\001\073\001\070\001\ -\014\006\015\006\016\006\115\001\004\001\066\001\000\001\021\006\ -\008\001\101\001\000\001\095\001\027\001\066\001\106\001\015\001\ -\008\006\109\001\018\001\027\001\010\001\026\001\083\001\015\006\ -\027\001\035\001\066\001\027\001\042\006\021\006\004\001\045\006\ -\026\001\146\000\008\001\000\001\028\001\051\006\052\006\027\001\ -\111\001\015\001\000\001\124\002\018\001\158\000\159\000\108\001\ -\027\001\059\001\042\006\066\001\000\001\045\006\064\001\065\001\ -\095\001\170\000\066\001\051\006\052\006\026\001\018\006\066\001\ -\074\001\004\001\066\001\093\001\026\001\008\001\095\001\019\001\ -\185\000\029\006\066\001\014\001\015\001\000\001\026\001\018\001\ -\003\001\194\000\074\001\109\001\040\006\041\006\088\001\066\001\ -\080\001\099\001\013\001\083\001\066\001\179\003\180\003\022\001\ -\065\001\000\000\000\001\109\001\048\001\064\001\065\001\026\001\ -\073\001\028\001\029\001\193\003\194\003\189\001\112\001\000\001\ -\060\001\040\001\200\003\004\001\093\001\019\001\041\001\008\001\ -\068\001\010\001\070\001\209\003\026\001\014\001\004\001\066\001\ -\014\001\018\001\008\001\017\001\109\001\065\001\214\001\215\001\ -\216\001\060\001\027\001\071\001\018\001\064\001\222\001\066\001\ -\067\001\068\001\048\001\049\001\093\001\027\001\073\001\074\001\ -\084\001\064\001\065\001\094\001\004\001\080\001\060\001\022\001\ -\008\001\018\001\019\001\111\001\109\001\067\001\068\001\004\001\ -\070\001\092\001\018\001\008\001\252\001\096\001\097\001\065\001\ -\066\001\100\001\015\001\027\001\055\001\018\001\094\001\040\001\ -\073\001\108\001\109\001\004\001\111\001\064\001\027\001\008\001\ -\004\001\065\001\066\001\067\001\008\001\054\001\015\001\024\003\ -\024\002\058\001\091\001\092\001\014\001\094\001\095\001\017\001\ -\016\001\111\001\027\001\000\001\069\001\000\000\022\001\027\001\ -\093\001\027\001\043\003\027\001\000\001\010\001\065\001\048\003\ -\113\001\009\000\050\002\077\001\012\000\066\001\010\001\015\000\ -\016\000\003\001\000\001\019\000\020\000\021\000\022\000\023\000\ -\097\001\025\000\053\001\100\001\055\001\102\001\071\003\104\001\ -\112\001\066\001\066\001\067\001\036\000\019\001\065\001\039\000\ -\040\000\064\001\065\001\064\001\026\001\027\001\246\001\247\001\ -\048\000\049\000\096\004\064\001\052\000\053\000\100\004\166\001\ -\167\001\092\001\099\003\105\004\004\001\134\001\008\001\136\001\ -\008\001\014\001\048\001\049\001\036\001\000\000\014\001\015\001\ -\073\001\000\001\018\001\015\001\122\004\123\004\060\001\152\001\ -\095\001\014\001\128\004\022\001\109\001\067\001\068\001\014\001\ -\070\001\014\001\017\001\091\000\092\000\093\000\094\000\022\001\ -\096\000\170\001\171\001\053\001\027\001\055\001\090\001\043\001\ -\044\001\045\001\046\001\153\004\022\001\014\001\064\001\065\001\ -\095\001\092\001\095\001\053\001\053\001\055\001\055\001\103\001\ -\047\001\022\001\066\001\196\001\165\003\027\001\066\001\065\001\ -\065\001\111\001\203\001\071\001\072\001\092\001\207\001\092\001\ -\109\001\000\001\091\001\094\001\003\001\181\002\092\001\083\001\ -\084\001\085\001\086\001\220\001\221\001\053\001\013\001\055\001\ -\225\001\094\001\227\001\109\001\196\002\197\002\158\000\159\000\ -\100\001\065\001\092\001\026\001\091\001\028\001\029\001\115\001\ -\095\001\242\001\097\001\098\001\000\001\053\001\109\001\055\001\ -\014\001\040\001\041\001\220\003\221\003\254\001\046\001\000\002\ -\001\002\065\001\109\001\233\004\115\001\229\002\020\001\019\001\ -\109\001\115\001\194\000\236\003\062\001\060\001\026\001\055\001\ -\063\001\000\001\248\004\249\004\067\001\068\001\109\001\022\001\ -\249\003\108\001\002\001\074\001\109\001\073\001\031\002\000\000\ -\100\001\080\001\073\001\027\001\019\001\049\001\109\001\092\001\ -\009\004\015\001\094\001\026\001\000\001\092\001\064\001\064\001\ -\060\001\096\001\097\001\053\001\054\001\055\001\056\001\067\001\ -\068\001\065\001\070\001\008\001\109\001\108\001\064\001\065\001\ -\111\001\040\001\049\001\014\001\018\001\000\001\055\001\062\001\ -\003\001\062\001\059\001\044\004\062\001\060\001\063\001\064\001\ -\064\001\027\001\013\001\014\001\067\001\068\001\017\001\070\001\ -\092\001\094\001\018\001\019\001\064\001\078\001\014\001\026\001\ -\027\001\028\001\029\001\111\001\079\001\075\005\053\001\054\001\ -\055\001\056\001\014\001\109\001\006\001\040\001\041\001\073\001\ -\040\001\064\001\065\001\109\001\094\001\075\001\119\002\064\001\ -\073\001\122\002\091\004\124\002\109\001\000\001\054\001\095\001\ -\111\001\060\001\058\001\092\001\063\001\022\001\065\001\066\001\ -\067\001\068\001\014\001\094\001\027\001\000\001\073\001\074\001\ -\019\001\040\001\094\001\073\001\055\001\080\001\000\000\026\001\ -\059\001\027\001\013\001\027\001\063\001\064\001\109\001\014\001\ -\021\001\092\001\086\001\094\001\132\003\096\001\097\001\026\001\ -\064\001\028\001\029\001\078\001\173\002\048\001\062\001\090\001\ -\062\001\108\001\152\005\062\001\111\001\062\001\041\001\062\001\ -\115\001\060\001\155\004\014\001\157\004\003\001\191\002\014\001\ -\193\002\068\001\195\002\070\001\086\001\064\001\199\002\027\001\ -\091\001\060\001\109\001\095\001\101\001\073\001\027\001\066\001\ -\067\001\068\001\094\001\088\001\094\001\181\003\094\001\074\001\ -\094\001\027\001\014\001\220\002\014\001\080\001\015\001\020\001\ -\022\001\094\001\200\005\196\004\053\001\008\001\062\001\062\001\ -\201\004\092\001\208\005\080\001\111\001\096\001\206\003\207\003\ -\208\003\242\002\170\001\000\000\212\003\062\001\247\002\248\002\ -\014\001\108\001\218\003\013\001\111\001\064\001\223\004\073\001\ -\094\001\002\003\112\001\004\003\112\001\094\001\065\001\014\001\ -\073\001\021\001\028\001\029\001\242\005\088\001\015\003\016\003\ -\073\001\241\003\094\001\203\001\091\001\014\001\014\001\041\001\ -\014\001\026\003\095\001\014\001\064\001\065\001\255\004\000\005\ -\033\003\007\006\073\001\071\001\027\001\019\001\027\001\022\001\ -\091\001\077\001\060\001\044\003\013\001\063\001\088\001\014\001\ -\084\001\018\005\068\001\112\001\014\001\022\005\090\001\014\001\ -\074\001\014\001\000\000\028\001\029\001\000\000\080\001\096\001\ -\096\001\092\001\067\003\015\001\109\001\109\001\044\006\008\001\ -\041\001\109\001\110\001\044\005\036\001\065\001\096\001\092\001\ -\036\001\036\001\092\001\007\000\064\001\090\001\087\003\011\000\ -\092\001\064\001\108\001\060\001\094\001\111\001\063\001\040\001\ -\044\001\045\001\046\001\068\001\036\001\070\005\026\000\031\002\ -\053\001\074\001\064\001\053\001\124\000\086\003\064\001\080\001\ -\064\001\091\001\115\003\015\006\117\001\118\003\172\003\120\003\ -\044\000\064\001\064\001\071\001\072\001\064\001\064\001\096\001\ -\097\001\178\005\131\003\235\002\099\002\062\002\135\003\083\001\ -\084\001\085\001\086\001\108\001\109\005\142\003\111\001\138\001\ -\000\001\146\003\084\005\000\000\117\005\115\001\000\001\093\002\ -\100\001\003\001\181\003\223\001\080\000\219\001\082\000\083\000\ -\180\002\162\000\163\003\013\001\008\004\166\003\222\004\017\001\ -\000\000\170\003\184\004\140\005\022\001\219\002\143\005\181\001\ -\026\001\027\001\028\001\029\001\130\001\007\000\001\000\002\000\ -\003\000\004\000\005\000\006\000\007\000\072\005\057\005\041\001\ -\109\005\195\004\195\003\255\255\255\255\255\255\255\255\055\001\ -\026\000\057\001\058\001\059\001\255\255\061\001\255\255\255\255\ -\064\001\065\001\060\001\255\255\255\255\063\001\255\255\065\001\ -\066\001\067\001\068\001\255\255\255\255\222\003\223\003\073\001\ -\074\001\081\001\255\255\255\255\255\255\255\255\080\001\232\003\ -\233\003\089\001\090\001\255\255\255\255\161\000\162\000\255\255\ -\164\000\097\001\092\001\255\255\094\001\255\255\096\001\097\001\ -\249\003\255\255\174\000\175\000\108\001\109\001\110\001\255\255\ -\013\001\255\255\108\001\023\001\255\255\111\001\186\000\255\255\ -\255\255\115\001\255\255\255\255\255\255\255\255\255\255\028\001\ -\029\001\197\000\198\000\255\255\064\001\065\001\202\000\255\255\ -\255\255\255\255\255\255\071\001\041\001\255\255\255\005\255\255\ -\033\004\255\255\035\004\055\001\255\255\057\001\058\001\059\001\ -\084\001\061\001\043\004\255\255\064\001\065\001\090\001\060\001\ -\255\255\255\255\063\001\255\255\053\004\006\001\255\255\068\001\ -\025\006\026\006\255\255\255\255\142\000\074\001\255\255\255\255\ -\033\006\066\004\110\001\080\001\255\255\255\255\090\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\097\001\160\000\161\000\ -\162\000\050\006\164\000\096\001\097\001\255\255\255\255\064\001\ -\065\001\109\001\110\001\255\255\174\000\175\000\071\001\108\001\ -\255\255\255\255\111\001\255\255\255\255\025\001\055\001\255\255\ -\057\001\058\001\059\001\084\001\061\001\255\255\255\255\064\001\ -\065\001\090\001\115\004\197\000\198\000\118\004\255\255\201\000\ -\255\255\255\255\046\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\109\001\110\001\135\004\255\255\ -\137\004\090\001\139\004\067\003\141\004\142\004\255\255\255\255\ -\097\001\146\004\255\255\000\001\255\255\255\255\151\004\013\001\ -\255\255\154\004\255\255\156\004\109\001\110\001\000\000\255\255\ -\013\001\255\255\255\255\255\255\017\001\255\255\028\001\029\001\ -\000\001\255\255\255\255\172\004\255\255\026\001\027\001\028\001\ -\029\001\255\255\255\255\041\001\255\255\013\001\255\255\255\255\ -\255\255\255\255\110\001\111\001\041\001\255\255\114\001\255\255\ -\255\255\117\001\026\001\196\004\028\001\029\001\060\001\255\255\ -\201\004\063\001\255\255\255\255\255\255\255\255\068\001\060\001\ -\209\004\041\001\063\001\255\255\074\001\066\001\067\001\068\001\ -\255\255\255\255\080\001\006\001\073\001\074\001\255\255\255\255\ -\255\255\226\004\255\255\080\001\060\001\230\004\255\255\063\001\ -\255\255\255\255\235\004\255\255\068\001\255\255\255\255\092\001\ -\255\255\094\001\074\001\096\001\097\001\255\255\108\001\255\255\ -\080\001\111\001\251\004\252\004\255\255\254\004\255\255\108\001\ -\255\255\255\255\111\001\255\255\092\001\255\255\115\001\255\255\ -\096\001\189\001\190\001\012\005\055\001\255\255\057\001\058\001\ -\059\001\255\255\061\001\255\255\108\001\064\001\065\001\111\001\ -\255\255\255\255\108\001\255\255\255\255\255\255\255\255\255\255\ -\000\001\255\255\214\001\215\001\216\001\255\255\255\255\040\005\ -\255\255\255\255\222\001\255\255\045\005\255\255\255\255\090\001\ -\049\005\050\005\255\255\255\255\255\255\255\255\097\001\056\005\ -\138\001\255\255\255\255\255\255\255\255\255\255\255\255\243\001\ -\244\001\255\255\109\001\110\001\248\001\070\005\255\255\255\255\ -\252\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\083\005\255\255\255\255\255\255\255\255\055\001\ -\255\255\057\001\058\001\059\001\255\255\061\001\255\255\255\255\ -\064\001\065\001\099\005\255\255\024\002\255\255\255\255\104\005\ -\186\001\255\255\255\255\189\001\190\001\033\002\255\255\255\255\ -\255\255\081\001\255\255\255\255\117\005\255\255\255\255\255\255\ -\255\255\089\001\090\001\255\255\255\255\255\255\050\002\255\255\ -\007\000\097\001\255\255\255\255\214\001\215\001\216\001\255\255\ -\255\255\255\255\062\002\255\255\222\001\109\001\110\001\255\255\ -\255\255\146\005\255\255\229\001\255\255\255\255\151\005\255\255\ -\255\255\154\005\255\255\255\255\255\255\000\000\255\255\255\255\ -\161\005\243\001\244\001\255\255\165\005\255\255\248\001\255\255\ -\169\005\093\002\252\001\013\001\255\255\255\001\255\255\255\255\ -\255\255\255\255\179\005\255\255\255\255\007\002\255\255\255\255\ -\255\255\255\255\028\001\029\001\014\002\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\024\002\041\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\033\002\ -\255\255\255\255\255\255\007\000\255\255\039\002\255\255\011\000\ -\217\005\218\005\060\001\255\255\255\255\063\001\223\005\255\255\ -\050\002\255\255\068\001\053\002\255\255\230\005\026\000\255\255\ -\074\001\000\000\255\255\236\005\062\002\255\255\080\001\255\255\ -\255\255\255\255\255\255\244\005\245\005\255\255\255\255\255\255\ -\044\000\255\255\251\005\252\005\253\005\254\005\096\001\097\001\ -\255\255\181\002\255\255\255\255\255\255\255\255\255\255\255\255\ -\009\006\010\006\108\001\093\002\255\255\111\001\255\255\255\255\ -\196\002\197\002\255\255\255\255\255\255\255\255\023\006\024\006\ -\255\255\026\006\161\000\162\000\080\000\164\000\082\000\083\000\ -\255\255\034\006\255\255\255\255\255\255\007\000\218\002\174\000\ -\175\000\255\255\255\255\255\255\023\001\255\255\255\255\048\006\ -\255\255\229\002\255\255\255\255\255\255\054\006\055\006\255\255\ -\255\255\036\001\238\002\255\255\240\002\196\000\197\000\198\000\ -\255\255\055\001\255\255\057\001\058\001\059\001\255\255\061\001\ -\255\255\255\255\064\001\065\001\055\001\255\255\057\001\058\001\ -\059\001\133\000\061\001\255\255\255\255\064\001\065\001\000\000\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\180\002\181\002\090\001\025\003\255\255\255\255\ -\255\255\255\255\255\255\097\001\255\255\161\000\162\000\090\001\ -\164\000\255\255\196\002\197\002\255\255\255\255\097\001\109\001\ -\110\001\255\255\174\000\175\000\255\255\255\255\255\255\255\255\ -\255\255\255\255\109\001\110\001\255\255\255\255\186\000\255\255\ -\218\002\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\197\000\198\000\229\002\255\255\255\255\202\000\255\255\ -\255\255\255\255\000\001\255\255\238\002\000\001\240\002\255\255\ -\003\001\255\255\255\255\255\255\255\255\008\001\255\255\255\255\ -\250\002\255\255\013\001\014\001\255\255\255\255\255\255\255\255\ -\019\001\255\255\255\255\022\001\255\255\255\255\255\255\026\001\ -\063\001\028\001\029\001\255\255\255\255\255\255\255\255\161\000\ -\162\000\072\001\164\000\255\255\255\255\023\003\041\001\025\003\ -\255\255\255\255\255\255\255\255\174\000\175\000\255\255\255\255\ -\132\003\055\001\255\255\057\001\058\001\059\001\040\003\061\001\ -\255\255\060\001\064\001\065\001\063\001\255\255\065\001\066\001\ -\067\001\068\001\255\255\197\000\198\000\025\001\255\255\074\001\ -\255\255\000\001\255\255\081\001\079\001\080\001\255\255\255\255\ -\255\255\008\001\255\255\089\001\090\001\255\255\013\001\255\255\ -\255\255\092\001\046\001\097\001\255\255\096\001\097\001\255\255\ -\255\255\181\003\255\255\026\001\255\255\028\001\029\001\109\001\ -\110\001\108\001\255\255\255\255\111\001\255\255\255\255\097\003\ -\255\255\255\255\041\001\255\255\255\255\201\003\255\255\255\255\ -\204\003\255\255\206\003\207\003\208\003\255\255\255\255\255\255\ -\212\003\255\255\255\255\255\255\255\255\060\001\218\003\121\003\ -\063\001\255\255\255\255\066\001\067\001\068\001\255\255\255\255\ -\255\255\255\255\132\003\074\001\255\255\255\255\189\001\190\001\ -\000\000\080\001\110\001\111\001\255\255\241\003\114\001\255\255\ -\255\255\117\001\255\255\255\255\255\255\092\001\255\255\255\255\ -\255\255\096\001\097\001\255\255\255\255\255\255\213\001\214\001\ -\215\001\216\001\255\255\255\255\255\255\108\001\255\255\222\001\ -\111\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\150\001\181\003\013\001\255\255\255\255\255\255\ -\255\255\157\001\255\255\159\001\243\001\244\001\255\255\255\255\ -\255\255\248\001\255\255\028\001\029\001\252\001\255\255\201\003\ -\255\255\255\255\204\003\255\255\206\003\207\003\208\003\006\002\ -\041\001\255\255\212\003\255\255\255\255\255\255\255\255\255\255\ -\218\003\189\001\190\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\024\002\255\255\060\001\255\255\255\255\063\001\255\255\ -\255\255\000\001\033\002\068\001\255\255\255\255\255\255\241\003\ -\255\255\074\001\214\001\215\001\216\001\255\255\013\001\080\001\ -\255\255\255\255\222\001\050\002\255\255\255\255\098\004\255\255\ -\255\255\003\004\255\255\026\001\255\255\028\001\029\001\096\001\ -\097\001\255\255\255\255\255\255\255\255\255\255\255\255\243\001\ -\244\001\255\255\041\001\108\001\248\001\255\255\111\001\255\255\ -\252\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\000\000\036\004\255\255\255\255\060\001\093\002\255\255\ -\255\255\255\255\255\255\189\001\190\001\068\001\255\255\255\255\ -\255\255\255\255\255\255\074\001\024\002\255\255\255\255\255\255\ -\255\255\080\001\255\255\255\255\255\255\033\002\255\255\255\255\ -\255\255\255\255\255\255\255\255\214\001\215\001\216\001\255\255\ -\255\255\096\001\255\255\255\255\222\001\223\001\050\002\255\255\ -\255\255\255\255\255\255\255\255\255\255\108\001\255\255\255\255\ -\111\001\255\255\062\002\255\255\255\255\255\255\255\255\255\255\ -\098\004\243\001\244\001\255\255\255\255\255\255\248\001\255\255\ -\255\255\255\255\252\001\255\255\255\255\255\255\112\004\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\097\001\093\002\255\255\100\001\255\255\102\001\181\002\104\001\ -\255\255\255\255\255\255\255\255\232\004\255\255\024\002\255\255\ -\000\001\255\255\255\255\003\001\013\001\196\002\197\002\033\002\ -\255\255\255\255\255\255\149\004\255\255\013\001\255\255\255\255\ -\255\255\255\255\255\255\028\001\029\001\134\001\255\255\136\001\ -\050\002\255\255\026\001\255\255\028\001\029\001\255\255\255\255\ -\041\001\255\255\255\255\255\255\255\255\255\255\229\002\152\001\ -\040\001\041\001\150\002\255\255\255\255\255\255\255\255\238\002\ -\255\255\240\002\255\255\060\001\190\004\255\255\255\255\255\255\ -\194\004\255\255\255\255\068\001\060\001\255\255\000\000\063\001\ -\255\255\074\001\255\255\093\002\068\001\255\255\255\255\080\001\ -\255\255\181\002\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\255\255\255\255\255\255\255\255\255\255\255\255\096\001\ -\196\002\197\002\025\003\255\255\092\001\255\255\232\004\255\255\ -\096\001\097\001\255\255\108\001\255\255\255\255\111\001\255\255\ -\084\005\255\255\255\255\255\255\108\001\255\255\255\255\111\001\ -\225\001\255\255\227\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\229\002\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\238\002\255\255\240\002\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\254\001\255\255\000\002\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\000\001\255\255\181\002\003\001\255\255\255\255\255\255\ -\255\255\008\001\255\255\255\255\255\255\255\255\013\001\255\255\ -\103\003\255\255\196\002\197\002\019\001\025\003\028\000\029\000\ -\255\255\157\005\255\255\026\001\255\255\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\168\005\255\255\255\255\255\255\ -\255\255\040\001\041\001\255\255\255\255\132\003\255\255\255\255\ -\255\255\255\255\084\005\229\002\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\238\002\060\001\240\002\255\255\ -\063\001\255\255\255\255\066\001\067\001\068\001\255\255\255\255\ -\255\255\255\255\073\001\074\001\255\255\255\255\084\000\085\000\ -\255\255\080\001\255\255\255\255\216\005\255\255\255\255\006\001\ -\255\255\008\001\255\255\255\255\255\255\092\001\181\003\255\255\ -\255\255\096\001\097\001\255\255\255\255\105\003\255\255\025\003\ -\255\255\255\255\110\003\255\255\255\255\108\001\119\002\255\255\ -\111\001\122\002\201\003\255\255\255\255\204\003\205\003\206\003\ -\207\003\208\003\000\000\157\005\255\255\212\003\255\255\255\255\ -\132\003\255\255\255\255\218\003\255\255\255\255\168\005\255\255\ -\055\001\255\255\057\001\058\001\059\001\255\255\061\001\255\255\ -\255\255\064\001\065\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\241\003\255\255\255\255\255\255\255\255\255\255\ -\000\001\255\255\081\001\255\255\255\255\255\255\000\001\255\255\ -\255\255\003\001\089\001\090\001\255\255\255\255\255\255\255\255\ -\255\255\181\003\097\001\013\001\255\255\255\255\216\005\017\001\ -\255\255\255\255\255\255\221\005\022\001\255\255\109\001\110\001\ -\026\001\027\001\028\001\029\001\255\255\201\003\255\255\255\255\ -\204\003\255\255\206\003\207\003\208\003\255\255\255\255\041\001\ -\212\003\255\255\132\003\220\002\255\255\255\255\218\003\055\001\ -\255\255\057\001\058\001\059\001\255\255\061\001\255\255\255\255\ -\064\001\065\001\060\001\255\255\255\255\063\001\255\255\065\001\ -\066\001\067\001\068\001\255\255\255\255\241\003\247\002\073\001\ -\074\001\081\001\255\255\255\255\255\255\255\255\080\001\255\255\ -\255\255\089\001\090\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\097\001\092\001\181\003\094\001\255\255\096\001\097\001\ -\255\255\255\255\255\255\098\004\255\255\109\001\110\001\255\255\ -\255\255\255\255\108\001\255\255\255\255\111\001\255\255\201\003\ -\023\001\115\001\204\003\255\255\206\003\207\003\208\003\255\255\ -\255\255\255\255\212\003\255\255\255\255\036\001\255\255\255\255\ -\218\003\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\056\004\255\255\255\255\255\255\ -\055\001\255\255\057\001\058\001\059\001\255\255\061\001\241\003\ -\255\255\064\001\065\001\073\001\074\001\075\001\076\001\077\001\ -\078\001\079\001\080\001\081\001\082\001\083\001\084\001\085\001\ -\086\001\087\001\088\001\089\001\090\001\091\001\092\001\093\001\ -\255\255\095\001\255\255\090\001\255\255\255\255\098\004\255\255\ -\255\255\255\255\097\001\255\255\255\255\107\001\255\255\255\255\ -\255\255\255\255\115\003\255\255\255\255\255\255\109\001\110\001\ -\255\255\255\255\120\001\000\000\255\255\255\255\255\255\255\255\ -\255\255\255\255\000\001\001\001\002\001\003\001\255\255\255\255\ -\255\255\255\255\008\001\009\001\010\001\255\255\255\255\013\001\ -\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\ -\022\001\232\004\024\001\025\001\026\001\027\001\028\001\029\001\ -\255\255\255\255\163\003\255\255\255\255\255\255\036\001\037\001\ -\255\255\255\255\040\001\041\001\042\001\043\001\044\001\045\001\ -\046\001\047\001\255\255\049\001\255\255\051\001\255\255\255\255\ -\098\004\255\255\255\255\255\255\255\255\255\255\060\001\061\001\ -\255\255\063\001\195\003\255\255\066\001\067\001\068\001\255\255\ -\070\001\071\001\072\001\073\001\074\001\255\255\255\255\255\255\ -\255\255\255\255\080\001\081\001\082\001\083\001\084\001\085\001\ -\086\001\255\255\255\255\089\001\255\255\091\001\092\001\255\255\ -\094\001\095\001\096\001\097\001\098\001\255\255\100\001\232\003\ -\233\003\103\001\104\001\105\001\232\004\255\255\108\001\255\255\ -\255\255\111\001\255\255\255\255\255\255\115\001\000\001\255\255\ -\255\255\255\255\255\255\255\255\006\001\255\255\255\255\255\255\ -\255\255\255\255\012\001\255\255\255\255\084\005\255\255\255\255\ -\255\255\255\255\255\255\255\255\008\005\255\255\255\255\255\255\ -\255\255\015\002\028\001\255\255\030\001\031\001\020\002\255\255\ -\255\255\255\255\255\255\000\000\255\255\255\255\255\255\006\001\ -\033\004\008\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\050\001\037\005\052\001\053\001\255\255\055\001\056\001\255\255\ -\255\255\059\001\255\255\255\255\053\004\255\255\064\001\065\001\ -\255\255\255\255\255\255\255\255\255\255\071\001\232\004\255\255\ -\255\255\255\255\064\002\065\002\255\255\255\255\255\255\255\255\ -\255\255\255\255\084\001\255\255\255\255\255\255\157\005\255\255\ -\055\001\255\255\057\001\058\001\059\001\255\255\061\001\097\001\ -\084\005\064\001\065\001\101\001\255\255\255\255\255\255\255\255\ -\106\001\255\255\255\255\109\001\110\001\099\002\255\255\255\255\ -\255\255\255\255\104\002\105\002\106\002\255\255\255\255\255\255\ -\255\255\255\255\255\255\090\001\255\255\092\001\255\255\255\255\ -\255\255\255\255\097\001\000\001\001\001\002\001\003\001\255\255\ -\255\255\255\255\255\255\008\001\009\001\010\001\109\001\110\001\ -\013\001\014\001\015\001\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\027\001\028\001\ -\029\001\154\004\255\255\156\004\255\255\255\255\255\255\036\001\ -\037\001\157\005\000\000\040\001\041\001\042\001\043\001\044\001\ -\045\001\046\001\084\005\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\061\001\255\255\255\255\255\255\255\255\066\001\067\001\068\001\ -\255\255\070\001\255\255\255\255\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\082\001\255\255\255\255\ -\209\004\086\001\208\002\209\002\210\002\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\255\255\100\001\ -\255\255\255\255\103\001\255\255\105\001\255\255\255\255\108\001\ -\255\255\255\255\111\001\255\255\255\255\255\255\115\001\255\255\ -\255\255\255\255\255\255\157\005\255\255\255\255\255\255\245\002\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\005\003\ -\255\255\255\255\255\255\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\000\001\001\001\002\001\003\001\255\255\ -\255\255\255\255\255\255\008\001\009\001\010\001\255\255\040\005\ -\013\001\014\001\015\001\016\001\017\001\018\001\019\001\020\001\ -\021\001\022\001\255\255\024\001\025\001\026\001\027\001\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\036\001\ -\037\001\255\255\255\255\040\001\041\001\042\001\043\001\044\001\ -\045\001\046\001\047\001\255\255\049\001\255\255\051\001\255\255\ -\255\255\255\255\080\003\255\255\255\255\255\255\255\255\060\001\ -\061\001\255\255\063\001\255\255\255\255\066\001\067\001\068\001\ -\255\255\070\001\071\001\072\001\073\001\074\001\255\255\104\005\ -\255\255\255\255\255\255\080\001\081\001\082\001\083\001\084\001\ -\085\001\086\001\001\001\002\001\089\001\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\098\001\255\255\100\001\ -\015\001\255\255\103\001\104\001\105\001\255\255\255\255\108\001\ -\255\255\255\255\111\001\255\255\027\001\255\255\115\001\255\255\ -\255\255\146\005\255\255\255\255\255\255\036\001\255\255\255\255\ -\255\255\255\255\255\255\042\001\043\001\044\001\045\001\046\001\ -\161\005\255\255\000\001\255\255\255\255\003\001\255\255\255\255\ -\169\005\255\255\255\255\255\255\255\255\255\255\061\001\013\001\ -\255\255\255\255\179\005\066\001\255\255\019\001\255\255\255\255\ -\071\001\072\001\000\000\185\003\026\001\255\255\028\001\029\001\ -\255\255\255\255\255\255\255\255\083\001\084\001\085\001\086\001\ -\255\255\255\255\040\001\041\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\048\001\049\001\255\255\100\001\255\255\255\255\ -\217\005\218\005\255\255\255\255\255\255\255\255\060\001\255\255\ -\255\255\063\001\255\255\255\255\255\255\230\005\068\001\255\255\ -\070\001\255\255\255\255\255\255\074\001\255\255\255\255\255\255\ -\255\255\255\255\080\001\255\255\245\005\255\255\255\255\255\255\ -\255\255\255\255\251\005\252\005\253\005\254\005\092\001\255\255\ -\255\255\255\255\096\001\097\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\108\001\255\255\ -\255\255\111\001\016\004\017\004\018\004\255\255\255\255\000\001\ -\001\001\002\001\003\001\255\255\255\255\255\255\255\255\008\001\ -\009\001\010\001\255\255\255\255\013\001\014\001\015\001\016\001\ -\017\001\018\001\019\001\020\001\021\001\255\255\255\255\024\001\ -\025\001\026\001\027\001\028\001\029\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\036\001\037\001\255\255\255\255\040\001\ -\041\001\042\001\043\001\044\001\045\001\046\001\255\255\255\255\ -\049\001\255\255\255\255\255\255\255\255\255\255\255\255\077\004\ -\078\004\079\004\255\255\060\001\061\001\255\255\063\001\000\000\ -\255\255\066\001\067\001\068\001\255\255\070\001\071\001\072\001\ -\073\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\255\255\082\001\083\001\084\001\085\001\086\001\255\255\255\255\ -\255\255\111\004\091\001\092\001\255\255\094\001\095\001\096\001\ -\097\001\255\255\255\255\100\001\255\255\255\255\103\001\255\255\ -\105\001\255\255\255\255\108\001\255\255\255\255\111\001\255\255\ -\255\255\255\255\115\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\176\004\177\004\255\255\255\255\255\255\181\004\ -\182\004\183\004\000\001\001\001\002\001\003\001\255\255\255\255\ -\006\001\007\001\008\001\009\001\010\001\011\001\012\001\013\001\ -\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\ -\022\001\000\000\024\001\025\001\026\001\027\001\028\001\029\001\ -\030\001\031\001\255\255\255\255\255\255\255\255\036\001\037\001\ -\255\255\255\255\040\001\041\001\042\001\043\001\044\001\045\001\ -\046\001\047\001\255\255\049\001\050\001\051\001\255\255\053\001\ -\054\001\055\001\056\001\255\255\255\255\059\001\060\001\061\001\ -\062\001\063\001\064\001\065\001\066\001\067\001\068\001\255\255\ -\070\001\071\001\072\001\073\001\074\001\255\255\255\255\255\255\ -\255\255\255\255\080\001\081\001\082\001\083\001\084\001\085\001\ -\086\001\087\001\255\255\089\001\255\255\091\001\092\001\255\255\ -\094\001\095\001\096\001\097\001\098\001\255\255\100\001\101\001\ -\255\255\103\001\104\001\105\001\106\001\255\255\108\001\109\001\ -\255\255\111\001\255\255\255\255\255\255\115\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\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\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\001\ -\001\001\002\001\003\001\255\255\255\255\006\001\007\001\008\001\ -\009\001\010\001\011\001\012\001\013\001\014\001\015\001\016\001\ -\017\001\018\001\019\001\020\001\021\001\022\001\255\255\024\001\ -\025\001\026\001\027\001\028\001\029\001\030\001\031\001\255\255\ -\118\005\119\005\120\005\036\001\037\001\255\255\255\255\040\001\ -\041\001\042\001\043\001\044\001\045\001\046\001\047\001\255\255\ -\049\001\050\001\051\001\255\255\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\060\001\061\001\255\255\063\001\064\001\ -\065\001\066\001\067\001\068\001\255\255\070\001\071\001\072\001\ -\073\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\081\001\082\001\083\001\084\001\085\001\086\001\087\001\255\255\ -\089\001\255\255\091\001\092\001\255\255\094\001\095\001\096\001\ -\097\001\098\001\000\000\100\001\101\001\255\255\103\001\104\001\ -\105\001\106\001\255\255\108\001\109\001\255\255\111\001\255\255\ -\255\255\255\255\115\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\000\001\001\001\002\001\003\001\255\255\255\255\006\001\ -\007\001\008\001\009\001\010\001\011\001\012\001\013\001\014\001\ -\015\001\016\001\017\001\018\001\019\001\020\001\021\001\022\001\ -\255\255\024\001\025\001\026\001\027\001\028\001\029\001\030\001\ -\031\001\255\255\255\255\255\255\255\255\036\001\037\001\255\255\ -\255\255\040\001\041\001\042\001\043\001\044\001\045\001\046\001\ -\047\001\255\255\049\001\050\001\051\001\255\255\053\001\054\001\ -\055\001\056\001\255\255\255\255\059\001\060\001\061\001\255\255\ -\063\001\064\001\065\001\066\001\067\001\068\001\255\255\070\001\ -\071\001\072\001\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\081\001\082\001\083\001\084\001\085\001\086\001\ -\087\001\255\255\089\001\255\255\091\001\092\001\000\000\094\001\ -\095\001\096\001\097\001\098\001\255\255\100\001\101\001\255\255\ -\103\001\104\001\105\001\106\001\255\255\108\001\109\001\255\255\ -\111\001\255\255\255\255\255\255\115\001\000\001\001\001\002\001\ -\003\001\255\255\255\255\006\001\007\001\008\001\009\001\010\001\ -\011\001\012\001\013\001\014\001\015\001\016\001\017\001\018\001\ -\019\001\020\001\021\001\022\001\255\255\024\001\025\001\026\001\ -\027\001\028\001\029\001\030\001\031\001\255\255\255\255\255\255\ -\255\255\036\001\037\001\255\255\255\255\040\001\041\001\042\001\ -\043\001\044\001\045\001\046\001\047\001\255\255\049\001\050\001\ -\051\001\255\255\053\001\054\001\055\001\056\001\255\255\255\255\ -\059\001\060\001\061\001\255\255\063\001\064\001\065\001\066\001\ -\067\001\068\001\255\255\070\001\071\001\072\001\073\001\074\001\ -\255\255\255\255\255\255\255\255\255\255\080\001\081\001\082\001\ -\083\001\084\001\085\001\086\001\087\001\255\255\089\001\255\255\ -\091\001\092\001\000\000\094\001\095\001\096\001\097\001\098\001\ -\255\255\100\001\101\001\255\255\103\001\104\001\105\001\106\001\ -\255\255\108\001\109\001\255\255\111\001\255\255\255\255\255\255\ -\115\001\255\255\000\001\001\001\002\001\003\001\255\255\255\255\ -\006\001\007\001\008\001\009\001\010\001\011\001\012\001\013\001\ -\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\ -\022\001\255\255\024\001\025\001\026\001\027\001\028\001\029\001\ -\030\001\031\001\255\255\255\255\255\255\255\255\036\001\037\001\ -\255\255\255\255\040\001\041\001\042\001\043\001\044\001\045\001\ -\046\001\047\001\255\255\049\001\050\001\051\001\255\255\053\001\ -\054\001\055\001\056\001\255\255\255\255\059\001\060\001\061\001\ -\255\255\063\001\064\001\065\001\066\001\067\001\068\001\255\255\ -\070\001\071\001\072\001\073\001\074\001\255\255\255\255\255\255\ -\255\255\255\255\080\001\081\001\082\001\083\001\084\001\085\001\ -\086\001\087\001\255\255\089\001\255\255\091\001\092\001\000\000\ -\094\001\095\001\096\001\097\001\098\001\255\255\100\001\101\001\ -\255\255\103\001\104\001\105\001\106\001\255\255\108\001\109\001\ -\255\255\111\001\255\255\255\255\255\255\115\001\000\001\001\001\ -\002\001\003\001\255\255\255\255\006\001\007\001\008\001\009\001\ -\010\001\011\001\012\001\013\001\014\001\015\001\016\001\017\001\ -\018\001\019\001\020\001\021\001\022\001\255\255\024\001\025\001\ -\026\001\027\001\028\001\029\001\030\001\031\001\255\255\255\255\ -\255\255\255\255\036\001\037\001\255\255\255\255\040\001\041\001\ -\042\001\043\001\044\001\045\001\046\001\047\001\255\255\049\001\ -\050\001\051\001\255\255\053\001\054\001\055\001\056\001\255\255\ -\255\255\059\001\060\001\061\001\255\255\063\001\064\001\065\001\ -\066\001\067\001\068\001\255\255\070\001\071\001\072\001\073\001\ -\074\001\255\255\255\255\255\255\255\255\255\255\080\001\081\001\ -\082\001\083\001\084\001\085\001\086\001\087\001\255\255\089\001\ -\255\255\091\001\092\001\000\000\094\001\095\001\096\001\097\001\ -\098\001\255\255\100\001\101\001\255\255\103\001\104\001\105\001\ -\106\001\255\255\108\001\109\001\255\255\111\001\255\255\255\255\ -\255\255\115\001\000\001\001\001\002\001\003\001\255\255\255\255\ -\006\001\007\001\008\001\009\001\010\001\011\001\012\001\013\001\ -\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\ -\022\001\255\255\024\001\025\001\026\001\027\001\028\001\029\001\ -\030\001\031\001\255\255\255\255\255\255\255\255\036\001\037\001\ -\255\255\255\255\040\001\041\001\042\001\043\001\044\001\045\001\ -\046\001\047\001\255\255\049\001\050\001\051\001\255\255\053\001\ -\054\001\055\001\056\001\255\255\255\255\059\001\060\001\061\001\ -\255\255\063\001\064\001\065\001\066\001\067\001\068\001\255\255\ -\070\001\071\001\072\001\073\001\074\001\255\255\255\255\255\255\ -\255\255\255\255\080\001\081\001\082\001\083\001\084\001\085\001\ -\086\001\087\001\255\255\089\001\255\255\091\001\092\001\000\000\ -\094\001\095\001\096\001\097\001\098\001\255\255\100\001\101\001\ -\255\255\103\001\104\001\105\001\106\001\255\255\108\001\109\001\ -\255\255\111\001\255\255\255\255\255\255\115\001\255\255\000\001\ -\001\001\002\001\003\001\255\255\255\255\006\001\007\001\008\001\ -\009\001\010\001\011\001\012\001\013\001\014\001\015\001\016\001\ -\017\001\018\001\019\001\020\001\021\001\022\001\255\255\024\001\ -\025\001\026\001\027\001\028\001\029\001\030\001\031\001\255\255\ -\255\255\255\255\255\255\036\001\037\001\255\255\255\255\040\001\ -\041\001\042\001\043\001\044\001\045\001\046\001\047\001\255\255\ -\049\001\050\001\051\001\255\255\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\060\001\061\001\255\255\063\001\064\001\ -\065\001\066\001\067\001\068\001\255\255\070\001\071\001\072\001\ -\073\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\081\001\082\001\083\001\084\001\085\001\086\001\087\001\255\255\ -\089\001\255\255\091\001\092\001\000\000\094\001\095\001\096\001\ -\097\001\098\001\255\255\100\001\101\001\255\255\103\001\104\001\ -\105\001\106\001\255\255\108\001\109\001\255\255\111\001\255\255\ -\255\255\255\255\115\001\000\001\001\001\002\001\003\001\255\255\ -\255\255\006\001\007\001\008\001\009\001\010\001\011\001\012\001\ -\013\001\014\001\015\001\016\001\017\001\018\001\019\001\020\001\ -\021\001\022\001\255\255\024\001\025\001\026\001\027\001\028\001\ -\029\001\030\001\031\001\255\255\255\255\255\255\255\255\036\001\ -\037\001\255\255\255\255\040\001\041\001\042\001\043\001\044\001\ -\045\001\046\001\047\001\255\255\049\001\050\001\051\001\255\255\ -\053\001\054\001\055\001\056\001\255\255\255\255\059\001\060\001\ -\061\001\255\255\063\001\064\001\065\001\066\001\067\001\068\001\ -\255\255\070\001\071\001\072\001\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\081\001\082\001\083\001\084\001\ -\085\001\086\001\087\001\255\255\089\001\255\255\091\001\092\001\ -\000\000\094\001\095\001\096\001\097\001\098\001\255\255\100\001\ -\101\001\255\255\103\001\104\001\105\001\106\001\255\255\108\001\ -\109\001\255\255\111\001\255\255\255\255\255\255\115\001\000\001\ -\001\001\002\001\003\001\255\255\255\255\006\001\007\001\008\001\ -\009\001\010\001\011\001\012\001\013\001\014\001\015\001\016\001\ -\017\001\018\001\019\001\020\001\021\001\022\001\255\255\024\001\ -\025\001\026\001\027\001\028\001\029\001\030\001\031\001\255\255\ -\255\255\255\255\255\255\036\001\037\001\255\255\255\255\040\001\ -\041\001\042\001\043\001\044\001\045\001\046\001\047\001\255\255\ -\049\001\050\001\051\001\255\255\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\060\001\061\001\255\255\063\001\064\001\ -\065\001\066\001\067\001\068\001\255\255\070\001\071\001\072\001\ -\073\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\081\001\082\001\083\001\084\001\085\001\086\001\087\001\255\255\ -\089\001\255\255\091\001\092\001\000\000\094\001\095\001\096\001\ -\097\001\098\001\255\255\100\001\101\001\255\255\103\001\104\001\ -\105\001\106\001\255\255\108\001\109\001\255\255\111\001\255\255\ -\255\255\255\255\115\001\255\255\000\001\001\001\002\001\003\001\ -\255\255\255\255\006\001\007\001\008\001\009\001\010\001\011\001\ -\012\001\013\001\014\001\015\001\016\001\017\001\018\001\019\001\ -\020\001\021\001\255\255\255\255\024\001\025\001\026\001\027\001\ -\028\001\029\001\030\001\031\001\255\255\255\255\255\255\255\255\ -\036\001\037\001\255\255\255\255\040\001\041\001\042\001\043\001\ -\044\001\045\001\046\001\047\001\255\255\049\001\050\001\051\001\ -\255\255\053\001\054\001\055\001\056\001\255\255\255\255\059\001\ -\060\001\061\001\255\255\063\001\064\001\065\001\066\001\067\001\ -\068\001\255\255\070\001\071\001\072\001\073\001\074\001\255\255\ -\255\255\255\255\255\255\255\255\080\001\081\001\082\001\083\001\ -\084\001\085\001\086\001\087\001\255\255\089\001\255\255\091\001\ -\092\001\000\000\094\001\095\001\096\001\097\001\098\001\255\255\ -\100\001\101\001\255\255\103\001\104\001\105\001\106\001\255\255\ -\108\001\109\001\255\255\111\001\255\255\255\255\255\255\115\001\ -\000\001\001\001\002\001\003\001\255\255\255\255\006\001\007\001\ -\008\001\009\001\010\001\011\001\012\001\013\001\014\001\015\001\ -\016\001\017\001\018\001\019\001\020\001\021\001\255\255\255\255\ -\024\001\025\001\026\001\027\001\028\001\029\001\030\001\031\001\ -\255\255\255\255\255\255\255\255\036\001\037\001\255\255\255\255\ -\040\001\041\001\042\001\043\001\044\001\045\001\046\001\255\255\ -\255\255\049\001\050\001\051\001\255\255\053\001\054\001\055\001\ -\056\001\255\255\255\255\059\001\060\001\061\001\255\255\063\001\ -\064\001\065\001\066\001\067\001\068\001\255\255\070\001\071\001\ -\072\001\073\001\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\081\001\082\001\083\001\084\001\085\001\086\001\087\001\ -\255\255\089\001\255\255\091\001\092\001\000\000\094\001\095\001\ -\096\001\097\001\098\001\255\255\100\001\101\001\255\255\103\001\ -\104\001\105\001\106\001\255\255\108\001\109\001\255\255\111\001\ -\255\255\255\255\255\255\115\001\000\001\001\001\002\001\003\001\ -\255\255\255\255\006\001\007\001\008\001\009\001\010\001\011\001\ -\012\001\013\001\014\001\015\001\016\001\017\001\018\001\019\001\ -\020\001\021\001\255\255\255\255\024\001\025\001\026\001\027\001\ -\028\001\029\001\030\001\031\001\255\255\255\255\255\255\255\255\ -\036\001\037\001\255\255\255\255\040\001\041\001\042\001\043\001\ -\044\001\045\001\046\001\255\255\255\255\049\001\050\001\051\001\ -\255\255\053\001\054\001\055\001\056\001\255\255\255\255\059\001\ -\060\001\061\001\255\255\063\001\064\001\065\001\066\001\067\001\ -\068\001\255\255\070\001\071\001\072\001\073\001\074\001\255\255\ -\255\255\255\255\255\255\255\255\080\001\081\001\082\001\083\001\ -\084\001\085\001\086\001\087\001\255\255\089\001\255\255\091\001\ -\092\001\000\000\094\001\095\001\096\001\255\255\255\255\255\255\ -\100\001\101\001\255\255\103\001\104\001\105\001\106\001\255\255\ -\108\001\109\001\255\255\111\001\255\255\255\255\255\255\115\001\ -\255\255\000\001\001\001\002\001\003\001\255\255\255\255\006\001\ -\007\001\008\001\009\001\010\001\011\001\012\001\013\001\014\001\ -\015\001\016\001\017\001\018\001\019\001\020\001\021\001\255\255\ -\255\255\024\001\025\001\026\001\027\001\028\001\029\001\030\001\ -\031\001\255\255\255\255\255\255\255\255\036\001\037\001\255\255\ -\255\255\040\001\041\001\042\001\043\001\044\001\045\001\046\001\ -\255\255\255\255\049\001\050\001\051\001\255\255\053\001\054\001\ -\055\001\056\001\255\255\255\255\059\001\060\001\061\001\255\255\ -\063\001\064\001\065\001\066\001\067\001\068\001\255\255\070\001\ -\071\001\072\001\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\081\001\082\001\083\001\084\001\085\001\086\001\ -\087\001\255\255\089\001\255\255\091\001\092\001\000\000\094\001\ -\095\001\096\001\255\255\255\255\255\255\100\001\101\001\255\255\ -\103\001\104\001\105\001\106\001\255\255\108\001\109\001\255\255\ -\111\001\255\255\255\255\255\255\115\001\000\001\001\001\002\001\ -\003\001\255\255\255\255\006\001\007\001\008\001\009\001\010\001\ -\011\001\012\001\013\001\014\001\015\001\016\001\017\001\018\001\ -\019\001\020\001\021\001\255\255\255\255\024\001\025\001\026\001\ -\027\001\028\001\029\001\030\001\031\001\255\255\255\255\255\255\ -\255\255\036\001\037\001\255\255\255\255\040\001\041\001\042\001\ -\043\001\044\001\045\001\046\001\255\255\255\255\049\001\050\001\ -\051\001\255\255\053\001\054\001\055\001\056\001\255\255\255\255\ -\059\001\060\001\061\001\255\255\063\001\064\001\065\001\066\001\ -\067\001\068\001\255\255\070\001\071\001\072\001\073\001\074\001\ -\255\255\255\255\255\255\255\255\255\255\080\001\081\001\082\001\ -\083\001\084\001\085\001\086\001\087\001\255\255\089\001\255\255\ -\091\001\092\001\000\000\094\001\095\001\096\001\255\255\255\255\ -\255\255\100\001\101\001\255\255\103\001\104\001\105\001\106\001\ -\255\255\108\001\109\001\255\255\111\001\255\255\255\255\255\255\ -\115\001\000\001\001\001\002\001\003\001\255\255\255\255\255\255\ -\255\255\008\001\009\001\010\001\255\255\255\255\013\001\014\001\ -\015\001\016\001\017\001\018\001\019\001\020\001\021\001\255\255\ -\255\255\024\001\025\001\026\001\027\001\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\036\001\037\001\255\255\ -\255\255\040\001\041\001\042\001\043\001\044\001\045\001\046\001\ -\255\255\255\255\049\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\060\001\061\001\255\255\ -\063\001\255\255\255\255\066\001\067\001\068\001\255\255\070\001\ -\071\001\072\001\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\255\255\082\001\083\001\084\001\085\001\086\001\ -\255\255\255\255\255\255\255\255\091\001\092\001\000\000\094\001\ -\095\001\096\001\255\255\255\255\255\255\100\001\255\255\255\255\ -\103\001\255\255\105\001\255\255\255\255\108\001\255\255\255\255\ -\111\001\255\255\255\255\255\255\115\001\255\255\000\001\001\001\ -\002\001\003\001\255\255\255\255\255\255\255\255\008\001\009\001\ -\010\001\255\255\255\255\013\001\014\001\015\001\016\001\017\001\ -\255\255\019\001\020\001\021\001\255\255\255\255\024\001\025\001\ -\026\001\027\001\028\001\029\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\036\001\037\001\255\255\255\255\040\001\041\001\ -\042\001\043\001\044\001\045\001\046\001\255\255\255\255\049\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\060\001\061\001\255\255\063\001\255\255\255\255\ -\066\001\067\001\068\001\255\255\070\001\071\001\072\001\073\001\ -\074\001\255\255\255\255\255\255\255\255\255\255\080\001\255\255\ -\082\001\083\001\084\001\085\001\086\001\255\255\255\255\255\255\ -\255\255\091\001\092\001\000\000\094\001\095\001\096\001\097\001\ -\255\255\255\255\100\001\255\255\255\255\103\001\255\255\105\001\ -\255\255\255\255\108\001\255\255\255\255\111\001\255\255\255\255\ -\255\255\115\001\000\001\001\001\002\001\003\001\255\255\255\255\ -\255\255\255\255\008\001\009\001\010\001\255\255\255\255\013\001\ -\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\ -\255\255\255\255\024\001\025\001\026\001\027\001\028\001\029\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\036\001\037\001\ -\255\255\255\255\040\001\041\001\042\001\043\001\044\001\045\001\ -\046\001\255\255\255\255\049\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\060\001\061\001\ -\255\255\063\001\255\255\255\255\066\001\067\001\068\001\255\255\ -\070\001\071\001\072\001\073\001\074\001\255\255\255\255\255\255\ -\255\255\255\255\080\001\255\255\082\001\083\001\084\001\085\001\ -\086\001\255\255\255\255\255\255\255\255\091\001\092\001\000\000\ -\094\001\095\001\096\001\255\255\255\255\255\255\100\001\255\255\ -\255\255\103\001\255\255\105\001\255\255\255\255\108\001\255\255\ -\255\255\111\001\255\255\255\255\255\255\115\001\000\001\001\001\ -\002\001\003\001\255\255\255\255\255\255\255\255\008\001\009\001\ -\010\001\255\255\255\255\013\001\014\001\015\001\016\001\017\001\ -\018\001\019\001\020\001\021\001\255\255\255\255\024\001\025\001\ -\026\001\027\001\028\001\029\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\036\001\037\001\255\255\255\255\040\001\041\001\ -\042\001\043\001\044\001\045\001\046\001\255\255\255\255\049\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\060\001\061\001\255\255\063\001\255\255\255\255\ -\066\001\067\001\068\001\255\255\070\001\071\001\072\001\073\001\ -\074\001\255\255\255\255\255\255\255\255\255\255\080\001\255\255\ -\082\001\083\001\084\001\085\001\086\001\255\255\255\255\255\255\ -\255\255\091\001\092\001\000\000\094\001\095\001\096\001\255\255\ -\255\255\255\255\100\001\255\255\255\255\103\001\255\255\105\001\ -\255\255\255\255\108\001\255\255\255\255\111\001\255\255\255\255\ -\255\255\115\001\255\255\000\001\001\001\002\001\003\001\255\255\ -\255\255\255\255\255\255\008\001\009\001\010\001\255\255\255\255\ -\013\001\014\001\015\001\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\027\001\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\036\001\ -\037\001\255\255\255\255\040\001\041\001\042\001\043\001\044\001\ -\045\001\046\001\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\061\001\255\255\063\001\255\255\255\255\066\001\067\001\068\001\ -\255\255\070\001\071\001\072\001\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\082\001\083\001\084\001\ -\085\001\086\001\255\255\255\255\255\255\255\255\091\001\092\001\ -\000\000\094\001\095\001\096\001\255\255\255\255\255\255\100\001\ -\255\255\255\255\103\001\255\255\105\001\255\255\255\255\108\001\ -\255\255\255\255\111\001\255\255\255\255\255\255\115\001\000\001\ -\001\001\002\001\003\001\255\255\255\255\255\255\255\255\008\001\ -\009\001\010\001\255\255\255\255\013\001\014\001\015\001\016\001\ -\017\001\018\001\019\001\020\001\021\001\255\255\255\255\024\001\ -\025\001\026\001\027\001\028\001\029\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\036\001\037\001\255\255\255\255\040\001\ -\041\001\042\001\043\001\044\001\045\001\046\001\255\255\255\255\ -\049\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\060\001\061\001\255\255\063\001\255\255\ -\255\255\066\001\067\001\068\001\255\255\070\001\071\001\072\001\ -\073\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\255\255\082\001\083\001\084\001\085\001\086\001\255\255\255\255\ -\255\255\255\255\091\001\092\001\000\000\094\001\095\001\096\001\ -\255\255\255\255\255\255\100\001\255\255\255\255\103\001\255\255\ -\105\001\255\255\255\255\108\001\255\255\255\255\111\001\255\255\ -\255\255\255\255\115\001\000\001\001\001\002\001\003\001\255\255\ -\255\255\255\255\255\255\008\001\009\001\010\001\255\255\255\255\ -\013\001\014\001\015\001\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\027\001\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\036\001\ -\037\001\255\255\255\255\040\001\041\001\042\001\043\001\044\001\ -\045\001\255\255\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\061\001\255\255\063\001\255\255\255\255\066\001\067\001\068\001\ -\255\255\070\001\071\001\072\001\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\082\001\083\001\084\001\ -\085\001\086\001\255\255\255\255\255\255\255\255\091\001\092\001\ -\000\000\094\001\095\001\096\001\097\001\255\255\255\255\100\001\ -\255\255\255\255\103\001\255\255\105\001\255\255\255\255\108\001\ -\255\255\255\255\111\001\255\255\255\255\255\255\115\001\255\255\ -\000\001\001\001\002\001\003\001\255\255\255\255\255\255\255\255\ -\008\001\009\001\010\001\255\255\255\255\013\001\014\001\015\001\ -\016\001\017\001\018\001\019\001\020\001\021\001\255\255\255\255\ -\024\001\025\001\026\001\027\001\028\001\029\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\036\001\037\001\255\255\255\255\ -\040\001\041\001\042\001\043\001\044\001\045\001\255\255\255\255\ -\255\255\049\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\060\001\061\001\255\255\063\001\ -\255\255\255\255\066\001\067\001\068\001\255\255\070\001\071\001\ -\072\001\073\001\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\255\255\082\001\083\001\084\001\085\001\086\001\255\255\ -\255\255\255\255\255\255\091\001\092\001\000\000\094\001\095\001\ -\096\001\097\001\255\255\255\255\100\001\255\255\255\255\103\001\ -\255\255\105\001\255\255\255\255\108\001\255\255\255\255\111\001\ -\255\255\255\255\255\255\115\001\000\001\001\001\002\001\003\001\ -\255\255\255\255\255\255\255\255\008\001\009\001\010\001\255\255\ -\255\255\013\001\014\001\015\001\016\001\017\001\018\001\019\001\ -\020\001\021\001\255\255\255\255\024\001\025\001\026\001\027\001\ -\028\001\029\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\036\001\037\001\255\255\255\255\040\001\041\001\042\001\043\001\ -\044\001\045\001\255\255\255\255\255\255\049\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\060\001\061\001\255\255\063\001\255\255\255\255\066\001\067\001\ -\068\001\255\255\070\001\071\001\072\001\073\001\074\001\255\255\ -\255\255\255\255\255\255\255\255\080\001\255\255\082\001\083\001\ -\084\001\085\001\086\001\255\255\255\255\255\255\255\255\091\001\ -\092\001\000\000\094\001\095\001\096\001\097\001\255\255\255\255\ -\100\001\255\255\255\255\103\001\255\255\105\001\255\255\255\255\ -\108\001\255\255\255\255\111\001\255\255\255\255\255\255\115\001\ -\000\001\001\001\002\001\003\001\255\255\255\255\255\255\255\255\ -\008\001\009\001\010\001\255\255\255\255\013\001\014\001\015\001\ -\016\001\017\001\018\001\019\001\020\001\021\001\255\255\255\255\ -\024\001\025\001\026\001\027\001\028\001\029\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\036\001\037\001\255\255\255\255\ -\040\001\041\001\042\001\043\001\044\001\045\001\255\255\255\255\ -\255\255\049\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\060\001\061\001\255\255\063\001\ -\255\255\255\255\066\001\067\001\068\001\255\255\070\001\071\001\ -\072\001\073\001\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\255\255\082\001\083\001\084\001\085\001\086\001\255\255\ -\255\255\255\255\255\255\091\001\092\001\000\000\094\001\095\001\ -\096\001\097\001\255\255\255\255\100\001\255\255\255\255\103\001\ -\255\255\105\001\255\255\255\255\108\001\255\255\255\255\111\001\ -\255\255\255\255\255\255\115\001\255\255\000\001\001\001\002\001\ -\003\001\255\255\255\255\255\255\255\255\255\255\009\001\010\001\ -\255\255\255\255\013\001\014\001\015\001\016\001\017\001\018\001\ -\019\001\020\001\021\001\255\255\255\255\024\001\025\001\026\001\ -\027\001\028\001\029\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\036\001\037\001\255\255\255\255\040\001\041\001\042\001\ -\043\001\044\001\045\001\046\001\255\255\255\255\049\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\060\001\061\001\255\255\063\001\255\255\255\255\066\001\ -\067\001\068\001\255\255\070\001\071\001\072\001\073\001\074\001\ -\255\255\255\255\255\255\255\255\255\255\080\001\255\255\082\001\ -\083\001\084\001\085\001\086\001\255\255\255\255\255\255\255\255\ -\091\001\092\001\000\000\094\001\095\001\096\001\097\001\255\255\ -\255\255\100\001\255\255\255\255\103\001\255\255\105\001\255\255\ -\255\255\108\001\255\255\255\255\111\001\255\255\255\255\255\255\ -\115\001\000\001\001\001\002\001\003\001\255\255\255\255\255\255\ -\255\255\255\255\009\001\010\001\255\255\255\255\013\001\014\001\ -\015\001\016\001\017\001\018\001\019\001\020\001\021\001\255\255\ -\255\255\024\001\025\001\026\001\027\001\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\036\001\037\001\255\255\ -\255\255\040\001\041\001\042\001\043\001\044\001\045\001\046\001\ -\255\255\255\255\049\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\060\001\061\001\255\255\ -\063\001\255\255\255\255\066\001\067\001\068\001\255\255\070\001\ -\071\001\072\001\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\255\255\082\001\083\001\084\001\085\001\086\001\ -\255\255\255\255\255\255\255\255\091\001\092\001\000\000\094\001\ -\095\001\096\001\097\001\255\255\255\255\100\001\255\255\255\255\ -\103\001\255\255\105\001\255\255\255\255\108\001\255\255\255\255\ -\111\001\255\255\255\255\255\255\115\001\000\001\001\001\002\001\ -\003\001\255\255\255\255\255\255\255\255\255\255\009\001\010\001\ -\255\255\255\255\013\001\014\001\015\001\016\001\017\001\018\001\ -\019\001\020\001\021\001\255\255\255\255\024\001\025\001\026\001\ -\027\001\028\001\029\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\036\001\037\001\255\255\255\255\040\001\041\001\042\001\ -\043\001\044\001\045\001\046\001\255\255\255\255\049\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\060\001\061\001\255\255\063\001\255\255\255\255\066\001\ -\067\001\068\001\255\255\070\001\071\001\072\001\073\001\074\001\ -\255\255\255\255\255\255\255\255\255\255\080\001\255\255\082\001\ -\083\001\084\001\085\001\086\001\255\255\255\255\255\255\255\255\ -\091\001\092\001\000\000\094\001\095\001\096\001\097\001\255\255\ -\255\255\100\001\255\255\255\255\103\001\255\255\105\001\255\255\ -\255\255\108\001\255\255\255\255\111\001\255\255\255\255\255\255\ -\115\001\255\255\000\001\001\001\002\001\003\001\255\255\255\255\ -\255\255\255\255\008\001\009\001\010\001\255\255\255\255\013\001\ -\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\ -\255\255\255\255\024\001\025\001\026\001\027\001\028\001\029\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\036\001\037\001\ -\255\255\255\255\040\001\041\001\042\001\043\001\044\001\255\255\ -\255\255\255\255\255\255\049\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\060\001\061\001\ -\255\255\063\001\255\255\255\255\066\001\067\001\068\001\255\255\ -\070\001\071\001\072\001\073\001\074\001\255\255\255\255\255\255\ -\255\255\255\255\080\001\255\255\082\001\255\255\084\001\085\001\ -\086\001\255\255\255\255\255\255\255\255\091\001\092\001\000\000\ -\094\001\095\001\096\001\097\001\255\255\255\255\255\255\255\255\ -\255\255\103\001\255\255\105\001\255\255\255\255\108\001\255\255\ -\255\255\111\001\255\255\255\255\255\255\115\001\000\001\001\001\ -\002\001\003\001\255\255\255\255\255\255\255\255\008\001\009\001\ -\010\001\255\255\255\255\013\001\014\001\015\001\016\001\017\001\ -\018\001\019\001\020\001\021\001\255\255\255\255\024\001\025\001\ -\026\001\027\001\028\001\029\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\036\001\037\001\255\255\255\255\040\001\041\001\ -\042\001\043\001\044\001\255\255\255\255\255\255\255\255\049\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\060\001\061\001\255\255\063\001\255\255\255\255\ -\066\001\067\001\068\001\255\255\070\001\071\001\072\001\073\001\ -\074\001\255\255\255\255\255\255\255\255\255\255\080\001\255\255\ -\082\001\255\255\084\001\085\001\086\001\255\255\255\255\255\255\ -\255\255\091\001\092\001\000\000\094\001\095\001\096\001\097\001\ -\255\255\255\255\255\255\255\255\255\255\103\001\255\255\105\001\ -\255\255\255\255\108\001\255\255\255\255\111\001\255\255\255\255\ -\255\255\115\001\000\001\001\001\002\001\003\001\255\255\255\255\ -\255\255\255\255\008\001\009\001\010\001\255\255\255\255\013\001\ -\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\ -\255\255\255\255\024\001\025\001\026\001\027\001\028\001\029\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\036\001\037\001\ -\255\255\255\255\040\001\041\001\042\001\043\001\044\001\255\255\ -\255\255\255\255\255\255\049\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\060\001\061\001\ -\255\255\063\001\255\255\255\255\066\001\067\001\068\001\255\255\ -\070\001\071\001\072\001\073\001\074\001\255\255\255\255\255\255\ -\255\255\255\255\080\001\255\255\082\001\255\255\084\001\085\001\ -\086\001\255\255\255\255\255\255\255\255\091\001\092\001\000\000\ -\094\001\095\001\096\001\097\001\255\255\255\255\255\255\255\255\ -\255\255\103\001\255\255\105\001\255\255\255\255\108\001\255\255\ -\255\255\111\001\255\255\255\255\255\255\115\001\255\255\000\001\ -\001\001\002\001\003\001\255\255\255\255\255\255\255\255\008\001\ -\009\001\010\001\255\255\255\255\013\001\014\001\015\001\016\001\ -\017\001\018\001\019\001\020\001\021\001\255\255\255\255\024\001\ -\025\001\026\001\027\001\028\001\029\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\036\001\037\001\255\255\255\255\040\001\ -\041\001\042\001\043\001\044\001\255\255\255\255\255\255\255\255\ -\049\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\060\001\061\001\255\255\063\001\255\255\ -\255\255\066\001\067\001\068\001\255\255\070\001\071\001\072\001\ -\073\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\255\255\082\001\255\255\084\001\085\001\086\001\255\255\255\255\ -\255\255\255\255\091\001\092\001\000\000\094\001\095\001\096\001\ -\097\001\255\255\255\255\255\255\255\255\255\255\103\001\255\255\ -\105\001\255\255\255\255\108\001\255\255\255\255\111\001\255\255\ -\255\255\255\255\115\001\000\001\001\001\002\001\003\001\255\255\ -\255\255\255\255\255\255\008\001\009\001\010\001\255\255\255\255\ -\013\001\014\001\015\001\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\027\001\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\036\001\ -\037\001\255\255\255\255\040\001\041\001\042\001\043\001\044\001\ -\255\255\255\255\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\061\001\255\255\063\001\255\255\255\255\066\001\067\001\068\001\ -\255\255\070\001\071\001\072\001\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\082\001\255\255\084\001\ -\085\001\086\001\255\255\255\255\255\255\255\255\091\001\092\001\ -\000\000\094\001\095\001\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\103\001\255\255\105\001\255\255\255\255\108\001\ -\255\255\255\255\111\001\255\255\255\255\255\255\115\001\000\001\ -\001\001\002\001\003\001\255\255\255\255\255\255\255\255\008\001\ -\009\001\010\001\255\255\255\255\013\001\014\001\015\001\016\001\ -\017\001\018\001\019\001\020\001\021\001\255\255\255\255\024\001\ -\025\001\026\001\027\001\028\001\029\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\036\001\037\001\255\255\255\255\040\001\ -\041\001\042\001\043\001\044\001\255\255\255\255\255\255\255\255\ -\049\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\060\001\061\001\255\255\063\001\255\255\ -\255\255\066\001\067\001\068\001\255\255\070\001\071\001\072\001\ -\073\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\255\255\082\001\255\255\084\001\085\001\086\001\255\255\255\255\ -\255\255\255\255\091\001\092\001\000\000\094\001\095\001\096\001\ -\097\001\255\255\255\255\255\255\255\255\255\255\103\001\255\255\ -\105\001\255\255\255\255\108\001\255\255\255\255\111\001\006\001\ -\255\255\008\001\115\001\255\255\000\001\001\001\002\001\003\001\ -\255\255\255\255\255\255\255\255\008\001\009\001\010\001\255\255\ -\255\255\013\001\014\001\255\255\016\001\017\001\018\001\019\001\ -\020\001\021\001\255\255\255\255\024\001\025\001\026\001\027\001\ -\028\001\029\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\036\001\037\001\255\255\255\255\040\001\041\001\042\001\043\001\ -\055\001\255\255\057\001\058\001\059\001\049\001\061\001\255\255\ -\255\255\064\001\065\001\255\255\255\255\255\255\255\255\255\255\ -\060\001\061\001\255\255\063\001\255\255\255\255\066\001\067\001\ -\068\001\255\255\070\001\255\255\255\255\073\001\074\001\255\255\ -\255\255\255\255\255\255\090\001\080\001\255\255\082\001\255\255\ -\255\255\255\255\097\001\255\255\255\255\255\255\255\255\091\001\ -\092\001\000\000\094\001\095\001\096\001\097\001\109\001\110\001\ -\255\255\255\255\255\255\103\001\255\255\105\001\255\255\255\255\ -\108\001\255\255\255\255\111\001\255\255\255\255\255\255\115\001\ -\000\001\001\001\002\001\003\001\255\255\255\255\255\255\255\255\ -\008\001\009\001\010\001\255\255\255\255\013\001\014\001\255\255\ -\016\001\017\001\018\001\019\001\020\001\021\001\255\255\255\255\ -\024\001\025\001\026\001\027\001\028\001\029\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\036\001\037\001\255\255\255\255\ -\040\001\041\001\042\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\049\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\060\001\061\001\255\255\063\001\ -\255\255\255\255\255\255\067\001\068\001\255\255\070\001\255\255\ -\255\255\073\001\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\255\255\082\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\091\001\092\001\000\000\094\001\095\001\ -\096\001\097\001\255\255\255\255\255\255\255\255\255\255\103\001\ -\255\255\105\001\255\255\255\255\108\001\255\255\255\255\111\001\ -\255\255\255\255\255\255\115\001\000\001\001\001\002\001\003\001\ -\255\255\255\255\255\255\255\255\008\001\009\001\010\001\255\255\ -\255\255\013\001\014\001\255\255\016\001\017\001\018\001\019\001\ -\020\001\021\001\255\255\255\255\024\001\025\001\026\001\027\001\ -\028\001\029\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\036\001\037\001\255\255\255\255\040\001\041\001\042\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\049\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\060\001\061\001\255\255\063\001\255\255\255\255\255\255\067\001\ -\068\001\255\255\070\001\255\255\255\255\073\001\074\001\255\255\ -\255\255\255\255\255\255\255\255\080\001\255\255\082\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\091\001\ -\092\001\000\000\094\001\095\001\096\001\097\001\255\255\255\255\ -\255\255\255\255\255\255\103\001\255\255\105\001\255\255\255\255\ -\108\001\255\255\255\255\111\001\255\255\255\255\255\255\115\001\ -\255\255\000\001\001\001\002\001\003\001\255\255\255\255\255\255\ -\255\255\008\001\009\001\010\001\255\255\255\255\013\001\014\001\ -\255\255\016\001\017\001\018\001\019\001\020\001\021\001\255\255\ -\255\255\024\001\025\001\026\001\027\001\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\036\001\037\001\255\255\ -\255\255\040\001\041\001\042\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\049\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\060\001\061\001\255\255\ -\063\001\255\255\255\255\255\255\067\001\068\001\255\255\070\001\ -\255\255\255\255\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\255\255\082\001\255\255\255\255\000\000\255\255\ -\255\255\255\255\255\255\255\255\091\001\092\001\255\255\094\001\ -\095\001\096\001\097\001\255\255\255\255\255\255\255\255\255\255\ -\103\001\255\255\105\001\255\255\255\255\108\001\255\255\255\255\ -\111\001\255\255\255\255\255\255\115\001\000\001\001\001\002\001\ -\003\001\255\255\255\255\255\255\255\255\008\001\009\001\010\001\ -\255\255\255\255\013\001\014\001\255\255\016\001\017\001\018\001\ -\019\001\020\001\021\001\255\255\255\255\024\001\025\001\026\001\ -\027\001\028\001\029\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\036\001\037\001\255\255\255\255\040\001\041\001\042\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\049\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\060\001\061\001\255\255\063\001\255\255\255\255\255\255\ -\067\001\068\001\255\255\070\001\255\255\255\255\073\001\074\001\ -\255\255\255\255\255\255\000\000\255\255\080\001\255\255\082\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\091\001\092\001\255\255\094\001\095\001\096\001\097\001\255\255\ -\255\255\255\255\255\255\255\255\103\001\255\255\105\001\255\255\ -\255\255\108\001\255\255\255\255\111\001\255\255\255\255\255\255\ -\115\001\000\001\001\001\002\001\003\001\255\255\255\255\255\255\ -\255\255\008\001\009\001\010\001\255\255\255\255\013\001\014\001\ -\255\255\016\001\017\001\018\001\019\001\020\001\021\001\255\255\ -\255\255\024\001\025\001\026\001\027\001\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\036\001\037\001\255\255\ -\255\255\040\001\041\001\042\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\049\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\060\001\061\001\255\255\ -\063\001\255\255\255\255\000\000\067\001\068\001\255\255\070\001\ -\255\255\255\255\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\255\255\082\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\091\001\092\001\255\255\094\001\ -\095\001\096\001\097\001\255\255\255\255\255\255\255\255\255\255\ -\103\001\255\255\105\001\255\255\255\255\108\001\000\001\255\255\ -\111\001\003\001\255\255\255\255\115\001\255\255\008\001\009\001\ -\010\001\255\255\255\255\013\001\014\001\255\255\016\001\017\001\ -\018\001\019\001\020\001\021\001\255\255\255\255\024\001\025\001\ -\026\001\255\255\028\001\029\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\037\001\255\255\255\255\040\001\041\001\ -\053\001\255\255\055\001\255\255\057\001\058\001\059\001\049\001\ -\061\001\255\255\255\255\064\001\065\001\255\255\255\255\255\255\ -\255\255\255\255\060\001\000\000\255\255\063\001\255\255\255\255\ -\255\255\067\001\068\001\255\255\070\001\255\255\255\255\073\001\ -\074\001\255\255\255\255\255\255\255\255\090\001\080\001\255\255\ -\082\001\255\255\255\255\255\255\097\001\255\255\255\255\255\255\ -\255\255\091\001\092\001\255\255\094\001\095\001\096\001\097\001\ -\109\001\110\001\255\255\255\255\255\255\103\001\255\255\105\001\ -\255\255\255\255\108\001\000\001\255\255\111\001\003\001\255\255\ -\255\255\115\001\255\255\008\001\009\001\010\001\255\255\255\255\ -\013\001\014\001\255\255\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\255\255\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\037\001\255\255\255\255\040\001\041\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\000\000\255\255\255\255\255\255\060\001\ -\255\255\255\255\063\001\255\255\255\255\255\255\067\001\068\001\ -\255\255\070\001\255\255\255\255\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\082\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\103\001\000\001\105\001\255\255\003\001\108\001\ -\255\255\255\255\111\001\008\001\255\255\010\001\115\001\255\255\ -\013\001\014\001\255\255\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\255\255\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\037\001\255\255\255\255\040\001\041\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\000\000\255\255\255\255\255\255\060\001\ -\255\255\255\255\063\001\255\255\255\255\255\255\067\001\068\001\ -\255\255\070\001\255\255\255\255\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\103\001\000\001\105\001\255\255\003\001\108\001\ -\255\255\255\255\111\001\008\001\255\255\010\001\115\001\255\255\ -\013\001\014\001\255\255\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\255\255\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\037\001\255\255\255\255\040\001\041\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\255\255\000\000\063\001\255\255\255\255\255\255\067\001\068\001\ -\255\255\070\001\255\255\255\255\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\103\001\000\001\105\001\255\255\003\001\108\001\ -\255\255\255\255\111\001\008\001\255\255\010\001\115\001\255\255\ -\013\001\014\001\255\255\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\255\255\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\037\001\255\255\255\255\040\001\041\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\255\255\000\000\063\001\255\255\255\255\255\255\067\001\068\001\ -\255\255\070\001\255\255\255\255\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\103\001\000\001\105\001\255\255\003\001\108\001\ -\255\255\255\255\111\001\008\001\255\255\010\001\115\001\255\255\ -\013\001\014\001\255\255\016\001\017\001\018\001\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\255\255\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\037\001\255\255\255\255\040\001\041\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\000\000\255\255\255\255\060\001\ -\255\255\255\255\063\001\255\255\255\255\255\255\067\001\068\001\ -\255\255\070\001\255\255\255\255\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\000\000\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\103\001\255\255\105\001\255\255\255\255\108\001\ -\255\255\000\001\111\001\002\001\003\001\004\001\115\001\255\255\ -\255\255\008\001\255\255\255\255\255\255\255\255\013\001\255\255\ -\255\255\255\255\017\001\018\001\019\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\026\001\027\001\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\036\001\255\255\255\255\ -\255\255\255\255\041\001\255\255\255\255\255\255\255\255\000\000\ -\255\255\048\001\049\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\060\001\255\255\255\255\ -\063\001\064\001\255\255\066\001\067\001\068\001\255\255\070\001\ -\255\255\255\255\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\091\001\092\001\255\255\094\001\ -\095\001\096\001\097\001\255\255\255\255\100\001\255\255\255\255\ -\255\255\000\001\255\255\255\255\003\001\108\001\109\001\255\255\ -\111\001\008\001\255\255\010\001\115\001\255\255\013\001\014\001\ -\255\255\255\255\017\001\255\255\019\001\020\001\021\001\255\255\ -\255\255\024\001\025\001\026\001\255\255\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\037\001\255\255\ -\255\255\040\001\041\001\255\255\255\255\255\255\255\255\000\000\ -\255\255\255\255\049\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\060\001\255\255\255\255\ -\063\001\255\255\255\255\255\255\067\001\068\001\255\255\070\001\ -\255\255\255\255\073\001\074\001\255\255\000\000\255\255\255\255\ -\255\255\080\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\091\001\092\001\255\255\094\001\ -\095\001\096\001\097\001\255\255\000\001\255\255\255\255\003\001\ -\103\001\255\255\105\001\255\255\008\001\108\001\010\001\255\255\ -\111\001\013\001\014\001\255\255\115\001\017\001\255\255\019\001\ -\020\001\021\001\255\255\255\255\024\001\025\001\026\001\255\255\ -\028\001\029\001\000\001\255\255\255\255\003\001\255\255\255\255\ -\255\255\037\001\255\255\255\255\040\001\041\001\255\255\013\001\ -\255\255\255\255\000\000\255\255\255\255\049\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\026\001\255\255\028\001\029\001\ -\060\001\255\255\255\255\063\001\255\255\255\255\255\255\067\001\ -\068\001\255\255\070\001\041\001\255\255\073\001\074\001\255\255\ -\000\000\255\255\255\255\255\255\080\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\060\001\091\001\ -\092\001\255\255\094\001\095\001\096\001\097\001\068\001\000\001\ -\255\255\255\255\003\001\103\001\074\001\105\001\255\255\008\001\ -\108\001\010\001\080\001\111\001\013\001\014\001\255\255\115\001\ -\017\001\255\255\019\001\020\001\021\001\255\255\092\001\024\001\ -\025\001\026\001\096\001\028\001\029\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\037\001\255\255\108\001\040\001\ -\041\001\111\001\255\255\255\255\255\255\000\000\255\255\255\255\ -\049\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\060\001\255\255\255\255\063\001\255\255\ -\255\255\255\255\067\001\068\001\255\255\070\001\255\255\255\255\ -\073\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\091\001\092\001\255\255\094\001\095\001\096\001\ -\097\001\255\255\255\255\255\255\255\255\255\255\103\001\000\001\ -\105\001\255\255\003\001\108\001\255\255\255\255\111\001\008\001\ -\255\255\010\001\115\001\255\255\013\001\014\001\255\255\255\255\ -\017\001\255\255\019\001\020\001\021\001\255\255\255\255\024\001\ -\025\001\026\001\255\255\028\001\029\001\000\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\037\001\255\255\255\255\040\001\ -\041\001\255\255\013\001\255\255\255\255\000\000\255\255\255\255\ -\049\001\255\255\255\255\255\255\255\255\255\255\255\255\026\001\ -\255\255\028\001\029\001\060\001\255\255\255\255\063\001\255\255\ -\255\255\255\255\067\001\068\001\255\255\070\001\041\001\255\255\ -\073\001\074\001\255\255\000\000\255\255\255\255\255\255\080\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\060\001\091\001\092\001\255\255\094\001\095\001\096\001\ -\097\001\068\001\000\001\255\255\255\255\003\001\103\001\074\001\ -\105\001\255\255\008\001\108\001\010\001\080\001\111\001\013\001\ -\014\001\255\255\115\001\017\001\255\255\019\001\020\001\021\001\ -\255\255\092\001\024\001\025\001\026\001\096\001\028\001\029\001\ -\000\001\255\255\255\255\255\255\255\255\255\255\255\255\037\001\ -\255\255\108\001\040\001\041\001\111\001\013\001\255\255\255\255\ -\000\000\255\255\255\255\049\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\026\001\255\255\028\001\029\001\060\001\255\255\ -\255\255\063\001\255\255\255\255\255\255\067\001\068\001\255\255\ -\070\001\041\001\255\255\073\001\074\001\255\255\000\000\255\255\ -\255\255\255\255\080\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\060\001\091\001\092\001\255\255\ -\094\001\095\001\096\001\097\001\068\001\000\001\255\255\255\255\ -\003\001\103\001\074\001\105\001\255\255\008\001\108\001\010\001\ -\080\001\111\001\013\001\014\001\255\255\115\001\017\001\255\255\ -\019\001\020\001\021\001\255\255\092\001\024\001\025\001\026\001\ -\096\001\028\001\029\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\037\001\255\255\108\001\040\001\041\001\111\001\ -\255\255\255\255\255\255\000\000\255\255\255\255\049\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\060\001\255\255\255\255\063\001\255\255\255\255\255\255\ -\067\001\068\001\255\255\070\001\255\255\255\255\073\001\074\001\ -\255\255\255\255\255\255\255\255\255\255\080\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\091\001\092\001\255\255\094\001\095\001\096\001\097\001\255\255\ -\255\255\255\255\255\255\255\255\103\001\000\001\105\001\255\255\ -\003\001\108\001\255\255\255\255\111\001\008\001\255\255\010\001\ -\115\001\255\255\013\001\014\001\255\255\255\255\017\001\255\255\ -\019\001\020\001\021\001\255\255\255\255\024\001\025\001\026\001\ -\255\255\028\001\029\001\000\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\037\001\255\255\255\255\040\001\041\001\255\255\ -\013\001\255\255\255\255\000\000\255\255\255\255\049\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\026\001\255\255\028\001\ -\029\001\060\001\255\255\255\255\063\001\255\255\255\255\255\255\ -\067\001\068\001\255\255\070\001\041\001\255\255\073\001\074\001\ -\255\255\255\255\255\255\255\255\255\255\080\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\091\001\092\001\255\255\094\001\095\001\096\001\097\001\068\001\ -\000\001\255\255\255\255\003\001\103\001\074\001\105\001\255\255\ -\008\001\108\001\010\001\080\001\111\001\013\001\014\001\255\255\ -\115\001\017\001\255\255\019\001\020\001\021\001\255\255\092\001\ -\024\001\025\001\026\001\096\001\028\001\029\001\000\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\037\001\255\255\108\001\ -\040\001\041\001\111\001\013\001\255\255\255\255\000\000\255\255\ -\255\255\049\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\026\001\255\255\028\001\029\001\060\001\255\255\255\255\063\001\ -\255\255\255\255\255\255\067\001\068\001\255\255\070\001\041\001\ -\255\255\073\001\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\060\001\091\001\092\001\255\255\094\001\095\001\ -\096\001\097\001\068\001\000\001\255\255\255\255\003\001\103\001\ -\074\001\105\001\255\255\008\001\108\001\010\001\080\001\111\001\ -\013\001\014\001\255\255\115\001\017\001\255\255\019\001\020\001\ -\021\001\255\255\092\001\024\001\025\001\026\001\096\001\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\037\001\255\255\108\001\040\001\041\001\111\001\255\255\255\255\ -\255\255\000\000\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\255\255\255\255\063\001\255\255\255\255\255\255\067\001\068\001\ -\255\255\070\001\255\255\255\255\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\103\001\000\001\105\001\255\255\003\001\108\001\ -\255\255\255\255\111\001\008\001\255\255\010\001\115\001\255\255\ -\013\001\014\001\255\255\255\255\017\001\255\255\019\001\020\001\ -\021\001\255\255\255\255\024\001\025\001\026\001\255\255\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\037\001\255\255\255\255\040\001\041\001\255\255\255\255\255\255\ -\255\255\000\000\255\255\255\255\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\255\255\255\255\063\001\255\255\255\255\255\255\067\001\068\001\ -\255\255\070\001\255\255\255\255\073\001\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\000\001\255\255\ -\255\255\003\001\103\001\255\255\105\001\255\255\008\001\108\001\ -\010\001\255\255\111\001\013\001\014\001\255\255\115\001\017\001\ -\255\255\019\001\020\001\021\001\255\255\255\255\024\001\025\001\ -\026\001\255\255\028\001\029\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\037\001\255\255\255\255\040\001\041\001\ -\255\255\255\255\255\255\255\255\000\000\255\255\255\255\049\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\060\001\255\255\255\255\063\001\255\255\255\255\ -\255\255\067\001\068\001\255\255\070\001\255\255\255\255\073\001\ -\074\001\255\255\255\255\255\255\255\255\255\255\080\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\091\001\092\001\255\255\094\001\095\001\096\001\097\001\ -\255\255\000\001\255\255\255\255\003\001\103\001\255\255\105\001\ -\255\255\008\001\108\001\010\001\255\255\111\001\013\001\014\001\ -\255\255\115\001\017\001\255\255\019\001\020\001\021\001\255\255\ -\255\255\024\001\025\001\026\001\255\255\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\037\001\255\255\ -\255\255\040\001\041\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\049\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\000\000\255\255\255\255\060\001\255\255\255\255\ -\063\001\255\255\255\255\255\255\067\001\068\001\255\255\070\001\ -\255\255\255\255\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\091\001\092\001\255\255\094\001\ -\095\001\096\001\097\001\255\255\255\255\255\255\255\255\255\255\ -\103\001\000\001\105\001\255\255\003\001\108\001\255\255\255\255\ -\111\001\008\001\255\255\010\001\115\001\255\255\013\001\014\001\ -\255\255\255\255\017\001\255\255\019\001\020\001\021\001\255\255\ -\255\255\024\001\025\001\026\001\255\255\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\037\001\255\255\ -\255\255\040\001\041\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\049\001\255\255\255\255\000\000\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\060\001\255\255\255\255\ -\063\001\255\255\255\255\255\255\067\001\068\001\255\255\070\001\ -\255\255\255\255\073\001\074\001\255\255\255\255\255\255\255\255\ -\255\255\080\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\091\001\092\001\255\255\094\001\ -\255\255\096\001\097\001\255\255\000\001\255\255\255\255\003\001\ -\103\001\255\255\105\001\255\255\008\001\108\001\010\001\255\255\ -\111\001\013\001\014\001\255\255\115\001\017\001\255\255\019\001\ -\020\001\021\001\255\255\255\255\024\001\255\255\026\001\255\255\ -\028\001\029\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\037\001\255\255\255\255\040\001\041\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\049\001\255\255\255\255\ -\000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\060\001\255\255\255\255\063\001\255\255\255\255\255\255\067\001\ -\068\001\255\255\070\001\255\255\255\255\073\001\074\001\255\255\ -\255\255\255\255\255\255\255\255\080\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\091\001\ -\092\001\255\255\094\001\095\001\096\001\097\001\255\255\255\255\ -\255\255\255\255\255\255\103\001\255\255\105\001\255\255\255\255\ -\108\001\255\255\000\001\111\001\002\001\003\001\004\001\115\001\ -\255\255\255\255\008\001\255\255\255\255\255\255\255\255\013\001\ -\255\255\255\255\255\255\017\001\018\001\019\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\026\001\027\001\028\001\029\001\ -\255\255\255\255\008\001\255\255\255\255\255\255\036\001\255\255\ -\255\255\255\255\040\001\041\001\255\255\000\000\255\255\255\255\ -\255\255\023\001\048\001\049\001\255\255\255\255\255\255\255\255\ -\030\001\255\255\255\255\255\255\255\255\255\255\060\001\255\255\ -\255\255\063\001\255\255\255\255\066\001\067\001\068\001\255\255\ -\070\001\255\255\255\255\073\001\074\001\255\255\255\255\255\255\ -\255\255\055\001\080\001\057\001\058\001\059\001\255\255\061\001\ -\255\255\255\255\064\001\065\001\255\255\091\001\092\001\255\255\ -\094\001\095\001\096\001\255\255\255\255\000\001\100\001\002\001\ -\003\001\004\001\255\255\081\001\255\255\008\001\108\001\255\255\ -\255\255\111\001\013\001\089\001\090\001\115\001\017\001\018\001\ -\019\001\255\255\255\255\097\001\255\255\255\255\255\255\026\001\ -\027\001\028\001\029\001\255\255\106\001\255\255\255\255\109\001\ -\110\001\036\001\255\255\255\255\255\255\040\001\041\001\255\255\ -\000\000\255\255\255\255\255\255\255\255\048\001\049\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\060\001\255\255\255\255\063\001\255\255\255\255\066\001\ -\067\001\068\001\255\255\070\001\255\255\255\255\073\001\074\001\ -\255\255\255\255\255\255\255\255\055\001\080\001\057\001\058\001\ -\059\001\255\255\061\001\255\255\255\255\064\001\065\001\255\255\ -\091\001\092\001\255\255\094\001\095\001\096\001\255\255\074\001\ -\000\001\100\001\002\001\003\001\004\001\255\255\081\001\255\255\ -\008\001\108\001\255\255\255\255\111\001\013\001\089\001\090\001\ -\115\001\017\001\018\001\019\001\255\255\255\255\097\001\255\255\ -\255\255\255\255\026\001\027\001\028\001\029\001\255\255\255\255\ -\255\255\255\255\109\001\110\001\036\001\255\255\255\255\255\255\ -\255\255\041\001\255\255\000\000\255\255\255\255\255\255\255\255\ -\048\001\049\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\060\001\255\255\255\255\063\001\ -\255\255\255\255\066\001\067\001\068\001\255\255\070\001\255\255\ -\255\255\073\001\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\091\001\092\001\255\255\094\001\095\001\ -\096\001\097\001\255\255\255\255\255\255\000\001\255\255\002\001\ -\003\001\004\001\255\255\255\255\108\001\008\001\255\255\111\001\ -\255\255\255\255\013\001\115\001\255\255\255\255\017\001\018\001\ -\019\001\255\255\255\255\255\255\255\255\255\255\255\255\026\001\ -\027\001\028\001\029\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\036\001\255\255\255\255\255\255\255\255\041\001\255\255\ -\000\000\255\255\255\255\255\255\255\255\048\001\049\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\060\001\255\255\255\255\063\001\255\255\255\255\066\001\ -\067\001\068\001\255\255\070\001\255\255\255\255\073\001\074\001\ -\255\255\255\255\255\255\255\255\055\001\080\001\057\001\058\001\ -\059\001\255\255\061\001\255\255\255\255\064\001\065\001\255\255\ -\091\001\092\001\255\255\094\001\095\001\096\001\097\001\255\255\ -\000\001\255\255\002\001\003\001\004\001\255\255\081\001\255\255\ -\008\001\108\001\255\255\255\255\111\001\013\001\089\001\090\001\ -\115\001\017\001\018\001\019\001\255\255\255\255\097\001\255\255\ -\255\255\255\255\026\001\027\001\028\001\029\001\255\255\255\255\ -\255\255\108\001\109\001\110\001\036\001\255\255\255\255\255\255\ -\255\255\041\001\255\255\000\000\255\255\255\255\255\255\255\255\ -\048\001\049\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\060\001\255\255\255\255\063\001\ -\255\255\255\255\066\001\067\001\068\001\255\255\070\001\255\255\ -\255\255\255\255\074\001\255\255\255\255\255\255\255\255\055\001\ -\080\001\057\001\058\001\059\001\255\255\061\001\255\255\255\255\ -\064\001\065\001\255\255\091\001\092\001\255\255\094\001\095\001\ -\096\001\097\001\255\255\000\001\255\255\002\001\003\001\004\001\ -\255\255\081\001\255\255\008\001\108\001\255\255\255\255\111\001\ -\013\001\089\001\090\001\115\001\017\001\018\001\019\001\255\255\ -\255\255\097\001\255\255\255\255\255\255\026\001\027\001\028\001\ -\029\001\255\255\255\255\255\255\255\255\109\001\110\001\036\001\ -\255\255\255\255\255\255\255\255\041\001\255\255\000\000\255\255\ -\255\255\255\255\255\255\048\001\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\255\255\255\255\063\001\255\255\255\255\066\001\067\001\068\001\ -\255\255\070\001\255\255\255\255\255\255\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\255\255\255\255\ -\000\001\000\000\002\001\003\001\004\001\255\255\255\255\108\001\ -\008\001\255\255\111\001\255\255\255\255\013\001\115\001\255\255\ -\255\255\017\001\018\001\019\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\026\001\027\001\028\001\029\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\036\001\255\255\255\255\255\255\ -\255\255\041\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\048\001\049\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\000\000\060\001\255\255\255\255\063\001\ -\255\255\255\255\066\001\067\001\068\001\255\255\070\001\255\255\ -\255\255\255\255\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\091\001\092\001\255\255\094\001\095\001\ -\096\001\097\001\255\255\000\001\255\255\002\001\003\001\004\001\ -\255\255\255\255\255\255\008\001\108\001\255\255\255\255\111\001\ -\013\001\255\255\255\255\115\001\017\001\018\001\019\001\255\255\ -\255\255\000\000\255\255\255\255\255\255\026\001\027\001\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\036\001\ -\255\255\255\255\255\255\255\255\041\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\048\001\049\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ -\255\255\255\255\063\001\255\255\255\255\066\001\067\001\068\001\ -\255\255\070\001\255\255\255\255\255\255\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\000\000\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\091\001\092\001\ -\255\255\094\001\095\001\096\001\097\001\255\255\000\001\255\255\ -\002\001\003\001\255\255\255\255\255\255\255\255\008\001\108\001\ -\255\255\255\255\111\001\013\001\255\255\255\255\115\001\017\001\ -\018\001\019\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\026\001\027\001\028\001\029\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\036\001\255\255\255\255\255\255\000\000\041\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\048\001\049\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\000\001\060\001\255\255\003\001\063\001\255\255\255\255\ -\066\001\067\001\068\001\255\255\070\001\255\255\013\001\014\001\ -\074\001\255\255\017\001\255\255\255\255\255\255\080\001\255\255\ -\255\255\255\255\255\255\026\001\027\001\028\001\029\001\000\000\ -\255\255\091\001\092\001\255\255\094\001\095\001\096\001\097\001\ -\255\255\040\001\041\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\108\001\255\255\255\255\111\001\255\255\255\255\ -\255\255\115\001\255\255\000\001\255\255\060\001\003\001\255\255\ -\063\001\255\255\255\255\255\255\067\001\068\001\255\255\255\255\ -\013\001\255\255\073\001\074\001\017\001\255\255\255\255\255\255\ -\255\255\080\001\255\255\255\255\255\255\026\001\027\001\028\001\ -\029\001\255\255\255\255\255\255\255\255\092\001\255\255\094\001\ -\255\255\096\001\097\001\255\255\041\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\108\001\255\255\255\255\ -\111\001\255\255\255\255\255\255\115\001\255\255\255\255\060\001\ -\255\255\000\001\063\001\255\255\003\001\066\001\067\001\068\001\ -\255\255\255\255\255\255\255\255\073\001\074\001\013\001\255\255\ -\255\255\255\255\017\001\080\001\255\255\255\255\255\255\255\255\ -\000\000\255\255\255\255\026\001\027\001\028\001\029\001\092\001\ -\255\255\094\001\255\255\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\041\001\255\255\255\255\255\255\255\255\108\001\ -\255\255\255\255\111\001\255\255\255\255\255\255\115\001\255\255\ -\255\255\255\255\255\255\255\255\000\001\060\001\255\255\003\001\ -\063\001\255\255\255\255\066\001\067\001\068\001\255\255\255\255\ -\255\255\013\001\073\001\074\001\255\255\017\001\255\255\255\255\ -\255\255\080\001\255\255\255\255\255\255\255\255\026\001\027\001\ -\028\001\029\001\255\255\255\255\255\255\092\001\255\255\094\001\ -\255\255\096\001\097\001\255\255\255\255\041\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\108\001\255\255\255\255\ -\111\001\255\255\255\255\255\255\115\001\255\255\000\001\255\255\ -\060\001\003\001\255\255\063\001\255\255\255\255\066\001\067\001\ -\068\001\255\255\255\255\013\001\255\255\073\001\074\001\017\001\ -\000\000\019\001\255\255\255\255\080\001\255\255\255\255\255\255\ -\026\001\027\001\028\001\029\001\255\255\255\255\255\255\255\255\ -\092\001\255\255\094\001\255\255\096\001\097\001\255\255\041\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\001\ -\108\001\255\255\003\001\111\001\255\255\255\255\255\255\115\001\ -\255\255\255\255\060\001\255\255\013\001\063\001\255\255\255\255\ -\017\001\067\001\068\001\255\255\255\255\255\255\255\255\073\001\ -\074\001\026\001\027\001\028\001\029\001\255\255\080\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\041\001\255\255\092\001\255\255\094\001\255\255\096\001\097\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\ -\255\255\255\255\108\001\060\001\255\255\111\001\063\001\255\255\ -\255\255\115\001\067\001\068\001\255\255\255\255\255\255\255\255\ -\073\001\074\001\055\001\255\255\057\001\058\001\059\001\080\001\ -\061\001\255\255\063\001\064\001\065\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\092\001\255\255\094\001\255\255\096\001\ -\097\001\078\001\255\255\255\255\081\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\108\001\089\001\090\001\111\001\255\255\ -\000\001\255\255\115\001\003\001\097\001\005\001\006\001\007\001\ -\008\001\255\255\255\255\011\001\012\001\013\001\255\255\255\255\ -\109\001\110\001\255\255\019\001\255\255\255\255\255\255\023\001\ -\255\255\255\255\026\001\255\255\028\001\029\001\030\001\031\001\ -\032\001\033\001\034\001\035\001\036\001\255\255\255\255\039\001\ -\040\001\041\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\048\001\049\001\050\001\051\001\052\001\053\001\054\001\055\001\ -\056\001\057\001\058\001\059\001\060\001\061\001\000\000\063\001\ -\064\001\065\001\255\255\067\001\068\001\069\001\070\001\071\001\ -\072\001\255\255\074\001\075\001\255\255\077\001\078\001\255\255\ -\080\001\081\001\255\255\255\255\084\001\085\001\255\255\087\001\ -\088\001\089\001\090\001\091\001\092\001\093\001\255\255\095\001\ -\096\001\097\001\255\255\099\001\255\255\101\001\102\001\255\255\ -\104\001\255\255\106\001\107\001\108\001\109\001\110\001\111\001\ -\112\001\255\255\114\001\255\255\255\255\005\001\006\001\007\001\ -\255\255\255\255\255\255\011\001\012\001\013\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\028\001\029\001\030\001\031\001\ -\032\001\033\001\034\001\255\255\255\255\255\255\255\255\039\001\ -\255\255\041\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\050\001\255\255\052\001\053\001\054\001\055\001\ -\056\001\255\255\255\255\059\001\060\001\255\255\000\000\063\001\ -\064\001\065\001\255\255\255\255\068\001\069\001\255\255\071\001\ -\072\001\255\255\074\001\255\255\255\255\255\255\078\001\255\255\ -\080\001\000\000\255\255\255\255\084\001\085\001\255\255\087\001\ -\255\255\255\255\255\255\255\255\005\001\006\001\007\001\255\255\ -\096\001\097\001\011\001\012\001\013\001\101\001\255\255\255\255\ -\255\255\255\255\106\001\107\001\108\001\109\001\110\001\111\001\ -\255\255\255\255\114\001\028\001\029\001\030\001\031\001\032\001\ -\033\001\034\001\255\255\255\255\255\255\255\255\039\001\255\255\ -\041\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\050\001\255\255\052\001\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\060\001\255\255\255\255\063\001\064\001\ -\065\001\255\255\255\255\068\001\069\001\255\255\071\001\072\001\ -\255\255\074\001\255\255\255\255\255\255\078\001\255\255\080\001\ -\255\255\255\255\000\000\084\001\085\001\055\001\087\001\057\001\ -\058\001\059\001\255\255\061\001\255\255\255\255\064\001\065\001\ -\097\001\255\255\255\255\255\255\101\001\255\255\255\255\255\255\ -\255\255\106\001\107\001\108\001\109\001\110\001\111\001\081\001\ -\255\255\114\001\255\255\255\255\255\255\255\255\255\255\089\001\ -\090\001\255\255\255\255\005\001\006\001\007\001\255\255\097\001\ -\255\255\011\001\012\001\013\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\109\001\110\001\255\255\255\255\255\255\ -\255\255\255\255\028\001\029\001\030\001\031\001\032\001\033\001\ -\034\001\255\255\255\255\255\255\000\000\039\001\255\255\041\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\050\001\255\255\052\001\053\001\054\001\055\001\056\001\255\255\ -\255\255\059\001\060\001\255\255\255\255\063\001\064\001\065\001\ -\255\255\255\255\068\001\069\001\255\255\071\001\072\001\255\255\ -\074\001\255\255\255\255\255\255\078\001\255\255\080\001\255\255\ -\255\255\255\255\084\001\085\001\255\255\087\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\000\000\097\001\ -\255\255\255\255\255\255\101\001\255\255\255\255\255\255\255\255\ -\106\001\107\001\108\001\109\001\110\001\111\001\000\001\255\255\ -\114\001\255\255\004\001\255\255\006\001\255\255\008\001\255\255\ -\010\001\255\255\012\001\255\255\014\001\015\001\255\255\017\001\ -\018\001\000\001\255\255\255\255\003\001\255\255\255\255\255\255\ -\255\255\027\001\028\001\255\255\030\001\031\001\013\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\000\000\255\255\255\255\026\001\255\255\028\001\029\001\255\255\ -\050\001\051\001\052\001\053\001\255\255\055\001\056\001\255\255\ -\255\255\059\001\041\001\255\255\255\255\255\255\064\001\065\001\ -\066\001\255\255\255\255\255\255\255\255\071\001\255\255\073\001\ -\255\255\255\255\255\255\255\255\255\255\060\001\255\255\081\001\ -\255\255\255\255\084\001\255\255\067\001\068\001\255\255\089\001\ -\255\255\091\001\092\001\074\001\094\001\095\001\255\255\097\001\ -\255\255\080\001\000\000\101\001\255\255\255\255\104\001\255\255\ -\106\001\255\255\000\001\109\001\110\001\092\001\004\001\113\001\ -\006\001\096\001\008\001\255\255\010\001\255\255\012\001\255\255\ -\014\001\015\001\255\255\017\001\018\001\108\001\255\255\255\255\ -\111\001\255\255\255\255\255\255\255\255\027\001\255\255\255\255\ -\030\001\031\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\050\001\051\001\255\255\053\001\ -\000\000\055\001\056\001\255\255\255\255\059\001\255\255\255\255\ -\255\255\255\255\064\001\065\001\066\001\255\255\255\255\255\255\ -\255\255\071\001\255\255\073\001\000\001\255\255\255\255\003\001\ -\255\255\255\255\255\255\081\001\008\001\255\255\084\001\255\255\ -\255\255\013\001\255\255\089\001\255\255\091\001\092\001\019\001\ -\094\001\095\001\255\255\097\001\255\255\255\255\026\001\101\001\ -\028\001\029\001\104\001\255\255\106\001\255\255\255\255\109\001\ -\110\001\255\255\000\000\113\001\040\001\041\001\255\255\255\255\ -\255\255\255\255\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\001\255\255\ -\060\001\003\001\255\255\063\001\255\255\255\255\066\001\067\001\ -\068\001\255\255\255\255\013\001\255\255\073\001\074\001\255\255\ -\255\255\255\255\255\255\055\001\080\001\057\001\058\001\059\001\ -\026\001\061\001\028\001\029\001\064\001\065\001\255\255\255\255\ -\092\001\255\255\255\255\255\255\096\001\097\001\255\255\041\001\ -\100\001\255\255\255\255\255\255\255\255\081\001\255\255\255\255\ -\108\001\255\255\000\000\111\001\255\255\089\001\090\001\255\255\ -\000\001\255\255\060\001\003\001\255\255\097\001\064\001\255\255\ -\066\001\067\001\068\001\255\255\255\255\013\001\255\255\073\001\ -\074\001\109\001\110\001\255\255\255\255\255\255\080\001\255\255\ -\255\255\255\255\026\001\255\255\028\001\029\001\255\255\255\255\ -\255\255\255\255\092\001\255\255\255\255\255\255\096\001\097\001\ -\255\255\041\001\100\001\255\255\255\255\255\255\255\255\000\000\ -\255\255\255\255\108\001\109\001\255\255\111\001\255\255\255\255\ -\255\255\255\255\000\001\255\255\060\001\003\001\255\255\255\255\ -\064\001\255\255\066\001\067\001\068\001\255\255\255\255\013\001\ -\255\255\073\001\074\001\017\001\255\255\255\255\255\255\255\255\ -\080\001\255\255\255\255\255\255\026\001\027\001\028\001\029\001\ -\255\255\255\255\255\255\255\255\092\001\255\255\255\255\255\255\ -\096\001\097\001\255\255\041\001\100\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\108\001\109\001\255\255\111\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\060\001\255\255\ -\000\001\063\001\000\000\003\001\255\255\067\001\068\001\255\255\ -\008\001\255\255\255\255\255\255\074\001\013\001\255\255\255\255\ -\255\255\255\255\080\001\019\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\026\001\255\255\028\001\029\001\092\001\255\255\ -\094\001\255\255\096\001\097\001\255\255\255\255\255\255\255\255\ -\255\255\041\001\255\255\255\255\255\255\255\255\108\001\255\255\ -\255\255\111\001\255\255\255\255\255\255\255\255\255\255\000\000\ -\255\255\255\255\000\001\255\255\060\001\003\001\255\255\063\001\ -\000\000\255\255\066\001\067\001\068\001\255\255\255\255\013\001\ -\255\255\255\255\074\001\017\001\255\255\255\255\255\255\255\255\ -\080\001\255\255\255\255\255\255\026\001\027\001\028\001\029\001\ -\255\255\255\255\255\255\255\255\092\001\255\255\255\255\255\255\ -\096\001\097\001\255\255\041\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\108\001\255\255\255\255\111\001\ -\255\255\255\255\255\255\255\255\255\255\000\000\060\001\255\255\ -\255\255\063\001\255\255\255\255\255\255\067\001\068\001\255\255\ -\255\255\255\255\000\001\255\255\074\001\003\001\255\255\255\255\ -\255\255\255\255\080\001\255\255\255\255\255\255\255\255\013\001\ -\255\255\255\255\255\255\255\255\255\255\019\001\092\001\255\255\ -\094\001\255\255\096\001\097\001\026\001\255\255\028\001\029\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\108\001\255\255\ -\255\255\111\001\000\000\041\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\048\001\255\255\255\255\255\255\255\255\000\001\ -\255\255\255\255\003\001\255\255\255\255\255\255\060\001\255\255\ -\255\255\063\001\255\255\255\255\013\001\067\001\068\001\255\255\ -\070\001\255\255\019\001\255\255\074\001\255\255\255\255\255\255\ -\255\255\026\001\080\001\028\001\029\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\092\001\000\000\ -\041\001\255\255\096\001\097\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\108\001\255\255\ -\255\255\111\001\255\255\060\001\255\255\255\255\063\001\255\255\ -\255\255\255\255\067\001\068\001\255\255\255\255\255\255\255\255\ -\255\255\074\001\000\001\255\255\255\255\003\001\255\255\080\001\ -\255\255\255\255\008\001\255\255\255\255\086\001\255\255\013\001\ -\255\255\255\255\255\255\092\001\000\000\019\001\255\255\096\001\ -\097\001\255\255\255\255\255\255\026\001\000\000\028\001\029\001\ -\255\255\255\255\255\255\108\001\255\255\255\255\111\001\255\255\ -\255\255\255\255\255\255\041\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\001\ -\255\255\255\255\003\001\255\255\255\255\255\255\060\001\255\255\ -\000\001\063\001\255\255\003\001\013\001\067\001\068\001\255\255\ -\255\255\255\255\019\001\255\255\074\001\013\001\255\255\255\255\ -\255\255\026\001\080\001\028\001\029\001\255\255\255\255\255\255\ -\255\255\255\255\026\001\255\255\028\001\029\001\092\001\255\255\ -\041\001\255\255\096\001\097\001\255\255\000\000\255\255\255\255\ -\040\001\041\001\255\255\255\255\255\255\255\255\108\001\255\255\ -\255\255\111\001\255\255\060\001\255\255\000\001\063\001\255\255\ -\003\001\255\255\067\001\068\001\060\001\255\255\255\255\063\001\ -\255\255\074\001\013\001\067\001\068\001\255\255\255\255\080\001\ -\019\001\255\255\074\001\255\255\255\255\255\255\255\255\026\001\ -\080\001\028\001\029\001\092\001\255\255\255\255\000\000\096\001\ -\097\001\255\255\255\255\255\255\092\001\255\255\041\001\000\000\ -\096\001\097\001\255\255\108\001\255\255\255\255\111\001\255\255\ -\255\255\255\255\000\001\255\255\108\001\003\001\255\255\111\001\ -\255\255\060\001\255\255\255\255\063\001\255\255\255\255\013\001\ -\067\001\068\001\255\255\255\255\255\255\019\001\255\255\074\001\ -\255\255\255\255\255\255\255\255\026\001\080\001\028\001\029\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\000\000\092\001\255\255\041\001\255\255\096\001\097\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\001\ -\255\255\108\001\003\001\255\255\111\001\255\255\060\001\255\255\ -\255\255\063\001\255\255\255\255\013\001\067\001\068\001\255\255\ -\255\255\255\255\019\001\255\255\074\001\255\255\255\255\255\255\ -\255\255\026\001\080\001\028\001\029\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\092\001\255\255\ -\041\001\000\000\096\001\097\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\000\001\255\255\108\001\003\001\ -\255\255\111\001\255\255\060\001\255\255\000\001\063\001\255\255\ -\255\255\013\001\067\001\068\001\255\255\008\001\255\255\019\001\ -\255\255\074\001\013\001\255\255\255\255\255\255\026\001\080\001\ -\028\001\029\001\255\255\255\255\255\255\000\000\255\255\026\001\ -\255\255\028\001\029\001\092\001\255\255\041\001\000\000\096\001\ -\097\001\255\255\255\255\255\255\255\255\255\255\041\001\255\255\ -\255\255\255\255\255\255\108\001\255\255\255\255\111\001\255\255\ -\060\001\255\255\255\255\063\001\255\255\255\255\255\255\067\001\ -\068\001\060\001\255\255\255\255\063\001\255\255\074\001\066\001\ -\067\001\068\001\255\255\255\255\080\001\000\001\255\255\074\001\ -\003\001\255\255\255\255\255\255\255\255\080\001\255\255\000\000\ -\092\001\255\255\013\001\255\255\096\001\097\001\255\255\255\255\ -\019\001\092\001\255\255\255\255\255\255\096\001\097\001\026\001\ -\108\001\028\001\029\001\111\001\255\255\255\255\255\255\255\255\ -\255\255\108\001\255\255\255\255\111\001\255\255\041\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\000\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\001\ -\255\255\060\001\255\255\013\001\063\001\255\255\255\255\008\001\ -\067\001\068\001\255\255\255\255\013\001\255\255\255\255\074\001\ -\026\001\255\255\028\001\029\001\255\255\080\001\255\255\255\255\ -\000\000\026\001\255\255\028\001\029\001\255\255\255\255\041\001\ -\255\255\092\001\255\255\255\255\255\255\096\001\097\001\255\255\ -\041\001\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ -\000\001\108\001\060\001\255\255\111\001\063\001\000\000\255\255\ -\066\001\067\001\068\001\060\001\255\255\013\001\063\001\255\255\ -\074\001\255\255\067\001\068\001\255\255\255\255\080\001\255\255\ -\255\255\074\001\026\001\255\255\028\001\029\001\255\255\080\001\ -\255\255\255\255\092\001\255\255\255\255\255\255\096\001\097\001\ -\255\255\041\001\255\255\092\001\255\255\255\255\255\255\096\001\ -\097\001\255\255\108\001\255\255\255\255\111\001\255\255\255\255\ -\255\255\000\001\255\255\108\001\060\001\255\255\111\001\063\001\ -\255\255\255\255\255\255\067\001\068\001\255\255\013\001\255\255\ -\255\255\255\255\074\001\255\255\255\255\255\255\000\000\255\255\ -\080\001\255\255\255\255\026\001\255\255\028\001\029\001\255\255\ -\255\255\255\255\255\255\255\255\092\001\255\255\255\255\255\255\ -\096\001\097\001\041\001\000\000\255\255\000\001\255\255\255\255\ -\003\001\255\255\255\255\255\255\108\001\255\255\000\001\111\001\ -\255\255\255\255\013\001\255\255\255\255\060\001\255\255\255\255\ -\063\001\255\255\255\255\013\001\067\001\068\001\255\255\026\001\ -\255\255\028\001\029\001\074\001\255\255\255\255\255\255\255\255\ -\026\001\080\001\028\001\029\001\255\255\255\255\041\001\000\000\ -\255\255\255\255\255\255\255\255\255\255\092\001\255\255\041\001\ -\255\255\096\001\097\001\255\255\255\255\255\255\255\255\000\001\ -\255\255\060\001\255\255\255\255\063\001\108\001\255\255\255\255\ -\111\001\068\001\060\001\255\255\013\001\063\001\255\255\074\001\ -\255\255\067\001\068\001\255\255\255\255\080\001\255\255\255\255\ -\074\001\026\001\255\255\028\001\029\001\255\255\080\001\255\255\ -\000\000\092\001\255\255\255\255\255\255\096\001\097\001\255\255\ -\041\001\255\255\092\001\255\255\255\255\255\255\096\001\097\001\ -\255\255\108\001\255\255\255\255\111\001\255\255\255\255\255\255\ -\255\255\255\255\108\001\060\001\255\255\111\001\063\001\255\255\ -\255\255\255\255\067\001\068\001\255\255\255\255\255\255\255\255\ -\000\001\074\001\255\255\255\255\255\255\255\255\255\255\080\001\ -\008\001\255\255\255\255\255\255\255\255\013\001\255\255\255\255\ -\255\255\255\255\255\255\092\001\255\255\000\001\255\255\096\001\ -\097\001\255\255\026\001\255\255\028\001\029\001\000\001\255\255\ -\255\255\255\255\013\001\108\001\255\255\255\255\111\001\255\255\ -\255\255\041\001\255\255\013\001\255\255\255\255\255\255\026\001\ -\255\255\028\001\029\001\255\255\255\255\255\255\255\255\255\255\ -\026\001\255\255\028\001\029\001\060\001\255\255\041\001\255\255\ -\255\255\255\255\066\001\067\001\068\001\255\255\255\255\041\001\ -\255\255\255\255\074\001\255\255\255\255\255\255\255\255\255\255\ -\080\001\060\001\255\255\255\255\063\001\255\255\255\255\255\255\ -\255\255\068\001\060\001\255\255\092\001\063\001\255\255\074\001\ -\096\001\255\255\068\001\255\255\255\255\080\001\000\001\255\255\ -\074\001\255\255\255\255\255\255\108\001\255\255\080\001\111\001\ -\255\255\092\001\255\255\013\001\255\255\096\001\097\001\255\255\ -\255\255\255\255\092\001\000\001\255\255\255\255\096\001\097\001\ -\026\001\108\001\028\001\029\001\111\001\255\255\255\255\255\255\ -\013\001\255\255\108\001\255\255\255\255\111\001\255\255\041\001\ -\255\255\255\255\255\255\255\255\255\255\026\001\255\255\028\001\ -\029\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\060\001\255\255\041\001\063\001\255\255\000\001\ -\255\255\255\255\068\001\255\255\255\255\255\255\255\255\255\255\ -\074\001\255\255\255\255\255\255\013\001\255\255\080\001\060\001\ -\255\255\255\255\063\001\255\255\255\255\255\255\255\255\068\001\ -\255\255\026\001\092\001\028\001\029\001\074\001\096\001\097\001\ -\255\255\255\255\255\255\080\001\255\255\255\255\255\255\255\255\ -\041\001\255\255\108\001\255\255\255\255\111\001\255\255\092\001\ -\000\001\255\255\255\255\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\060\001\255\255\013\001\063\001\108\001\ -\255\255\255\255\111\001\068\001\255\255\255\255\255\255\255\255\ -\255\255\074\001\026\001\255\255\028\001\029\001\255\255\080\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\041\001\255\255\092\001\255\255\255\255\255\255\096\001\ -\097\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\108\001\060\001\255\255\111\001\255\255\ -\255\255\255\255\255\255\067\001\068\001\255\255\255\255\000\001\ -\255\255\255\255\074\001\255\255\005\001\006\001\007\001\008\001\ -\080\001\255\255\011\001\012\001\013\001\014\001\255\255\255\255\ -\255\255\255\255\019\001\255\255\092\001\255\255\255\255\255\255\ -\096\001\026\001\255\255\028\001\029\001\030\001\031\001\032\001\ -\033\001\034\001\035\001\255\255\108\001\255\255\039\001\111\001\ -\041\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\049\001\050\001\051\001\052\001\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\060\001\255\255\255\255\063\001\064\001\ -\065\001\066\001\255\255\068\001\069\001\070\001\071\001\072\001\ -\255\255\074\001\255\255\255\255\077\001\078\001\255\255\080\001\ -\081\001\255\255\255\255\084\001\085\001\255\255\087\001\255\255\ -\089\001\090\001\255\255\092\001\093\001\255\255\255\255\096\001\ -\097\001\255\255\099\001\255\255\101\001\102\001\255\255\104\001\ -\255\255\106\001\107\001\108\001\109\001\110\001\111\001\112\001\ -\000\001\114\001\255\255\255\255\255\255\005\001\006\001\007\001\ -\008\001\255\255\255\255\011\001\012\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\019\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\026\001\255\255\028\001\255\255\030\001\031\001\ -\032\001\033\001\034\001\035\001\255\255\255\255\255\255\039\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\049\001\050\001\051\001\052\001\053\001\054\001\055\001\ -\056\001\255\255\255\255\059\001\060\001\255\255\255\255\063\001\ -\064\001\065\001\255\255\255\255\068\001\069\001\070\001\071\001\ -\072\001\255\255\074\001\255\255\255\255\077\001\078\001\255\255\ -\255\255\081\001\255\255\255\255\084\001\085\001\255\255\087\001\ -\255\255\089\001\090\001\255\255\255\255\093\001\255\255\255\255\ -\255\255\097\001\255\255\099\001\255\255\101\001\102\001\255\255\ -\104\001\255\255\106\001\107\001\255\255\109\001\110\001\111\001\ -\112\001\255\255\114\001\000\001\001\001\002\001\255\255\255\255\ -\005\001\006\001\007\001\255\255\009\001\255\255\011\001\012\001\ -\255\255\255\255\015\001\016\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\027\001\255\255\ -\255\255\030\001\031\001\032\001\033\001\034\001\255\255\036\001\ -\255\255\255\255\039\001\255\255\255\255\042\001\043\001\044\001\ -\045\001\046\001\047\001\255\255\255\255\050\001\255\255\052\001\ -\053\001\054\001\055\001\056\001\255\255\255\255\059\001\255\255\ -\061\001\255\255\063\001\064\001\065\001\255\255\255\255\255\255\ -\069\001\255\255\071\001\072\001\255\255\074\001\255\255\255\255\ -\255\255\078\001\255\255\255\255\255\255\082\001\083\001\084\001\ -\085\001\086\001\087\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\094\001\255\255\255\255\255\255\098\001\255\255\100\001\ -\101\001\255\255\255\255\255\255\255\255\106\001\107\001\255\255\ -\109\001\110\001\000\001\001\001\002\001\114\001\255\255\005\001\ -\006\001\007\001\255\255\009\001\255\255\011\001\012\001\255\255\ -\255\255\015\001\016\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\027\001\255\255\255\255\ -\030\001\031\001\032\001\033\001\034\001\255\255\036\001\255\255\ -\255\255\039\001\255\255\255\255\042\001\043\001\044\001\045\001\ -\046\001\047\001\255\255\255\255\050\001\255\255\052\001\053\001\ -\054\001\055\001\056\001\255\255\255\255\059\001\255\255\061\001\ -\255\255\063\001\064\001\065\001\255\255\255\255\255\255\069\001\ -\255\255\071\001\072\001\255\255\074\001\255\255\255\255\255\255\ -\078\001\255\255\255\255\255\255\082\001\083\001\084\001\085\001\ -\086\001\087\001\255\255\255\255\255\255\255\255\255\255\055\001\ -\094\001\057\001\058\001\059\001\098\001\061\001\100\001\101\001\ -\064\001\065\001\255\255\255\255\106\001\107\001\255\255\109\001\ -\110\001\000\001\255\255\255\255\114\001\255\255\005\001\006\001\ -\007\001\081\001\255\255\255\255\011\001\012\001\013\001\255\255\ -\255\255\089\001\090\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\097\001\255\255\026\001\255\255\028\001\029\001\030\001\ -\031\001\032\001\033\001\034\001\255\255\109\001\110\001\255\255\ -\039\001\255\255\041\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\050\001\255\255\052\001\053\001\054\001\ -\055\001\056\001\255\255\255\255\059\001\060\001\255\255\255\255\ -\063\001\064\001\065\001\255\255\255\255\068\001\069\001\255\255\ -\071\001\072\001\255\255\074\001\255\255\255\255\255\255\078\001\ -\255\255\080\001\255\255\255\255\255\255\084\001\085\001\000\001\ -\087\001\255\255\255\255\255\255\005\001\006\001\007\001\255\255\ -\255\255\096\001\011\001\012\001\255\255\255\255\101\001\255\255\ -\255\255\255\255\255\255\106\001\107\001\108\001\109\001\110\001\ -\111\001\255\255\255\255\114\001\255\255\030\001\031\001\032\001\ -\033\001\034\001\255\255\255\255\255\255\255\255\039\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\050\001\255\255\052\001\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\255\255\255\255\255\255\063\001\064\001\ -\065\001\255\255\255\255\255\255\069\001\255\255\071\001\072\001\ -\255\255\255\255\255\255\255\255\255\255\078\001\255\255\255\255\ -\255\255\255\255\255\255\084\001\085\001\000\001\087\001\255\255\ -\255\255\255\255\005\001\006\001\007\001\094\001\255\255\255\255\ -\011\001\012\001\255\255\255\255\101\001\255\255\255\255\255\255\ -\255\255\106\001\107\001\255\255\109\001\110\001\255\255\255\255\ -\255\255\114\001\255\255\030\001\031\001\032\001\033\001\034\001\ -\255\255\255\255\255\255\255\255\039\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\050\001\ -\255\255\052\001\053\001\054\001\055\001\056\001\255\255\255\255\ -\059\001\255\255\255\255\255\255\063\001\064\001\065\001\255\255\ -\255\255\255\255\069\001\255\255\071\001\072\001\255\255\255\255\ -\255\255\255\255\255\255\078\001\255\255\255\255\255\255\255\255\ -\255\255\084\001\085\001\000\001\087\001\255\255\255\255\255\255\ -\005\001\006\001\007\001\094\001\255\255\255\255\011\001\012\001\ -\255\255\255\255\101\001\255\255\255\255\255\255\255\255\106\001\ -\107\001\255\255\109\001\110\001\255\255\255\255\255\255\114\001\ -\255\255\030\001\031\001\032\001\033\001\034\001\255\255\255\255\ -\255\255\255\255\039\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\050\001\255\255\052\001\ -\053\001\054\001\055\001\056\001\255\255\255\255\059\001\255\255\ -\255\255\255\255\063\001\064\001\065\001\255\255\255\255\255\255\ -\069\001\255\255\071\001\072\001\255\255\255\255\255\255\255\255\ -\255\255\078\001\255\255\255\255\255\255\255\255\255\255\084\001\ -\085\001\000\001\087\001\255\255\255\255\255\255\005\001\006\001\ -\007\001\094\001\255\255\255\255\011\001\012\001\255\255\255\255\ -\101\001\255\255\255\255\255\255\255\255\106\001\107\001\255\255\ -\109\001\110\001\255\255\255\255\255\255\114\001\255\255\030\001\ -\031\001\032\001\033\001\034\001\255\255\255\255\255\255\255\255\ -\039\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\050\001\255\255\052\001\053\001\054\001\ -\055\001\056\001\255\255\255\255\059\001\255\255\255\255\255\255\ -\063\001\064\001\065\001\255\255\255\255\255\255\069\001\255\255\ -\071\001\072\001\255\255\255\255\255\255\255\255\255\255\078\001\ -\255\255\255\255\255\255\255\255\255\255\084\001\085\001\255\255\ -\087\001\255\255\255\255\255\255\255\255\255\255\255\255\094\001\ -\003\001\004\001\005\001\255\255\255\255\255\255\101\001\255\255\ -\011\001\255\255\013\001\106\001\107\001\255\255\109\001\110\001\ -\019\001\020\001\021\001\114\001\255\255\024\001\025\001\026\001\ -\255\255\028\001\029\001\030\001\255\255\032\001\033\001\034\001\ -\035\001\255\255\255\255\255\255\039\001\040\001\041\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\048\001\049\001\255\255\ -\255\255\052\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\063\001\064\001\255\255\255\255\ -\255\255\000\001\069\001\070\001\255\255\004\001\255\255\074\001\ -\075\001\076\001\077\001\078\001\079\001\080\001\255\255\082\001\ -\255\255\255\255\017\001\255\255\019\001\088\001\255\255\022\001\ -\255\255\255\255\093\001\026\001\027\001\255\255\255\255\255\255\ -\099\001\255\255\255\255\102\001\103\001\036\001\105\001\106\001\ -\107\001\108\001\109\001\255\255\111\001\112\001\113\001\114\001\ -\115\001\048\001\049\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\060\001\255\255\255\255\ -\255\255\064\001\255\255\066\001\067\001\068\001\255\255\070\001\ -\255\255\255\255\073\001\255\255\255\255\255\255\000\001\001\001\ -\002\001\255\255\255\255\255\255\006\001\007\001\255\255\009\001\ -\255\255\255\255\012\001\090\001\091\001\015\001\016\001\255\255\ -\095\001\255\255\097\001\255\255\255\255\100\001\255\255\255\255\ -\255\255\027\001\028\001\255\255\030\001\031\001\109\001\255\255\ -\111\001\255\255\036\001\255\255\255\255\255\255\255\255\255\255\ -\042\001\043\001\044\001\045\001\046\001\047\001\255\255\255\255\ -\050\001\255\255\052\001\053\001\255\255\055\001\056\001\255\255\ -\255\255\059\001\255\255\061\001\255\255\255\255\064\001\065\001\ -\255\255\255\255\255\255\255\255\255\255\071\001\072\001\255\255\ -\074\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\082\001\083\001\084\001\085\001\086\001\087\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\094\001\255\255\255\255\097\001\ -\098\001\255\255\100\001\101\001\255\255\255\255\255\255\255\255\ -\106\001\255\255\108\001\109\001\110\001\000\001\001\001\002\001\ -\255\255\255\255\255\255\006\001\007\001\255\255\009\001\255\255\ -\255\255\012\001\255\255\255\255\015\001\016\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\027\001\028\001\255\255\030\001\031\001\255\255\255\255\255\255\ -\255\255\036\001\255\255\255\255\255\255\255\255\255\255\042\001\ -\043\001\044\001\045\001\046\001\047\001\255\255\255\255\050\001\ -\255\255\052\001\053\001\255\255\055\001\056\001\255\255\255\255\ -\059\001\255\255\061\001\255\255\255\255\064\001\065\001\255\255\ -\255\255\255\255\255\255\255\255\071\001\072\001\255\255\074\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\082\001\ -\083\001\084\001\085\001\086\001\087\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\094\001\255\255\255\255\097\001\098\001\ -\255\255\100\001\101\001\255\255\255\255\255\255\255\255\106\001\ -\255\255\108\001\109\001\110\001\000\001\001\001\002\001\255\255\ -\255\255\255\255\006\001\007\001\255\255\009\001\255\255\255\255\ -\012\001\255\255\255\255\015\001\016\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\027\001\ -\028\001\255\255\030\001\031\001\255\255\255\255\255\255\255\255\ -\036\001\255\255\255\255\255\255\255\255\255\255\042\001\043\001\ -\044\001\045\001\046\001\047\001\255\255\255\255\050\001\255\255\ -\052\001\053\001\255\255\055\001\056\001\255\255\255\255\059\001\ -\255\255\061\001\255\255\255\255\064\001\065\001\255\255\255\255\ -\255\255\255\255\255\255\071\001\072\001\255\255\074\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\082\001\083\001\ -\084\001\085\001\086\001\087\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\094\001\255\255\255\255\097\001\098\001\255\255\ -\100\001\101\001\255\255\255\255\255\255\255\255\106\001\255\255\ -\108\001\109\001\110\001\000\001\001\001\002\001\255\255\255\255\ -\255\255\006\001\007\001\255\255\009\001\255\255\255\255\012\001\ -\255\255\255\255\015\001\016\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\027\001\028\001\ -\255\255\030\001\031\001\255\255\255\255\255\255\255\255\036\001\ -\255\255\255\255\255\255\255\255\255\255\042\001\043\001\044\001\ -\045\001\046\001\047\001\255\255\255\255\050\001\255\255\052\001\ -\053\001\255\255\055\001\056\001\255\255\255\255\059\001\255\255\ -\061\001\255\255\255\255\064\001\065\001\255\255\255\255\255\255\ -\255\255\255\255\071\001\072\001\255\255\074\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\082\001\083\001\084\001\ -\085\001\086\001\087\001\255\255\255\255\000\001\255\255\255\255\ -\255\255\094\001\255\255\006\001\097\001\098\001\255\255\100\001\ -\101\001\012\001\255\255\255\255\015\001\106\001\255\255\255\255\ -\109\001\110\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\028\001\255\255\030\001\031\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\050\001\ -\255\255\052\001\053\001\255\255\055\001\056\001\255\255\255\255\ -\059\001\255\255\000\001\255\255\255\255\064\001\065\001\255\255\ -\006\001\255\255\255\255\255\255\071\001\255\255\012\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\084\001\255\255\255\255\255\255\255\255\028\001\255\255\ -\030\001\031\001\255\255\094\001\255\255\255\255\097\001\255\255\ -\255\255\255\255\101\001\255\255\255\255\255\255\255\255\106\001\ -\255\255\255\255\109\001\110\001\050\001\255\255\052\001\053\001\ -\255\255\055\001\056\001\255\255\255\255\059\001\255\255\000\001\ -\255\255\255\255\064\001\065\001\255\255\006\001\255\255\255\255\ -\255\255\071\001\255\255\012\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\084\001\255\255\ -\255\255\255\255\255\255\028\001\255\255\030\001\031\001\255\255\ -\255\255\255\255\255\255\097\001\255\255\255\255\255\255\101\001\ -\255\255\255\255\255\255\255\255\106\001\255\255\255\255\109\001\ -\110\001\050\001\255\255\052\001\053\001\255\255\055\001\056\001\ -\255\255\255\255\059\001\255\255\000\001\255\255\255\255\064\001\ -\065\001\255\255\006\001\255\255\255\255\255\255\071\001\255\255\ -\012\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\084\001\255\255\255\255\255\255\255\255\ -\028\001\255\255\030\001\031\001\255\255\255\255\255\255\255\255\ -\097\001\255\255\255\255\255\255\101\001\255\255\255\255\255\255\ -\255\255\106\001\255\255\255\255\109\001\110\001\050\001\255\255\ -\052\001\053\001\255\255\055\001\056\001\255\255\255\255\059\001\ -\255\255\000\001\255\255\255\255\064\001\065\001\255\255\006\001\ -\255\255\255\255\255\255\071\001\255\255\012\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\084\001\255\255\255\255\255\255\255\255\028\001\255\255\030\001\ -\031\001\255\255\255\255\255\255\255\255\097\001\255\255\255\255\ -\255\255\101\001\255\255\255\255\255\255\255\255\106\001\255\255\ -\255\255\109\001\110\001\050\001\255\255\052\001\053\001\255\255\ -\055\001\056\001\255\255\255\255\059\001\255\255\000\001\255\255\ -\255\255\064\001\065\001\255\255\006\001\255\255\255\255\255\255\ -\071\001\255\255\012\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\084\001\255\255\255\255\ -\255\255\255\255\028\001\255\255\030\001\031\001\255\255\255\255\ -\255\255\255\255\097\001\255\255\255\255\255\255\101\001\255\255\ -\255\255\255\255\255\255\106\001\255\255\255\255\109\001\110\001\ -\050\001\255\255\052\001\053\001\255\255\055\001\056\001\255\255\ -\255\255\059\001\255\255\255\255\255\255\255\255\064\001\065\001\ -\005\001\006\001\007\001\255\255\255\255\071\001\011\001\012\001\ -\013\001\014\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\084\001\255\255\255\255\255\255\255\255\028\001\ -\029\001\030\001\031\001\032\001\033\001\034\001\255\255\097\001\ -\255\255\255\255\039\001\101\001\041\001\255\255\255\255\255\255\ -\106\001\255\255\255\255\109\001\110\001\050\001\255\255\052\001\ -\053\001\054\001\055\001\056\001\255\255\255\255\059\001\060\001\ -\255\255\255\255\063\001\064\001\065\001\255\255\255\255\068\001\ -\069\001\255\255\071\001\072\001\255\255\074\001\255\255\255\255\ -\255\255\078\001\255\255\080\001\255\255\255\255\255\255\084\001\ -\085\001\255\255\087\001\255\255\089\001\255\255\255\255\005\001\ -\006\001\007\001\255\255\096\001\255\255\011\001\012\001\013\001\ -\101\001\255\255\255\255\255\255\255\255\106\001\107\001\108\001\ -\109\001\110\001\111\001\255\255\255\255\114\001\028\001\029\001\ -\030\001\031\001\032\001\033\001\034\001\255\255\255\255\255\255\ -\255\255\039\001\255\255\041\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\050\001\255\255\052\001\053\001\ -\054\001\055\001\056\001\255\255\255\255\059\001\060\001\255\255\ -\255\255\063\001\064\001\065\001\255\255\255\255\068\001\069\001\ -\255\255\071\001\072\001\255\255\074\001\255\255\255\255\255\255\ -\078\001\255\255\080\001\255\255\255\255\255\255\084\001\085\001\ -\255\255\087\001\255\255\255\255\255\255\005\001\006\001\007\001\ -\255\255\255\255\096\001\011\001\012\001\255\255\255\255\101\001\ -\255\255\255\255\255\255\255\255\106\001\107\001\108\001\109\001\ -\110\001\111\001\255\255\255\255\114\001\255\255\030\001\031\001\ -\032\001\033\001\034\001\255\255\255\255\255\255\255\255\039\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\050\001\255\255\052\001\053\001\054\001\055\001\ -\056\001\255\255\255\255\059\001\255\255\255\255\255\255\063\001\ -\064\001\065\001\255\255\255\255\255\255\069\001\255\255\071\001\ -\072\001\255\255\255\255\255\255\255\255\255\255\078\001\255\255\ -\255\255\255\255\255\255\255\255\084\001\085\001\255\255\087\001\ -\255\255\255\255\255\255\255\255\092\001\005\001\006\001\007\001\ -\255\255\255\255\010\001\011\001\012\001\101\001\255\255\255\255\ -\255\255\255\255\106\001\107\001\255\255\109\001\110\001\255\255\ -\255\255\255\255\114\001\255\255\255\255\255\255\030\001\031\001\ -\032\001\033\001\034\001\255\255\255\255\255\255\255\255\039\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\050\001\255\255\052\001\053\001\054\001\055\001\ -\056\001\255\255\255\255\059\001\255\255\255\255\255\255\063\001\ -\064\001\065\001\255\255\255\255\255\255\069\001\255\255\071\001\ -\072\001\255\255\255\255\255\255\255\255\255\255\078\001\255\255\ -\255\255\255\255\255\255\255\255\084\001\085\001\255\255\087\001\ -\255\255\255\255\005\001\006\001\007\001\255\255\255\255\255\255\ -\011\001\012\001\255\255\255\255\255\255\101\001\255\255\255\255\ -\255\255\255\255\106\001\107\001\255\255\109\001\110\001\026\001\ -\255\255\255\255\114\001\030\001\031\001\032\001\033\001\034\001\ -\255\255\255\255\255\255\255\255\039\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\050\001\ -\255\255\052\001\053\001\054\001\055\001\056\001\255\255\255\255\ -\059\001\255\255\255\255\255\255\063\001\064\001\065\001\255\255\ -\255\255\255\255\069\001\255\255\071\001\072\001\255\255\255\255\ -\255\255\255\255\255\255\078\001\255\255\255\255\255\255\255\255\ -\255\255\084\001\085\001\255\255\087\001\255\255\255\255\005\001\ -\006\001\007\001\255\255\255\255\255\255\011\001\012\001\255\255\ -\255\255\255\255\101\001\255\255\255\255\255\255\255\255\106\001\ -\107\001\255\255\109\001\110\001\255\255\255\255\255\255\114\001\ -\030\001\031\001\032\001\033\001\034\001\255\255\255\255\255\255\ -\255\255\039\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\050\001\255\255\052\001\053\001\ -\054\001\055\001\056\001\255\255\255\255\059\001\255\255\255\255\ -\255\255\063\001\064\001\065\001\255\255\255\255\255\255\069\001\ -\255\255\071\001\072\001\255\255\255\255\255\255\255\255\255\255\ -\078\001\255\255\255\255\255\255\255\255\083\001\084\001\085\001\ -\255\255\087\001\255\255\255\255\005\001\006\001\007\001\255\255\ -\255\255\255\255\011\001\012\001\255\255\255\255\255\255\101\001\ -\255\255\255\255\255\255\255\255\106\001\107\001\255\255\109\001\ -\110\001\255\255\255\255\255\255\114\001\030\001\031\001\032\001\ -\033\001\034\001\255\255\255\255\255\255\255\255\039\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\050\001\255\255\052\001\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\255\255\255\255\255\255\063\001\064\001\ -\065\001\255\255\255\255\255\255\069\001\255\255\071\001\072\001\ -\255\255\255\255\255\255\255\255\255\255\078\001\255\255\255\255\ -\255\255\255\255\255\255\084\001\085\001\255\255\087\001\255\255\ -\255\255\255\255\255\255\092\001\005\001\006\001\007\001\255\255\ -\255\255\010\001\011\001\012\001\101\001\255\255\255\255\255\255\ -\255\255\106\001\107\001\255\255\109\001\110\001\255\255\255\255\ -\255\255\114\001\255\255\255\255\255\255\030\001\031\001\032\001\ -\033\001\034\001\255\255\255\255\255\255\255\255\039\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\050\001\255\255\052\001\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\255\255\255\255\255\255\063\001\064\001\ -\065\001\255\255\255\255\255\255\069\001\255\255\071\001\072\001\ -\255\255\255\255\255\255\255\255\255\255\078\001\255\255\255\255\ -\255\255\255\255\255\255\084\001\085\001\255\255\087\001\255\255\ -\255\255\255\255\005\001\006\001\007\001\255\255\255\255\255\255\ -\011\001\012\001\255\255\255\255\101\001\255\255\255\255\255\255\ -\255\255\106\001\107\001\022\001\109\001\110\001\255\255\255\255\ -\255\255\114\001\255\255\030\001\031\001\032\001\033\001\034\001\ -\255\255\255\255\255\255\255\255\039\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\050\001\ -\255\255\052\001\053\001\054\001\055\001\056\001\255\255\255\255\ -\059\001\255\255\255\255\255\255\063\001\064\001\065\001\255\255\ -\255\255\255\255\069\001\255\255\071\001\072\001\255\255\255\255\ -\255\255\255\255\255\255\078\001\255\255\255\255\255\255\255\255\ -\255\255\084\001\085\001\255\255\087\001\255\255\255\255\005\001\ -\006\001\007\001\255\255\255\255\255\255\011\001\012\001\255\255\ -\255\255\255\255\101\001\255\255\255\255\255\255\255\255\106\001\ -\107\001\255\255\109\001\110\001\026\001\255\255\255\255\114\001\ -\030\001\031\001\032\001\033\001\034\001\255\255\255\255\255\255\ -\255\255\039\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\050\001\255\255\052\001\053\001\ -\054\001\055\001\056\001\255\255\255\255\059\001\255\255\255\255\ -\255\255\063\001\064\001\065\001\255\255\255\255\255\255\069\001\ -\255\255\071\001\072\001\255\255\255\255\255\255\255\255\255\255\ -\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ -\255\255\087\001\255\255\255\255\005\001\006\001\007\001\255\255\ -\255\255\255\255\011\001\012\001\255\255\255\255\255\255\101\001\ -\255\255\255\255\255\255\255\255\106\001\107\001\255\255\109\001\ -\110\001\255\255\255\255\255\255\114\001\030\001\031\001\032\001\ -\033\001\034\001\255\255\255\255\255\255\255\255\039\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\050\001\255\255\052\001\053\001\054\001\055\001\056\001\ -\255\255\255\255\059\001\255\255\255\255\255\255\063\001\064\001\ -\065\001\255\255\255\255\255\255\069\001\255\255\071\001\072\001\ -\255\255\255\255\255\255\255\255\255\255\078\001\255\255\255\255\ -\255\255\255\255\255\255\084\001\085\001\255\255\087\001\255\255\ -\255\255\005\001\006\001\007\001\255\255\255\255\255\255\011\001\ -\012\001\255\255\255\255\255\255\101\001\255\255\255\255\255\255\ -\255\255\106\001\107\001\255\255\109\001\110\001\255\255\255\255\ -\255\255\114\001\030\001\031\001\032\001\033\001\034\001\255\255\ -\255\255\255\255\255\255\039\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\050\001\255\255\ -\052\001\053\001\054\001\055\001\056\001\255\255\255\255\059\001\ -\255\255\255\255\255\255\063\001\064\001\065\001\255\255\255\255\ -\255\255\069\001\255\255\071\001\072\001\255\255\255\255\255\255\ -\255\255\255\255\078\001\255\255\255\255\255\255\255\255\255\255\ -\084\001\085\001\255\255\087\001\255\255\255\255\005\001\006\001\ -\007\001\255\255\255\255\255\255\011\001\012\001\255\255\255\255\ -\255\255\101\001\255\255\255\255\255\255\255\255\106\001\107\001\ -\255\255\109\001\110\001\255\255\255\255\255\255\114\001\030\001\ -\031\001\032\001\033\001\034\001\255\255\255\255\255\255\255\255\ -\039\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\050\001\255\255\052\001\053\001\054\001\ -\055\001\056\001\255\255\255\255\059\001\255\255\255\255\255\255\ -\063\001\064\001\065\001\255\255\255\255\006\001\069\001\255\255\ -\071\001\072\001\255\255\012\001\255\255\014\001\255\255\078\001\ -\017\001\255\255\255\255\255\255\255\255\084\001\085\001\255\255\ -\087\001\255\255\027\001\255\255\255\255\030\001\031\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\101\001\255\255\ -\255\255\255\255\255\255\106\001\107\001\255\255\109\001\110\001\ -\255\255\050\001\051\001\114\001\053\001\255\255\055\001\056\001\ -\255\255\255\255\059\001\255\255\255\255\255\255\255\255\064\001\ -\065\001\255\255\006\001\255\255\255\255\255\255\071\001\255\255\ -\012\001\255\255\014\001\255\255\255\255\017\001\255\255\255\255\ -\081\001\255\255\255\255\084\001\255\255\255\255\255\255\027\001\ -\089\001\255\255\030\001\031\001\255\255\006\001\255\255\255\255\ -\097\001\255\255\255\255\012\001\101\001\014\001\255\255\104\001\ -\255\255\106\001\255\255\255\255\109\001\110\001\050\001\051\001\ -\255\255\053\001\255\255\055\001\056\001\030\001\031\001\059\001\ -\255\255\255\255\255\255\255\255\064\001\065\001\255\255\255\255\ -\255\255\255\255\255\255\071\001\255\255\255\255\255\255\255\255\ -\255\255\050\001\051\001\255\255\053\001\081\001\055\001\056\001\ -\084\001\255\255\059\001\255\255\255\255\089\001\255\255\064\001\ -\065\001\255\255\255\255\255\255\255\255\097\001\071\001\255\255\ -\073\001\101\001\255\255\255\255\104\001\255\255\106\001\255\255\ -\081\001\109\001\110\001\084\001\255\255\255\255\006\001\255\255\ -\089\001\255\255\255\255\255\255\012\001\255\255\014\001\255\255\ -\097\001\255\255\255\255\255\255\101\001\255\255\255\255\104\001\ -\255\255\106\001\255\255\027\001\109\001\110\001\030\001\031\001\ -\255\255\006\001\255\255\255\255\255\255\255\255\255\255\012\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\050\001\051\001\255\255\053\001\255\255\055\001\ -\056\001\030\001\031\001\059\001\255\255\255\255\255\255\255\255\ -\064\001\065\001\255\255\255\255\255\255\255\255\255\255\071\001\ -\255\255\255\255\255\255\255\255\255\255\050\001\051\001\255\255\ -\053\001\081\001\055\001\056\001\084\001\255\255\059\001\255\255\ -\255\255\089\001\255\255\064\001\065\001\255\255\006\001\255\255\ -\255\255\097\001\071\001\255\255\012\001\101\001\255\255\255\255\ -\104\001\255\255\106\001\255\255\081\001\109\001\110\001\084\001\ -\255\255\255\255\255\255\255\255\089\001\255\255\030\001\031\001\ -\255\255\255\255\255\255\255\255\097\001\255\255\255\255\255\255\ -\101\001\255\255\255\255\104\001\255\255\106\001\255\255\255\255\ -\109\001\110\001\050\001\051\001\255\255\053\001\255\255\055\001\ -\056\001\255\255\255\255\059\001\255\255\255\255\255\255\255\255\ -\064\001\065\001\255\255\255\255\006\001\255\255\255\255\071\001\ -\255\255\255\255\012\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\081\001\255\255\255\255\084\001\255\255\255\255\255\255\ -\255\255\089\001\028\001\255\255\030\001\031\001\255\255\255\255\ -\255\255\097\001\255\255\255\255\255\255\101\001\255\255\255\255\ -\104\001\255\255\106\001\255\255\255\255\109\001\110\001\255\255\ -\050\001\255\255\052\001\053\001\255\255\055\001\056\001\255\255\ -\255\255\059\001\255\255\255\255\255\255\255\255\064\001\065\001\ -\255\255\255\255\255\255\006\001\255\255\071\001\255\255\010\001\ -\255\255\012\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\084\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\028\001\092\001\030\001\031\001\255\255\255\255\097\001\ -\255\255\255\255\255\255\101\001\255\255\255\255\255\255\255\255\ -\106\001\255\255\255\255\109\001\110\001\255\255\255\255\050\001\ -\255\255\052\001\053\001\255\255\055\001\056\001\255\255\255\255\ -\059\001\255\255\255\255\255\255\255\255\064\001\065\001\255\255\ -\006\001\255\255\255\255\255\255\071\001\255\255\012\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\006\001\007\001\255\255\ -\255\255\084\001\011\001\012\001\255\255\255\255\028\001\255\255\ -\030\001\031\001\255\255\255\255\255\255\255\255\097\001\255\255\ -\255\255\255\255\101\001\255\255\255\255\030\001\031\001\106\001\ -\255\255\255\255\109\001\110\001\050\001\255\255\052\001\053\001\ -\255\255\055\001\056\001\255\255\255\255\059\001\255\255\255\255\ -\255\255\050\001\064\001\065\001\053\001\054\001\055\001\056\001\ -\255\255\071\001\059\001\255\255\006\001\255\255\008\001\064\001\ -\065\001\255\255\012\001\255\255\255\255\255\255\084\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\092\001\255\255\ -\255\255\255\255\028\001\097\001\030\001\031\001\087\001\101\001\ -\255\255\255\255\255\255\255\255\106\001\255\255\255\255\109\001\ -\110\001\255\255\255\255\255\255\101\001\255\255\255\255\255\255\ -\050\001\106\001\052\001\053\001\109\001\055\001\056\001\255\255\ -\255\255\059\001\255\255\255\255\255\255\255\255\064\001\065\001\ -\255\255\006\001\255\255\255\255\255\255\071\001\255\255\012\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\084\001\255\255\255\255\255\255\255\255\028\001\ -\255\255\030\001\031\001\255\255\255\255\255\255\255\255\097\001\ -\255\255\255\255\255\255\101\001\255\255\255\255\255\255\255\255\ -\106\001\255\255\255\255\109\001\110\001\050\001\255\255\052\001\ -\053\001\255\255\055\001\056\001\255\255\255\255\059\001\255\255\ -\255\255\255\255\255\255\064\001\065\001\255\255\006\001\255\255\ -\255\255\255\255\071\001\255\255\012\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\084\001\ -\255\255\255\255\255\255\255\255\028\001\255\255\030\001\031\001\ -\255\255\006\001\255\255\255\255\097\001\255\255\255\255\012\001\ -\101\001\255\255\255\255\255\255\255\255\106\001\255\255\255\255\ -\109\001\110\001\050\001\255\255\052\001\053\001\255\255\055\001\ -\056\001\030\001\031\001\059\001\255\255\255\255\255\255\255\255\ -\064\001\065\001\255\255\255\255\255\255\255\255\255\255\071\001\ -\255\255\255\255\255\255\255\255\255\255\050\001\255\255\052\001\ -\053\001\255\255\055\001\056\001\084\001\255\255\059\001\255\255\ -\255\255\255\255\255\255\064\001\065\001\255\255\006\001\255\255\ -\255\255\097\001\071\001\255\255\012\001\101\001\255\255\255\255\ -\255\255\255\255\106\001\255\255\255\255\109\001\110\001\084\001\ -\255\255\255\255\255\255\255\255\028\001\255\255\030\001\031\001\ -\093\001\006\001\255\255\255\255\097\001\255\255\255\255\012\001\ -\101\001\255\255\255\255\255\255\255\255\106\001\255\255\255\255\ -\109\001\110\001\050\001\255\255\052\001\053\001\255\255\055\001\ -\056\001\030\001\031\001\059\001\255\255\255\255\255\255\255\255\ -\064\001\065\001\255\255\255\255\255\255\255\255\255\255\071\001\ -\255\255\255\255\255\255\255\255\255\255\050\001\255\255\052\001\ -\053\001\255\255\055\001\056\001\084\001\255\255\059\001\255\255\ -\255\255\255\255\255\255\064\001\065\001\255\255\006\001\255\255\ -\255\255\097\001\071\001\255\255\012\001\101\001\255\255\255\255\ -\255\255\255\255\106\001\255\255\255\255\109\001\110\001\084\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\030\001\031\001\ -\255\255\006\001\255\255\255\255\097\001\255\255\255\255\012\001\ -\101\001\255\255\255\255\255\255\255\255\106\001\255\255\255\255\ -\109\001\110\001\050\001\255\255\052\001\053\001\255\255\055\001\ -\056\001\030\001\031\001\059\001\255\255\255\255\255\255\255\255\ -\064\001\065\001\255\255\255\255\255\255\255\255\255\255\071\001\ -\255\255\255\255\255\255\255\255\255\255\050\001\255\255\052\001\ -\053\001\255\255\055\001\056\001\084\001\255\255\059\001\255\255\ -\255\255\255\255\255\255\064\001\065\001\255\255\006\001\255\255\ -\255\255\097\001\071\001\255\255\012\001\101\001\255\255\255\255\ -\255\255\255\255\106\001\255\255\255\255\109\001\110\001\084\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\030\001\031\001\ -\255\255\006\001\255\255\255\255\097\001\255\255\255\255\012\001\ -\101\001\255\255\255\255\255\255\255\255\106\001\255\255\255\255\ -\109\001\110\001\050\001\255\255\255\255\053\001\255\255\055\001\ -\056\001\030\001\031\001\059\001\255\255\255\255\255\255\255\255\ -\064\001\065\001\255\255\255\255\255\255\255\255\255\255\071\001\ -\255\255\255\255\255\255\255\255\255\255\050\001\255\255\255\255\ -\053\001\255\255\055\001\056\001\084\001\255\255\059\001\255\255\ -\255\255\255\255\255\255\064\001\065\001\255\255\255\255\255\255\ -\255\255\097\001\071\001\255\255\255\255\101\001\006\001\007\001\ -\255\255\255\255\106\001\011\001\012\001\109\001\110\001\084\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\022\001\255\255\ -\255\255\255\255\255\255\255\255\097\001\255\255\030\001\031\001\ -\101\001\255\255\255\255\255\255\255\255\106\001\255\255\255\255\ -\109\001\110\001\255\255\255\255\255\255\255\255\255\255\047\001\ -\255\255\255\255\050\001\051\001\255\255\053\001\054\001\055\001\ -\056\001\255\255\255\255\059\001\255\255\255\255\255\255\255\255\ -\064\001\065\001\006\001\007\001\255\255\255\255\255\255\011\001\ -\012\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\081\001\255\255\255\255\255\255\255\255\255\255\087\001\ -\255\255\089\001\030\001\031\001\255\255\255\255\255\255\255\255\ -\255\255\097\001\098\001\255\255\255\255\101\001\255\255\255\255\ -\104\001\255\255\106\001\255\255\255\255\109\001\050\001\051\001\ -\255\255\053\001\054\001\055\001\056\001\255\255\255\255\059\001\ -\255\255\255\255\255\255\255\255\064\001\065\001\006\001\007\001\ -\255\255\255\255\255\255\011\001\012\001\006\001\007\001\255\255\ -\255\255\255\255\011\001\012\001\255\255\081\001\255\255\255\255\ -\255\255\255\255\255\255\087\001\255\255\089\001\030\001\031\001\ -\255\255\255\255\255\255\255\255\255\255\030\001\031\001\255\255\ -\255\255\101\001\255\255\255\255\104\001\255\255\106\001\255\255\ -\255\255\109\001\050\001\255\255\255\255\053\001\054\001\055\001\ -\056\001\050\001\255\255\059\001\053\001\054\001\055\001\056\001\ -\064\001\065\001\059\001\255\255\008\001\255\255\255\255\064\001\ -\065\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\023\001\255\255\255\255\255\255\087\001\ -\255\255\255\255\030\001\255\255\255\255\255\255\087\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\101\001\255\255\255\255\ -\255\255\255\255\106\001\255\255\101\001\109\001\255\255\255\255\ -\255\255\106\001\255\255\055\001\109\001\057\001\058\001\059\001\ -\255\255\061\001\255\255\255\255\064\001\065\001\255\255\255\255\ -\255\255\000\001\001\001\002\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\009\001\255\255\255\255\081\001\255\255\014\001\ -\015\001\016\001\017\001\018\001\088\001\089\001\090\001\255\255\ -\255\255\255\255\255\255\255\255\027\001\097\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\036\001\106\001\255\255\ -\255\255\109\001\110\001\042\001\043\001\044\001\045\001\046\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\061\001\255\255\ -\015\001\255\255\255\255\066\001\255\255\255\255\255\255\255\255\ -\071\001\072\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\082\001\083\001\084\001\085\001\086\001\ -\255\255\000\001\001\001\002\001\255\255\255\255\255\255\094\001\ -\007\001\255\255\009\001\255\255\255\255\100\001\255\255\255\255\ -\055\001\016\001\057\001\058\001\059\001\255\255\061\001\255\255\ -\255\255\064\001\065\001\255\255\027\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\074\001\255\255\036\001\255\255\255\255\ -\255\255\255\255\081\001\042\001\043\001\044\001\045\001\046\001\ -\047\001\255\255\089\001\090\001\255\255\255\255\255\255\094\001\ -\255\255\255\255\097\001\255\255\255\255\255\255\061\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\109\001\110\001\ -\071\001\072\001\255\255\074\001\255\255\255\255\255\255\255\255\ -\000\001\001\001\002\001\082\001\083\001\084\001\085\001\086\001\ -\087\001\009\001\255\255\255\255\255\255\255\255\255\255\015\001\ -\016\001\255\255\018\001\098\001\255\255\100\001\255\255\255\255\ -\255\255\255\255\255\255\027\001\255\255\255\255\255\255\255\255\ -\000\001\001\001\002\001\255\255\036\001\255\255\255\255\255\255\ -\255\255\009\001\042\001\043\001\044\001\045\001\046\001\015\001\ -\016\001\255\255\018\001\255\255\255\255\255\255\055\001\255\255\ -\057\001\058\001\059\001\027\001\061\001\061\001\255\255\064\001\ -\065\001\255\255\066\001\255\255\036\001\255\255\255\255\071\001\ -\072\001\255\255\042\001\043\001\044\001\045\001\046\001\255\255\ -\081\001\255\255\082\001\083\001\084\001\085\001\086\001\255\255\ -\089\001\090\001\255\255\091\001\255\255\061\001\255\255\255\255\ -\097\001\255\255\066\001\255\255\100\001\255\255\255\255\071\001\ -\072\001\255\255\255\255\255\255\109\001\110\001\000\001\001\001\ -\002\001\255\255\082\001\083\001\084\001\085\001\086\001\009\001\ -\255\255\255\255\255\255\255\255\092\001\015\001\016\001\255\255\ -\018\001\255\255\255\255\255\255\100\001\255\255\255\255\255\255\ -\255\255\027\001\255\255\255\255\255\255\255\255\000\001\001\001\ -\002\001\255\255\036\001\255\255\255\255\255\255\255\255\009\001\ -\042\001\043\001\044\001\045\001\046\001\015\001\016\001\255\255\ -\018\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\027\001\255\255\061\001\255\255\255\255\255\255\255\255\ -\066\001\255\255\036\001\255\255\255\255\071\001\072\001\255\255\ -\042\001\043\001\044\001\045\001\046\001\255\255\255\255\255\255\ -\082\001\083\001\084\001\085\001\086\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\061\001\094\001\255\255\255\255\255\255\ -\066\001\255\255\100\001\255\255\255\255\071\001\072\001\255\255\ -\255\255\255\255\255\255\255\255\000\001\001\001\002\001\255\255\ -\082\001\083\001\084\001\085\001\086\001\009\001\255\255\255\255\ -\255\255\091\001\255\255\015\001\016\001\255\255\018\001\255\255\ -\255\255\255\255\100\001\255\255\255\255\255\255\255\255\027\001\ -\255\255\255\255\255\255\255\255\000\001\001\001\002\001\255\255\ -\036\001\255\255\255\255\255\255\255\255\009\001\042\001\043\001\ -\044\001\045\001\046\001\015\001\016\001\255\255\018\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\027\001\ -\255\255\061\001\255\255\255\255\255\255\255\255\066\001\255\255\ -\036\001\255\255\255\255\071\001\072\001\255\255\042\001\043\001\ -\044\001\045\001\046\001\255\255\255\255\255\255\082\001\083\001\ -\084\001\085\001\086\001\255\255\255\255\255\255\255\255\255\255\ -\092\001\061\001\255\255\255\255\255\255\255\255\066\001\255\255\ -\100\001\255\255\255\255\071\001\072\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\082\001\083\001\ -\084\001\085\001\086\001\000\001\001\001\002\001\255\255\255\255\ -\255\255\255\255\094\001\255\255\009\001\255\255\255\255\255\255\ -\100\001\255\255\015\001\016\001\255\255\018\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\027\001\255\255\ -\255\255\255\255\255\255\000\001\001\001\002\001\255\255\036\001\ -\255\255\255\255\255\255\255\255\009\001\042\001\043\001\044\001\ -\045\001\046\001\015\001\016\001\255\255\018\001\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\027\001\255\255\ -\061\001\255\255\255\255\255\255\255\255\066\001\255\255\036\001\ -\255\255\255\255\071\001\072\001\255\255\042\001\043\001\044\001\ -\045\001\046\001\255\255\255\255\255\255\082\001\083\001\084\001\ -\085\001\086\001\255\255\255\255\255\255\255\255\091\001\255\255\ -\061\001\255\255\255\255\255\255\255\255\066\001\255\255\100\001\ -\255\255\255\255\071\001\072\001\255\255\255\255\255\255\255\255\ -\255\255\000\001\001\001\002\001\255\255\082\001\083\001\084\001\ -\085\001\086\001\009\001\255\255\255\255\255\255\255\255\092\001\ -\015\001\016\001\255\255\018\001\255\255\255\255\255\255\100\001\ -\255\255\255\255\255\255\255\255\027\001\255\255\255\255\255\255\ -\255\255\000\001\001\001\002\001\255\255\036\001\255\255\255\255\ -\255\255\255\255\009\001\042\001\043\001\044\001\045\001\046\001\ -\015\001\016\001\255\255\018\001\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\027\001\255\255\061\001\255\255\ -\255\255\255\255\255\255\066\001\255\255\036\001\255\255\255\255\ -\071\001\072\001\255\255\042\001\043\001\044\001\045\001\046\001\ -\255\255\255\255\255\255\082\001\083\001\084\001\085\001\086\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\061\001\094\001\ -\255\255\255\255\255\255\066\001\255\255\100\001\255\255\255\255\ -\071\001\072\001\255\255\255\255\255\255\255\255\255\255\000\001\ -\001\001\002\001\255\255\082\001\083\001\084\001\085\001\086\001\ -\009\001\255\255\255\255\255\255\091\001\255\255\015\001\016\001\ -\255\255\018\001\255\255\255\255\255\255\100\001\255\255\255\255\ -\255\255\255\255\027\001\255\255\255\255\255\255\255\255\000\001\ -\001\001\002\001\255\255\036\001\255\255\255\255\255\255\255\255\ -\009\001\042\001\043\001\044\001\045\001\046\001\015\001\016\001\ -\255\255\018\001\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\027\001\255\255\061\001\255\255\255\255\255\255\ -\255\255\066\001\255\255\036\001\255\255\255\255\071\001\072\001\ -\255\255\042\001\043\001\044\001\045\001\046\001\255\255\255\255\ -\255\255\082\001\083\001\084\001\085\001\086\001\255\255\255\255\ -\255\255\255\255\255\255\092\001\061\001\001\001\002\001\255\255\ -\255\255\066\001\255\255\100\001\255\255\009\001\071\001\072\001\ -\255\255\255\255\255\255\015\001\016\001\255\255\018\001\255\255\ -\255\255\082\001\083\001\084\001\085\001\086\001\255\255\027\001\ -\255\255\255\255\255\255\255\255\255\255\094\001\255\255\255\255\ -\036\001\255\255\255\255\100\001\255\255\255\255\042\001\043\001\ -\044\001\045\001\046\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\061\001\255\255\255\255\255\255\255\255\066\001\255\255\ -\255\255\255\255\255\255\071\001\072\001\001\001\002\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\009\001\082\001\083\001\ -\084\001\085\001\086\001\015\001\016\001\255\255\018\001\255\255\ -\255\255\255\255\255\255\095\001\255\255\025\001\255\255\027\001\ -\100\001\255\255\255\255\255\255\255\255\001\001\002\001\255\255\ -\036\001\255\255\255\255\255\255\255\255\009\001\042\001\043\001\ -\044\001\045\001\046\001\015\001\016\001\255\255\018\001\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\027\001\ -\255\255\061\001\255\255\255\255\255\255\255\255\066\001\255\255\ -\036\001\255\255\255\255\071\001\072\001\255\255\042\001\043\001\ -\044\001\045\001\046\001\255\255\255\255\255\255\082\001\083\001\ -\084\001\085\001\086\001\255\255\255\255\255\255\255\255\255\255\ -\255\255\061\001\001\001\002\001\255\255\255\255\066\001\255\255\ -\100\001\255\255\009\001\071\001\072\001\255\255\255\255\255\255\ -\015\001\016\001\255\255\255\255\255\255\255\255\082\001\083\001\ -\084\001\085\001\086\001\255\255\027\001\255\255\255\255\255\255\ -\255\255\255\255\001\001\002\001\255\255\036\001\255\255\255\255\ -\100\001\255\255\009\001\042\001\043\001\044\001\045\001\046\001\ -\015\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\027\001\255\255\061\001\255\255\ -\255\255\255\255\255\255\066\001\255\255\036\001\255\255\255\255\ -\071\001\072\001\255\255\042\001\043\001\044\001\045\001\046\001\ -\013\001\255\255\255\255\082\001\083\001\084\001\085\001\086\001\ -\255\255\255\255\255\255\255\255\255\255\255\255\061\001\028\001\ -\029\001\255\255\255\255\066\001\255\255\100\001\255\255\255\255\ -\071\001\072\001\255\255\255\255\041\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\082\001\083\001\084\001\085\001\086\001\ -\255\255\255\255\055\001\255\255\057\001\058\001\059\001\060\001\ -\061\001\255\255\255\255\064\001\065\001\100\001\255\255\068\001\ -\255\255\255\255\255\255\255\255\255\255\074\001\255\255\255\255\ -\255\255\255\255\255\255\080\001\081\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\089\001\090\001\255\255\255\255\ -\255\255\255\255\255\255\096\001\097\001\255\255\255\255\255\255\ -\255\255\255\255\255\255\255\255\255\255\255\255\255\255\108\001\ -\109\001\110\001\111\001" - -let yynames_const = "\ - AMPERAMPER\000\ - AMPERSAND\000\ - AND\000\ - AS\000\ - ASSERT\000\ - BACKQUOTE\000\ - BANG\000\ - BAR\000\ - BARBAR\000\ - BARRBRACKET\000\ - BEGIN\000\ - CLASS\000\ - COLON\000\ - COLONCOLON\000\ - COLONEQUAL\000\ - COLONGREATER\000\ - COMMA\000\ - CONSTRAINT\000\ - DO\000\ - DONE\000\ - DOT\000\ - DOTDOT\000\ - DOWNTO\000\ - ELSE\000\ - END\000\ - EOF\000\ - EQUAL\000\ - EXCEPTION\000\ - EXTERNAL\000\ - FALSE\000\ - FOR\000\ - FUN\000\ - FUNCTION\000\ - FUNCTOR\000\ - GREATER\000\ - GREATERRBRACE\000\ - GREATERRBRACKET\000\ - IF\000\ - IN\000\ - INCLUDE\000\ - INHERIT\000\ - INITIALIZER\000\ - LAZY\000\ - LBRACE\000\ - LBRACELESS\000\ - LBRACKET\000\ - LBRACKETBAR\000\ - LBRACKETLESS\000\ - LBRACKETGREATER\000\ - LBRACKETPERCENT\000\ - LBRACKETPERCENTPERCENT\000\ - LESS\000\ - LESSMINUS\000\ - LET\000\ - LPAREN\000\ - LBRACKETAT\000\ - LBRACKETATAT\000\ - LBRACKETATATAT\000\ - MATCH\000\ - METHOD\000\ - MINUS\000\ - MINUSDOT\000\ - MINUSGREATER\000\ - MODULE\000\ - MUTABLE\000\ - NEW\000\ - NONREC\000\ - OBJECT\000\ - OF\000\ - OPEN\000\ - OR\000\ - PERCENT\000\ - PLUS\000\ - PLUSDOT\000\ - PLUSEQ\000\ - PRIVATE\000\ - QUESTION\000\ - QUOTE\000\ - RBRACE\000\ - RBRACKET\000\ - REC\000\ - RPAREN\000\ - SEMI\000\ - SEMISEMI\000\ - HASH\000\ - SIG\000\ - STAR\000\ - STRUCT\000\ - THEN\000\ - TILDE\000\ - TO\000\ - TRUE\000\ - TRY\000\ - TYPE\000\ - UNDERSCORE\000\ - VAL\000\ - VIRTUAL\000\ - WHEN\000\ - WHILE\000\ - WITH\000\ - EOL\000\ - " - -let yynames_block = "\ - CHAR\000\ - FLOAT\000\ - INFIXOP0\000\ - INFIXOP1\000\ - INFIXOP2\000\ - INFIXOP3\000\ - INFIXOP4\000\ - DOTOP\000\ - INT\000\ - LABEL\000\ - LIDENT\000\ - OPTLABEL\000\ - PREFIXOP\000\ - HASHOP\000\ - STRING\000\ - UIDENT\000\ - COMMENT\000\ - DOCSTRING\000\ - " - -let yyact = [| - (fun _ -> failwith "parser") -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'structure) in - Obj.repr( -# 574 "ml/parser.mly" - ( extra_str 1 _1 ) -# 6690 "ml/parser.ml" - : Parsetree.structure)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'signature) in - Obj.repr( -# 577 "ml/parser.mly" - ( extra_sig 1 _1 ) -# 6697 "ml/parser.ml" - : Parsetree.signature)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'top_structure) in - Obj.repr( -# 580 "ml/parser.mly" - ( Ptop_def (extra_str 1 _1) ) -# 6704 "ml/parser.ml" - : Parsetree.toplevel_phrase)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'toplevel_directive) in - Obj.repr( -# 581 "ml/parser.mly" - ( _1 ) -# 6711 "ml/parser.ml" - : Parsetree.toplevel_phrase)) -; (fun __caml_parser_env -> - Obj.repr( -# 582 "ml/parser.mly" - ( raise End_of_file ) -# 6717 "ml/parser.ml" - : Parsetree.toplevel_phrase)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 586 "ml/parser.mly" - ( (text_str 1) @ [mkstrexp _1 _2] ) -# 6725 "ml/parser.ml" - : 'top_structure)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'top_structure_tail) in - Obj.repr( -# 588 "ml/parser.mly" - ( _1 ) -# 6732 "ml/parser.ml" - : 'top_structure)) -; (fun __caml_parser_env -> - Obj.repr( -# 591 "ml/parser.mly" - ( [] ) -# 6738 "ml/parser.ml" - : 'top_structure_tail)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'structure_item) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'top_structure_tail) in - Obj.repr( -# 592 "ml/parser.mly" - ( (text_str 1) @ _1 :: _2 ) -# 6746 "ml/parser.ml" - : 'top_structure_tail)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'use_file_body) in - Obj.repr( -# 595 "ml/parser.mly" - ( extra_def 1 _1 ) -# 6753 "ml/parser.ml" - : Parsetree.toplevel_phrase list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'use_file_tail) in - Obj.repr( -# 598 "ml/parser.mly" - ( _1 ) -# 6760 "ml/parser.ml" - : 'use_file_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'seq_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'post_item_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'use_file_tail) in - Obj.repr( -# 600 "ml/parser.mly" - ( (text_def 1) @ Ptop_def[mkstrexp _1 _2] :: _3 ) -# 6769 "ml/parser.ml" - : 'use_file_body)) -; (fun __caml_parser_env -> - Obj.repr( -# 604 "ml/parser.mly" - ( [] ) -# 6775 "ml/parser.ml" - : 'use_file_tail)) -; (fun __caml_parser_env -> - Obj.repr( -# 606 "ml/parser.mly" - ( text_def 1 ) -# 6781 "ml/parser.ml" - : 'use_file_tail)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'seq_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'post_item_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'use_file_tail) in - Obj.repr( -# 608 "ml/parser.mly" - ( mark_rhs_docs 2 3; - (text_def 1) @ (text_def 2) @ Ptop_def[mkstrexp _2 _3] :: _4 ) -# 6791 "ml/parser.ml" - : 'use_file_tail)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'structure_item) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'use_file_tail) in - Obj.repr( -# 611 "ml/parser.mly" - ( (text_def 1) @ (text_def 2) @ Ptop_def[_2] :: _3 ) -# 6799 "ml/parser.ml" - : 'use_file_tail)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'toplevel_directive) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'use_file_tail) in - Obj.repr( -# 613 "ml/parser.mly" - ( mark_rhs_docs 2 3; - (text_def 1) @ (text_def 2) @ _2 :: _3 ) -# 6808 "ml/parser.ml" - : 'use_file_tail)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'structure_item) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'use_file_tail) in - Obj.repr( -# 616 "ml/parser.mly" - ( (text_def 1) @ Ptop_def[_1] :: _2 ) -# 6816 "ml/parser.ml" - : 'use_file_tail)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'toplevel_directive) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'use_file_tail) in - Obj.repr( -# 618 "ml/parser.mly" - ( mark_rhs_docs 1 1; - (text_def 1) @ _1 :: _2 ) -# 6825 "ml/parser.ml" - : 'use_file_tail)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'core_type) in - Obj.repr( -# 622 "ml/parser.mly" - ( _1 ) -# 6832 "ml/parser.ml" - : Parsetree.core_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 625 "ml/parser.mly" - ( _1 ) -# 6839 "ml/parser.ml" - : Parsetree.expression)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'pattern) in - Obj.repr( -# 628 "ml/parser.mly" - ( _1 ) -# 6846 "ml/parser.ml" - : Parsetree.pattern)) -; (fun __caml_parser_env -> - Obj.repr( -# 635 "ml/parser.mly" - ( mkrhs "*" 2, None ) -# 6852 "ml/parser.ml" - : 'functor_arg)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'functor_arg_name) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - Obj.repr( -# 637 "ml/parser.mly" - ( mkrhs _2 2, Some _4 ) -# 6860 "ml/parser.ml" - : 'functor_arg)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 641 "ml/parser.mly" - ( _1 ) -# 6867 "ml/parser.ml" - : 'functor_arg_name)) -; (fun __caml_parser_env -> - Obj.repr( -# 642 "ml/parser.mly" - ( "_" ) -# 6873 "ml/parser.ml" - : 'functor_arg_name)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'functor_args) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'functor_arg) in - Obj.repr( -# 647 "ml/parser.mly" - ( _2 :: _1 ) -# 6881 "ml/parser.ml" - : 'functor_args)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'functor_arg) in - Obj.repr( -# 649 "ml/parser.mly" - ( [ _1 ] ) -# 6888 "ml/parser.ml" - : 'functor_args)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'mod_longident) in - Obj.repr( -# 654 "ml/parser.mly" - ( mkmod(Pmod_ident (mkrhs _1 1)) ) -# 6895 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'structure) in - Obj.repr( -# 656 "ml/parser.mly" - ( mkmod ~attrs:_2 (Pmod_structure(extra_str 3 _3)) ) -# 6903 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'structure) in - Obj.repr( -# 658 "ml/parser.mly" - ( unclosed "struct" 1 "end" 4 ) -# 6911 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'functor_args) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'module_expr) in - Obj.repr( -# 660 "ml/parser.mly" - ( let modexp = - List.fold_left - (fun acc (n, t) -> mkmod(Pmod_functor(n, t, acc))) - _5 _3 - in wrap_mod_attrs modexp _2 ) -# 6924 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'module_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'paren_module_expr) in - Obj.repr( -# 666 "ml/parser.mly" - ( mkmod(Pmod_apply(_1, _2)) ) -# 6932 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'module_expr) in - Obj.repr( -# 668 "ml/parser.mly" - ( mkmod(Pmod_apply(_1, mkmod (Pmod_structure []))) ) -# 6939 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'paren_module_expr) in - Obj.repr( -# 670 "ml/parser.mly" - ( _1 ) -# 6946 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'module_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attribute) in - Obj.repr( -# 672 "ml/parser.mly" - ( Mod.attr _1 _2 ) -# 6954 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension) in - Obj.repr( -# 674 "ml/parser.mly" - ( mkmod(Pmod_extension _1) ) -# 6961 "ml/parser.ml" - : 'module_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'module_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - Obj.repr( -# 679 "ml/parser.mly" - ( mkmod(Pmod_constraint(_2, _4)) ) -# 6969 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'module_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - Obj.repr( -# 681 "ml/parser.mly" - ( unclosed "(" 1 ")" 5 ) -# 6977 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'module_expr) in - Obj.repr( -# 683 "ml/parser.mly" - ( _2 ) -# 6984 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'module_expr) in - Obj.repr( -# 685 "ml/parser.mly" - ( unclosed "(" 1 ")" 3 ) -# 6991 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 687 "ml/parser.mly" - ( mkmod ~attrs:_3 (Pmod_unpack _4)) -# 6999 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'expr) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'package_type) in - Obj.repr( -# 689 "ml/parser.mly" - ( mkmod ~attrs:_3 - (Pmod_unpack( - ghexp(Pexp_constraint(_4, ghtyp(Ptyp_package _6))))) ) -# 7010 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 6 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 5 : 'expr) in - let _6 = (Parsing.peek_val __caml_parser_env 3 : 'package_type) in - let _8 = (Parsing.peek_val __caml_parser_env 1 : 'package_type) in - Obj.repr( -# 694 "ml/parser.mly" - ( mkmod ~attrs:_3 - (Pmod_unpack( - ghexp(Pexp_coerce(_4, Some(ghtyp(Ptyp_package _6)), - ghtyp(Ptyp_package _8))))) ) -# 7023 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'expr) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'package_type) in - Obj.repr( -# 699 "ml/parser.mly" - ( mkmod ~attrs:_3 - (Pmod_unpack( - ghexp(Pexp_coerce(_4, None, ghtyp(Ptyp_package _6))))) ) -# 7034 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - Obj.repr( -# 703 "ml/parser.mly" - ( unclosed "(" 1 ")" 6 ) -# 7042 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - Obj.repr( -# 705 "ml/parser.mly" - ( unclosed "(" 1 ")" 6 ) -# 7050 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 707 "ml/parser.mly" - ( unclosed "(" 1 ")" 5 ) -# 7058 "ml/parser.ml" - : 'paren_module_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'seq_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'post_item_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'structure_tail) in - Obj.repr( -# 712 "ml/parser.mly" - ( mark_rhs_docs 1 2; - (text_str 1) @ mkstrexp _1 _2 :: _3 ) -# 7068 "ml/parser.ml" - : 'structure)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'structure_tail) in - Obj.repr( -# 714 "ml/parser.mly" - ( _1 ) -# 7075 "ml/parser.ml" - : 'structure)) -; (fun __caml_parser_env -> - Obj.repr( -# 717 "ml/parser.mly" - ( [] ) -# 7081 "ml/parser.ml" - : 'structure_tail)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'structure) in - Obj.repr( -# 718 "ml/parser.mly" - ( (text_str 1) @ _2 ) -# 7088 "ml/parser.ml" - : 'structure_tail)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'structure_item) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'structure_tail) in - Obj.repr( -# 719 "ml/parser.mly" - ( (text_str 1) @ _1 :: _2 ) -# 7096 "ml/parser.ml" - : 'structure_tail)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'let_bindings) in - Obj.repr( -# 723 "ml/parser.mly" - ( val_of_let_bindings _1 ) -# 7103 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'primitive_declaration) in - Obj.repr( -# 725 "ml/parser.mly" - ( let (body, ext) = _1 in mkstr_ext (Pstr_primitive body) ext ) -# 7110 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'value_description) in - Obj.repr( -# 727 "ml/parser.mly" - ( let (body, ext) = _1 in mkstr_ext (Pstr_primitive body) ext ) -# 7117 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'type_declarations) in - Obj.repr( -# 729 "ml/parser.mly" - ( let (nr, l, ext ) = _1 in mkstr_ext (Pstr_type (nr, List.rev l)) ext ) -# 7124 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'str_type_extension) in - Obj.repr( -# 731 "ml/parser.mly" - ( let (l, ext) = _1 in mkstr_ext (Pstr_typext l) ext ) -# 7131 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'str_exception_declaration) in - Obj.repr( -# 733 "ml/parser.mly" - ( let (l, ext) = _1 in mkstr_ext (Pstr_exception l) ext ) -# 7138 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'module_binding) in - Obj.repr( -# 735 "ml/parser.mly" - ( let (body, ext) = _1 in mkstr_ext (Pstr_module body) ext ) -# 7145 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'rec_module_bindings) in - Obj.repr( -# 737 "ml/parser.mly" - ( let (l, ext) = _1 in mkstr_ext (Pstr_recmodule(List.rev l)) ext ) -# 7152 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'module_type_declaration) in - Obj.repr( -# 739 "ml/parser.mly" - ( let (body, ext) = _1 in mkstr_ext (Pstr_modtype body) ext ) -# 7159 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'open_statement) in - Obj.repr( -# 741 "ml/parser.mly" - ( let (body, ext) = _1 in mkstr_ext (Pstr_open body) ext ) -# 7166 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'class_type_declarations) in - Obj.repr( -# 743 "ml/parser.mly" - ( let (l, ext) = _1 in mkstr_ext (Pstr_class_type (List.rev l)) ext ) -# 7173 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'str_include_statement) in - Obj.repr( -# 745 "ml/parser.mly" - ( let (body, ext) = _1 in mkstr_ext (Pstr_include body) ext ) -# 7180 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'item_extension) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 747 "ml/parser.mly" - ( mkstr(Pstr_extension (_1, (add_docs_attrs (symbol_docs ()) _2))) ) -# 7188 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'floating_attribute) in - Obj.repr( -# 749 "ml/parser.mly" - ( mark_symbol_docs (); - mkstr(Pstr_attribute _1) ) -# 7196 "ml/parser.ml" - : 'structure_item)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'module_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 754 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Incl.mk _3 ~attrs:(attrs@_4) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext ) -# 7208 "ml/parser.ml" - : 'str_include_statement)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'module_expr) in - Obj.repr( -# 761 "ml/parser.mly" - ( _2 ) -# 7215 "ml/parser.ml" - : 'module_binding_body)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'module_type) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'module_expr) in - Obj.repr( -# 763 "ml/parser.mly" - ( mkmod(Pmod_constraint(_4, _2)) ) -# 7223 "ml/parser.ml" - : 'module_binding_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'functor_arg) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'module_binding_body) in - Obj.repr( -# 765 "ml/parser.mly" - ( mkmod(Pmod_functor(fst _1, snd _1, _2)) ) -# 7231 "ml/parser.ml" - : 'module_binding_body)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'module_binding_body) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 769 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Mb.mk (mkrhs _3 3) _4 ~attrs:(attrs@_5) - ~loc:(symbol_rloc ()) ~docs:(symbol_docs ()) - , ext ) -# 7244 "ml/parser.ml" - : 'module_binding)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'rec_module_binding) in - Obj.repr( -# 775 "ml/parser.mly" - ( let (b, ext) = _1 in ([b], ext) ) -# 7251 "ml/parser.ml" - : 'rec_module_bindings)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'rec_module_bindings) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'and_module_binding) in - Obj.repr( -# 777 "ml/parser.mly" - ( let (l, ext) = _1 in (_2 :: l, ext) ) -# 7259 "ml/parser.ml" - : 'rec_module_bindings)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : string) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'module_binding_body) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 781 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Mb.mk (mkrhs _4 4) _5 ~attrs:(attrs@_6) - ~loc:(symbol_rloc ()) ~docs:(symbol_docs ()) - , ext ) -# 7272 "ml/parser.ml" - : 'rec_module_binding)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'module_binding_body) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 788 "ml/parser.mly" - ( Mb.mk (mkrhs _3 3) _4 ~attrs:(_2@_5) ~loc:(symbol_rloc ()) - ~text:(symbol_text ()) ~docs:(symbol_docs ()) ) -# 7283 "ml/parser.ml" - : 'and_module_binding)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'mty_longident) in - Obj.repr( -# 796 "ml/parser.mly" - ( mkmty(Pmty_ident (mkrhs _1 1)) ) -# 7290 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'signature) in - Obj.repr( -# 798 "ml/parser.mly" - ( mkmty ~attrs:_2 (Pmty_signature (extra_sig 3 _3)) ) -# 7298 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'signature) in - Obj.repr( -# 800 "ml/parser.mly" - ( unclosed "sig" 1 "end" 4 ) -# 7306 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'functor_args) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'module_type) in - Obj.repr( -# 803 "ml/parser.mly" - ( let mty = - List.fold_left - (fun acc (n, t) -> mkmty(Pmty_functor(n, t, acc))) - _5 _3 - in wrap_mty_attrs mty _2 ) -# 7319 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'module_type) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'module_type) in - Obj.repr( -# 810 "ml/parser.mly" - ( mkmty(Pmty_functor(mknoloc "_", Some _1, _3)) ) -# 7327 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'module_type) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'with_constraints) in - Obj.repr( -# 812 "ml/parser.mly" - ( mkmty(Pmty_with(_1, List.rev _3)) ) -# 7335 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'attributes) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'module_expr) in - Obj.repr( -# 814 "ml/parser.mly" - ( mkmty ~attrs:_4 (Pmty_typeof _5) ) -# 7343 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - Obj.repr( -# 818 "ml/parser.mly" - ( _2 ) -# 7350 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - Obj.repr( -# 820 "ml/parser.mly" - ( unclosed "(" 1 ")" 3 ) -# 7357 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension) in - Obj.repr( -# 822 "ml/parser.mly" - ( mkmty(Pmty_extension _1) ) -# 7364 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attribute) in - Obj.repr( -# 824 "ml/parser.mly" - ( Mty.attr _1 _2 ) -# 7372 "ml/parser.ml" - : 'module_type)) -; (fun __caml_parser_env -> - Obj.repr( -# 827 "ml/parser.mly" - ( [] ) -# 7378 "ml/parser.ml" - : 'signature)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'signature) in - Obj.repr( -# 828 "ml/parser.mly" - ( (text_sig 1) @ _2 ) -# 7385 "ml/parser.ml" - : 'signature)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'signature_item) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'signature) in - Obj.repr( -# 829 "ml/parser.mly" - ( (text_sig 1) @ _1 :: _2 ) -# 7393 "ml/parser.ml" - : 'signature)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'value_description) in - Obj.repr( -# 833 "ml/parser.mly" - ( let (body, ext) = _1 in mksig_ext (Psig_value body) ext ) -# 7400 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'primitive_declaration) in - Obj.repr( -# 835 "ml/parser.mly" - ( let (body, ext) = _1 in mksig_ext (Psig_value body) ext) -# 7407 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'type_declarations) in - Obj.repr( -# 837 "ml/parser.mly" - ( let (nr, l, ext) = _1 in mksig_ext (Psig_type (nr, List.rev l)) ext ) -# 7414 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'sig_type_extension) in - Obj.repr( -# 839 "ml/parser.mly" - ( let (l, ext) = _1 in mksig_ext (Psig_typext l) ext ) -# 7421 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'sig_exception_declaration) in - Obj.repr( -# 841 "ml/parser.mly" - ( let (l, ext) = _1 in mksig_ext (Psig_exception l) ext ) -# 7428 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'module_declaration) in - Obj.repr( -# 843 "ml/parser.mly" - ( let (body, ext) = _1 in mksig_ext (Psig_module body) ext ) -# 7435 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'module_alias) in - Obj.repr( -# 845 "ml/parser.mly" - ( let (body, ext) = _1 in mksig_ext (Psig_module body) ext ) -# 7442 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'rec_module_declarations) in - Obj.repr( -# 847 "ml/parser.mly" - ( let (l, ext) = _1 in mksig_ext (Psig_recmodule (List.rev l)) ext ) -# 7449 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'module_type_declaration) in - Obj.repr( -# 849 "ml/parser.mly" - ( let (body, ext) = _1 in mksig_ext (Psig_modtype body) ext ) -# 7456 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'open_statement) in - Obj.repr( -# 851 "ml/parser.mly" - ( let (body, ext) = _1 in mksig_ext (Psig_open body) ext ) -# 7463 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'sig_include_statement) in - Obj.repr( -# 853 "ml/parser.mly" - ( let (body, ext) = _1 in mksig_ext (Psig_include body) ext ) -# 7470 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'class_descriptions) in - Obj.repr( -# 855 "ml/parser.mly" - ( let (l, ext) = _1 in mksig_ext (Psig_class (List.rev l)) ext ) -# 7477 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'class_type_declarations) in - Obj.repr( -# 857 "ml/parser.mly" - ( let (l, ext) = _1 in mksig_ext (Psig_class_type (List.rev l)) ext ) -# 7484 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'item_extension) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 859 "ml/parser.mly" - ( mksig(Psig_extension (_1, (add_docs_attrs (symbol_docs ()) _2))) ) -# 7492 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'floating_attribute) in - Obj.repr( -# 861 "ml/parser.mly" - ( mark_symbol_docs (); - mksig(Psig_attribute _1) ) -# 7500 "ml/parser.ml" - : 'signature_item)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'override_flag) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'mod_longident) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 866 "ml/parser.mly" - ( let (ext, attrs) = _3 in - Opn.mk (mkrhs _4 4) ~override:_2 ~attrs:(attrs@_5) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext) -# 7513 "ml/parser.ml" - : 'open_statement)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 873 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Incl.mk _3 ~attrs:(attrs@_4) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext) -# 7525 "ml/parser.ml" - : 'sig_include_statement)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'module_type) in - Obj.repr( -# 880 "ml/parser.mly" - ( _2 ) -# 7532 "ml/parser.ml" - : 'module_declaration_body)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'module_type) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'module_declaration_body) in - Obj.repr( -# 882 "ml/parser.mly" - ( mkmty(Pmty_functor(mkrhs _2 2, Some _4, _6)) ) -# 7541 "ml/parser.ml" - : 'module_declaration_body)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'module_declaration_body) in - Obj.repr( -# 884 "ml/parser.mly" - ( mkmty(Pmty_functor(mkrhs "*" 1, None, _3)) ) -# 7548 "ml/parser.ml" - : 'module_declaration_body)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'module_declaration_body) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 888 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Md.mk (mkrhs _3 3) _4 ~attrs:(attrs@_5) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext ) -# 7561 "ml/parser.ml" - : 'module_declaration)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'mod_longident) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 895 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Md.mk (mkrhs _3 3) - (Mty.alias ~loc:(rhs_loc 5) (mkrhs _5 5)) ~attrs:(attrs@_6) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext ) -# 7575 "ml/parser.ml" - : 'module_alias)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'rec_module_declaration) in - Obj.repr( -# 903 "ml/parser.mly" - ( let (body, ext) = _1 in ([body], ext) ) -# 7582 "ml/parser.ml" - : 'rec_module_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'rec_module_declarations) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'and_module_declaration) in - Obj.repr( -# 905 "ml/parser.mly" - ( let (l, ext) = _1 in (_2 :: l, ext) ) -# 7590 "ml/parser.ml" - : 'rec_module_declarations)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 909 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Md.mk (mkrhs _4 4) _6 ~attrs:(attrs@_7) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext) -# 7603 "ml/parser.ml" - : 'rec_module_declaration)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'module_type) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 916 "ml/parser.mly" - ( Md.mk (mkrhs _3 3) _5 ~attrs:(_2@_6) ~loc:(symbol_rloc()) - ~text:(symbol_text()) ~docs:(symbol_docs()) ) -# 7614 "ml/parser.ml" - : 'and_module_declaration)) -; (fun __caml_parser_env -> - Obj.repr( -# 920 "ml/parser.mly" - ( None ) -# 7620 "ml/parser.ml" - : 'module_type_declaration_body)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'module_type) in - Obj.repr( -# 921 "ml/parser.mly" - ( Some _2 ) -# 7627 "ml/parser.ml" - : 'module_type_declaration_body)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'ident) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'module_type_declaration_body) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 926 "ml/parser.mly" - ( let (ext, attrs) = _3 in - Mtd.mk (mkrhs _4 4) ?typ:_5 ~attrs:(attrs@_6) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext ) -# 7640 "ml/parser.ml" - : 'module_type_declaration)) -; (fun __caml_parser_env -> - Obj.repr( -# 934 "ml/parser.mly" - ( [] ) -# 7646 "ml/parser.ml" - : 'class_type_parameters)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'type_parameter_list) in - Obj.repr( -# 935 "ml/parser.mly" - ( List.rev _2 ) -# 7653 "ml/parser.ml" - : 'class_type_parameters)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'class_self_pattern) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'class_fields) in - Obj.repr( -# 939 "ml/parser.mly" - ( Cstr.mk _1 (extra_cstr 2 (List.rev _2)) ) -# 7661 "ml/parser.ml" - : 'class_structure)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'pattern) in - Obj.repr( -# 943 "ml/parser.mly" - ( reloc_pat _2 ) -# 7668 "ml/parser.ml" - : 'class_self_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'pattern) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'core_type) in - Obj.repr( -# 945 "ml/parser.mly" - ( mkpat(Ppat_constraint(_2, _4)) ) -# 7676 "ml/parser.ml" - : 'class_self_pattern)) -; (fun __caml_parser_env -> - Obj.repr( -# 947 "ml/parser.mly" - ( ghpat(Ppat_any) ) -# 7682 "ml/parser.ml" - : 'class_self_pattern)) -; (fun __caml_parser_env -> - Obj.repr( -# 951 "ml/parser.mly" - ( [] ) -# 7688 "ml/parser.ml" - : 'class_fields)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'class_fields) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'class_field) in - Obj.repr( -# 953 "ml/parser.mly" - ( _2 :: (text_cstr 2) @ _1 ) -# 7696 "ml/parser.ml" - : 'class_fields)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'value) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 957 "ml/parser.mly" - ( let v, attrs = _2 in - mkcf (Pcf_val v) ~attrs:(attrs@_3) ~docs:(symbol_docs ()) ) -# 7705 "ml/parser.ml" - : 'class_field)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'method_) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 960 "ml/parser.mly" - ( let meth, attrs = _2 in - mkcf (Pcf_method meth) ~attrs:(attrs@_3) ~docs:(symbol_docs ()) ) -# 7714 "ml/parser.ml" - : 'class_field)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'constrain_field) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 963 "ml/parser.mly" - ( mkcf (Pcf_constraint _3) ~attrs:(_2@_4) ~docs:(symbol_docs ()) ) -# 7723 "ml/parser.ml" - : 'class_field)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 965 "ml/parser.mly" - ( mkcf (Pcf_initializer _3) ~attrs:(_2@_4) ~docs:(symbol_docs ()) ) -# 7732 "ml/parser.ml" - : 'class_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'item_extension) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 967 "ml/parser.mly" - ( mkcf (Pcf_extension _1) ~attrs:_2 ~docs:(symbol_docs ()) ) -# 7740 "ml/parser.ml" - : 'class_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'floating_attribute) in - Obj.repr( -# 969 "ml/parser.mly" - ( mark_symbol_docs (); - mkcf (Pcf_attribute _1) ) -# 7748 "ml/parser.ml" - : 'class_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'attributes) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 975 "ml/parser.mly" - ( if _1 = Override then syntax_error (); - (mkloc _5 (rhs_loc 5), Mutable, Cfk_virtual _7), _2 ) -# 7759 "ml/parser.ml" - : 'value)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'mutable_flag) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 978 "ml/parser.mly" - ( if _1 = Override then syntax_error (); - (mkrhs _5 5, _4, Cfk_virtual _7), _2 ) -# 7771 "ml/parser.ml" - : 'value)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 5 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'mutable_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 981 "ml/parser.mly" - ( (mkrhs _4 4, _3, Cfk_concrete (_1, _6)), _2 ) -# 7782 "ml/parser.ml" - : 'value)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'mutable_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'label) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'type_constraint) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 983 "ml/parser.mly" - ( - let e = mkexp_constraint _7 _5 in - (mkrhs _4 4, _3, Cfk_concrete (_1, e)), _2 - ) -# 7797 "ml/parser.ml" - : 'value)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'attributes) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'poly_type) in - Obj.repr( -# 991 "ml/parser.mly" - ( if _1 = Override then syntax_error (); - (mkloc _5 (rhs_loc 5), Private, Cfk_virtual _7), _2 ) -# 7808 "ml/parser.ml" - : 'method_)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'private_flag) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'poly_type) in - Obj.repr( -# 994 "ml/parser.mly" - ( if _1 = Override then syntax_error (); - (mkloc _5 (rhs_loc 5), _4, Cfk_virtual _7), _2 ) -# 7820 "ml/parser.ml" - : 'method_)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'private_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'label) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'strict_binding) in - Obj.repr( -# 997 "ml/parser.mly" - ( (mkloc _4 (rhs_loc 4), _3, - Cfk_concrete (_1, ghexp(Pexp_poly (_5, None)))), _2 ) -# 7832 "ml/parser.ml" - : 'method_)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 7 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 6 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 5 : 'private_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 4 : 'label) in - let _6 = (Parsing.peek_val __caml_parser_env 2 : 'poly_type) in - let _8 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1000 "ml/parser.mly" - ( (mkloc _4 (rhs_loc 4), _3, - Cfk_concrete (_1, ghexp(Pexp_poly(_8, Some _6)))), _2 ) -# 7845 "ml/parser.ml" - : 'method_)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 10 : 'override_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 9 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 8 : 'private_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 7 : 'label) in - let _7 = (Parsing.peek_val __caml_parser_env 4 : 'lident_list) in - let _9 = (Parsing.peek_val __caml_parser_env 2 : 'core_type) in - let _11 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1004 "ml/parser.mly" - ( let exp, poly = wrap_type_annotation _7 _9 _11 in - (mkloc _4 (rhs_loc 4), _3, - Cfk_concrete (_1, ghexp(Pexp_poly(exp, Some poly)))), _2 ) -# 7860 "ml/parser.ml" - : 'method_)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'class_signature) in - Obj.repr( -# 1013 "ml/parser.mly" - ( _1 ) -# 7867 "ml/parser.ml" - : 'class_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'simple_core_type_or_tuple) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'class_type) in - Obj.repr( -# 1016 "ml/parser.mly" - ( mkcty(Pcty_arrow(Optional _2 , _4, _6)) ) -# 7876 "ml/parser.ml" - : 'class_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'simple_core_type_or_tuple) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'class_type) in - Obj.repr( -# 1018 "ml/parser.mly" - ( mkcty(Pcty_arrow(Optional _1, _2, _4)) ) -# 7885 "ml/parser.ml" - : 'class_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'simple_core_type_or_tuple) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'class_type) in - Obj.repr( -# 1020 "ml/parser.mly" - ( mkcty(Pcty_arrow(Labelled _1, _3, _5)) ) -# 7894 "ml/parser.ml" - : 'class_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simple_core_type_or_tuple) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'class_type) in - Obj.repr( -# 1022 "ml/parser.mly" - ( mkcty(Pcty_arrow(Nolabel, _1, _3)) ) -# 7902 "ml/parser.ml" - : 'class_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'core_type_comma_list) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'clty_longident) in - Obj.repr( -# 1026 "ml/parser.mly" - ( mkcty(Pcty_constr (mkloc _4 (rhs_loc 4), List.rev _2)) ) -# 7910 "ml/parser.ml" - : 'class_signature)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'clty_longident) in - Obj.repr( -# 1028 "ml/parser.mly" - ( mkcty(Pcty_constr (mkrhs _1 1, [])) ) -# 7917 "ml/parser.ml" - : 'class_signature)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'class_sig_body) in - Obj.repr( -# 1030 "ml/parser.mly" - ( mkcty ~attrs:_2 (Pcty_signature _3) ) -# 7925 "ml/parser.ml" - : 'class_signature)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'class_sig_body) in - Obj.repr( -# 1032 "ml/parser.mly" - ( unclosed "object" 1 "end" 4 ) -# 7933 "ml/parser.ml" - : 'class_signature)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'class_signature) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attribute) in - Obj.repr( -# 1034 "ml/parser.mly" - ( Cty.attr _1 _2 ) -# 7941 "ml/parser.ml" - : 'class_signature)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension) in - Obj.repr( -# 1036 "ml/parser.mly" - ( mkcty(Pcty_extension _1) ) -# 7948 "ml/parser.ml" - : 'class_signature)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'override_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'attributes) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'class_signature) in - Obj.repr( -# 1038 "ml/parser.mly" - ( wrap_class_type_attrs (mkcty(Pcty_open(_3, mkrhs _5 5, _7))) _4 ) -# 7958 "ml/parser.ml" - : 'class_signature)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'class_self_type) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'class_sig_fields) in - Obj.repr( -# 1042 "ml/parser.mly" - ( Csig.mk _1 (extra_csig 2 (List.rev _2)) ) -# 7966 "ml/parser.ml" - : 'class_sig_body)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'core_type) in - Obj.repr( -# 1046 "ml/parser.mly" - ( _2 ) -# 7973 "ml/parser.ml" - : 'class_self_type)) -; (fun __caml_parser_env -> - Obj.repr( -# 1048 "ml/parser.mly" - ( mktyp(Ptyp_any) ) -# 7979 "ml/parser.ml" - : 'class_self_type)) -; (fun __caml_parser_env -> - Obj.repr( -# 1051 "ml/parser.mly" - ( [] ) -# 7985 "ml/parser.ml" - : 'class_sig_fields)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'class_sig_fields) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'class_sig_field) in - Obj.repr( -# 1052 "ml/parser.mly" - ( _2 :: (text_csig 2) @ _1 ) -# 7993 "ml/parser.ml" - : 'class_sig_fields)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'class_signature) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1056 "ml/parser.mly" - ( mkctf (Pctf_inherit _3) ~attrs:(_2@_4) ~docs:(symbol_docs ()) ) -# 8002 "ml/parser.ml" - : 'class_sig_field)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'value_type) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1058 "ml/parser.mly" - ( mkctf (Pctf_val _3) ~attrs:(_2@_4) ~docs:(symbol_docs ()) ) -# 8011 "ml/parser.ml" - : 'class_sig_field)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'private_virtual_flags) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'label) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'poly_type) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1061 "ml/parser.mly" - ( - let (p, v) = _3 in - mkctf (Pctf_method (mkrhs _4 4, p, v, _6)) ~attrs:(_2@_7) ~docs:(symbol_docs ()) - ) -# 8025 "ml/parser.ml" - : 'class_sig_field)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'constrain_field) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1066 "ml/parser.mly" - ( mkctf (Pctf_constraint _3) ~attrs:(_2@_4) ~docs:(symbol_docs ()) ) -# 8034 "ml/parser.ml" - : 'class_sig_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'item_extension) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1068 "ml/parser.mly" - ( mkctf (Pctf_extension _1) ~attrs:_2 ~docs:(symbol_docs ()) ) -# 8042 "ml/parser.ml" - : 'class_sig_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'floating_attribute) in - Obj.repr( -# 1070 "ml/parser.mly" - ( mark_symbol_docs (); - mkctf(Pctf_attribute _1) ) -# 8050 "ml/parser.ml" - : 'class_sig_field)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'mutable_flag) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1075 "ml/parser.mly" - ( mkrhs _3 3, _2, Virtual, _5 ) -# 8059 "ml/parser.ml" - : 'value_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'virtual_flag) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1077 "ml/parser.mly" - ( mkrhs _3 3, Mutable, _2, _5 ) -# 8068 "ml/parser.ml" - : 'value_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1079 "ml/parser.mly" - ( mkrhs _1 1, Immutable, Concrete, _3 ) -# 8076 "ml/parser.ml" - : 'value_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'core_type) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1082 "ml/parser.mly" - ( _1, _3, symbol_rloc() ) -# 8084 "ml/parser.ml" - : 'constrain)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'core_type) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1085 "ml/parser.mly" - ( _1, _3 ) -# 8092 "ml/parser.ml" - : 'constrain_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'class_description) in - Obj.repr( -# 1089 "ml/parser.mly" - ( let (body, ext) = _1 in ([body],ext) ) -# 8099 "ml/parser.ml" - : 'class_descriptions)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'class_descriptions) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'and_class_description) in - Obj.repr( -# 1091 "ml/parser.mly" - ( let (l, ext) = _1 in (_2 :: l, ext) ) -# 8107 "ml/parser.ml" - : 'class_descriptions)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 6 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 5 : 'virtual_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 4 : 'class_type_parameters) in - let _5 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _7 = (Parsing.peek_val __caml_parser_env 1 : 'class_type) in - let _8 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1096 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Ci.mk (mkrhs _5 5) _7 ~virt:_3 ~params:_4 ~attrs:(attrs @ _8) - ~loc:(symbol_rloc ()) ~docs:(symbol_docs ()) - , ext ) -# 8122 "ml/parser.ml" - : 'class_description)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 6 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 5 : 'virtual_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 4 : 'class_type_parameters) in - let _5 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _7 = (Parsing.peek_val __caml_parser_env 1 : 'class_type) in - let _8 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1104 "ml/parser.mly" - ( Ci.mk (mkrhs _5 5) _7 ~virt:_3 ~params:_4 - ~attrs:(_2@_8) ~loc:(symbol_rloc ()) - ~text:(symbol_text ()) ~docs:(symbol_docs ()) ) -# 8136 "ml/parser.ml" - : 'and_class_description)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'class_type_declaration) in - Obj.repr( -# 1110 "ml/parser.mly" - ( let (body, ext) = _1 in ([body],ext) ) -# 8143 "ml/parser.ml" - : 'class_type_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'class_type_declarations) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'and_class_type_declaration) in - Obj.repr( -# 1112 "ml/parser.mly" - ( let (l, ext) = _1 in (_2 :: l, ext) ) -# 8151 "ml/parser.ml" - : 'class_type_declarations)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 6 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 5 : 'virtual_flag) in - let _5 = (Parsing.peek_val __caml_parser_env 4 : 'class_type_parameters) in - let _6 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _8 = (Parsing.peek_val __caml_parser_env 1 : 'class_signature) in - let _9 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1117 "ml/parser.mly" - ( let (ext, attrs) = _3 in - Ci.mk (mkrhs _6 6) _8 ~virt:_4 ~params:_5 ~attrs:(attrs@_9) - ~loc:(symbol_rloc ()) ~docs:(symbol_docs ()) - , ext) -# 8166 "ml/parser.ml" - : 'class_type_declaration)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 6 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 5 : 'virtual_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 4 : 'class_type_parameters) in - let _5 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _7 = (Parsing.peek_val __caml_parser_env 1 : 'class_signature) in - let _8 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1125 "ml/parser.mly" - ( Ci.mk (mkrhs _5 5) _7 ~virt:_3 ~params:_4 - ~attrs:(_2@_8) ~loc:(symbol_rloc ()) - ~text:(symbol_text ()) ~docs:(symbol_docs ()) ) -# 8180 "ml/parser.ml" - : 'and_class_type_declaration)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1133 "ml/parser.mly" - ( _1 ) -# 8187 "ml/parser.ml" - : 'seq_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1134 "ml/parser.mly" - ( _1 ) -# 8194 "ml/parser.ml" - : 'seq_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1135 "ml/parser.mly" - ( mkexp(Pexp_sequence(_1, _3)) ) -# 8202 "ml/parser.ml" - : 'seq_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'expr) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'attr_id) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1137 "ml/parser.mly" - ( let seq = mkexp(Pexp_sequence (_1, _5)) in - let payload = PStr [mkstrexp seq []] in - mkexp (Pexp_extension (_4, payload)) ) -# 8213 "ml/parser.ml" - : 'seq_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'label_let_pattern) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'opt_default) in - Obj.repr( -# 1143 "ml/parser.mly" - ( (Optional (fst _3), _4, snd _3) ) -# 8221 "ml/parser.ml" - : 'labeled_simple_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'label_var) in - Obj.repr( -# 1145 "ml/parser.mly" - ( (Optional (fst _2), None, snd _2) ) -# 8228 "ml/parser.ml" - : 'labeled_simple_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'let_pattern) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'opt_default) in - Obj.repr( -# 1147 "ml/parser.mly" - ( (Optional _1, _4, _3) ) -# 8237 "ml/parser.ml" - : 'labeled_simple_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'pattern_var) in - Obj.repr( -# 1149 "ml/parser.mly" - ( (Optional _1, None, _2) ) -# 8245 "ml/parser.ml" - : 'labeled_simple_pattern)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'label_let_pattern) in - Obj.repr( -# 1151 "ml/parser.mly" - ( (Labelled (fst _3), None, snd _3) ) -# 8252 "ml/parser.ml" - : 'labeled_simple_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'label_var) in - Obj.repr( -# 1153 "ml/parser.mly" - ( (Labelled (fst _2), None, snd _2) ) -# 8259 "ml/parser.ml" - : 'labeled_simple_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_pattern) in - Obj.repr( -# 1155 "ml/parser.mly" - ( (Labelled _1, None, _2) ) -# 8267 "ml/parser.ml" - : 'labeled_simple_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_pattern) in - Obj.repr( -# 1157 "ml/parser.mly" - ( (Nolabel, None, _1) ) -# 8274 "ml/parser.ml" - : 'labeled_simple_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 1160 "ml/parser.mly" - ( mkpat(Ppat_var (mkrhs _1 1)) ) -# 8281 "ml/parser.ml" - : 'pattern_var)) -; (fun __caml_parser_env -> - Obj.repr( -# 1161 "ml/parser.mly" - ( mkpat Ppat_any ) -# 8287 "ml/parser.ml" - : 'pattern_var)) -; (fun __caml_parser_env -> - Obj.repr( -# 1164 "ml/parser.mly" - ( None ) -# 8293 "ml/parser.ml" - : 'opt_default)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1165 "ml/parser.mly" - ( Some _2 ) -# 8300 "ml/parser.ml" - : 'opt_default)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'label_var) in - Obj.repr( -# 1169 "ml/parser.mly" - ( _1 ) -# 8307 "ml/parser.ml" - : 'label_let_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'label_var) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1171 "ml/parser.mly" - ( let (lab, pat) = _1 in (lab, mkpat(Ppat_constraint(pat, _3))) ) -# 8315 "ml/parser.ml" - : 'label_let_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 1174 "ml/parser.mly" - ( (_1, mkpat(Ppat_var (mkrhs _1 1))) ) -# 8322 "ml/parser.ml" - : 'label_var)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1178 "ml/parser.mly" - ( _1 ) -# 8329 "ml/parser.ml" - : 'let_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1180 "ml/parser.mly" - ( mkpat(Ppat_constraint(_1, _3)) ) -# 8337 "ml/parser.ml" - : 'let_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1184 "ml/parser.mly" - ( _1 ) -# 8344 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_labeled_expr_list) in - Obj.repr( -# 1186 "ml/parser.mly" - ( mkexp(Pexp_apply(_1, List.rev _2)) ) -# 8352 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'let_bindings) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1188 "ml/parser.mly" - ( expr_of_let_bindings _1 _3 ) -# 8360 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'module_binding_body) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1190 "ml/parser.mly" - ( mkexp_attrs (Pexp_letmodule(mkrhs _4 4, _5, _7)) _3 ) -# 8370 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'let_exception_declaration) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1192 "ml/parser.mly" - ( mkexp_attrs (Pexp_letexception(_4, _6)) _3 ) -# 8379 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'override_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1194 "ml/parser.mly" - ( mkexp_attrs (Pexp_open(_3, mkrhs _5 5, _7)) _4 ) -# 8389 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_bar) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'match_cases) in - Obj.repr( -# 1196 "ml/parser.mly" - ( mkexp_attrs (Pexp_function(List.rev _4)) _2 ) -# 8398 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'labeled_simple_pattern) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'fun_def) in - Obj.repr( -# 1198 "ml/parser.mly" - ( let (l,o,p) = _3 in - mkexp_attrs (Pexp_fun(l, o, p, _4)) _2 ) -# 8408 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'ext_attributes) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'lident_list) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'fun_def) in - Obj.repr( -# 1201 "ml/parser.mly" - ( mkexp_attrs (mk_newtypes _5 _7).pexp_desc _2 ) -# 8417 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'seq_expr) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'opt_bar) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'match_cases) in - Obj.repr( -# 1203 "ml/parser.mly" - ( mkexp_attrs (Pexp_match(_3, List.rev _6)) _2 ) -# 8427 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'seq_expr) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'opt_bar) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'match_cases) in - Obj.repr( -# 1205 "ml/parser.mly" - ( mkexp_attrs (Pexp_try(_3, List.rev _6)) _2 ) -# 8437 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'seq_expr) in - Obj.repr( -# 1207 "ml/parser.mly" - ( syntax_error() ) -# 8445 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr_comma_list) in - Obj.repr( -# 1209 "ml/parser.mly" - ( mkexp(Pexp_tuple(List.rev _1)) ) -# 8452 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'constr_longident) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1211 "ml/parser.mly" - ( mkexp(Pexp_construct(mkrhs _1 1, Some _2)) ) -# 8460 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'name_tag) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1213 "ml/parser.mly" - ( mkexp(Pexp_variant(_1, Some _2)) ) -# 8468 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'seq_expr) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1215 "ml/parser.mly" - ( mkexp_attrs(Pexp_ifthenelse(_3, _5, Some _7)) _2 ) -# 8478 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'seq_expr) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1217 "ml/parser.mly" - ( mkexp_attrs (Pexp_ifthenelse(_3, _5, None)) _2 ) -# 8487 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'seq_expr) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1219 "ml/parser.mly" - ( mkexp_attrs (Pexp_while(_3, _5)) _2 ) -# 8496 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 8 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 7 : 'pattern) in - let _5 = (Parsing.peek_val __caml_parser_env 5 : 'seq_expr) in - let _6 = (Parsing.peek_val __caml_parser_env 4 : 'direction_flag) in - let _7 = (Parsing.peek_val __caml_parser_env 3 : 'seq_expr) in - let _9 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1222 "ml/parser.mly" - ( mkexp_attrs(Pexp_for(_3, _5, _7, _6, _9)) _2 ) -# 8508 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1224 "ml/parser.mly" - ( mkexp_cons (rhs_loc 2) (ghexp(Pexp_tuple[_1;_3])) (symbol_rloc()) ) -# 8516 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1226 "ml/parser.mly" - ( mkinfix _1 _2 _3 ) -# 8525 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1228 "ml/parser.mly" - ( mkinfix _1 _2 _3 ) -# 8534 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1230 "ml/parser.mly" - ( mkinfix _1 _2 _3 ) -# 8543 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1232 "ml/parser.mly" - ( mkinfix _1 _2 _3 ) -# 8552 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1234 "ml/parser.mly" - ( mkinfix _1 _2 _3 ) -# 8561 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1236 "ml/parser.mly" - ( mkinfix _1 "+" _3 ) -# 8569 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1238 "ml/parser.mly" - ( mkinfix _1 "+." _3 ) -# 8577 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1240 "ml/parser.mly" - ( mkinfix _1 "+=" _3 ) -# 8585 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1242 "ml/parser.mly" - ( mkinfix _1 "-" _3 ) -# 8593 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1244 "ml/parser.mly" - ( mkinfix _1 "-." _3 ) -# 8601 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1246 "ml/parser.mly" - ( mkinfix _1 "*" _3 ) -# 8609 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1248 "ml/parser.mly" - ( mkinfix _1 "%" _3 ) -# 8617 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1250 "ml/parser.mly" - ( mkinfix _1 "=" _3 ) -# 8625 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1252 "ml/parser.mly" - ( mkinfix _1 "<" _3 ) -# 8633 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1254 "ml/parser.mly" - ( mkinfix _1 ">" _3 ) -# 8641 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1256 "ml/parser.mly" - ( mkinfix _1 "or" _3 ) -# 8649 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1258 "ml/parser.mly" - ( mkinfix _1 "||" _3 ) -# 8657 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1260 "ml/parser.mly" - ( mkinfix _1 "&" _3 ) -# 8665 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1262 "ml/parser.mly" - ( mkinfix _1 "&&" _3 ) -# 8673 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1264 "ml/parser.mly" - ( mkinfix _1 ":=" _3 ) -# 8681 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'subtractive) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1266 "ml/parser.mly" - ( mkuminus _1 _2 ) -# 8689 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'additive) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1268 "ml/parser.mly" - ( mkuplus _1 _2 ) -# 8697 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'label_longident) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1270 "ml/parser.mly" - ( mkexp(Pexp_setfield(_1, mkrhs _3 3, _5)) ) -# 8706 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'seq_expr) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1272 "ml/parser.mly" - ( mkexp(Pexp_apply(ghexp(Pexp_ident(array_function "Array" "set")), - [Nolabel,_1; Nolabel,_4; Nolabel,_7])) ) -# 8716 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'seq_expr) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1275 "ml/parser.mly" - ( mkexp(Pexp_apply(ghexp(Pexp_ident(array_function "String" "set")), - [Nolabel,_1; Nolabel,_4; Nolabel,_7])) ) -# 8726 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'expr) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1278 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Lident ("." ^ _2 ^ "[]<-")) in - mkexp @@ Pexp_apply(id , [Nolabel, _1; Nolabel, _4; Nolabel, _7]) ) -# 8737 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'expr) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1281 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Lident ("." ^ _2 ^ "()<-")) in - mkexp @@ Pexp_apply(id , [Nolabel, _1; Nolabel, _4; Nolabel, _7]) ) -# 8748 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'expr) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1284 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Lident ("." ^ _2 ^ "{}<-")) in - mkexp @@ Pexp_apply(id , [Nolabel, _1; Nolabel, _4; Nolabel, _7]) ) -# 8759 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 8 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 6 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 5 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 3 : 'expr) in - let _9 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1287 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Ldot(_3,"." ^ _4 ^ "[]<-")) in - mkexp @@ Pexp_apply(id , [Nolabel, _1; Nolabel, _6; Nolabel, _9]) ) -# 8771 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 8 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 6 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 5 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 3 : 'expr) in - let _9 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1290 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Ldot(_3, "." ^ _4 ^ "()<-")) in - mkexp @@ Pexp_apply(id , [Nolabel, _1; Nolabel, _6; Nolabel, _9]) ) -# 8783 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 8 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 6 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 5 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 3 : 'expr) in - let _9 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1293 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Ldot(_3, "." ^ _4 ^ "{}<-")) in - mkexp @@ Pexp_apply(id , [Nolabel, _1; Nolabel, _6; Nolabel, _9]) ) -# 8795 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1296 "ml/parser.mly" - ( mkexp(Pexp_setinstvar(mkrhs _1 1, _3)) ) -# 8803 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1298 "ml/parser.mly" - ( mkexp_attrs (Pexp_assert _3) _2 ) -# 8811 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1300 "ml/parser.mly" - ( mkexp_attrs (Pexp_lazy _3) _2 ) -# 8819 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'class_structure) in - Obj.repr( -# 1302 "ml/parser.mly" - ( mkexp_attrs (Pexp_object _3) _2 ) -# 8827 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'class_structure) in - Obj.repr( -# 1304 "ml/parser.mly" - ( unclosed "object" 1 "end" 4 ) -# 8835 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attribute) in - Obj.repr( -# 1306 "ml/parser.mly" - ( Exp.attr _1 _2 ) -# 8843 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - Obj.repr( -# 1308 "ml/parser.mly" - ( not_expecting 1 "wildcard \"_\"" ) -# 8849 "ml/parser.ml" - : 'expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'val_longident) in - Obj.repr( -# 1312 "ml/parser.mly" - ( mkexp(Pexp_ident (mkrhs _1 1)) ) -# 8856 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constant) in - Obj.repr( -# 1314 "ml/parser.mly" - ( mkexp(Pexp_constant _1) ) -# 8863 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constr_longident) in - Obj.repr( -# 1316 "ml/parser.mly" - ( mkexp(Pexp_construct(mkrhs _1 1, None)) ) -# 8870 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'name_tag) in - Obj.repr( -# 1318 "ml/parser.mly" - ( mkexp(Pexp_variant(_1, None)) ) -# 8877 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1320 "ml/parser.mly" - ( reloc_exp _2 ) -# 8884 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1322 "ml/parser.mly" - ( unclosed "(" 1 ")" 3 ) -# 8891 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1324 "ml/parser.mly" - ( wrap_exp_attrs (reloc_exp _3) _2 (* check location *) ) -# 8899 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ext_attributes) in - Obj.repr( -# 1326 "ml/parser.mly" - ( mkexp_attrs (Pexp_construct (mkloc (Lident "()") (symbol_rloc ()), - None)) _2 ) -# 8907 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1329 "ml/parser.mly" - ( unclosed "begin" 1 "end" 4 ) -# 8915 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'seq_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'type_constraint) in - Obj.repr( -# 1331 "ml/parser.mly" - ( mkexp_constraint _2 _3 ) -# 8923 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'label_longident) in - Obj.repr( -# 1333 "ml/parser.mly" - ( mkexp(Pexp_field(_1, mkrhs _3 3)) ) -# 8931 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1335 "ml/parser.mly" - ( mkexp(Pexp_open(Fresh, mkrhs _1 1, _4)) ) -# 8939 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'mod_longident) in - Obj.repr( -# 1337 "ml/parser.mly" - ( mkexp(Pexp_open(Fresh, mkrhs _1 1, - mkexp(Pexp_construct(mkrhs (Lident "()") 1, None)))) ) -# 8947 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1340 "ml/parser.mly" - ( unclosed "(" 3 ")" 5 ) -# 8955 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1342 "ml/parser.mly" - ( mkexp(Pexp_apply(ghexp(Pexp_ident(array_function "Array" "get")), - [Nolabel,_1; Nolabel,_4])) ) -# 8964 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1345 "ml/parser.mly" - ( unclosed "(" 3 ")" 5 ) -# 8972 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1347 "ml/parser.mly" - ( mkexp(Pexp_apply(ghexp(Pexp_ident(array_function "String" "get")), - [Nolabel,_1; Nolabel,_4])) ) -# 8981 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'seq_expr) in - Obj.repr( -# 1350 "ml/parser.mly" - ( unclosed "[" 3 "]" 5 ) -# 8989 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1352 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Lident ("." ^ _2 ^ "[]")) in - mkexp @@ Pexp_apply(id, [Nolabel, _1; Nolabel, _4]) ) -# 8999 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1355 "ml/parser.mly" - ( unclosed "[" 3 "]" 5 ) -# 9008 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1357 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Lident ("." ^ _2 ^ "()")) in - mkexp @@ Pexp_apply(id, [Nolabel, _1; Nolabel, _4]) ) -# 9018 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1360 "ml/parser.mly" - ( unclosed "(" 3 ")" 5 ) -# 9027 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1362 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Lident ("." ^ _2 ^ "{}")) in - mkexp @@ Pexp_apply(id, [Nolabel, _1; Nolabel, _4]) ) -# 9037 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1365 "ml/parser.mly" - ( unclosed "{" 3 "}" 5 ) -# 9046 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1367 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Ldot(_3, "." ^ _4 ^ "[]")) in - mkexp @@ Pexp_apply(id, [Nolabel, _1; Nolabel, _6]) ) -# 9057 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1370 "ml/parser.mly" - ( unclosed "[" 5 "]" 7 ) -# 9067 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1372 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Ldot(_3, "." ^ _4 ^ "()")) in - mkexp @@ Pexp_apply(id, [Nolabel, _1; Nolabel, _6]) ) -# 9078 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1375 "ml/parser.mly" - ( unclosed "(" 5 ")" 7 ) -# 9088 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1377 "ml/parser.mly" - ( let id = mkexp @@ Pexp_ident( ghloc @@ Ldot(_3, "." ^ _4 ^ "{}")) in - mkexp @@ Pexp_apply(id, [Nolabel, _1; Nolabel, _6]) ) -# 9099 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'expr) in - Obj.repr( -# 1380 "ml/parser.mly" - ( unclosed "{" 5 "}" 7 ) -# 9109 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_expr) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'expr_comma_list) in - Obj.repr( -# 1382 "ml/parser.mly" - ( unclosed "{" 3 "}" 5 ) -# 9117 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'record_expr) in - Obj.repr( -# 1384 "ml/parser.mly" - ( let (exten, fields) = _2 in mkexp (Pexp_record(fields, exten)) ) -# 9124 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'record_expr) in - Obj.repr( -# 1386 "ml/parser.mly" - ( unclosed "{" 1 "}" 3 ) -# 9131 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'record_expr) in - Obj.repr( -# 1388 "ml/parser.mly" - ( let (exten, fields) = _4 in - let rec_exp = mkexp(Pexp_record(fields, exten)) in - mkexp(Pexp_open(Fresh, mkrhs _1 1, rec_exp)) ) -# 9141 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'record_expr) in - Obj.repr( -# 1392 "ml/parser.mly" - ( unclosed "{" 3 "}" 5 ) -# 9149 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1394 "ml/parser.mly" - ( mkexp (Pexp_array(List.rev _2)) ) -# 9157 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1396 "ml/parser.mly" - ( unclosed "[|" 1 "|]" 4 ) -# 9165 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - Obj.repr( -# 1398 "ml/parser.mly" - ( mkexp (Pexp_array []) ) -# 9171 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 5 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1400 "ml/parser.mly" - ( mkexp(Pexp_open(Fresh, mkrhs _1 1, mkexp(Pexp_array(List.rev _4)))) ) -# 9180 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'mod_longident) in - Obj.repr( -# 1402 "ml/parser.mly" - ( mkexp(Pexp_open(Fresh, mkrhs _1 1, mkexp(Pexp_array []))) ) -# 9187 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 5 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1404 "ml/parser.mly" - ( unclosed "[|" 3 "|]" 6 ) -# 9196 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1406 "ml/parser.mly" - ( reloc_exp (mktailexp (rhs_loc 4) (List.rev _2)) ) -# 9204 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1408 "ml/parser.mly" - ( unclosed "[" 1 "]" 4 ) -# 9212 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 5 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1410 "ml/parser.mly" - ( let list_exp = reloc_exp (mktailexp (rhs_loc 6) (List.rev _4)) in - mkexp(Pexp_open(Fresh, mkrhs _1 1, list_exp)) ) -# 9222 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'mod_longident) in - Obj.repr( -# 1413 "ml/parser.mly" - ( mkexp(Pexp_open(Fresh, mkrhs _1 1, - mkexp(Pexp_construct(mkrhs (Lident "[]") 1, None)))) ) -# 9230 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 5 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1416 "ml/parser.mly" - ( unclosed "[" 3 "]" 6 ) -# 9239 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1418 "ml/parser.mly" - ( mkexp(Pexp_apply(mkoperator _1 1, [Nolabel,_2])) ) -# 9247 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1420 "ml/parser.mly" - ( mkexp(Pexp_apply(mkoperator "!" 1, [Nolabel,_2])) ) -# 9254 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'field_expr_list) in - Obj.repr( -# 1422 "ml/parser.mly" - ( mkexp (Pexp_override _2) ) -# 9261 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'field_expr_list) in - Obj.repr( -# 1424 "ml/parser.mly" - ( unclosed "{<" 1 ">}" 3 ) -# 9268 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - Obj.repr( -# 1426 "ml/parser.mly" - ( mkexp (Pexp_override [])) -# 9274 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'field_expr_list) in - Obj.repr( -# 1428 "ml/parser.mly" - ( mkexp(Pexp_open(Fresh, mkrhs _1 1, mkexp (Pexp_override _4)))) -# 9282 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'mod_longident) in - Obj.repr( -# 1430 "ml/parser.mly" - ( mkexp(Pexp_open(Fresh, mkrhs _1 1, mkexp (Pexp_override [])))) -# 9289 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'field_expr_list) in - Obj.repr( -# 1432 "ml/parser.mly" - ( unclosed "{<" 3 ">}" 5 ) -# 9297 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'label) in - Obj.repr( -# 1434 "ml/parser.mly" - ( mkexp(Pexp_send(_1, mkrhs _3 3)) ) -# 9305 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simple_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1436 "ml/parser.mly" - ( mkinfix _1 _2 _3 ) -# 9314 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'module_expr) in - Obj.repr( -# 1438 "ml/parser.mly" - ( mkexp_attrs (Pexp_pack _4) _3 ) -# 9322 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'module_expr) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'package_type) in - Obj.repr( -# 1440 "ml/parser.mly" - ( mkexp_attrs (Pexp_constraint (ghexp (Pexp_pack _4), - ghtyp (Ptyp_package _6))) - _3 ) -# 9333 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'module_expr) in - Obj.repr( -# 1444 "ml/parser.mly" - ( unclosed "(" 1 ")" 6 ) -# 9341 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 8 : 'mod_longident) in - let _5 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _6 = (Parsing.peek_val __caml_parser_env 3 : 'module_expr) in - let _8 = (Parsing.peek_val __caml_parser_env 1 : 'package_type) in - Obj.repr( -# 1447 "ml/parser.mly" - ( mkexp(Pexp_open(Fresh, mkrhs _1 1, - mkexp_attrs (Pexp_constraint (ghexp (Pexp_pack _6), - ghtyp (Ptyp_package _8))) - _5 )) ) -# 9354 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 7 : 'mod_longident) in - let _5 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _6 = (Parsing.peek_val __caml_parser_env 2 : 'module_expr) in - Obj.repr( -# 1452 "ml/parser.mly" - ( unclosed "(" 3 ")" 8 ) -# 9363 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension) in - Obj.repr( -# 1454 "ml/parser.mly" - ( mkexp (Pexp_extension _1) ) -# 9370 "ml/parser.ml" - : 'simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'labeled_simple_expr) in - Obj.repr( -# 1458 "ml/parser.mly" - ( [_1] ) -# 9377 "ml/parser.ml" - : 'simple_labeled_expr_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'simple_labeled_expr_list) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'labeled_simple_expr) in - Obj.repr( -# 1460 "ml/parser.mly" - ( _2 :: _1 ) -# 9385 "ml/parser.ml" - : 'simple_labeled_expr_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1464 "ml/parser.mly" - ( (Nolabel, _1) ) -# 9392 "ml/parser.ml" - : 'labeled_simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'label_expr) in - Obj.repr( -# 1466 "ml/parser.mly" - ( _1 ) -# 9399 "ml/parser.ml" - : 'labeled_simple_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1470 "ml/parser.mly" - ( (Labelled _1, _2) ) -# 9407 "ml/parser.ml" - : 'label_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'label_ident) in - Obj.repr( -# 1472 "ml/parser.mly" - ( (Labelled (fst _2), snd _2) ) -# 9414 "ml/parser.ml" - : 'label_expr)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'label_ident) in - Obj.repr( -# 1474 "ml/parser.mly" - ( (Optional (fst _2), snd _2) ) -# 9421 "ml/parser.ml" - : 'label_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_expr) in - Obj.repr( -# 1476 "ml/parser.mly" - ( (Optional _1, _2) ) -# 9429 "ml/parser.ml" - : 'label_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 1479 "ml/parser.mly" - ( (_1, mkexp(Pexp_ident(mkrhs (Lident _1) 1))) ) -# 9436 "ml/parser.ml" - : 'label_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 1482 "ml/parser.mly" - ( [mkrhs _1 1] ) -# 9443 "ml/parser.ml" - : 'lident_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'lident_list) in - Obj.repr( -# 1483 "ml/parser.mly" - ( mkrhs _1 1 :: _2 ) -# 9451 "ml/parser.ml" - : 'lident_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'val_ident) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'strict_binding) in - Obj.repr( -# 1487 "ml/parser.mly" - ( (mkpatvar _1 1, _2) ) -# 9459 "ml/parser.ml" - : 'let_binding_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'val_ident) in - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'type_constraint) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1489 "ml/parser.mly" - ( let v = mkpatvar _1 1 in (* PR#7344 *) - let t = - match _2 with - Some t, None -> t - | _, Some t -> t - | _ -> assert false - in - (ghpat(Ppat_constraint(v, ghtyp(Ptyp_poly([],t)))), - mkexp_constraint _4 _2) ) -# 9476 "ml/parser.ml" - : 'let_binding_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'val_ident) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'typevar_list) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'core_type) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1499 "ml/parser.mly" - ( (ghpat(Ppat_constraint(mkpatvar _1 1, - ghtyp(Ptyp_poly(List.rev _3,_5)))), - _7) ) -# 9488 "ml/parser.ml" - : 'let_binding_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 7 : 'val_ident) in - let _4 = (Parsing.peek_val __caml_parser_env 4 : 'lident_list) in - let _6 = (Parsing.peek_val __caml_parser_env 2 : 'core_type) in - let _8 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1503 "ml/parser.mly" - ( let exp, poly = wrap_type_annotation _4 _6 _8 in - (ghpat(Ppat_constraint(mkpatvar _1 1, poly)), exp) ) -# 9499 "ml/parser.ml" - : 'let_binding_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1506 "ml/parser.mly" - ( (_1, _3) ) -# 9507 "ml/parser.ml" - : 'let_binding_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'simple_pattern_not_ident) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'core_type) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1508 "ml/parser.mly" - ( (ghpat(Ppat_constraint(_1, _3)), _5) ) -# 9516 "ml/parser.ml" - : 'let_binding_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'let_binding) in - Obj.repr( -# 1511 "ml/parser.mly" - ( _1 ) -# 9523 "ml/parser.ml" - : 'let_bindings)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'let_bindings) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'and_let_binding) in - Obj.repr( -# 1512 "ml/parser.mly" - ( addlb _1 _2 ) -# 9531 "ml/parser.ml" - : 'let_bindings)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'rec_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'let_binding_body) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1516 "ml/parser.mly" - ( let (ext, attr) = _2 in - mklbs ext _3 (mklb true _4 (attr@_5)) ) -# 9542 "ml/parser.ml" - : 'let_binding)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'let_binding_body) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1521 "ml/parser.mly" - ( mklb false _3 (_2@_4) ) -# 9551 "ml/parser.ml" - : 'and_let_binding)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'strict_binding) in - Obj.repr( -# 1525 "ml/parser.mly" - ( _1 ) -# 9558 "ml/parser.ml" - : 'fun_binding)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'type_constraint) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1527 "ml/parser.mly" - ( mkexp_constraint _3 _1 ) -# 9566 "ml/parser.ml" - : 'fun_binding)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1531 "ml/parser.mly" - ( _2 ) -# 9573 "ml/parser.ml" - : 'strict_binding)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'labeled_simple_pattern) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'fun_binding) in - Obj.repr( -# 1533 "ml/parser.mly" - ( let (l, o, p) = _1 in ghexp(Pexp_fun(l, o, p, _2)) ) -# 9581 "ml/parser.ml" - : 'strict_binding)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'lident_list) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'fun_binding) in - Obj.repr( -# 1535 "ml/parser.mly" - ( mk_newtypes _3 _5 ) -# 9589 "ml/parser.ml" - : 'strict_binding)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'match_case) in - Obj.repr( -# 1538 "ml/parser.mly" - ( [_1] ) -# 9596 "ml/parser.ml" - : 'match_cases)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'match_cases) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'match_case) in - Obj.repr( -# 1539 "ml/parser.mly" - ( _3 :: _1 ) -# 9604 "ml/parser.ml" - : 'match_cases)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1543 "ml/parser.mly" - ( Exp.case _1 _3 ) -# 9612 "ml/parser.ml" - : 'match_case)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'pattern) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'seq_expr) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1545 "ml/parser.mly" - ( Exp.case _1 ~guard:_3 _5 ) -# 9621 "ml/parser.ml" - : 'match_case)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - Obj.repr( -# 1547 "ml/parser.mly" - ( Exp.case _1 (Exp.unreachable ~loc:(rhs_loc 3) ())) -# 9628 "ml/parser.ml" - : 'match_case)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1551 "ml/parser.mly" - ( _2 ) -# 9635 "ml/parser.ml" - : 'fun_def)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'simple_core_type) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 1553 "ml/parser.mly" - ( mkexp (Pexp_constraint (_4, _2)) ) -# 9643 "ml/parser.ml" - : 'fun_def)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'labeled_simple_pattern) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'fun_def) in - Obj.repr( -# 1556 "ml/parser.mly" - ( - let (l,o,p) = _1 in - ghexp(Pexp_fun(l, o, p, _2)) - ) -# 9654 "ml/parser.ml" - : 'fun_def)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'lident_list) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'fun_def) in - Obj.repr( -# 1561 "ml/parser.mly" - ( mk_newtypes _3 _5 ) -# 9662 "ml/parser.ml" - : 'fun_def)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr_comma_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1564 "ml/parser.mly" - ( _3 :: _1 ) -# 9670 "ml/parser.ml" - : 'expr_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1565 "ml/parser.mly" - ( [_3; _1] ) -# 9678 "ml/parser.ml" - : 'expr_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simple_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'lbl_expr_list) in - Obj.repr( -# 1568 "ml/parser.mly" - ( (Some _1, _3) ) -# 9686 "ml/parser.ml" - : 'record_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'lbl_expr_list) in - Obj.repr( -# 1569 "ml/parser.mly" - ( (None, _1) ) -# 9693 "ml/parser.ml" - : 'record_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'lbl_expr) in - Obj.repr( -# 1572 "ml/parser.mly" - ( [_1] ) -# 9700 "ml/parser.ml" - : 'lbl_expr_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'lbl_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'lbl_expr_list) in - Obj.repr( -# 1573 "ml/parser.mly" - ( _1 :: _3 ) -# 9708 "ml/parser.ml" - : 'lbl_expr_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'lbl_expr) in - Obj.repr( -# 1574 "ml/parser.mly" - ( [_1] ) -# 9715 "ml/parser.ml" - : 'lbl_expr_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'label_longident) in - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'opt_type_constraint) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1578 "ml/parser.mly" - ( (mkrhs _1 1, mkexp_opt_constraint _4 _2) ) -# 9724 "ml/parser.ml" - : 'lbl_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'label_longident) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'opt_type_constraint) in - Obj.repr( -# 1580 "ml/parser.mly" - ( (mkrhs _1 1, mkexp_opt_constraint (exp_of_label _1 1) _2) ) -# 9732 "ml/parser.ml" - : 'lbl_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'field_expr) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'opt_semi) in - Obj.repr( -# 1583 "ml/parser.mly" - ( [_1] ) -# 9740 "ml/parser.ml" - : 'field_expr_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'field_expr) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'field_expr_list) in - Obj.repr( -# 1584 "ml/parser.mly" - ( _1 :: _3 ) -# 9748 "ml/parser.ml" - : 'field_expr_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'label) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1588 "ml/parser.mly" - ( (mkrhs _1 1, _3) ) -# 9756 "ml/parser.ml" - : 'field_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'label) in - Obj.repr( -# 1590 "ml/parser.mly" - ( (mkrhs _1 1, exp_of_label (Lident _1) 1) ) -# 9763 "ml/parser.ml" - : 'field_expr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1593 "ml/parser.mly" - ( [_1] ) -# 9770 "ml/parser.ml" - : 'expr_semi_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'expr_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'expr) in - Obj.repr( -# 1594 "ml/parser.mly" - ( _3 :: _1 ) -# 9778 "ml/parser.ml" - : 'expr_semi_list)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1597 "ml/parser.mly" - ( (Some _2, None) ) -# 9785 "ml/parser.ml" - : 'type_constraint)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'core_type) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1598 "ml/parser.mly" - ( (Some _2, Some _4) ) -# 9793 "ml/parser.ml" - : 'type_constraint)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1599 "ml/parser.mly" - ( (None, Some _2) ) -# 9800 "ml/parser.ml" - : 'type_constraint)) -; (fun __caml_parser_env -> - Obj.repr( -# 1600 "ml/parser.mly" - ( syntax_error() ) -# 9806 "ml/parser.ml" - : 'type_constraint)) -; (fun __caml_parser_env -> - Obj.repr( -# 1601 "ml/parser.mly" - ( syntax_error() ) -# 9812 "ml/parser.ml" - : 'type_constraint)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'type_constraint) in - Obj.repr( -# 1604 "ml/parser.mly" - ( Some _1 ) -# 9819 "ml/parser.ml" - : 'opt_type_constraint)) -; (fun __caml_parser_env -> - Obj.repr( -# 1605 "ml/parser.mly" - ( None ) -# 9825 "ml/parser.ml" - : 'opt_type_constraint)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'val_ident) in - Obj.repr( -# 1612 "ml/parser.mly" - ( mkpat(Ppat_alias(_1, mkrhs _3 3)) ) -# 9833 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - Obj.repr( -# 1614 "ml/parser.mly" - ( expecting 3 "identifier" ) -# 9840 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pattern_comma_list) in - Obj.repr( -# 1616 "ml/parser.mly" - ( mkpat(Ppat_tuple(List.rev _1)) ) -# 9847 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1618 "ml/parser.mly" - ( mkpat_cons (rhs_loc 2) (ghpat(Ppat_tuple[_1;_3])) (symbol_rloc()) ) -# 9855 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - Obj.repr( -# 1620 "ml/parser.mly" - ( expecting 3 "pattern" ) -# 9862 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1622 "ml/parser.mly" - ( mkpat(Ppat_or(_1, _3)) ) -# 9870 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - Obj.repr( -# 1624 "ml/parser.mly" - ( expecting 3 "pattern" ) -# 9877 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1626 "ml/parser.mly" - ( mkpat_attrs (Ppat_exception _3) _2) -# 9885 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'pattern) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attribute) in - Obj.repr( -# 1628 "ml/parser.mly" - ( Pat.attr _1 _2 ) -# 9893 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pattern_gen) in - Obj.repr( -# 1629 "ml/parser.mly" - ( _1 ) -# 9900 "ml/parser.ml" - : 'pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'val_ident) in - Obj.repr( -# 1633 "ml/parser.mly" - ( mkpat(Ppat_alias(_1, mkrhs _3 3)) ) -# 9908 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - Obj.repr( -# 1635 "ml/parser.mly" - ( expecting 3 "identifier" ) -# 9915 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pattern_no_exn_comma_list) in - Obj.repr( -# 1637 "ml/parser.mly" - ( mkpat(Ppat_tuple(List.rev _1)) ) -# 9922 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1639 "ml/parser.mly" - ( mkpat_cons (rhs_loc 2) (ghpat(Ppat_tuple[_1;_3])) (symbol_rloc()) ) -# 9930 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - Obj.repr( -# 1641 "ml/parser.mly" - ( expecting 3 "pattern" ) -# 9937 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1643 "ml/parser.mly" - ( mkpat(Ppat_or(_1, _3)) ) -# 9945 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - Obj.repr( -# 1645 "ml/parser.mly" - ( expecting 3 "pattern" ) -# 9952 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'pattern_no_exn) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attribute) in - Obj.repr( -# 1647 "ml/parser.mly" - ( Pat.attr _1 _2 ) -# 9960 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pattern_gen) in - Obj.repr( -# 1648 "ml/parser.mly" - ( _1 ) -# 9967 "ml/parser.ml" - : 'pattern_no_exn)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_pattern) in - Obj.repr( -# 1652 "ml/parser.mly" - ( _1 ) -# 9974 "ml/parser.ml" - : 'pattern_gen)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'constr_longident) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1654 "ml/parser.mly" - ( mkpat(Ppat_construct(mkrhs _1 1, Some _2)) ) -# 9982 "ml/parser.ml" - : 'pattern_gen)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'name_tag) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1656 "ml/parser.mly" - ( mkpat(Ppat_variant(_1, Some _2)) ) -# 9990 "ml/parser.ml" - : 'pattern_gen)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'simple_pattern) in - Obj.repr( -# 1658 "ml/parser.mly" - ( mkpat_attrs (Ppat_lazy _3) _2) -# 9998 "ml/parser.ml" - : 'pattern_gen)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'val_ident) in - Obj.repr( -# 1662 "ml/parser.mly" - ( mkpat(Ppat_var (mkrhs _1 1)) ) -# 10005 "ml/parser.ml" - : 'simple_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_pattern_not_ident) in - Obj.repr( -# 1663 "ml/parser.mly" - ( _1 ) -# 10012 "ml/parser.ml" - : 'simple_pattern)) -; (fun __caml_parser_env -> - Obj.repr( -# 1667 "ml/parser.mly" - ( mkpat(Ppat_any) ) -# 10018 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'signed_constant) in - Obj.repr( -# 1669 "ml/parser.mly" - ( mkpat(Ppat_constant _1) ) -# 10025 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'signed_constant) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'signed_constant) in - Obj.repr( -# 1671 "ml/parser.mly" - ( mkpat(Ppat_interval (_1, _3)) ) -# 10033 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constr_longident) in - Obj.repr( -# 1673 "ml/parser.mly" - ( mkpat(Ppat_construct(mkrhs _1 1, None)) ) -# 10040 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'name_tag) in - Obj.repr( -# 1675 "ml/parser.mly" - ( mkpat(Ppat_variant(_1, None)) ) -# 10047 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'type_longident) in - Obj.repr( -# 1677 "ml/parser.mly" - ( mkpat(Ppat_type (mkrhs _2 2)) ) -# 10054 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_delimited_pattern) in - Obj.repr( -# 1679 "ml/parser.mly" - ( _1 ) -# 10061 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'simple_delimited_pattern) in - Obj.repr( -# 1681 "ml/parser.mly" - ( mkpat @@ Ppat_open(mkrhs _1 1, _3) ) -# 10069 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'mod_longident) in - Obj.repr( -# 1683 "ml/parser.mly" - ( mkpat @@ Ppat_open(mkrhs _1 1, mkpat @@ - Ppat_construct ( mkrhs (Lident "[]") 4, None)) ) -# 10077 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'mod_longident) in - Obj.repr( -# 1686 "ml/parser.mly" - ( mkpat @@ Ppat_open( mkrhs _1 1, mkpat @@ - Ppat_construct ( mkrhs (Lident "()") 4, None) ) ) -# 10085 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'pattern) in - Obj.repr( -# 1689 "ml/parser.mly" - ( mkpat @@ Ppat_open (mkrhs _1 1, _4)) -# 10093 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'pattern) in - Obj.repr( -# 1691 "ml/parser.mly" - (unclosed "(" 3 ")" 5 ) -# 10101 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'mod_longident) in - Obj.repr( -# 1693 "ml/parser.mly" - ( expecting 4 "pattern" ) -# 10108 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'pattern) in - Obj.repr( -# 1695 "ml/parser.mly" - ( reloc_pat _2 ) -# 10115 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'pattern) in - Obj.repr( -# 1697 "ml/parser.mly" - ( unclosed "(" 1 ")" 3 ) -# 10122 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'pattern) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'core_type) in - Obj.repr( -# 1699 "ml/parser.mly" - ( mkpat(Ppat_constraint(_2, _4)) ) -# 10130 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'pattern) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'core_type) in - Obj.repr( -# 1701 "ml/parser.mly" - ( unclosed "(" 1 ")" 5 ) -# 10138 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - Obj.repr( -# 1703 "ml/parser.mly" - ( expecting 4 "type" ) -# 10145 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : string) in - Obj.repr( -# 1705 "ml/parser.mly" - ( mkpat_attrs (Ppat_unpack (mkrhs _4 4)) _3 ) -# 10153 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'package_type) in - Obj.repr( -# 1707 "ml/parser.mly" - ( mkpat_attrs - (Ppat_constraint(mkpat(Ppat_unpack (mkrhs _4 4)), - ghtyp(Ptyp_package _6))) - _3 ) -# 10165 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'package_type) in - Obj.repr( -# 1712 "ml/parser.mly" - ( unclosed "(" 1 ")" 7 ) -# 10174 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension) in - Obj.repr( -# 1714 "ml/parser.mly" - ( mkpat(Ppat_extension _1) ) -# 10181 "ml/parser.ml" - : 'simple_pattern_not_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'lbl_pattern_list) in - Obj.repr( -# 1719 "ml/parser.mly" - ( let (fields, closed) = _2 in mkpat(Ppat_record(fields, closed)) ) -# 10188 "ml/parser.ml" - : 'simple_delimited_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'lbl_pattern_list) in - Obj.repr( -# 1721 "ml/parser.mly" - ( unclosed "{" 1 "}" 3 ) -# 10195 "ml/parser.ml" - : 'simple_delimited_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1723 "ml/parser.mly" - ( reloc_pat (mktailpat (rhs_loc 4) (List.rev _2)) ) -# 10203 "ml/parser.ml" - : 'simple_delimited_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1725 "ml/parser.mly" - ( unclosed "[" 1 "]" 4 ) -# 10211 "ml/parser.ml" - : 'simple_delimited_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1727 "ml/parser.mly" - ( mkpat(Ppat_array(List.rev _2)) ) -# 10219 "ml/parser.ml" - : 'simple_delimited_pattern)) -; (fun __caml_parser_env -> - Obj.repr( -# 1729 "ml/parser.mly" - ( mkpat(Ppat_array []) ) -# 10225 "ml/parser.ml" - : 'simple_delimited_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'opt_semi) in - Obj.repr( -# 1731 "ml/parser.mly" - ( unclosed "[|" 1 "|]" 4 ) -# 10233 "ml/parser.ml" - : 'simple_delimited_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_comma_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1734 "ml/parser.mly" - ( _3 :: _1 ) -# 10241 "ml/parser.ml" - : 'pattern_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1735 "ml/parser.mly" - ( [_3; _1] ) -# 10249 "ml/parser.ml" - : 'pattern_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - Obj.repr( -# 1736 "ml/parser.mly" - ( expecting 3 "pattern" ) -# 10256 "ml/parser.ml" - : 'pattern_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn_comma_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1739 "ml/parser.mly" - ( _3 :: _1 ) -# 10264 "ml/parser.ml" - : 'pattern_no_exn_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1740 "ml/parser.mly" - ( [_3; _1] ) -# 10272 "ml/parser.ml" - : 'pattern_no_exn_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_no_exn) in - Obj.repr( -# 1741 "ml/parser.mly" - ( expecting 3 "pattern" ) -# 10279 "ml/parser.ml" - : 'pattern_no_exn_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1744 "ml/parser.mly" - ( [_1] ) -# 10286 "ml/parser.ml" - : 'pattern_semi_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern_semi_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1745 "ml/parser.mly" - ( _3 :: _1 ) -# 10294 "ml/parser.ml" - : 'pattern_semi_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'lbl_pattern) in - Obj.repr( -# 1748 "ml/parser.mly" - ( [_1], Closed ) -# 10301 "ml/parser.ml" - : 'lbl_pattern_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'lbl_pattern) in - Obj.repr( -# 1749 "ml/parser.mly" - ( [_1], Closed ) -# 10308 "ml/parser.ml" - : 'lbl_pattern_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'lbl_pattern) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'opt_semi) in - Obj.repr( -# 1750 "ml/parser.mly" - ( [_1], Open ) -# 10316 "ml/parser.ml" - : 'lbl_pattern_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'lbl_pattern) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'lbl_pattern_list) in - Obj.repr( -# 1752 "ml/parser.mly" - ( let (fields, closed) = _3 in _1 :: fields, closed ) -# 10324 "ml/parser.ml" - : 'lbl_pattern_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'label_longident) in - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'opt_pattern_type_constraint) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 1756 "ml/parser.mly" - ( (mkrhs _1 1, mkpat_opt_constraint _4 _2) ) -# 10333 "ml/parser.ml" - : 'lbl_pattern)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'label_longident) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'opt_pattern_type_constraint) in - Obj.repr( -# 1758 "ml/parser.mly" - ( (mkrhs _1 1, mkpat_opt_constraint (pat_of_label _1 1) _2) ) -# 10341 "ml/parser.ml" - : 'lbl_pattern)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1761 "ml/parser.mly" - ( Some _2 ) -# 10348 "ml/parser.ml" - : 'opt_pattern_type_constraint)) -; (fun __caml_parser_env -> - Obj.repr( -# 1762 "ml/parser.mly" - ( None ) -# 10354 "ml/parser.ml" - : 'opt_pattern_type_constraint)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'val_ident) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'core_type) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1769 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Val.mk (mkrhs _3 3) _5 ~attrs:(attrs@_6) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext ) -# 10367 "ml/parser.ml" - : 'value_description)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string * string option) in - Obj.repr( -# 1778 "ml/parser.mly" - ( [fst _1] ) -# 10374 "ml/parser.ml" - : 'primitive_declaration_body)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : string * string option) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'primitive_declaration_body) in - Obj.repr( -# 1779 "ml/parser.mly" - ( fst _1 :: _2 ) -# 10382 "ml/parser.ml" - : 'primitive_declaration_body)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 6 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 5 : 'val_ident) in - let _5 = (Parsing.peek_val __caml_parser_env 3 : 'core_type) in - let _7 = (Parsing.peek_val __caml_parser_env 1 : 'primitive_declaration_body) in - let _8 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1784 "ml/parser.mly" - ( let (ext, attrs) = _2 in - Val.mk (mkrhs _3 3) _5 ~prim:_7 ~attrs:(attrs@_8) - ~loc:(symbol_rloc ()) ~docs:(symbol_docs ()) - , ext ) -# 10396 "ml/parser.ml" - : 'primitive_declaration)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'type_declaration) in - Obj.repr( -# 1794 "ml/parser.mly" - ( let (nonrec_flag, ty, ext) = _1 in (nonrec_flag, [ty], ext) ) -# 10403 "ml/parser.ml" - : 'type_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'type_declarations) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'and_type_declaration) in - Obj.repr( -# 1796 "ml/parser.mly" - ( let (nonrec_flag, tys, ext) = _1 in (nonrec_flag, _2 :: tys, ext) ) -# 10411 "ml/parser.ml" - : 'type_declarations)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 6 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 5 : 'nonrec_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 4 : 'optional_type_parameters) in - let _5 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _6 = (Parsing.peek_val __caml_parser_env 2 : 'type_kind) in - let _7 = (Parsing.peek_val __caml_parser_env 1 : 'constraints) in - let _8 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1802 "ml/parser.mly" - ( let (kind, priv, manifest) = _6 in - let (ext, attrs) = _2 in - let ty = - Type.mk (mkrhs _5 5) ~params:_4 ~cstrs:(List.rev _7) ~kind - ~priv ?manifest ~attrs:(attrs@_8) - ~loc:(symbol_rloc ()) ~docs:(symbol_docs ()) - in - (_3, ty, ext) ) -# 10431 "ml/parser.ml" - : 'type_declaration)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'optional_type_parameters) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'type_kind) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'constraints) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1814 "ml/parser.mly" - ( let (kind, priv, manifest) = _5 in - Type.mk (mkrhs _4 4) ~params:_3 ~cstrs:(List.rev _6) - ~kind ~priv ?manifest ~attrs:(_2@_7) ~loc:(symbol_rloc ()) - ~text:(symbol_text ()) ~docs:(symbol_docs ()) ) -# 10446 "ml/parser.ml" - : 'and_type_declaration)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'constraints) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'constrain) in - Obj.repr( -# 1820 "ml/parser.mly" - ( _3 :: _1 ) -# 10454 "ml/parser.ml" - : 'constraints)) -; (fun __caml_parser_env -> - Obj.repr( -# 1821 "ml/parser.mly" - ( [] ) -# 10460 "ml/parser.ml" - : 'constraints)) -; (fun __caml_parser_env -> - Obj.repr( -# 1825 "ml/parser.mly" - ( (Ptype_abstract, Public, None) ) -# 10466 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1827 "ml/parser.mly" - ( (Ptype_abstract, Public, Some _2) ) -# 10473 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 1829 "ml/parser.mly" - ( (Ptype_abstract, Private, Some _3) ) -# 10480 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'constructor_declarations) in - Obj.repr( -# 1831 "ml/parser.mly" - ( (Ptype_variant(List.rev _2), Public, None) ) -# 10487 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'constructor_declarations) in - Obj.repr( -# 1833 "ml/parser.mly" - ( (Ptype_variant(List.rev _3), Private, None) ) -# 10494 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - Obj.repr( -# 1835 "ml/parser.mly" - ( (Ptype_open, Public, None) ) -# 10500 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - Obj.repr( -# 1837 "ml/parser.mly" - ( (Ptype_open, Private, None) ) -# 10506 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'private_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'label_declarations) in - Obj.repr( -# 1839 "ml/parser.mly" - ( (Ptype_record _4, _2, None) ) -# 10514 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'core_type) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'private_flag) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'constructor_declarations) in - Obj.repr( -# 1841 "ml/parser.mly" - ( (Ptype_variant(List.rev _5), _4, Some _2) ) -# 10523 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'core_type) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'private_flag) in - Obj.repr( -# 1843 "ml/parser.mly" - ( (Ptype_open, _4, Some _2) ) -# 10531 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'core_type) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'private_flag) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'label_declarations) in - Obj.repr( -# 1845 "ml/parser.mly" - ( (Ptype_record _6, _4, Some _2) ) -# 10540 "ml/parser.ml" - : 'type_kind)) -; (fun __caml_parser_env -> - Obj.repr( -# 1848 "ml/parser.mly" - ( [] ) -# 10546 "ml/parser.ml" - : 'optional_type_parameters)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'optional_type_parameter) in - Obj.repr( -# 1849 "ml/parser.mly" - ( [_1] ) -# 10553 "ml/parser.ml" - : 'optional_type_parameters)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'optional_type_parameter_list) in - Obj.repr( -# 1850 "ml/parser.mly" - ( List.rev _2 ) -# 10560 "ml/parser.ml" - : 'optional_type_parameters)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'type_variance) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'optional_type_variable) in - Obj.repr( -# 1853 "ml/parser.mly" - ( _2, _1 ) -# 10568 "ml/parser.ml" - : 'optional_type_parameter)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'optional_type_parameter) in - Obj.repr( -# 1856 "ml/parser.mly" - ( [_1] ) -# 10575 "ml/parser.ml" - : 'optional_type_parameter_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'optional_type_parameter_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'optional_type_parameter) in - Obj.repr( -# 1857 "ml/parser.mly" - ( _3 :: _1 ) -# 10583 "ml/parser.ml" - : 'optional_type_parameter_list)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 1860 "ml/parser.mly" - ( mktyp(Ptyp_var _2) ) -# 10590 "ml/parser.ml" - : 'optional_type_variable)) -; (fun __caml_parser_env -> - Obj.repr( -# 1861 "ml/parser.mly" - ( mktyp(Ptyp_any) ) -# 10596 "ml/parser.ml" - : 'optional_type_variable)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'type_variance) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'type_variable) in - Obj.repr( -# 1866 "ml/parser.mly" - ( _2, _1 ) -# 10604 "ml/parser.ml" - : 'type_parameter)) -; (fun __caml_parser_env -> - Obj.repr( -# 1869 "ml/parser.mly" - ( Invariant ) -# 10610 "ml/parser.ml" - : 'type_variance)) -; (fun __caml_parser_env -> - Obj.repr( -# 1870 "ml/parser.mly" - ( Covariant ) -# 10616 "ml/parser.ml" - : 'type_variance)) -; (fun __caml_parser_env -> - Obj.repr( -# 1871 "ml/parser.mly" - ( Contravariant ) -# 10622 "ml/parser.ml" - : 'type_variance)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 1874 "ml/parser.mly" - ( mktyp(Ptyp_var _2) ) -# 10629 "ml/parser.ml" - : 'type_variable)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'type_parameter) in - Obj.repr( -# 1877 "ml/parser.mly" - ( [_1] ) -# 10636 "ml/parser.ml" - : 'type_parameter_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'type_parameter_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'type_parameter) in - Obj.repr( -# 1878 "ml/parser.mly" - ( _3 :: _1 ) -# 10644 "ml/parser.ml" - : 'type_parameter_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constructor_declaration) in - Obj.repr( -# 1881 "ml/parser.mly" - ( [_1] ) -# 10651 "ml/parser.ml" - : 'constructor_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'bar_constructor_declaration) in - Obj.repr( -# 1882 "ml/parser.mly" - ( [_1] ) -# 10658 "ml/parser.ml" - : 'constructor_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'constructor_declarations) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'bar_constructor_declaration) in - Obj.repr( -# 1883 "ml/parser.mly" - ( _2 :: _1 ) -# 10666 "ml/parser.ml" - : 'constructor_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'constr_ident) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'generalized_constructor_arguments) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 1887 "ml/parser.mly" - ( - let args,res = _2 in - Type.constructor (mkrhs _1 1) ~args ?res ~attrs:_3 - ~loc:(symbol_rloc()) ~info:(symbol_info ()) - ) -# 10679 "ml/parser.ml" - : 'constructor_declaration)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'constr_ident) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'generalized_constructor_arguments) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 1895 "ml/parser.mly" - ( - let args,res = _3 in - Type.constructor (mkrhs _2 2) ~args ?res ~attrs:_4 - ~loc:(symbol_rloc()) ~info:(symbol_info ()) - ) -# 10692 "ml/parser.ml" - : 'bar_constructor_declaration)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'sig_exception_declaration) in - Obj.repr( -# 1902 "ml/parser.mly" - ( _1 ) -# 10699 "ml/parser.ml" - : 'str_exception_declaration)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 4 : 'constr_ident) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'constr_longident) in - let _6 = (Parsing.peek_val __caml_parser_env 1 : 'attributes) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1905 "ml/parser.mly" - ( let (ext,attrs) = _2 in - Te.rebind (mkrhs _3 3) (mkrhs _5 5) ~attrs:(attrs @ _6 @ _7) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext ) -# 10713 "ml/parser.ml" - : 'str_exception_declaration)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'constr_ident) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'generalized_constructor_arguments) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'attributes) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1913 "ml/parser.mly" - ( let args, res = _4 in - let (ext,attrs) = _2 in - Te.decl (mkrhs _3 3) ~args ?res ~attrs:(attrs @ _5 @ _6) - ~loc:(symbol_rloc()) ~docs:(symbol_docs ()) - , ext ) -# 10728 "ml/parser.ml" - : 'sig_exception_declaration)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'constr_ident) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'generalized_constructor_arguments) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 1921 "ml/parser.mly" - ( let args, res = _2 in - Te.decl (mkrhs _1 1) ~args ?res ~attrs:_3 ~loc:(symbol_rloc()) ) -# 10738 "ml/parser.ml" - : 'let_exception_declaration)) -; (fun __caml_parser_env -> - Obj.repr( -# 1925 "ml/parser.mly" - ( (Pcstr_tuple [],None) ) -# 10744 "ml/parser.ml" - : 'generalized_constructor_arguments)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'constructor_arguments) in - Obj.repr( -# 1926 "ml/parser.mly" - ( (_2,None) ) -# 10751 "ml/parser.ml" - : 'generalized_constructor_arguments)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'constructor_arguments) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type) in - Obj.repr( -# 1928 "ml/parser.mly" - ( (_2,Some _4) ) -# 10759 "ml/parser.ml" - : 'generalized_constructor_arguments)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type) in - Obj.repr( -# 1930 "ml/parser.mly" - ( (Pcstr_tuple [],Some _2) ) -# 10766 "ml/parser.ml" - : 'generalized_constructor_arguments)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'core_type_list) in - Obj.repr( -# 1934 "ml/parser.mly" - ( Pcstr_tuple (List.rev _1) ) -# 10773 "ml/parser.ml" - : 'constructor_arguments)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'label_declarations) in - Obj.repr( -# 1935 "ml/parser.mly" - ( Pcstr_record _2 ) -# 10780 "ml/parser.ml" - : 'constructor_arguments)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'label_declaration) in - Obj.repr( -# 1938 "ml/parser.mly" - ( [_1] ) -# 10787 "ml/parser.ml" - : 'label_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'label_declaration_semi) in - Obj.repr( -# 1939 "ml/parser.mly" - ( [_1] ) -# 10794 "ml/parser.ml" - : 'label_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'label_declaration_semi) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'label_declarations) in - Obj.repr( -# 1940 "ml/parser.mly" - ( _1 :: _2 ) -# 10802 "ml/parser.ml" - : 'label_declarations)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mutable_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'label) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'poly_type_no_attr) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 1944 "ml/parser.mly" - ( - Type.field (mkrhs _2 2) _4 ~mut:_1 ~attrs:_5 - ~loc:(symbol_rloc()) ~info:(symbol_info ()) - ) -# 10815 "ml/parser.ml" - : 'label_declaration)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 6 : 'mutable_flag) in - let _2 = (Parsing.peek_val __caml_parser_env 5 : 'label) in - let _4 = (Parsing.peek_val __caml_parser_env 3 : 'poly_type_no_attr) in - let _5 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _7 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 1951 "ml/parser.mly" - ( - let info = - match rhs_info 5 with - | Some _ as info_before_semi -> info_before_semi - | None -> symbol_info () - in - Type.field (mkrhs _2 2) _4 ~mut:_1 ~attrs:(_5 @ _7) - ~loc:(symbol_rloc()) ~info - ) -# 10834 "ml/parser.ml" - : 'label_declaration_semi)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 7 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 6 : 'nonrec_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 5 : 'optional_type_parameters) in - let _5 = (Parsing.peek_val __caml_parser_env 4 : 'type_longident) in - let _7 = (Parsing.peek_val __caml_parser_env 2 : 'private_flag) in - let _8 = (Parsing.peek_val __caml_parser_env 1 : 'str_extension_constructors) in - let _9 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1967 "ml/parser.mly" - ( let (ext, attrs) = _2 in - if _3 <> Recursive then not_expecting 3 "nonrec flag"; - Te.mk (mkrhs _5 5) (List.rev _8) ~params:_4 ~priv:_7 - ~attrs:(attrs@_9) ~docs:(symbol_docs ()) - , ext ) -# 10851 "ml/parser.ml" - : 'str_type_extension)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 7 : 'ext_attributes) in - let _3 = (Parsing.peek_val __caml_parser_env 6 : 'nonrec_flag) in - let _4 = (Parsing.peek_val __caml_parser_env 5 : 'optional_type_parameters) in - let _5 = (Parsing.peek_val __caml_parser_env 4 : 'type_longident) in - let _7 = (Parsing.peek_val __caml_parser_env 2 : 'private_flag) in - let _8 = (Parsing.peek_val __caml_parser_env 1 : 'sig_extension_constructors) in - let _9 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 1976 "ml/parser.mly" - ( let (ext, attrs) = _2 in - if _3 <> Recursive then not_expecting 3 "nonrec flag"; - Te.mk (mkrhs _5 5) (List.rev _8) ~params:_4 ~priv:_7 - ~attrs:(attrs @ _9) ~docs:(symbol_docs ()) - , ext ) -# 10868 "ml/parser.ml" - : 'sig_type_extension)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension_constructor_declaration) in - Obj.repr( -# 1983 "ml/parser.mly" - ( [_1] ) -# 10875 "ml/parser.ml" - : 'str_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'bar_extension_constructor_declaration) in - Obj.repr( -# 1984 "ml/parser.mly" - ( [_1] ) -# 10882 "ml/parser.ml" - : 'str_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension_constructor_rebind) in - Obj.repr( -# 1985 "ml/parser.mly" - ( [_1] ) -# 10889 "ml/parser.ml" - : 'str_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'bar_extension_constructor_rebind) in - Obj.repr( -# 1986 "ml/parser.mly" - ( [_1] ) -# 10896 "ml/parser.ml" - : 'str_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'str_extension_constructors) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'bar_extension_constructor_declaration) in - Obj.repr( -# 1988 "ml/parser.mly" - ( _2 :: _1 ) -# 10904 "ml/parser.ml" - : 'str_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'str_extension_constructors) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'bar_extension_constructor_rebind) in - Obj.repr( -# 1990 "ml/parser.mly" - ( _2 :: _1 ) -# 10912 "ml/parser.ml" - : 'str_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension_constructor_declaration) in - Obj.repr( -# 1993 "ml/parser.mly" - ( [_1] ) -# 10919 "ml/parser.ml" - : 'sig_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'bar_extension_constructor_declaration) in - Obj.repr( -# 1994 "ml/parser.mly" - ( [_1] ) -# 10926 "ml/parser.ml" - : 'sig_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'sig_extension_constructors) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'bar_extension_constructor_declaration) in - Obj.repr( -# 1996 "ml/parser.mly" - ( _2 :: _1 ) -# 10934 "ml/parser.ml" - : 'sig_extension_constructors)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'constr_ident) in - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'generalized_constructor_arguments) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2000 "ml/parser.mly" - ( let args, res = _2 in - Te.decl (mkrhs _1 1) ~args ?res ~attrs:_3 - ~loc:(symbol_rloc()) ~info:(symbol_info ()) ) -# 10945 "ml/parser.ml" - : 'extension_constructor_declaration)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'constr_ident) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'generalized_constructor_arguments) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2006 "ml/parser.mly" - ( let args, res = _3 in - Te.decl (mkrhs _2 2) ~args ?res ~attrs:_4 - ~loc:(symbol_rloc()) ~info:(symbol_info ()) ) -# 10956 "ml/parser.ml" - : 'bar_extension_constructor_declaration)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'constr_ident) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'constr_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2012 "ml/parser.mly" - ( Te.rebind (mkrhs _1 1) (mkrhs _3 3) ~attrs:_4 - ~loc:(symbol_rloc()) ~info:(symbol_info ()) ) -# 10966 "ml/parser.ml" - : 'extension_constructor_rebind)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'constr_ident) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'constr_longident) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2017 "ml/parser.mly" - ( Te.rebind (mkrhs _2 2) (mkrhs _4 4) ~attrs:_5 - ~loc:(symbol_rloc()) ~info:(symbol_info ()) ) -# 10976 "ml/parser.ml" - : 'bar_extension_constructor_rebind)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'with_constraint) in - Obj.repr( -# 2024 "ml/parser.mly" - ( [_1] ) -# 10983 "ml/parser.ml" - : 'with_constraints)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'with_constraints) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'with_constraint) in - Obj.repr( -# 2025 "ml/parser.mly" - ( _3 :: _1 ) -# 10991 "ml/parser.ml" - : 'with_constraints)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'optional_type_parameters) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'label_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'with_type_binder) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'core_type_no_attr) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'constraints) in - Obj.repr( -# 2030 "ml/parser.mly" - ( Pwith_type - (mkrhs _3 3, - (Type.mk (mkrhs (Longident.last _3) 3) - ~params:_2 - ~cstrs:(List.rev _6) - ~manifest:_5 - ~priv:_4 - ~loc:(symbol_rloc()))) ) -# 11009 "ml/parser.ml" - : 'with_constraint)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'optional_type_parameters) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'label_longident) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'core_type_no_attr) in - Obj.repr( -# 2041 "ml/parser.mly" - ( Pwith_typesubst - (mkrhs _3 3, - (Type.mk (mkrhs (Longident.last _3) 3) - ~params:_2 - ~manifest:_5 - ~loc:(symbol_rloc()))) ) -# 11023 "ml/parser.ml" - : 'with_constraint)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'mod_ext_longident) in - Obj.repr( -# 2048 "ml/parser.mly" - ( Pwith_module (mkrhs _2 2, mkrhs _4 4) ) -# 11031 "ml/parser.ml" - : 'with_constraint)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'mod_ext_longident) in - Obj.repr( -# 2050 "ml/parser.mly" - ( Pwith_modsubst (mkrhs _2 2, mkrhs _4 4) ) -# 11039 "ml/parser.ml" - : 'with_constraint)) -; (fun __caml_parser_env -> - Obj.repr( -# 2053 "ml/parser.mly" - ( Public ) -# 11045 "ml/parser.ml" - : 'with_type_binder)) -; (fun __caml_parser_env -> - Obj.repr( -# 2054 "ml/parser.mly" - ( Private ) -# 11051 "ml/parser.ml" - : 'with_type_binder)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 2060 "ml/parser.mly" - ( [mkrhs _2 2] ) -# 11058 "ml/parser.ml" - : 'typevar_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'typevar_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 2061 "ml/parser.mly" - ( mkrhs _3 3 :: _1 ) -# 11066 "ml/parser.ml" - : 'typevar_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 2065 "ml/parser.mly" - ( _1 ) -# 11073 "ml/parser.ml" - : 'poly_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'typevar_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 2067 "ml/parser.mly" - ( mktyp(Ptyp_poly(List.rev _1, _3)) ) -# 11081 "ml/parser.ml" - : 'poly_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'core_type_no_attr) in - Obj.repr( -# 2071 "ml/parser.mly" - ( _1 ) -# 11088 "ml/parser.ml" - : 'poly_type_no_attr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'typevar_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type_no_attr) in - Obj.repr( -# 2073 "ml/parser.mly" - ( mktyp(Ptyp_poly(List.rev _1, _3)) ) -# 11096 "ml/parser.ml" - : 'poly_type_no_attr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'core_type_no_attr) in - Obj.repr( -# 2080 "ml/parser.mly" - ( _1 ) -# 11103 "ml/parser.ml" - : 'core_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'core_type) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attribute) in - Obj.repr( -# 2082 "ml/parser.mly" - ( Typ.attr _1 _2 ) -# 11111 "ml/parser.ml" - : 'core_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'core_type2) in - Obj.repr( -# 2086 "ml/parser.mly" - ( _1 ) -# 11118 "ml/parser.ml" - : 'core_type_no_attr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'core_type2) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 2088 "ml/parser.mly" - ( mktyp(Ptyp_alias(_1, _4)) ) -# 11126 "ml/parser.ml" - : 'core_type_no_attr)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type_or_tuple) in - Obj.repr( -# 2092 "ml/parser.mly" - ( _1 ) -# 11133 "ml/parser.ml" - : 'core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : string) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'core_type2) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'core_type2) in - Obj.repr( -# 2094 "ml/parser.mly" - ( let param = extra_rhs_core_type _4 ~pos:4 in - mktyp (Ptyp_arrow(Optional _2 , param, _6)) ) -# 11143 "ml/parser.ml" - : 'core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'core_type2) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'core_type2) in - Obj.repr( -# 2097 "ml/parser.mly" - ( let param = extra_rhs_core_type _2 ~pos:2 in - mktyp(Ptyp_arrow(Optional _1 , param, _4)) - ) -# 11154 "ml/parser.ml" - : 'core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : string) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'core_type2) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'core_type2) in - Obj.repr( -# 2101 "ml/parser.mly" - ( let param = extra_rhs_core_type _3 ~pos:3 in - mktyp(Ptyp_arrow(Labelled _1, param, _5)) ) -# 11164 "ml/parser.ml" - : 'core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'core_type2) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type2) in - Obj.repr( -# 2104 "ml/parser.mly" - ( let param = extra_rhs_core_type _1 ~pos:1 in - mktyp(Ptyp_arrow(Nolabel, param, _3)) ) -# 11173 "ml/parser.ml" - : 'core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type2) in - Obj.repr( -# 2110 "ml/parser.mly" - ( _1 ) -# 11180 "ml/parser.ml" - : 'simple_core_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'core_type_comma_list) in - Obj.repr( -# 2112 "ml/parser.mly" - ( match _2 with [sty] -> sty | _ -> raise Parse_error ) -# 11187 "ml/parser.ml" - : 'simple_core_type)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 2117 "ml/parser.mly" - ( mktyp(Ptyp_var _2) ) -# 11194 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - Obj.repr( -# 2119 "ml/parser.mly" - ( mktyp(Ptyp_any) ) -# 11200 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'type_longident) in - Obj.repr( -# 2121 "ml/parser.mly" - ( mktyp(Ptyp_constr(mkrhs _1 1, [])) ) -# 11207 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'simple_core_type2) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'type_longident) in - Obj.repr( -# 2123 "ml/parser.mly" - ( mktyp(Ptyp_constr(mkrhs _2 2, [_1])) ) -# 11215 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'core_type_comma_list) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'type_longident) in - Obj.repr( -# 2125 "ml/parser.mly" - ( mktyp(Ptyp_constr(mkrhs _4 4, List.rev _2)) ) -# 11223 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'meth_list) in - Obj.repr( -# 2127 "ml/parser.mly" - ( let (f, c) = _2 in mktyp(Ptyp_object (f, c)) ) -# 11230 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - Obj.repr( -# 2129 "ml/parser.mly" - ( mktyp(Ptyp_object ([], Closed)) ) -# 11236 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'class_longident) in - Obj.repr( -# 2131 "ml/parser.mly" - ( mktyp(Ptyp_class(mkrhs _2 2, [])) ) -# 11243 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simple_core_type2) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'class_longident) in - Obj.repr( -# 2133 "ml/parser.mly" - ( mktyp(Ptyp_class(mkrhs _3 3, [_1])) ) -# 11251 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'core_type_comma_list) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'class_longident) in - Obj.repr( -# 2135 "ml/parser.mly" - ( mktyp(Ptyp_class(mkrhs _5 5, List.rev _2)) ) -# 11259 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'tag_field) in - Obj.repr( -# 2137 "ml/parser.mly" - ( mktyp(Ptyp_variant([_2], Closed, None)) ) -# 11266 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'row_field_list) in - Obj.repr( -# 2143 "ml/parser.mly" - ( mktyp(Ptyp_variant(List.rev _3, Closed, None)) ) -# 11273 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 3 : 'row_field) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'row_field_list) in - Obj.repr( -# 2145 "ml/parser.mly" - ( mktyp(Ptyp_variant(_2 :: List.rev _4, Closed, None)) ) -# 11281 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'opt_bar) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'row_field_list) in - Obj.repr( -# 2147 "ml/parser.mly" - ( mktyp(Ptyp_variant(List.rev _3, Open, None)) ) -# 11289 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - Obj.repr( -# 2149 "ml/parser.mly" - ( mktyp(Ptyp_variant([], Open, None)) ) -# 11295 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'opt_bar) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'row_field_list) in - Obj.repr( -# 2151 "ml/parser.mly" - ( mktyp(Ptyp_variant(List.rev _3, Closed, Some [])) ) -# 11303 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 4 : 'opt_bar) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'row_field_list) in - let _5 = (Parsing.peek_val __caml_parser_env 1 : 'name_tag_list) in - Obj.repr( -# 2153 "ml/parser.mly" - ( mktyp(Ptyp_variant(List.rev _3, Closed, Some (List.rev _5))) ) -# 11312 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'ext_attributes) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'package_type) in - Obj.repr( -# 2155 "ml/parser.mly" - ( mktyp_attrs (Ptyp_package _4) _3 ) -# 11320 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'extension) in - Obj.repr( -# 2157 "ml/parser.mly" - ( mktyp (Ptyp_extension _1) ) -# 11327 "ml/parser.ml" - : 'simple_core_type2)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'module_type) in - Obj.repr( -# 2160 "ml/parser.mly" - ( package_type_of_module_type _1 ) -# 11334 "ml/parser.ml" - : 'package_type)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'row_field) in - Obj.repr( -# 2163 "ml/parser.mly" - ( [_1] ) -# 11341 "ml/parser.ml" - : 'row_field_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'row_field_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'row_field) in - Obj.repr( -# 2164 "ml/parser.mly" - ( _3 :: _1 ) -# 11349 "ml/parser.ml" - : 'row_field_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tag_field) in - Obj.repr( -# 2167 "ml/parser.mly" - ( _1 ) -# 11356 "ml/parser.ml" - : 'row_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type) in - Obj.repr( -# 2168 "ml/parser.mly" - ( Rinherit _1 ) -# 11363 "ml/parser.ml" - : 'row_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'name_tag) in - let _3 = (Parsing.peek_val __caml_parser_env 2 : 'opt_ampersand) in - let _4 = (Parsing.peek_val __caml_parser_env 1 : 'amper_type_list) in - let _5 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2172 "ml/parser.mly" - ( Rtag (mkrhs _1 1, add_info_attrs (symbol_info ()) _5, - _3, List.rev _4) ) -# 11374 "ml/parser.ml" - : 'tag_field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'name_tag) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2175 "ml/parser.mly" - ( Rtag (mkrhs _1 1, add_info_attrs (symbol_info ()) _2, true, []) ) -# 11382 "ml/parser.ml" - : 'tag_field)) -; (fun __caml_parser_env -> - Obj.repr( -# 2178 "ml/parser.mly" - ( true ) -# 11388 "ml/parser.ml" - : 'opt_ampersand)) -; (fun __caml_parser_env -> - Obj.repr( -# 2179 "ml/parser.mly" - ( false ) -# 11394 "ml/parser.ml" - : 'opt_ampersand)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'core_type_no_attr) in - Obj.repr( -# 2182 "ml/parser.mly" - ( [_1] ) -# 11401 "ml/parser.ml" - : 'amper_type_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'amper_type_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type_no_attr) in - Obj.repr( -# 2183 "ml/parser.mly" - ( _3 :: _1 ) -# 11409 "ml/parser.ml" - : 'amper_type_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'name_tag) in - Obj.repr( -# 2186 "ml/parser.mly" - ( [_1] ) -# 11416 "ml/parser.ml" - : 'name_tag_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'name_tag_list) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'name_tag) in - Obj.repr( -# 2187 "ml/parser.mly" - ( _2 :: _1 ) -# 11424 "ml/parser.ml" - : 'name_tag_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type) in - Obj.repr( -# 2190 "ml/parser.mly" - ( _1 ) -# 11431 "ml/parser.ml" - : 'simple_core_type_or_tuple)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simple_core_type) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type_list) in - Obj.repr( -# 2192 "ml/parser.mly" - ( mktyp(Ptyp_tuple(_1 :: List.rev _3)) ) -# 11439 "ml/parser.ml" - : 'simple_core_type_or_tuple)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 2195 "ml/parser.mly" - ( [_1] ) -# 11446 "ml/parser.ml" - : 'core_type_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'core_type_comma_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 2196 "ml/parser.mly" - ( _3 :: _1 ) -# 11454 "ml/parser.ml" - : 'core_type_comma_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type) in - Obj.repr( -# 2199 "ml/parser.mly" - ( [_1] ) -# 11461 "ml/parser.ml" - : 'core_type_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'core_type_list) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type) in - Obj.repr( -# 2200 "ml/parser.mly" - ( _3 :: _1 ) -# 11469 "ml/parser.ml" - : 'core_type_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'field_semi) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'meth_list) in - Obj.repr( -# 2203 "ml/parser.mly" - ( let (f, c) = _2 in (_1 :: f, c) ) -# 11477 "ml/parser.ml" - : 'meth_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'inherit_field_semi) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'meth_list) in - Obj.repr( -# 2204 "ml/parser.mly" - ( let (f, c) = _2 in (_1 :: f, c) ) -# 11485 "ml/parser.ml" - : 'meth_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'field_semi) in - Obj.repr( -# 2205 "ml/parser.mly" - ( [_1], Closed ) -# 11492 "ml/parser.ml" - : 'meth_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'field) in - Obj.repr( -# 2206 "ml/parser.mly" - ( [_1], Closed ) -# 11499 "ml/parser.ml" - : 'meth_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'inherit_field_semi) in - Obj.repr( -# 2207 "ml/parser.mly" - ( [_1], Closed ) -# 11506 "ml/parser.ml" - : 'meth_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simple_core_type) in - Obj.repr( -# 2208 "ml/parser.mly" - ( [Oinherit _1], Closed ) -# 11513 "ml/parser.ml" - : 'meth_list)) -; (fun __caml_parser_env -> - Obj.repr( -# 2209 "ml/parser.mly" - ( [], Open ) -# 11519 "ml/parser.ml" - : 'meth_list)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'label) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'poly_type_no_attr) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2213 "ml/parser.mly" - ( Otag (mkrhs _1 1, add_info_attrs (symbol_info ()) _4, _3) ) -# 11528 "ml/parser.ml" - : 'field)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 5 : 'label) in - let _3 = (Parsing.peek_val __caml_parser_env 3 : 'poly_type_no_attr) in - let _4 = (Parsing.peek_val __caml_parser_env 2 : 'attributes) in - let _6 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2218 "ml/parser.mly" - ( let info = - match rhs_info 4 with - | Some _ as info_before_semi -> info_before_semi - | None -> symbol_info () - in - ( Otag (mkrhs _1 1, add_info_attrs info (_4 @ _6), _3)) ) -# 11543 "ml/parser.ml" - : 'field_semi)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'simple_core_type) in - Obj.repr( -# 2227 "ml/parser.mly" - ( Oinherit _1 ) -# 11550 "ml/parser.ml" - : 'inherit_field_semi)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2230 "ml/parser.mly" - ( _1 ) -# 11557 "ml/parser.ml" - : 'label)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string * char option) in - Obj.repr( -# 2236 "ml/parser.mly" - ( let (n, m) = _1 in Pconst_integer (n, m) ) -# 11564 "ml/parser.ml" - : 'constant)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : char) in - Obj.repr( -# 2237 "ml/parser.mly" - ( Pconst_char _1 ) -# 11571 "ml/parser.ml" - : 'constant)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string * string option) in - Obj.repr( -# 2238 "ml/parser.mly" - ( let (s, d) = _1 in Pconst_string (s, d) ) -# 11578 "ml/parser.ml" - : 'constant)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string * char option) in - Obj.repr( -# 2239 "ml/parser.mly" - ( let (f, m) = _1 in Pconst_float (f, m) ) -# 11585 "ml/parser.ml" - : 'constant)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constant) in - Obj.repr( -# 2242 "ml/parser.mly" - ( _1 ) -# 11592 "ml/parser.ml" - : 'signed_constant)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : string * char option) in - Obj.repr( -# 2243 "ml/parser.mly" - ( let (n, m) = _2 in Pconst_integer("-" ^ n, m) ) -# 11599 "ml/parser.ml" - : 'signed_constant)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : string * char option) in - Obj.repr( -# 2244 "ml/parser.mly" - ( let (f, m) = _2 in Pconst_float("-" ^ f, m) ) -# 11606 "ml/parser.ml" - : 'signed_constant)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : string * char option) in - Obj.repr( -# 2245 "ml/parser.mly" - ( let (n, m) = _2 in Pconst_integer (n, m) ) -# 11613 "ml/parser.ml" - : 'signed_constant)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : string * char option) in - Obj.repr( -# 2246 "ml/parser.mly" - ( let (f, m) = _2 in Pconst_float(f, m) ) -# 11620 "ml/parser.ml" - : 'signed_constant)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2252 "ml/parser.mly" - ( _1 ) -# 11627 "ml/parser.ml" - : 'ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2253 "ml/parser.mly" - ( _1 ) -# 11634 "ml/parser.ml" - : 'ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2256 "ml/parser.mly" - ( _1 ) -# 11641 "ml/parser.ml" - : 'val_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'operator) in - Obj.repr( -# 2257 "ml/parser.mly" - ( _2 ) -# 11648 "ml/parser.ml" - : 'val_ident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'operator) in - Obj.repr( -# 2258 "ml/parser.mly" - ( unclosed "(" 1 ")" 3 ) -# 11655 "ml/parser.ml" - : 'val_ident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2259 "ml/parser.mly" - ( expecting 2 "operator" ) -# 11661 "ml/parser.ml" - : 'val_ident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2260 "ml/parser.mly" - ( expecting 3 "module-expr" ) -# 11667 "ml/parser.ml" - : 'val_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2263 "ml/parser.mly" - ( _1 ) -# 11674 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2264 "ml/parser.mly" - ( _1 ) -# 11681 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2265 "ml/parser.mly" - ( _1 ) -# 11688 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2266 "ml/parser.mly" - ( _1 ) -# 11695 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2267 "ml/parser.mly" - ( _1 ) -# 11702 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2268 "ml/parser.mly" - ( _1 ) -# 11709 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : string) in - Obj.repr( -# 2269 "ml/parser.mly" - ( "."^ _1 ^"()" ) -# 11716 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in - Obj.repr( -# 2270 "ml/parser.mly" - ( "."^ _1 ^ "()<-" ) -# 11723 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : string) in - Obj.repr( -# 2271 "ml/parser.mly" - ( "."^ _1 ^"[]" ) -# 11730 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in - Obj.repr( -# 2272 "ml/parser.mly" - ( "."^ _1 ^ "[]<-" ) -# 11737 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : string) in - Obj.repr( -# 2273 "ml/parser.mly" - ( "."^ _1 ^"{}" ) -# 11744 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : string) in - Obj.repr( -# 2274 "ml/parser.mly" - ( "."^ _1 ^ "{}<-" ) -# 11751 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2275 "ml/parser.mly" - ( _1 ) -# 11758 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2276 "ml/parser.mly" - ( "!" ) -# 11764 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2277 "ml/parser.mly" - ( "+" ) -# 11770 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2278 "ml/parser.mly" - ( "+." ) -# 11776 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2279 "ml/parser.mly" - ( "-" ) -# 11782 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2280 "ml/parser.mly" - ( "-." ) -# 11788 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2281 "ml/parser.mly" - ( "*" ) -# 11794 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2282 "ml/parser.mly" - ( "=" ) -# 11800 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2283 "ml/parser.mly" - ( "<" ) -# 11806 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2284 "ml/parser.mly" - ( ">" ) -# 11812 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2285 "ml/parser.mly" - ( "or" ) -# 11818 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2286 "ml/parser.mly" - ( "||" ) -# 11824 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2287 "ml/parser.mly" - ( "&" ) -# 11830 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2288 "ml/parser.mly" - ( "&&" ) -# 11836 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2289 "ml/parser.mly" - ( ":=" ) -# 11842 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2290 "ml/parser.mly" - ( "+=" ) -# 11848 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - Obj.repr( -# 2291 "ml/parser.mly" - ( "%" ) -# 11854 "ml/parser.ml" - : 'operator)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2294 "ml/parser.mly" - ( _1 ) -# 11861 "ml/parser.ml" - : 'constr_ident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2295 "ml/parser.mly" - ( "[]" ) -# 11867 "ml/parser.ml" - : 'constr_ident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2296 "ml/parser.mly" - ( "()" ) -# 11873 "ml/parser.ml" - : 'constr_ident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2297 "ml/parser.mly" - ( "::" ) -# 11879 "ml/parser.ml" - : 'constr_ident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2298 "ml/parser.mly" - ( "false" ) -# 11885 "ml/parser.ml" - : 'constr_ident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2299 "ml/parser.mly" - ( "true" ) -# 11891 "ml/parser.ml" - : 'constr_ident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'val_ident) in - Obj.repr( -# 2303 "ml/parser.mly" - ( Lident _1 ) -# 11898 "ml/parser.ml" - : 'val_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'val_ident) in - Obj.repr( -# 2304 "ml/parser.mly" - ( Ldot(_1, _3) ) -# 11906 "ml/parser.ml" - : 'val_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'mod_longident) in - Obj.repr( -# 2307 "ml/parser.mly" - ( _1 ) -# 11913 "ml/parser.ml" - : 'constr_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 4 : 'mod_longident) in - Obj.repr( -# 2308 "ml/parser.mly" - ( Ldot(_1,"::") ) -# 11920 "ml/parser.ml" - : 'constr_longident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2309 "ml/parser.mly" - ( Lident "[]" ) -# 11926 "ml/parser.ml" - : 'constr_longident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2310 "ml/parser.mly" - ( Lident "()" ) -# 11932 "ml/parser.ml" - : 'constr_longident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2311 "ml/parser.mly" - ( Lident "::" ) -# 11938 "ml/parser.ml" - : 'constr_longident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2312 "ml/parser.mly" - ( Lident "false" ) -# 11944 "ml/parser.ml" - : 'constr_longident)) -; (fun __caml_parser_env -> - Obj.repr( -# 2313 "ml/parser.mly" - ( Lident "true" ) -# 11950 "ml/parser.ml" - : 'constr_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2316 "ml/parser.mly" - ( Lident _1 ) -# 11957 "ml/parser.ml" - : 'label_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2317 "ml/parser.mly" - ( Ldot(_1, _3) ) -# 11965 "ml/parser.ml" - : 'label_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2320 "ml/parser.mly" - ( Lident _1 ) -# 11972 "ml/parser.ml" - : 'type_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_ext_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2321 "ml/parser.mly" - ( Ldot(_1, _3) ) -# 11980 "ml/parser.ml" - : 'type_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2324 "ml/parser.mly" - ( Lident _1 ) -# 11987 "ml/parser.ml" - : 'mod_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2325 "ml/parser.mly" - ( Ldot(_1, _3) ) -# 11995 "ml/parser.ml" - : 'mod_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2328 "ml/parser.mly" - ( Lident _1 ) -# 12002 "ml/parser.ml" - : 'mod_ext_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_ext_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2329 "ml/parser.mly" - ( Ldot(_1, _3) ) -# 12010 "ml/parser.ml" - : 'mod_ext_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 3 : 'mod_ext_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'mod_ext_longident) in - Obj.repr( -# 2330 "ml/parser.mly" - ( lapply _1 _3 ) -# 12018 "ml/parser.ml" - : 'mod_ext_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 2333 "ml/parser.mly" - ( Lident _1 ) -# 12025 "ml/parser.ml" - : 'mty_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_ext_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 2334 "ml/parser.mly" - ( Ldot(_1, _3) ) -# 12033 "ml/parser.ml" - : 'mty_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2337 "ml/parser.mly" - ( Lident _1 ) -# 12040 "ml/parser.ml" - : 'clty_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_ext_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2338 "ml/parser.mly" - ( Ldot(_1, _3) ) -# 12048 "ml/parser.ml" - : 'clty_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2341 "ml/parser.mly" - ( Lident _1 ) -# 12055 "ml/parser.ml" - : 'class_longident)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mod_longident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2342 "ml/parser.mly" - ( Ldot(_1, _3) ) -# 12063 "ml/parser.ml" - : 'class_longident)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 2348 "ml/parser.mly" - ( Ptop_dir(_2, Pdir_none) ) -# 12070 "ml/parser.ml" - : 'toplevel_directive)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : string * string option) in - Obj.repr( -# 2349 "ml/parser.mly" - ( Ptop_dir(_2, Pdir_string (fst _3)) ) -# 12078 "ml/parser.ml" - : 'toplevel_directive)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : string * char option) in - Obj.repr( -# 2350 "ml/parser.mly" - ( let (n, m) = _3 in - Ptop_dir(_2, Pdir_int (n ,m)) ) -# 12087 "ml/parser.ml" - : 'toplevel_directive)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'val_longident) in - Obj.repr( -# 2352 "ml/parser.mly" - ( Ptop_dir(_2, Pdir_ident _3) ) -# 12095 "ml/parser.ml" - : 'toplevel_directive)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ident) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'mod_longident) in - Obj.repr( -# 2353 "ml/parser.mly" - ( Ptop_dir(_2, Pdir_ident _3) ) -# 12103 "ml/parser.ml" - : 'toplevel_directive)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ident) in - Obj.repr( -# 2354 "ml/parser.mly" - ( Ptop_dir(_2, Pdir_bool false) ) -# 12110 "ml/parser.ml" - : 'toplevel_directive)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ident) in - Obj.repr( -# 2355 "ml/parser.mly" - ( Ptop_dir(_2, Pdir_bool true) ) -# 12117 "ml/parser.ml" - : 'toplevel_directive)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in - Obj.repr( -# 2361 "ml/parser.mly" - ( _2 ) -# 12124 "ml/parser.ml" - : 'name_tag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2364 "ml/parser.mly" - ( Nonrecursive ) -# 12130 "ml/parser.ml" - : 'rec_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2365 "ml/parser.mly" - ( Recursive ) -# 12136 "ml/parser.ml" - : 'rec_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2368 "ml/parser.mly" - ( Recursive ) -# 12142 "ml/parser.ml" - : 'nonrec_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2369 "ml/parser.mly" - ( Nonrecursive ) -# 12148 "ml/parser.ml" - : 'nonrec_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2372 "ml/parser.mly" - ( Upto ) -# 12154 "ml/parser.ml" - : 'direction_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2373 "ml/parser.mly" - ( Downto ) -# 12160 "ml/parser.ml" - : 'direction_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2376 "ml/parser.mly" - ( Public ) -# 12166 "ml/parser.ml" - : 'private_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2377 "ml/parser.mly" - ( Private ) -# 12172 "ml/parser.ml" - : 'private_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2380 "ml/parser.mly" - ( Immutable ) -# 12178 "ml/parser.ml" - : 'mutable_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2381 "ml/parser.mly" - ( Mutable ) -# 12184 "ml/parser.ml" - : 'mutable_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2384 "ml/parser.mly" - ( Concrete ) -# 12190 "ml/parser.ml" - : 'virtual_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2385 "ml/parser.mly" - ( Virtual ) -# 12196 "ml/parser.ml" - : 'virtual_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2388 "ml/parser.mly" - ( Public, Concrete ) -# 12202 "ml/parser.ml" - : 'private_virtual_flags)) -; (fun __caml_parser_env -> - Obj.repr( -# 2389 "ml/parser.mly" - ( Private, Concrete ) -# 12208 "ml/parser.ml" - : 'private_virtual_flags)) -; (fun __caml_parser_env -> - Obj.repr( -# 2390 "ml/parser.mly" - ( Public, Virtual ) -# 12214 "ml/parser.ml" - : 'private_virtual_flags)) -; (fun __caml_parser_env -> - Obj.repr( -# 2391 "ml/parser.mly" - ( Private, Virtual ) -# 12220 "ml/parser.ml" - : 'private_virtual_flags)) -; (fun __caml_parser_env -> - Obj.repr( -# 2392 "ml/parser.mly" - ( Private, Virtual ) -# 12226 "ml/parser.ml" - : 'private_virtual_flags)) -; (fun __caml_parser_env -> - Obj.repr( -# 2395 "ml/parser.mly" - ( Fresh ) -# 12232 "ml/parser.ml" - : 'override_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2396 "ml/parser.mly" - ( Override ) -# 12238 "ml/parser.ml" - : 'override_flag)) -; (fun __caml_parser_env -> - Obj.repr( -# 2399 "ml/parser.mly" - ( () ) -# 12244 "ml/parser.ml" - : 'opt_bar)) -; (fun __caml_parser_env -> - Obj.repr( -# 2400 "ml/parser.mly" - ( () ) -# 12250 "ml/parser.ml" - : 'opt_bar)) -; (fun __caml_parser_env -> - Obj.repr( -# 2403 "ml/parser.mly" - ( () ) -# 12256 "ml/parser.ml" - : 'opt_semi)) -; (fun __caml_parser_env -> - Obj.repr( -# 2404 "ml/parser.mly" - ( () ) -# 12262 "ml/parser.ml" - : 'opt_semi)) -; (fun __caml_parser_env -> - Obj.repr( -# 2407 "ml/parser.mly" - ( "-" ) -# 12268 "ml/parser.ml" - : 'subtractive)) -; (fun __caml_parser_env -> - Obj.repr( -# 2408 "ml/parser.mly" - ( "-." ) -# 12274 "ml/parser.ml" - : 'subtractive)) -; (fun __caml_parser_env -> - Obj.repr( -# 2411 "ml/parser.mly" - ( "+" ) -# 12280 "ml/parser.ml" - : 'additive)) -; (fun __caml_parser_env -> - Obj.repr( -# 2412 "ml/parser.mly" - ( "+." ) -# 12286 "ml/parser.ml" - : 'additive)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2418 "ml/parser.mly" - ( _1 ) -# 12293 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in - Obj.repr( -# 2419 "ml/parser.mly" - ( _1 ) -# 12300 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2420 "ml/parser.mly" - ( "and" ) -# 12306 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2421 "ml/parser.mly" - ( "as" ) -# 12312 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2422 "ml/parser.mly" - ( "assert" ) -# 12318 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2423 "ml/parser.mly" - ( "begin" ) -# 12324 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2424 "ml/parser.mly" - ( "class" ) -# 12330 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2425 "ml/parser.mly" - ( "constraint" ) -# 12336 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2426 "ml/parser.mly" - ( "do" ) -# 12342 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2427 "ml/parser.mly" - ( "done" ) -# 12348 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2428 "ml/parser.mly" - ( "downto" ) -# 12354 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2429 "ml/parser.mly" - ( "else" ) -# 12360 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2430 "ml/parser.mly" - ( "end" ) -# 12366 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2431 "ml/parser.mly" - ( "exception" ) -# 12372 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2432 "ml/parser.mly" - ( "external" ) -# 12378 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2433 "ml/parser.mly" - ( "false" ) -# 12384 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2434 "ml/parser.mly" - ( "for" ) -# 12390 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2435 "ml/parser.mly" - ( "fun" ) -# 12396 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2436 "ml/parser.mly" - ( "function" ) -# 12402 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2437 "ml/parser.mly" - ( "functor" ) -# 12408 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2438 "ml/parser.mly" - ( "if" ) -# 12414 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2439 "ml/parser.mly" - ( "in" ) -# 12420 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2440 "ml/parser.mly" - ( "include" ) -# 12426 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2441 "ml/parser.mly" - ( "inherit" ) -# 12432 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2442 "ml/parser.mly" - ( "initializer" ) -# 12438 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2443 "ml/parser.mly" - ( "lazy" ) -# 12444 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2444 "ml/parser.mly" - ( "let" ) -# 12450 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2445 "ml/parser.mly" - ( "match" ) -# 12456 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2446 "ml/parser.mly" - ( "method" ) -# 12462 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2447 "ml/parser.mly" - ( "module" ) -# 12468 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2448 "ml/parser.mly" - ( "mutable" ) -# 12474 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2449 "ml/parser.mly" - ( "new" ) -# 12480 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2450 "ml/parser.mly" - ( "nonrec" ) -# 12486 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2451 "ml/parser.mly" - ( "object" ) -# 12492 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2452 "ml/parser.mly" - ( "of" ) -# 12498 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2453 "ml/parser.mly" - ( "open" ) -# 12504 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2454 "ml/parser.mly" - ( "or" ) -# 12510 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2455 "ml/parser.mly" - ( "private" ) -# 12516 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2456 "ml/parser.mly" - ( "rec" ) -# 12522 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2457 "ml/parser.mly" - ( "sig" ) -# 12528 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2458 "ml/parser.mly" - ( "struct" ) -# 12534 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2459 "ml/parser.mly" - ( "then" ) -# 12540 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2460 "ml/parser.mly" - ( "to" ) -# 12546 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2461 "ml/parser.mly" - ( "true" ) -# 12552 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2462 "ml/parser.mly" - ( "try" ) -# 12558 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2463 "ml/parser.mly" - ( "type" ) -# 12564 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2464 "ml/parser.mly" - ( "val" ) -# 12570 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2465 "ml/parser.mly" - ( "virtual" ) -# 12576 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2466 "ml/parser.mly" - ( "when" ) -# 12582 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2467 "ml/parser.mly" - ( "while" ) -# 12588 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - Obj.repr( -# 2468 "ml/parser.mly" - ( "with" ) -# 12594 "ml/parser.ml" - : 'single_attr_id)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'single_attr_id) in - Obj.repr( -# 2473 "ml/parser.mly" - ( mkloc _1 (symbol_rloc()) ) -# 12601 "ml/parser.ml" - : 'attr_id)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 2 : 'single_attr_id) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'attr_id) in - Obj.repr( -# 2474 "ml/parser.mly" - ( mkloc (_1 ^ "." ^ _3.txt) (symbol_rloc())) -# 12609 "ml/parser.ml" - : 'attr_id)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attr_id) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'payload) in - Obj.repr( -# 2477 "ml/parser.mly" - ( (_2, _3) ) -# 12617 "ml/parser.ml" - : 'attribute)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attr_id) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'payload) in - Obj.repr( -# 2480 "ml/parser.mly" - ( (_2, _3) ) -# 12625 "ml/parser.ml" - : 'post_item_attribute)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attr_id) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'payload) in - Obj.repr( -# 2483 "ml/parser.mly" - ( (_2, _3) ) -# 12633 "ml/parser.ml" - : 'floating_attribute)) -; (fun __caml_parser_env -> - Obj.repr( -# 2486 "ml/parser.mly" - ( [] ) -# 12639 "ml/parser.ml" - : 'post_item_attributes)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'post_item_attribute) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'post_item_attributes) in - Obj.repr( -# 2487 "ml/parser.mly" - ( _1 :: _2 ) -# 12647 "ml/parser.ml" - : 'post_item_attributes)) -; (fun __caml_parser_env -> - Obj.repr( -# 2490 "ml/parser.mly" - ( [] ) -# 12653 "ml/parser.ml" - : 'attributes)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'attribute) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2491 "ml/parser.mly" - ( _1 :: _2 ) -# 12661 "ml/parser.ml" - : 'attributes)) -; (fun __caml_parser_env -> - Obj.repr( -# 2494 "ml/parser.mly" - ( None, [] ) -# 12667 "ml/parser.ml" - : 'ext_attributes)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 1 : 'attribute) in - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2495 "ml/parser.mly" - ( None, _1 :: _2 ) -# 12675 "ml/parser.ml" - : 'ext_attributes)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 1 : 'attr_id) in - let _3 = (Parsing.peek_val __caml_parser_env 0 : 'attributes) in - Obj.repr( -# 2496 "ml/parser.mly" - ( Some _2, _3 ) -# 12683 "ml/parser.ml" - : 'ext_attributes)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attr_id) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'payload) in - Obj.repr( -# 2499 "ml/parser.mly" - ( (_2, _3) ) -# 12691 "ml/parser.ml" - : 'extension)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'attr_id) in - let _3 = (Parsing.peek_val __caml_parser_env 1 : 'payload) in - Obj.repr( -# 2502 "ml/parser.mly" - ( (_2, _3) ) -# 12699 "ml/parser.ml" - : 'item_extension)) -; (fun __caml_parser_env -> - let _1 = (Parsing.peek_val __caml_parser_env 0 : 'structure) in - Obj.repr( -# 2505 "ml/parser.mly" - ( PStr _1 ) -# 12706 "ml/parser.ml" - : 'payload)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'signature) in - Obj.repr( -# 2506 "ml/parser.mly" - ( PSig _2 ) -# 12713 "ml/parser.ml" - : 'payload)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'core_type) in - Obj.repr( -# 2507 "ml/parser.mly" - ( PTyp _2 ) -# 12720 "ml/parser.ml" - : 'payload)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in - Obj.repr( -# 2508 "ml/parser.mly" - ( PPat (_2, None) ) -# 12727 "ml/parser.ml" - : 'payload)) -; (fun __caml_parser_env -> - let _2 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in - let _4 = (Parsing.peek_val __caml_parser_env 0 : 'seq_expr) in - Obj.repr( -# 2509 "ml/parser.mly" - ( PPat (_2, Some _4) ) -# 12735 "ml/parser.ml" - : 'payload)) -(* Entry implementation *) -; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) -(* Entry interface *) -; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) -(* Entry toplevel_phrase *) -; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) -(* Entry use_file *) -; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) -(* Entry parse_core_type *) -; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) -(* Entry parse_expression *) -; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) -(* Entry parse_pattern *) -; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) -|] -let yytables = - { Parsing.actions=yyact; - Parsing.transl_const=yytransl_const; - Parsing.transl_block=yytransl_block; - Parsing.lhs=yylhs; - Parsing.len=yylen; - Parsing.defred=yydefred; - Parsing.dgoto=yydgoto; - Parsing.sindex=yysindex; - Parsing.rindex=yyrindex; - Parsing.gindex=yygindex; - Parsing.tablesize=yytablesize; - Parsing.table=yytable; - Parsing.check=yycheck; - Parsing.error_function=parse_error; - Parsing.names_const=yynames_const; - Parsing.names_block=yynames_block } -let implementation (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = - (Parsing.yyparse yytables 1 lexfun lexbuf : Parsetree.structure) -let interface (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = - (Parsing.yyparse yytables 2 lexfun lexbuf : Parsetree.signature) -let toplevel_phrase (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = - (Parsing.yyparse yytables 3 lexfun lexbuf : Parsetree.toplevel_phrase) -let use_file (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = - (Parsing.yyparse yytables 4 lexfun lexbuf : Parsetree.toplevel_phrase list) -let parse_core_type (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = - (Parsing.yyparse yytables 5 lexfun lexbuf : Parsetree.core_type) -let parse_expression (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = - (Parsing.yyparse yytables 6 lexfun lexbuf : Parsetree.expression) -let parse_pattern (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = - (Parsing.yyparse yytables 7 lexfun lexbuf : Parsetree.pattern) -;; diff --git a/src/compiler-libs-406/parser.mli b/src/compiler-libs-406/parser.mli deleted file mode 100644 index 444edf03..00000000 --- a/src/compiler-libs-406/parser.mli +++ /dev/null @@ -1,135 +0,0 @@ -type token = - | AMPERAMPER - | AMPERSAND - | AND - | AS - | ASSERT - | BACKQUOTE - | BANG - | BAR - | BARBAR - | BARRBRACKET - | BEGIN - | CHAR of (char) - | CLASS - | COLON - | COLONCOLON - | COLONEQUAL - | COLONGREATER - | COMMA - | CONSTRAINT - | DO - | DONE - | DOT - | DOTDOT - | DOWNTO - | ELSE - | END - | EOF - | EQUAL - | EXCEPTION - | EXTERNAL - | FALSE - | FLOAT of (string * char option) - | FOR - | FUN - | FUNCTION - | FUNCTOR - | GREATER - | GREATERRBRACE - | GREATERRBRACKET - | IF - | IN - | INCLUDE - | INFIXOP0 of (string) - | INFIXOP1 of (string) - | INFIXOP2 of (string) - | INFIXOP3 of (string) - | INFIXOP4 of (string) - | DOTOP of (string) - | INHERIT - | INITIALIZER - | INT of (string * char option) - | LABEL of (string) - | LAZY - | LBRACE - | LBRACELESS - | LBRACKET - | LBRACKETBAR - | LBRACKETLESS - | LBRACKETGREATER - | LBRACKETPERCENT - | LBRACKETPERCENTPERCENT - | LESS - | LESSMINUS - | LET - | LIDENT of (string) - | LPAREN - | LBRACKETAT - | LBRACKETATAT - | LBRACKETATATAT - | MATCH - | METHOD - | MINUS - | MINUSDOT - | MINUSGREATER - | MODULE - | MUTABLE - | NEW - | NONREC - | OBJECT - | OF - | OPEN - | OPTLABEL of (string) - | OR - | PERCENT - | PLUS - | PLUSDOT - | PLUSEQ - | PREFIXOP of (string) - | PRIVATE - | QUESTION - | QUOTE - | RBRACE - | RBRACKET - | REC - | RPAREN - | SEMI - | SEMISEMI - | HASH - | HASHOP of (string) - | SIG - | STAR - | STRING of (string * string option) - | STRUCT - | THEN - | TILDE - | TO - | TRUE - | TRY - | TYPE - | UIDENT of (string) - | UNDERSCORE - | VAL - | VIRTUAL - | WHEN - | WHILE - | WITH - | COMMENT of (string * Location.t) - | DOCSTRING of (Docstrings.docstring) - | EOL - -val implementation : - (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Parsetree.structure -val interface : - (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Parsetree.signature -val toplevel_phrase : - (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Parsetree.toplevel_phrase -val use_file : - (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Parsetree.toplevel_phrase list -val parse_core_type : - (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Parsetree.core_type -val parse_expression : - (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Parsetree.expression -val parse_pattern : - (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Parsetree.pattern diff --git a/src/compiler-libs-406/parsetree.mli b/src/compiler-libs-406/parsetree.mli deleted file mode 100644 index 9b275c4c..00000000 --- a/src/compiler-libs-406/parsetree.mli +++ /dev/null @@ -1,875 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Abstract syntax tree produced by parsing *) - -open Asttypes - -type constant = - Pconst_integer of string * char option - (* 3 3l 3L 3n - - Suffixes [g-z][G-Z] are accepted by the parser. - Suffixes except 'l', 'L' and 'n' are rejected by the typechecker - *) - | Pconst_char of char - (* 'c' *) - | Pconst_string of string * string option - (* "constant" - {delim|other constant|delim} - *) - | Pconst_float of string * char option - (* 3.4 2e5 1.4e-4 - - Suffixes [g-z][G-Z] are accepted by the parser. - Suffixes are rejected by the typechecker. - *) - -(** {1 Extension points} *) - -type attribute = string loc * payload - (* [@id ARG] - [@@id ARG] - - Metadata containers passed around within the AST. - The compiler ignores unknown attributes. - *) - -and extension = string loc * payload - (* [%id ARG] - [%%id ARG] - - Sub-language placeholder -- rejected by the typechecker. - *) - -and attributes = attribute list - -and payload = - | PStr of structure - | PSig of signature (* : SIG *) - | PTyp of core_type (* : T *) - | PPat of pattern * expression option (* ? P or ? P when E *) - -(** {1 Core language} *) - -(* Type expressions *) - -and core_type = - { - ptyp_desc: core_type_desc; - ptyp_loc: Location.t; - ptyp_attributes: attributes; (* ... [@id1] [@id2] *) - } - -and core_type_desc = - | Ptyp_any - (* _ *) - | Ptyp_var of string - (* 'a *) - | Ptyp_arrow of arg_label * core_type * core_type - (* T1 -> T2 Simple - ~l:T1 -> T2 Labelled - ?l:T1 -> T2 Optional - *) - | Ptyp_tuple of core_type list - (* T1 * ... * Tn - - Invariant: n >= 2 - *) - | Ptyp_constr of Longident.t loc * core_type list - (* tconstr - T tconstr - (T1, ..., Tn) tconstr - *) - | Ptyp_object of object_field list * closed_flag - (* < l1:T1; ...; ln:Tn > (flag = Closed) - < l1:T1; ...; ln:Tn; .. > (flag = Open) - *) - | Ptyp_class of Longident.t loc * core_type list - (* #tconstr - T #tconstr - (T1, ..., Tn) #tconstr - *) - | Ptyp_alias of core_type * string - (* T as 'a *) - | Ptyp_variant of row_field list * closed_flag * label list option - (* [ `A|`B ] (flag = Closed; labels = None) - [> `A|`B ] (flag = Open; labels = None) - [< `A|`B ] (flag = Closed; labels = Some []) - [< `A|`B > `X `Y ](flag = Closed; labels = Some ["X";"Y"]) - *) - | Ptyp_poly of string loc list * core_type - (* 'a1 ... 'an. T - - Can only appear in the following context: - - - As the core_type of a Ppat_constraint node corresponding - to a constraint on a let-binding: let x : 'a1 ... 'an. T - = e ... - - - Under Cfk_virtual for methods (not values). - - - As the core_type of a Pctf_method node. - - - As the core_type of a Pexp_poly node. - - - As the pld_type field of a label_declaration. - - - As a core_type of a Ptyp_object node. - *) - - | Ptyp_package of package_type - (* (module S) *) - | Ptyp_extension of extension - (* [%id] *) - -and package_type = Longident.t loc * (Longident.t loc * core_type) list - (* - (module S) - (module S with type t1 = T1 and ... and tn = Tn) - *) - -and row_field = - | Rtag of label loc * attributes * bool * core_type list - (* [`A] ( true, [] ) - [`A of T] ( false, [T] ) - [`A of T1 & .. & Tn] ( false, [T1;...Tn] ) - [`A of & T1 & .. & Tn] ( true, [T1;...Tn] ) - - - The 2nd field is true if the tag contains a - constant (empty) constructor. - - '&' occurs when several types are used for the same constructor - (see 4.2 in the manual) - - - TODO: switch to a record representation, and keep location - *) - | Rinherit of core_type - (* [ T ] *) - -and object_field = - | Otag of label loc * attributes * core_type - | Oinherit of core_type - -(* Patterns *) - -and pattern = - { - ppat_desc: pattern_desc; - ppat_loc: Location.t; - ppat_attributes: attributes; (* ... [@id1] [@id2] *) - } - -and pattern_desc = - | Ppat_any - (* _ *) - | Ppat_var of string loc - (* x *) - | Ppat_alias of pattern * string loc - (* P as 'a *) - | Ppat_constant of constant - (* 1, 'a', "true", 1.0, 1l, 1L, 1n *) - | Ppat_interval of constant * constant - (* 'a'..'z' - - Other forms of interval are recognized by the parser - but rejected by the type-checker. *) - | Ppat_tuple of pattern list - (* (P1, ..., Pn) - - Invariant: n >= 2 - *) - | Ppat_construct of Longident.t loc * pattern option - (* C None - C P Some P - C (P1, ..., Pn) Some (Ppat_tuple [P1; ...; Pn]) - *) - | Ppat_variant of label * pattern option - (* `A (None) - `A P (Some P) - *) - | Ppat_record of (Longident.t loc * pattern) list * closed_flag - (* { l1=P1; ...; ln=Pn } (flag = Closed) - { l1=P1; ...; ln=Pn; _} (flag = Open) - - Invariant: n > 0 - *) - | Ppat_array of pattern list - (* [| P1; ...; Pn |] *) - | Ppat_or of pattern * pattern - (* P1 | P2 *) - | Ppat_constraint of pattern * core_type - (* (P : T) *) - | Ppat_type of Longident.t loc - (* #tconst *) - | Ppat_lazy of pattern - (* lazy P *) - | Ppat_unpack of string loc - (* (module P) - Note: (module P : S) is represented as - Ppat_constraint(Ppat_unpack, Ptyp_package) - *) - | Ppat_exception of pattern - (* exception P *) - | Ppat_extension of extension - (* [%id] *) - | Ppat_open of Longident.t loc * pattern - (* M.(P) *) - -(* Value expressions *) - -and expression = - { - pexp_desc: expression_desc; - pexp_loc: Location.t; - pexp_attributes: attributes; (* ... [@id1] [@id2] *) - } - -and expression_desc = - | Pexp_ident of Longident.t loc - (* x - M.x - *) - | Pexp_constant of constant - (* 1, 'a', "true", 1.0, 1l, 1L, 1n *) - | Pexp_let of rec_flag * value_binding list * expression - (* let P1 = E1 and ... and Pn = EN in E (flag = Nonrecursive) - let rec P1 = E1 and ... and Pn = EN in E (flag = Recursive) - *) - | Pexp_function of case list - (* function P1 -> E1 | ... | Pn -> En *) - | Pexp_fun of arg_label * expression option * pattern * expression - (* fun P -> E1 (Simple, None) - fun ~l:P -> E1 (Labelled l, None) - fun ?l:P -> E1 (Optional l, None) - fun ?l:(P = E0) -> E1 (Optional l, Some E0) - - Notes: - - If E0 is provided, only Optional is allowed. - - "fun P1 P2 .. Pn -> E1" is represented as nested Pexp_fun. - - "let f P = E" is represented using Pexp_fun. - *) - | Pexp_apply of expression * (arg_label * expression) list - (* E0 ~l1:E1 ... ~ln:En - li can be empty (non labeled argument) or start with '?' - (optional argument). - - Invariant: n > 0 - *) - | Pexp_match of expression * case list - (* match E0 with P1 -> E1 | ... | Pn -> En *) - | Pexp_try of expression * case list - (* try E0 with P1 -> E1 | ... | Pn -> En *) - | Pexp_tuple of expression list - (* (E1, ..., En) - - Invariant: n >= 2 - *) - | Pexp_construct of Longident.t loc * expression option - (* C None - C E Some E - C (E1, ..., En) Some (Pexp_tuple[E1;...;En]) - *) - | Pexp_variant of label * expression option - (* `A (None) - `A E (Some E) - *) - | Pexp_record of (Longident.t loc * expression) list * expression option - (* { l1=P1; ...; ln=Pn } (None) - { E0 with l1=P1; ...; ln=Pn } (Some E0) - - Invariant: n > 0 - *) - | Pexp_field of expression * Longident.t loc - (* E.l *) - | Pexp_setfield of expression * Longident.t loc * expression - (* E1.l <- E2 *) - | Pexp_array of expression list - (* [| E1; ...; En |] *) - | Pexp_ifthenelse of expression * expression * expression option - (* if E1 then E2 else E3 *) - | Pexp_sequence of expression * expression - (* E1; E2 *) - | Pexp_while of expression * expression - (* while E1 do E2 done *) - | Pexp_for of - pattern * expression * expression * direction_flag * expression - (* for i = E1 to E2 do E3 done (flag = Upto) - for i = E1 downto E2 do E3 done (flag = Downto) - *) - | Pexp_constraint of expression * core_type - (* (E : T) *) - | Pexp_coerce of expression * core_type option * core_type - (* (E :> T) (None, T) - (E : T0 :> T) (Some T0, T) - *) - | Pexp_send of expression * label loc - (* E # m *) - | Pexp_new of Longident.t loc - (* new M.c *) - | Pexp_setinstvar of label loc * expression - (* x <- 2 *) - | Pexp_override of (label loc * expression) list - (* {< x1 = E1; ...; Xn = En >} *) - | Pexp_letmodule of string loc * module_expr * expression - (* let module M = ME in E *) - | Pexp_letexception of extension_constructor * expression - (* let exception C in E *) - | Pexp_assert of expression - (* assert E - Note: "assert false" is treated in a special way by the - type-checker. *) - | Pexp_lazy of expression - (* lazy E *) - | Pexp_poly of expression * core_type option - (* Used for method bodies. - - Can only be used as the expression under Cfk_concrete - for methods (not values). *) - | Pexp_object of class_structure - (* object ... end *) - | Pexp_newtype of string loc * expression - (* fun (type t) -> E *) - | Pexp_pack of module_expr - (* (module ME) - - (module ME : S) is represented as - Pexp_constraint(Pexp_pack, Ptyp_package S) *) - | Pexp_open of override_flag * Longident.t loc * expression - (* M.(E) - let open M in E - let! open M in E *) - | Pexp_extension of extension - (* [%id] *) - | Pexp_unreachable - (* . *) - -and case = (* (P -> E) or (P when E0 -> E) *) - { - pc_lhs: pattern; - pc_guard: expression option; - pc_rhs: expression; - } - -(* Value descriptions *) - -and value_description = - { - pval_name: string loc; - pval_type: core_type; - pval_prim: string list; - pval_attributes: attributes; (* ... [@@id1] [@@id2] *) - pval_loc: Location.t; - } - -(* - val x: T (prim = []) - external x: T = "s1" ... "sn" (prim = ["s1";..."sn"]) -*) - -(* Type declarations *) - -and type_declaration = - { - ptype_name: string loc; - ptype_params: (core_type * variance) list; - (* ('a1,...'an) t; None represents _*) - ptype_cstrs: (core_type * core_type * Location.t) list; - (* ... constraint T1=T1' ... constraint Tn=Tn' *) - ptype_kind: type_kind; - ptype_private: private_flag; (* = private ... *) - ptype_manifest: core_type option; (* = T *) - ptype_attributes: attributes; (* ... [@@id1] [@@id2] *) - ptype_loc: Location.t; - } - -(* - type t (abstract, no manifest) - type t = T0 (abstract, manifest=T0) - type t = C of T | ... (variant, no manifest) - type t = T0 = C of T | ... (variant, manifest=T0) - type t = {l: T; ...} (record, no manifest) - type t = T0 = {l : T; ...} (record, manifest=T0) - type t = .. (open, no manifest) -*) - -and type_kind = - | Ptype_abstract - | Ptype_variant of constructor_declaration list - (* Invariant: non-empty list *) - | Ptype_record of label_declaration list - (* Invariant: non-empty list *) - | Ptype_open - -and label_declaration = - { - pld_name: string loc; - pld_mutable: mutable_flag; - pld_type: core_type; - pld_loc: Location.t; - pld_attributes: attributes; (* l : T [@id1] [@id2] *) - } - -(* { ...; l: T; ... } (mutable=Immutable) - { ...; mutable l: T; ... } (mutable=Mutable) - - Note: T can be a Ptyp_poly. -*) - -and constructor_declaration = - { - pcd_name: string loc; - pcd_args: constructor_arguments; - pcd_res: core_type option; - pcd_loc: Location.t; - pcd_attributes: attributes; (* C of ... [@id1] [@id2] *) - } - -and constructor_arguments = - | Pcstr_tuple of core_type list - | Pcstr_record of label_declaration list - -(* - | C of T1 * ... * Tn (res = None, args = Pcstr_tuple []) - | C: T0 (res = Some T0, args = []) - | C: T1 * ... * Tn -> T0 (res = Some T0, args = Pcstr_tuple) - | C of {...} (res = None, args = Pcstr_record) - | C: {...} -> T0 (res = Some T0, args = Pcstr_record) - | C of {...} as t (res = None, args = Pcstr_record) -*) - -and type_extension = - { - ptyext_path: Longident.t loc; - ptyext_params: (core_type * variance) list; - ptyext_constructors: extension_constructor list; - ptyext_private: private_flag; - ptyext_attributes: attributes; (* ... [@@id1] [@@id2] *) - } -(* - type t += ... -*) - -and extension_constructor = - { - pext_name: string loc; - pext_kind : extension_constructor_kind; - pext_loc : Location.t; - pext_attributes: attributes; (* C of ... [@id1] [@id2] *) - } - -and extension_constructor_kind = - Pext_decl of constructor_arguments * core_type option - (* - | C of T1 * ... * Tn ([T1; ...; Tn], None) - | C: T0 ([], Some T0) - | C: T1 * ... * Tn -> T0 ([T1; ...; Tn], Some T0) - *) - | Pext_rebind of Longident.t loc - (* - | C = D - *) - -(** {1 Class language} *) - -(* Type expressions for the class language *) - -and class_type = - { - pcty_desc: class_type_desc; - pcty_loc: Location.t; - pcty_attributes: attributes; (* ... [@id1] [@id2] *) - } - -and class_type_desc = - | Pcty_constr of Longident.t loc * core_type list - (* c - ['a1, ..., 'an] c *) - | Pcty_signature of class_signature - (* object ... end *) - | Pcty_arrow of arg_label * core_type * class_type - (* T -> CT Simple - ~l:T -> CT Labelled l - ?l:T -> CT Optional l - *) - | Pcty_extension of extension - (* [%id] *) - | Pcty_open of override_flag * Longident.t loc * class_type - (* let open M in CT *) - -and class_signature = - { - pcsig_self: core_type; - pcsig_fields: class_type_field list; - } -(* object('selfpat) ... end - object ... end (self = Ptyp_any) - *) - -and class_type_field = - { - pctf_desc: class_type_field_desc; - pctf_loc: Location.t; - pctf_attributes: attributes; (* ... [@@id1] [@@id2] *) - } - -and class_type_field_desc = - | Pctf_inherit of class_type - (* inherit CT *) - | Pctf_val of (label loc * mutable_flag * virtual_flag * core_type) - (* val x: T *) - | Pctf_method of (label loc * private_flag * virtual_flag * core_type) - (* method x: T - - Note: T can be a Ptyp_poly. - *) - | Pctf_constraint of (core_type * core_type) - (* constraint T1 = T2 *) - | Pctf_attribute of attribute - (* [@@@id] *) - | Pctf_extension of extension - (* [%%id] *) - -and 'a class_infos = - { - pci_virt: virtual_flag; - pci_params: (core_type * variance) list; - pci_name: string loc; - pci_expr: 'a; - pci_loc: Location.t; - pci_attributes: attributes; (* ... [@@id1] [@@id2] *) - } -(* class c = ... - class ['a1,...,'an] c = ... - class virtual c = ... - - Also used for "class type" declaration. -*) - -and class_description = class_type class_infos - -and class_type_declaration = class_type class_infos - -(* Value expressions for the class language *) - -and class_expr = - { - pcl_desc: class_expr_desc; - pcl_loc: Location.t; - pcl_attributes: attributes; (* ... [@id1] [@id2] *) - } - -and class_expr_desc = - | Pcl_constr of Longident.t loc * core_type list - (* c - ['a1, ..., 'an] c *) - | Pcl_structure of class_structure - (* object ... end *) - | Pcl_fun of arg_label * expression option * pattern * class_expr - (* fun P -> CE (Simple, None) - fun ~l:P -> CE (Labelled l, None) - fun ?l:P -> CE (Optional l, None) - fun ?l:(P = E0) -> CE (Optional l, Some E0) - *) - | Pcl_apply of class_expr * (arg_label * expression) list - (* CE ~l1:E1 ... ~ln:En - li can be empty (non labeled argument) or start with '?' - (optional argument). - - Invariant: n > 0 - *) - | Pcl_let of rec_flag * value_binding list * class_expr - (* let P1 = E1 and ... and Pn = EN in CE (flag = Nonrecursive) - let rec P1 = E1 and ... and Pn = EN in CE (flag = Recursive) - *) - | Pcl_constraint of class_expr * class_type - (* (CE : CT) *) - | Pcl_extension of extension - (* [%id] *) - | Pcl_open of override_flag * Longident.t loc * class_expr - (* let open M in CE *) - - -and class_structure = - { - pcstr_self: pattern; - pcstr_fields: class_field list; - } -(* object(selfpat) ... end - object ... end (self = Ppat_any) - *) - -and class_field = - { - pcf_desc: class_field_desc; - pcf_loc: Location.t; - pcf_attributes: attributes; (* ... [@@id1] [@@id2] *) - } - -and class_field_desc = - | Pcf_inherit of unit - (* inherit CE - inherit CE as x - inherit! CE - inherit! CE as x - *) - | Pcf_val of (label loc * mutable_flag * class_field_kind) - (* val x = E - val virtual x: T - *) - | Pcf_method of (label loc * private_flag * class_field_kind) - (* method x = E (E can be a Pexp_poly) - method virtual x: T (T can be a Ptyp_poly) - *) - | Pcf_constraint of (core_type * core_type) - (* constraint T1 = T2 *) - | Pcf_initializer of expression - (* initializer E *) - | Pcf_attribute of attribute - (* [@@@id] *) - | Pcf_extension of extension - (* [%%id] *) - -and class_field_kind = - | Cfk_virtual of core_type - | Cfk_concrete of override_flag * expression - - - -(** {1 Module language} *) - -(* Type expressions for the module language *) - -and module_type = - { - pmty_desc: module_type_desc; - pmty_loc: Location.t; - pmty_attributes: attributes; (* ... [@id1] [@id2] *) - } - -and module_type_desc = - | Pmty_ident of Longident.t loc - (* S *) - | Pmty_signature of signature - (* sig ... end *) - | Pmty_functor of string loc * module_type option * module_type - (* functor(X : MT1) -> MT2 *) - | Pmty_with of module_type * with_constraint list - (* MT with ... *) - | Pmty_typeof of module_expr - (* module type of ME *) - | Pmty_extension of extension - (* [%id] *) - | Pmty_alias of Longident.t loc - (* (module M) *) - -and signature = signature_item list - -and signature_item = - { - psig_desc: signature_item_desc; - psig_loc: Location.t; - } - -and signature_item_desc = - | Psig_value of value_description - (* - val x: T - external x: T = "s1" ... "sn" - *) - | Psig_type of rec_flag * type_declaration list - (* type t1 = ... and ... and tn = ... *) - | Psig_typext of type_extension - (* type t1 += ... *) - | Psig_exception of extension_constructor - (* exception C of T *) - | Psig_module of module_declaration - (* module X : MT *) - | Psig_recmodule of module_declaration list - (* module rec X1 : MT1 and ... and Xn : MTn *) - | Psig_modtype of module_type_declaration - (* module type S = MT - module type S *) - | Psig_open of open_description - (* open X *) - | Psig_include of include_description - (* include MT *) - | Psig_class of class_description list - (* class c1 : ... and ... and cn : ... *) - | Psig_class_type of class_type_declaration list - (* class type ct1 = ... and ... and ctn = ... *) - | Psig_attribute of attribute - (* [@@@id] *) - | Psig_extension of extension * attributes - (* [%%id] *) - -and module_declaration = - { - pmd_name: string loc; - pmd_type: module_type; - pmd_attributes: attributes; (* ... [@@id1] [@@id2] *) - pmd_loc: Location.t; - } -(* S : MT *) - -and module_type_declaration = - { - pmtd_name: string loc; - pmtd_type: module_type option; - pmtd_attributes: attributes; (* ... [@@id1] [@@id2] *) - pmtd_loc: Location.t; - } -(* S = MT - S (abstract module type declaration, pmtd_type = None) -*) - -and open_description = - { - popen_lid: Longident.t loc; - popen_override: override_flag; - popen_loc: Location.t; - popen_attributes: attributes; - } -(* open! X - popen_override = Override (silences the 'used identifier - shadowing' warning) - open X - popen_override = Fresh - *) - -and 'a include_infos = - { - pincl_mod: 'a; - pincl_loc: Location.t; - pincl_attributes: attributes; - } - -and include_description = module_type include_infos -(* include MT *) - -and include_declaration = module_expr include_infos -(* include ME *) - -and with_constraint = - | Pwith_type of Longident.t loc * type_declaration - (* with type X.t = ... - - Note: the last component of the longident must match - the name of the type_declaration. *) - | Pwith_module of Longident.t loc * Longident.t loc - (* with module X.Y = Z *) - | Pwith_typesubst of Longident.t loc * type_declaration - (* with type X.t := ..., same format as [Pwith_type] *) - | Pwith_modsubst of Longident.t loc * Longident.t loc - (* with module X.Y := Z *) - -(* Value expressions for the module language *) - -and module_expr = - { - pmod_desc: module_expr_desc; - pmod_loc: Location.t; - pmod_attributes: attributes; (* ... [@id1] [@id2] *) - } - -and module_expr_desc = - | Pmod_ident of Longident.t loc - (* X *) - | Pmod_structure of structure - (* struct ... end *) - | Pmod_functor of string loc * module_type option * module_expr - (* functor(X : MT1) -> ME *) - | Pmod_apply of module_expr * module_expr - (* ME1(ME2) *) - | Pmod_constraint of module_expr * module_type - (* (ME : MT) *) - | Pmod_unpack of expression - (* (val E) *) - | Pmod_extension of extension - (* [%id] *) - -and structure = structure_item list - -and structure_item = - { - pstr_desc: structure_item_desc; - pstr_loc: Location.t; - } - -and structure_item_desc = - | Pstr_eval of expression * attributes - (* E *) - | Pstr_value of rec_flag * value_binding list - (* let P1 = E1 and ... and Pn = EN (flag = Nonrecursive) - let rec P1 = E1 and ... and Pn = EN (flag = Recursive) - *) - | Pstr_primitive of value_description - (* val x: T - external x: T = "s1" ... "sn" *) - | Pstr_type of rec_flag * type_declaration list - (* type t1 = ... and ... and tn = ... *) - | Pstr_typext of type_extension - (* type t1 += ... *) - | Pstr_exception of extension_constructor - (* exception C of T - exception C = M.X *) - | Pstr_module of module_binding - (* module X = ME *) - | Pstr_recmodule of module_binding list - (* module rec X1 = ME1 and ... and Xn = MEn *) - | Pstr_modtype of module_type_declaration - (* module type S = MT *) - | Pstr_open of open_description - (* open X *) - | Pstr_class of unit - (* Dummy AST node *) - | Pstr_class_type of class_type_declaration list - (* class type ct1 = ... and ... and ctn = ... *) - | Pstr_include of include_declaration - (* include ME *) - | Pstr_attribute of attribute - (* [@@@id] *) - | Pstr_extension of extension * attributes - (* [%%id] *) - -and value_binding = - { - pvb_pat: pattern; - pvb_expr: expression; - pvb_attributes: attributes; - pvb_loc: Location.t; - } - -and module_binding = - { - pmb_name: string loc; - pmb_expr: module_expr; - pmb_attributes: attributes; - pmb_loc: Location.t; - } -(* X = ME *) - -(** {1 Toplevel} *) - -(* Toplevel phrases *) - -type toplevel_phrase = - | Ptop_def of structure - | Ptop_dir of string * directive_argument - (* #use, #load ... *) - -and directive_argument = - | Pdir_none - | Pdir_string of string - | Pdir_int of string * char option - | Pdir_ident of Longident.t - | Pdir_bool of bool diff --git a/src/compiler-libs-406/path.ml b/src/compiler-libs-406/path.ml deleted file mode 100644 index 51893865..00000000 --- a/src/compiler-libs-406/path.ml +++ /dev/null @@ -1,109 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -type t = - Pident of Ident.t - | Pdot of t * string * int - | Papply of t * t - -let nopos = -1 - -let rec same p1 p2 = - match (p1, p2) with - (Pident id1, Pident id2) -> Ident.same id1 id2 - | (Pdot(p1, s1, _pos1), Pdot(p2, s2, _pos2)) -> s1 = s2 && same p1 p2 - | (Papply(fun1, arg1), Papply(fun2, arg2)) -> - same fun1 fun2 && same arg1 arg2 - | (_, _) -> false - -let rec compare p1 p2 = - match (p1, p2) with - (Pident id1, Pident id2) -> Ident.compare id1 id2 - | (Pdot(p1, s1, _pos1), Pdot(p2, s2, _pos2)) -> - let h = compare p1 p2 in - if h <> 0 then h else String.compare s1 s2 - | (Papply(fun1, arg1), Papply(fun2, arg2)) -> - let h = compare fun1 fun2 in - if h <> 0 then h else compare arg1 arg2 - | ((Pident _ | Pdot _), (Pdot _ | Papply _)) -> -1 - | ((Pdot _ | Papply _), (Pident _ | Pdot _)) -> 1 - -let rec isfree id = function - Pident id' -> Ident.same id id' - | Pdot(p, _s, _pos) -> isfree id p - | Papply(p1, p2) -> isfree id p1 || isfree id p2 - -let rec binding_time = function - Pident id -> Ident.binding_time id - | Pdot(p, _s, _pos) -> binding_time p - | Papply(p1, p2) -> Ext_pervasives.max_int (binding_time p1) (binding_time p2) - -let kfalse _ = false - -let rec name ?(paren=kfalse) = function - Pident id -> Ident.name id - | Pdot(p, s, _pos) -> - name ~paren p ^ if paren s then ".( " ^ s ^ " )" else "." ^ s - | Papply(p1, p2) -> name ~paren p1 ^ "(" ^ name ~paren p2 ^ ")" - -let rec head = function - Pident id -> id - | Pdot(p, _s, _pos) -> head p - | Papply _ -> assert false - -let flatten = - let rec flatten acc = function - | Pident id -> `Ok (id, acc) - | Pdot (p, s, _) -> flatten (s :: acc) p - | Papply _ -> `Contains_apply - in - fun t -> flatten [] t - -let heads p = - let rec heads p acc = match p with - | Pident id -> id :: acc - | Pdot (p, _s, _pos) -> heads p acc - | Papply(p1, p2) -> - heads p1 (heads p2 acc) - in heads p [] - -let rec last = function - | Pident id -> Ident.name id - | Pdot(_, s, _) -> s - | Papply(_, p) -> last p - -let is_uident s = - assert (s <> ""); - match s.[0] with - | 'A'..'Z' -> true - | _ -> false - -type typath = - | Regular of t - | Ext of t * string - | LocalExt of Ident.t - | Cstr of t * string - -let constructor_typath = function - | Pident id when is_uident (Ident.name id) -> LocalExt id - | Pdot(ty_path, s, _) when is_uident s -> - if is_uident (last ty_path) then Ext (ty_path, s) - else Cstr (ty_path, s) - | p -> Regular p - -let is_constructor_typath p = - match constructor_typath p with - | Regular _ -> false - | _ -> true diff --git a/src/compiler-libs-406/path.mli b/src/compiler-libs-406/path.mli deleted file mode 100644 index 18491462..00000000 --- a/src/compiler-libs-406/path.mli +++ /dev/null @@ -1,46 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Access paths *) - -type t = - Pident of Ident.t - | Pdot of t * string * int - | Papply of t * t - -val same: t -> t -> bool -val compare: t -> t -> int -val isfree: Ident.t -> t -> bool -val binding_time: t -> int -val flatten : t -> [ `Contains_apply | `Ok of Ident.t * string list ] - -val nopos: int - -val name: ?paren:(string -> bool) -> t -> string - (* [paren] tells whether a path suffix needs parentheses *) -val head: t -> Ident.t - -val heads: t -> Ident.t list - -val last: t -> string - -type typath = - | Regular of t - | Ext of t * string - | LocalExt of Ident.t - | Cstr of t * string - -val constructor_typath: t -> typath -val is_constructor_typath: t -> bool diff --git a/src/compiler-libs-406/predef.ml b/src/compiler-libs-406/predef.ml deleted file mode 100644 index a6e9a2ea..00000000 --- a/src/compiler-libs-406/predef.ml +++ /dev/null @@ -1,277 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Predefined type constructors (with special typing rules in typecore) *) - -open Path -open Types -open Btype - -let builtin_idents = ref [] - -let wrap create s = - let id = create s in - builtin_idents := (s, id) :: !builtin_idents; - id - -let ident_create = wrap Ident.create -let ident_create_predef_exn = wrap Ident.create_predef_exn - -let ident_int = ident_create "int" -and ident_char = ident_create "char" -and ident_bytes = ident_create "bytes" -and ident_float = ident_create "float" -and ident_bool = ident_create "bool" -and ident_unit = ident_create "unit" -and ident_exn = ident_create "exn" -and ident_array = ident_create "array" -and ident_list = ident_create "list" -and ident_option = ident_create "option" - -and ident_int64 = ident_create "int64" -and ident_lazy_t = ident_create "lazy_t" -and ident_string = ident_create "string" -and ident_extension_constructor = ident_create "extension_constructor" -and ident_floatarray = ident_create "floatarray" - -type test = - | For_sure_yes - | For_sure_no - | NA - -let type_is_builtin_path_but_option (p : Path.t) : test = - match p with - | Pident {Ident.stamp} -> - if - stamp >= ident_int.Ident.stamp - && stamp <= ident_floatarray.Ident.stamp - then - if (stamp = ident_option.Ident.stamp) - || (stamp = ident_unit.Ident.stamp) then - For_sure_no - else For_sure_yes - else NA - | _ -> NA - -let path_int = Pident ident_int -and path_char = Pident ident_char -and path_bytes = Pident ident_bytes -and path_float = Pident ident_float -and path_bool = Pident ident_bool -and path_unit = Pident ident_unit -and path_exn = Pident ident_exn -and path_array = Pident ident_array -and path_list = Pident ident_list -and path_option = Pident ident_option - - -and path_int64 = Pident ident_int64 -and path_lazy_t = Pident ident_lazy_t -and path_string = Pident ident_string -and path_extension_constructor = Pident ident_extension_constructor -and path_floatarray = Pident ident_floatarray - -let type_int = newgenty (Tconstr(path_int, [], ref Mnil)) -and type_char = newgenty (Tconstr(path_char, [], ref Mnil)) -and type_bytes = newgenty (Tconstr(path_bytes, [], ref Mnil)) -and type_float = newgenty (Tconstr(path_float, [], ref Mnil)) -and type_bool = newgenty (Tconstr(path_bool, [], ref Mnil)) -and type_unit = newgenty (Tconstr(path_unit, [], ref Mnil)) -and type_exn = newgenty (Tconstr(path_exn, [], ref Mnil)) -and type_array t = newgenty (Tconstr(path_array, [t], ref Mnil)) -and type_list t = newgenty (Tconstr(path_list, [t], ref Mnil)) -and type_option t = newgenty (Tconstr(path_option, [t], ref Mnil)) - - -and type_int64 = newgenty (Tconstr(path_int64, [], ref Mnil)) -and type_lazy_t t = newgenty (Tconstr(path_lazy_t, [t], ref Mnil)) -and type_string = newgenty (Tconstr(path_string, [], ref Mnil)) -and type_extension_constructor = - newgenty (Tconstr(path_extension_constructor, [], ref Mnil)) -and type_floatarray = newgenty (Tconstr(path_floatarray, [], ref Mnil)) - -let ident_match_failure = ident_create_predef_exn "Match_failure" -and ident_out_of_memory = ident_create_predef_exn "Out_of_memory" -and ident_invalid_argument = ident_create_predef_exn "Invalid_argument" -and ident_failure = ident_create_predef_exn "Failure" -and ident_not_found = ident_create_predef_exn "Not_found" -and ident_sys_error = ident_create_predef_exn "Sys_error" -and ident_end_of_file = ident_create_predef_exn "End_of_file" -and ident_division_by_zero = ident_create_predef_exn "Division_by_zero" -and ident_stack_overflow = ident_create_predef_exn "Stack_overflow" -and ident_sys_blocked_io = ident_create_predef_exn "Sys_blocked_io" -and ident_assert_failure = ident_create_predef_exn "Assert_failure" -and ident_undefined_recursive_module = - ident_create_predef_exn "Undefined_recursive_module" - -let all_predef_exns = [ - ident_match_failure; - ident_out_of_memory; - ident_invalid_argument; - ident_failure; - ident_not_found; - ident_sys_error; - ident_end_of_file; - ident_division_by_zero; - ident_stack_overflow; - ident_sys_blocked_io; - ident_assert_failure; - ident_undefined_recursive_module; -] - -let path_match_failure = Pident ident_match_failure -and path_assert_failure = Pident ident_assert_failure -and path_undefined_recursive_module = Pident ident_undefined_recursive_module - -let decl_abstr = - {type_params = []; - type_arity = 0; - type_kind = Type_abstract; - type_loc = Location.none; - type_private = Asttypes.Public; - type_manifest = None; - type_variance = []; - type_newtype_level = None; - type_attributes = []; - type_immediate = false; - type_unboxed = unboxed_false_default_false; - } - -let decl_abstr_imm = {decl_abstr with type_immediate = true} - -let cstr id args = - { - cd_id = id; - cd_args = Cstr_tuple args; - cd_res = None; - cd_loc = Location.none; - cd_attributes = []; - } - -let ident_false = ident_create "false" -and ident_true = ident_create "true" -and ident_void = ident_create "()" -and ident_nil = ident_create "[]" -and ident_cons = ident_create "::" -and ident_none = ident_create "None" -and ident_some = ident_create "Some" -let common_initial_env add_type add_extension empty_env = - let decl_bool = - {decl_abstr with - type_kind = Type_variant([cstr ident_false []; cstr ident_true []]); - type_immediate = true} - and decl_unit = - {decl_abstr with - type_kind = Type_variant([cstr ident_void []]); - type_immediate = true} - and decl_exn = - {decl_abstr with - type_kind = Type_open} - and decl_array = - let tvar = newgenvar() in - {decl_abstr with - type_params = [tvar]; - type_arity = 1; - type_variance = [Variance.full]} - and decl_list = - let tvar = newgenvar() in - {decl_abstr with - type_params = [tvar]; - type_arity = 1; - type_kind = - Type_variant([cstr ident_nil []; cstr ident_cons [tvar; type_list tvar]]); - type_variance = [Variance.covariant]} - and decl_option = - let tvar = newgenvar() in - {decl_abstr with - type_params = [tvar]; - type_arity = 1; - type_kind = Type_variant([cstr ident_none []; cstr ident_some [tvar]]); - type_variance = [Variance.covariant]} - and decl_lazy_t = - let tvar = newgenvar() in - {decl_abstr with - type_params = [tvar]; - type_arity = 1; - type_variance = [Variance.covariant]} - in - - let add_extension id l = - add_extension id - { ext_type_path = path_exn; - ext_type_params = []; - ext_args = Cstr_tuple l; - ext_ret_type = None; - ext_private = Asttypes.Public; - ext_loc = Location.none; - ext_attributes = [{Asttypes.txt="ocaml.warn_on_literal_pattern"; - loc=Location.none}, - Parsetree.PStr[]] } - in - add_extension ident_match_failure - [newgenty (Ttuple[type_string; type_int; type_int])] ( - add_extension ident_out_of_memory [] ( - add_extension ident_stack_overflow [] ( - add_extension ident_invalid_argument [type_string] ( - add_extension ident_failure [type_string] ( - add_extension ident_not_found [] ( - add_extension ident_sys_blocked_io [] ( - add_extension ident_sys_error [type_string] ( - add_extension ident_end_of_file [] ( - add_extension ident_division_by_zero [] ( - add_extension ident_assert_failure - [newgenty (Ttuple[type_string; type_int; type_int])] ( - add_extension ident_undefined_recursive_module - [newgenty (Ttuple[type_string; type_int; type_int])] ( - add_type ident_int64 decl_abstr ( - - add_type ident_lazy_t decl_lazy_t ( - add_type ident_option decl_option ( - add_type ident_list decl_list ( - add_type ident_array decl_array ( - add_type ident_exn decl_exn ( - add_type ident_unit decl_unit ( - add_type ident_bool decl_bool ( - add_type ident_float decl_abstr ( - add_type ident_string decl_abstr ( - add_type ident_int decl_abstr_imm ( - add_type ident_extension_constructor decl_abstr ( - add_type ident_floatarray decl_abstr ( - empty_env))))))))))))))))))))))))) - -let build_initial_env add_type add_exception empty_env = - let common = common_initial_env add_type add_exception empty_env in - let res = add_type ident_bytes decl_abstr common in - let decl_type_char = - {decl_abstr with - type_manifest = Some type_int; - type_private = Private} in - add_type ident_char decl_type_char res - - -let builtin_values = - List.map (fun id -> Ident.make_global id; (Ident.name id, id)) - [ident_match_failure; ident_out_of_memory; ident_stack_overflow; - ident_invalid_argument; - ident_failure; ident_not_found; ident_sys_error; ident_end_of_file; - ident_division_by_zero; ident_sys_blocked_io; - ident_assert_failure; ident_undefined_recursive_module ] - -(* Start non-predef identifiers at 1000. This way, more predefs can - be defined in this file (above!) without breaking .cmi - compatibility. *) - -let _ = Ident.set_current_time 999 -let builtin_idents = List.rev !builtin_idents diff --git a/src/compiler-libs-406/predef.mli b/src/compiler-libs-406/predef.mli deleted file mode 100644 index 69ef8160..00000000 --- a/src/compiler-libs-406/predef.mli +++ /dev/null @@ -1,87 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Predefined type constructors (with special typing rules in typecore) *) - -open Types - -val type_int: type_expr -val type_char: type_expr -val type_string: type_expr -val type_bytes: type_expr -val type_float: type_expr -val type_bool: type_expr -val type_unit: type_expr -val type_exn: type_expr -val type_array: type_expr -> type_expr -val type_list: type_expr -> type_expr -val type_option: type_expr -> type_expr - - -val type_int64: type_expr -val type_lazy_t: type_expr -> type_expr -val type_extension_constructor:type_expr -val type_floatarray:type_expr - -val path_int: Path.t -val path_char: Path.t -val path_string: Path.t -val path_bytes: Path.t -val path_float: Path.t -val path_bool: Path.t -val path_unit: Path.t -val path_exn: Path.t -val path_array: Path.t -val path_list: Path.t -val path_option: Path.t - - -val path_int64: Path.t -val path_lazy_t: Path.t -val path_extension_constructor: Path.t -val path_floatarray: Path.t - -val path_match_failure: Path.t -val path_assert_failure : Path.t -val path_undefined_recursive_module : Path.t - -(* To build the initial environment. Since there is a nasty mutual - recursion between predef and env, we break it by parameterizing - over Env.t, Env.add_type and Env.add_extension. *) - -val build_initial_env: - (Ident.t -> type_declaration -> 'a -> 'a) -> - (Ident.t -> extension_constructor -> 'a -> 'a) -> - 'a -> 'a - -(* To initialize linker tables *) - -val builtin_values: (string * Ident.t) list -val builtin_idents: (string * Ident.t) list - -(** All predefined exceptions, exposed as [Ident.t] for flambda (for - building value approximations). - The [Ident.t] for division by zero is also exported explicitly - so flambda can generate code to raise it. *) -val ident_division_by_zero: Ident.t -val all_predef_exns : Ident.t list - -type test = - | For_sure_yes - | For_sure_no - | NA - -val type_is_builtin_path_but_option : - Path.t -> test diff --git a/src/compiler-libs-406/primitive.ml b/src/compiler-libs-406/primitive.ml deleted file mode 100644 index ad0504a0..00000000 --- a/src/compiler-libs-406/primitive.ml +++ /dev/null @@ -1,100 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Description of primitive functions *) - -open Misc -open Parsetree - -type boxed_integer = Pnativeint | Pint32 | Pint64 - -type native_repr = - | Same_as_ocaml_repr - -type description = - { prim_name: string; (* Name of primitive or C function *) - prim_arity: int; (* Number of arguments *) - prim_alloc: bool; (* Does it allocates or raise? *) - prim_native_name: string; (* Name of C function for the nat. code gen. *) - prim_native_repr_args: native_repr list; - prim_native_repr_res: native_repr } - -let coerce : (description -> description -> bool) ref = - ref (fun - (p1 : description) (p2 : description) -> - p1 = p2 - ) - - - -let rec make_native_repr_args arity x = - if arity = 0 then - [] - else - x :: make_native_repr_args (arity - 1) x - -let simple ~name ~arity ~alloc = - {prim_name = name; - prim_arity = arity; - prim_alloc = alloc; - prim_native_name = ""; - prim_native_repr_args = make_native_repr_args arity Same_as_ocaml_repr; - prim_native_repr_res = Same_as_ocaml_repr} - -let make ~name ~alloc ~native_name ~native_repr_args ~native_repr_res = - {prim_name = name; - prim_arity = List.length native_repr_args; - prim_alloc = alloc; - prim_native_name = native_name; - prim_native_repr_args = native_repr_args; - prim_native_repr_res = native_repr_res} - -let parse_declaration valdecl ~native_repr_args ~native_repr_res = - let arity = List.length native_repr_args in - let name, native_name = - match valdecl.pval_prim with - | name :: name2 :: _ -> (name, name2) - | name :: _ -> (name, "") - | [] -> - fatal_error "Primitive.parse_declaration" - in - {prim_name = name; - prim_arity = arity; - prim_alloc = true; - prim_native_name = native_name; - prim_native_repr_args = native_repr_args; - prim_native_repr_res = native_repr_res} - -open Outcometree - -let print p osig_val_decl = - let prims = - if p.prim_native_name <> "" then - [p.prim_name; p.prim_native_name] - else - [p.prim_name] - in - { osig_val_decl with - oval_prims = prims; - oval_attributes = [] } - -let native_name p = - if p.prim_native_name <> "" - then p.prim_native_name - else p.prim_name - -let byte_name p = - p.prim_name - diff --git a/src/compiler-libs-406/primitive.mli b/src/compiler-libs-406/primitive.mli deleted file mode 100644 index ecc22456..00000000 --- a/src/compiler-libs-406/primitive.mli +++ /dev/null @@ -1,65 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Description of primitive functions *) - -type boxed_integer = Pnativeint | Pint32 | Pint64 - -(* Representation of arguments/result for the native code version - of a primitive *) -type native_repr = - | Same_as_ocaml_repr - -type description = private - { prim_name: string; (* Name of primitive or C function *) - prim_arity: int; (* Number of arguments *) - prim_alloc: bool; (* Does it allocates or raise? *) - prim_native_name: string; (* Name of C function for the nat. code gen. *) - prim_native_repr_args: native_repr list; - prim_native_repr_res: native_repr } - -(* Invariant [List.length d.prim_native_repr_args = d.prim_arity] *) - -val simple - : name:string - -> arity:int - -> alloc:bool - -> description - -val make - : name:string - -> alloc:bool - -> native_name:string - -> native_repr_args: native_repr list - -> native_repr_res: native_repr - -> description - -val parse_declaration - : Parsetree.value_description - -> native_repr_args:native_repr list - -> native_repr_res:native_repr - -> description - -val print - : description - -> Outcometree.out_val_decl - -> Outcometree.out_val_decl - -val native_name: description -> string -val byte_name: description -> string - - -val coerce : - (description -> description -> bool ) ref \ No newline at end of file diff --git a/src/compiler-libs-406/subst.ml b/src/compiler-libs-406/subst.ml deleted file mode 100644 index fb5f9019..00000000 --- a/src/compiler-libs-406/subst.ml +++ /dev/null @@ -1,491 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Substitutions *) - -open Misc -open Path -open Types -open Btype - -type type_replacement = - | Path of Path.t - | Type_function of { params : type_expr list; body : type_expr } - -module PathMap = Map.Make(Path) - -type t = - { types: type_replacement PathMap.t; - modules: Path.t PathMap.t; - modtypes: (Ident.t, module_type) Tbl.t; - for_saving: bool; - } - -let identity = - { types = PathMap.empty; - modules = PathMap.empty; - modtypes = Tbl.empty; - for_saving = false; - } - -let add_type_path id p s = { s with types = PathMap.add id (Path p) s.types } -let add_type id p s = add_type_path (Pident id) p s - -let add_type_function id ~params ~body s = - { s with types = PathMap.add id (Type_function { params; body }) s.types } - -let add_module_path id p s = { s with modules = PathMap.add id p s.modules } -let add_module id p s = add_module_path (Pident id) p s - -let add_modtype id ty s = { s with modtypes = Tbl.add id ty s.modtypes } - -let for_saving s = { s with for_saving = true } - -let loc s x = - if s.for_saving && not !Clflags.keep_locs then Location.none else x - -let remove_loc = - let open Ast_mapper in - {default_mapper with location = (fun _this _loc -> Location.none)} - -let is_not_doc = function - | ({Location.txt = "ocaml.doc"}, _) -> false - | ({Location.txt = "ocaml.text"}, _) -> false - | ({Location.txt = "doc"}, _) -> false - | ({Location.txt = "text"}, _) -> false - | _ -> true - -let attrs s x = - let x = - if s.for_saving && not !Clflags.keep_docs then - List.filter is_not_doc x - else x - in - if s.for_saving && not !Clflags.keep_locs - then remove_loc.Ast_mapper.attributes remove_loc x - else x - -let rec module_path s path = - try PathMap.find path s.modules - with Not_found -> - match path with - | Pident _ -> path - | Pdot(p, n, pos) -> - Pdot(module_path s p, n, pos) - | Papply(p1, p2) -> - Papply(module_path s p1, module_path s p2) - -let modtype_path s = function - Pident id as p -> - begin try - match Tbl.find id s.modtypes with - | Mty_ident p -> p - | _ -> fatal_error "Subst.modtype_path" - with Not_found -> p end - | Pdot(p, n, pos) -> - Pdot(module_path s p, n, pos) - | Papply _ -> - fatal_error "Subst.modtype_path" - -let type_path s path = - match PathMap.find path s.types with - | Path p -> p - | Type_function _ -> assert false - | exception Not_found -> - match path with - | Pident _ -> path - | Pdot(p, n, pos) -> - Pdot(module_path s p, n, pos) - | Papply _ -> - fatal_error "Subst.type_path" - -let type_path s p = - match Path.constructor_typath p with - | Regular p -> type_path s p - | Cstr (ty_path, cstr) -> Pdot(type_path s ty_path, cstr, nopos) - | LocalExt _ -> type_path s p - | Ext (p, cstr) -> Pdot(module_path s p, cstr, nopos) - -let to_subst_by_type_function s p = - match PathMap.find p s.types with - | Path _ -> false - | Type_function _ -> true - | exception Not_found -> false - -(* Special type ids for saved signatures *) - -let new_id = ref (-1) -let reset_for_saving () = new_id := -1 - -let newpersty desc = - decr new_id; - { desc = desc; level = generic_level; id = !new_id } - -(* ensure that all occurrences of 'Tvar None' are physically shared *) -let tvar_none = Tvar None -let tunivar_none = Tunivar None -let norm = function - | Tvar None -> tvar_none - | Tunivar None -> tunivar_none - | d -> d - -let ctype_apply_env_empty = ref (fun _ -> assert false) - -(* Similar to [Ctype.nondep_type_rec]. *) -let rec typexp s ty = - let ty = repr ty in - match ty.desc with - Tvar _ | Tunivar _ as desc -> - if s.for_saving || ty.id < 0 then - let ty' = - if s.for_saving then newpersty (norm desc) - else newty2 ty.level desc - in - save_desc ty desc; ty.desc <- Tsubst ty'; ty' - else ty - | Tsubst ty -> - ty - | Tfield (m, k, _t1, _t2) when not s.for_saving && m = dummy_method - && field_kind_repr k <> Fabsent && (repr ty).level < generic_level -> - (* do not copy the type of self when it is not generalized *) - ty -(* cannot do it, since it would omit substitution - | Tvariant row when not (static_row row) -> - ty -*) - | _ -> - let desc = ty.desc in - save_desc ty desc; - let tm = row_of_type ty in - let has_fixed_row = - not (is_Tconstr ty) && is_constr_row ~allow_ident:false tm in - (* Make a stub *) - let ty' = if s.for_saving then newpersty (Tvar None) else newgenvar () in - ty.desc <- Tsubst ty'; - ty'.desc <- - begin if has_fixed_row then - match tm.desc with (* PR#7348 *) - Tconstr (Pdot(m,i,pos), tl, _abbrev) -> - let i' = String.sub i 0 (String.length i - 4) in - Tconstr(type_path s (Pdot(m,i',pos)), tl, ref Mnil) - | _ -> assert false - else match desc with - | Tconstr (p, args, _abbrev) -> - let args = List.map (typexp s) args in - begin match PathMap.find p s.types with - | exception Not_found -> Tconstr(type_path s p, args, ref Mnil) - | Path _ -> Tconstr(type_path s p, args, ref Mnil) - | Type_function { params; body } -> - (!ctype_apply_env_empty params body args).desc - end - | Tpackage(p, n, tl) -> - Tpackage(modtype_path s p, n, List.map (typexp s) tl) - | Tobject (t1, name) -> - Tobject (typexp s t1, - ref (match !name with - None -> None - | Some (p, tl) -> - if to_subst_by_type_function s p - then None - else Some (type_path s p, List.map (typexp s) tl))) - | Tvariant row -> - let row = row_repr row in - let more = repr row.row_more in - (* We must substitute in a subtle way *) - (* Tsubst takes a tuple containing the row var and the variant *) - begin match more.desc with - Tsubst {desc = Ttuple [_;ty2]} -> - (* This variant type has been already copied *) - ty.desc <- Tsubst ty2; (* avoid Tlink in the new type *) - Tlink ty2 - | _ -> - let dup = - s.for_saving || more.level = generic_level || static_row row || - match more.desc with Tconstr _ -> true | _ -> false in - (* Various cases for the row variable *) - let more' = - match more.desc with - Tsubst ty -> ty - | Tconstr _ | Tnil -> typexp s more - | Tunivar _ | Tvar _ -> - save_desc more more.desc; - if s.for_saving then newpersty (norm more.desc) else - if dup && is_Tvar more then newgenty more.desc else more - | _ -> assert false - in - (* Register new type first for recursion *) - more.desc <- Tsubst(newgenty(Ttuple[more';ty'])); - (* Return a new copy *) - let row = - copy_row (typexp s) true row (not dup) more' in - match row.row_name with - | Some (p, tl) -> - Tvariant {row with row_name = - if to_subst_by_type_function s p - then None - else Some (type_path s p, tl)} - | None -> - Tvariant row - end - | Tfield(_label, kind, _t1, t2) when field_kind_repr kind = Fabsent -> - Tlink (typexp s t2) - | _ -> copy_type_desc (typexp s) desc - end; - ty' - -(* - Always make a copy of the type. If this is not done, type levels - might not be correct. -*) -let type_expr s ty = - let ty' = typexp s ty in - cleanup_types (); - ty' - -let label_declaration s l = - { - ld_id = l.ld_id; - ld_mutable = l.ld_mutable; - ld_type = typexp s l.ld_type; - ld_loc = loc s l.ld_loc; - ld_attributes = attrs s l.ld_attributes; - } - -let constructor_arguments s = function - | Cstr_tuple l -> - Cstr_tuple (List.map (typexp s) l) - | Cstr_record l -> - Cstr_record (List.map (label_declaration s) l) - -let constructor_declaration s c = - { - cd_id = c.cd_id; - cd_args = constructor_arguments s c.cd_args; - cd_res = may_map (typexp s) c.cd_res; - cd_loc = loc s c.cd_loc; - cd_attributes = attrs s c.cd_attributes; - } - -let type_declaration s decl = - let decl = - { type_params = List.map (typexp s) decl.type_params; - type_arity = decl.type_arity; - type_kind = - begin match decl.type_kind with - Type_abstract -> Type_abstract - | Type_variant cstrs -> - Type_variant (List.map (constructor_declaration s) cstrs) - | Type_record(lbls, rep) -> - Type_record (List.map (label_declaration s) lbls, rep) - | Type_open -> Type_open - end; - type_manifest = - begin - match decl.type_manifest with - None -> None - | Some ty -> Some(typexp s ty) - end; - type_private = decl.type_private; - type_variance = decl.type_variance; - type_newtype_level = None; - type_loc = loc s decl.type_loc; - type_attributes = attrs s decl.type_attributes; - type_immediate = decl.type_immediate; - type_unboxed = decl.type_unboxed; - } - in - cleanup_types (); - decl - -let class_signature s sign = - { csig_self = typexp s sign.csig_self; - csig_vars = - Vars.map (function (m, v, t) -> (m, v, typexp s t)) sign.csig_vars; - csig_concr = sign.csig_concr; - csig_inher = - List.map (fun (p, tl) -> (type_path s p, List.map (typexp s) tl)) - sign.csig_inher; - } - -let rec class_type s = - function - Cty_constr (p, tyl, cty) -> - Cty_constr (type_path s p, List.map (typexp s) tyl, class_type s cty) - | Cty_signature sign -> - Cty_signature (class_signature s sign) - | Cty_arrow (l, ty, cty) -> - Cty_arrow (l, typexp s ty, class_type s cty) - -let class_declaration s decl = - let decl = - { cty_params = List.map (typexp s) decl.cty_params; - cty_variance = decl.cty_variance; - cty_type = class_type s decl.cty_type; - cty_path = type_path s decl.cty_path; - cty_new = - begin match decl.cty_new with - None -> None - | Some ty -> Some (typexp s ty) - end; - cty_loc = loc s decl.cty_loc; - cty_attributes = attrs s decl.cty_attributes; - } - in - (* Do not clean up if saving: next is cltype_declaration *) - if not s.for_saving then cleanup_types (); - decl - -let cltype_declaration s decl = - let decl = - { clty_params = List.map (typexp s) decl.clty_params; - clty_variance = decl.clty_variance; - clty_type = class_type s decl.clty_type; - clty_path = type_path s decl.clty_path; - clty_loc = loc s decl.clty_loc; - clty_attributes = attrs s decl.clty_attributes; - } - in - (* Do clean up even if saving: type_declaration may be recursive *) - cleanup_types (); - decl - -let class_type s cty = - let cty = class_type s cty in - cleanup_types (); - cty - -let value_description s descr = - { val_type = type_expr s descr.val_type; - val_kind = descr.val_kind; - val_loc = loc s descr.val_loc; - val_attributes = attrs s descr.val_attributes; - } - -let extension_constructor s ext = - let ext = - { ext_type_path = type_path s ext.ext_type_path; - ext_type_params = List.map (typexp s) ext.ext_type_params; - ext_args = constructor_arguments s ext.ext_args; - ext_ret_type = may_map (typexp s) ext.ext_ret_type; - ext_private = ext.ext_private; - ext_attributes = attrs s ext.ext_attributes; - ext_loc = if s.for_saving then Location.none else ext.ext_loc; } - in - cleanup_types (); - ext - -let rec rename_bound_idents s idents = function - [] -> (List.rev idents, s) - | Sig_type(id, _, _) :: sg -> - let id' = Ident.rename id in - rename_bound_idents (add_type id (Pident id') s) (id' :: idents) sg - | Sig_module(id, _, _) :: sg -> - let id' = Ident.rename id in - rename_bound_idents (add_module id (Pident id') s) (id' :: idents) sg - | Sig_modtype(id, _) :: sg -> - let id' = Ident.rename id in - rename_bound_idents (add_modtype id (Mty_ident(Pident id')) s) - (id' :: idents) sg - | (Sig_class(id, _, _) | Sig_class_type(id, _, _)) :: sg -> - (* cheat and pretend they are types cf. PR#6650 *) - let id' = Ident.rename id in - rename_bound_idents (add_type id (Pident id') s) (id' :: idents) sg - | (Sig_value(id, _) | Sig_typext(id, _, _)) :: sg -> - let id' = Ident.rename id in - rename_bound_idents s (id' :: idents) sg - -let rec modtype s = function - Mty_ident p as mty -> - begin match p with - Pident id -> - begin try Tbl.find id s.modtypes with Not_found -> mty end - | Pdot(p, n, pos) -> - Mty_ident(Pdot(module_path s p, n, pos)) - | Papply _ -> - fatal_error "Subst.modtype" - end - | Mty_signature sg -> - Mty_signature(signature s sg) - | Mty_functor(id, arg, res) -> - let id' = Ident.rename id in - Mty_functor(id', may_map (modtype s) arg, - modtype (add_module id (Pident id') s) res) - | Mty_alias(pres, p) -> - Mty_alias(pres, module_path s p) - -and signature s sg = - (* Components of signature may be mutually recursive (e.g. type declarations - or class and type declarations), so first build global renaming - substitution... *) - let (new_idents, s') = rename_bound_idents s [] sg in - (* ... then apply it to each signature component in turn *) - List.map2 (signature_component s') sg new_idents - -and signature_component s comp newid = - match comp with - Sig_value(_id, d) -> - Sig_value(newid, value_description s d) - | Sig_type(_id, d, rs) -> - Sig_type(newid, type_declaration s d, rs) - | Sig_typext(_id, ext, es) -> - Sig_typext(newid, extension_constructor s ext, es) - | Sig_module(_id, d, rs) -> - Sig_module(newid, module_declaration s d, rs) - | Sig_modtype(_id, d) -> - Sig_modtype(newid, modtype_declaration s d) - | Sig_class(_id, d, rs) -> - Sig_class(newid, class_declaration s d, rs) - | Sig_class_type(_id, d, rs) -> - Sig_class_type(newid, cltype_declaration s d, rs) - -and module_declaration s decl = - { - md_type = modtype s decl.md_type; - md_attributes = attrs s decl.md_attributes; - md_loc = loc s decl.md_loc; - } - -and modtype_declaration s decl = - { - mtd_type = may_map (modtype s) decl.mtd_type; - mtd_attributes = attrs s decl.mtd_attributes; - mtd_loc = loc s decl.mtd_loc; - } - -(* For every binding k |-> d of m1, add k |-> f d to m2 - and return resulting merged map. *) - -let merge_tbls f m1 m2 = - Tbl.fold (fun k d accu -> Tbl.add k (f d) accu) m1 m2 - -let merge_path_maps f m1 m2 = - PathMap.fold (fun k d accu -> PathMap.add k (f d) accu) m1 m2 - -let type_replacement s = function - | Path p -> Path (type_path s p) - | Type_function { params; body } -> - let params = List.map (typexp s) params in - let body = typexp s body in - Type_function { params; body } - -(* Composition of substitutions: - apply (compose s1 s2) x = apply s2 (apply s1 x) *) - -let compose s1 s2 = - { types = merge_path_maps (type_replacement s2) s1.types s2.types; - modules = merge_path_maps (module_path s2) s1.modules s2.modules; - modtypes = merge_tbls (modtype s2) s1.modtypes s2.modtypes; - for_saving = s1.for_saving || s2.for_saving; - } diff --git a/src/compiler-libs-406/subst.mli b/src/compiler-libs-406/subst.mli deleted file mode 100644 index f81cb4da..00000000 --- a/src/compiler-libs-406/subst.mli +++ /dev/null @@ -1,70 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Substitutions *) - -open Types - -type t - -(* - Substitutions are used to translate a type from one context to - another. This requires substituting paths for identifiers, and - possibly also lowering the level of non-generic variables so that - they are inferior to the maximum level of the new context. - - Substitutions can also be used to create a "clean" copy of a type. - Indeed, non-variable node of a type are duplicated, with their - levels set to generic level. That way, the resulting type is - well-formed (decreasing levels), even if the original one was not. -*) - -val identity: t - -val add_type: Ident.t -> Path.t -> t -> t -val add_type_path: Path.t -> Path.t -> t -> t -val add_type_function: - Path.t -> params:type_expr list -> body:type_expr -> t -> t -val add_module: Ident.t -> Path.t -> t -> t -val add_module_path: Path.t -> Path.t -> t -> t -val add_modtype: Ident.t -> module_type -> t -> t -val for_saving: t -> t -val reset_for_saving: unit -> unit - -val module_path: t -> Path.t -> Path.t -val type_path: t -> Path.t -> Path.t - -val type_expr: t -> type_expr -> type_expr -val class_type: t -> class_type -> class_type -val value_description: t -> value_description -> value_description -val type_declaration: t -> type_declaration -> type_declaration -val extension_constructor: - t -> extension_constructor -> extension_constructor -val class_declaration: t -> class_declaration -> class_declaration -val cltype_declaration: t -> class_type_declaration -> class_type_declaration -val modtype: t -> module_type -> module_type -val signature: t -> signature -> signature -val modtype_declaration: t -> modtype_declaration -> modtype_declaration -val module_declaration: t -> module_declaration -> module_declaration -val typexp : t -> Types.type_expr -> Types.type_expr -val class_signature: t -> class_signature -> class_signature - -(* Composition of substitutions: - apply (compose s1 s2) x = apply s2 (apply s1 x) *) -val compose: t -> t -> t - -(* A forward reference to be filled in ctype.ml. *) -val ctype_apply_env_empty: - (type_expr list -> type_expr -> type_expr list -> type_expr) ref diff --git a/src/compiler-libs-406/syntaxerr.ml b/src/compiler-libs-406/syntaxerr.ml deleted file mode 100644 index 0bb55ab6..00000000 --- a/src/compiler-libs-406/syntaxerr.ml +++ /dev/null @@ -1,87 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1997 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Auxiliary type for reporting syntax errors *) - -type error = - Unclosed of Location.t * string * Location.t * string - | Expecting of Location.t * string - | Not_expecting of Location.t * string - | Applicative_path of Location.t - | Variable_in_scope of Location.t * string - | Other of Location.t - | Ill_formed_ast of Location.t * string - | Invalid_package_type of Location.t * string - -exception Error of error -exception Escape_error - -let prepare_error = function - | Unclosed(opening_loc, opening, closing_loc, closing) -> - Location.errorf ~loc:closing_loc - ~sub:[ - Location.errorf ~loc:opening_loc - "This '%s' might be unmatched" opening - ] - ~if_highlight: - (Printf.sprintf "Syntax error: '%s' expected, \ - the highlighted '%s' might be unmatched" - closing opening) - "Syntax error: '%s' expected" closing - - | Expecting (loc, nonterm) -> - Location.errorf ~loc "Syntax error: %s expected." nonterm - | Not_expecting (loc, nonterm) -> - Location.errorf ~loc "Syntax error: %s not expected." nonterm - | Applicative_path loc -> - Location.errorf ~loc - "Syntax error: applicative paths of the form F(X).t \ - are not supported when the option -no-app-func is set." - | Variable_in_scope (loc, var) -> - Location.errorf ~loc - "In this scoped type, variable '%s \ - is reserved for the local type %s." - var var - | Other loc -> - Location.errorf ~loc "Syntax error" - | Ill_formed_ast (loc, s) -> - Location.errorf ~loc "broken invariant in parsetree: %s" s - | Invalid_package_type (loc, s) -> - Location.errorf ~loc "invalid package type: %s" s - -let () = - Location.register_error_of_exn - (function - | Error err -> Some (prepare_error err) - | _ -> None - ) - - -let report_error ppf err = - Location.report_error ppf (prepare_error err) - -let location_of_error = function - | Unclosed(l,_,_,_) - | Applicative_path l - | Variable_in_scope(l,_) - | Other l - | Not_expecting (l, _) - | Ill_formed_ast (l, _) - | Invalid_package_type (l, _) - | Expecting (l, _) -> l - - -let ill_formed_ast loc s = - raise (Error (Ill_formed_ast (loc, s))) diff --git a/src/compiler-libs-406/syntaxerr.mli b/src/compiler-libs-406/syntaxerr.mli deleted file mode 100644 index 319eb579..00000000 --- a/src/compiler-libs-406/syntaxerr.mli +++ /dev/null @@ -1,37 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1997 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Auxiliary type for reporting syntax errors *) - -open Format - -type error = - Unclosed of Location.t * string * Location.t * string - | Expecting of Location.t * string - | Not_expecting of Location.t * string - | Applicative_path of Location.t - | Variable_in_scope of Location.t * string - | Other of Location.t - | Ill_formed_ast of Location.t * string - | Invalid_package_type of Location.t * string - -exception Error of error -exception Escape_error - -val report_error: formatter -> error -> unit - (** @deprecated Use {!Location.error_of_exn}, {!Location.report_error}. *) - -val location_of_error: error -> Location.t -val ill_formed_ast: Location.t -> string -> 'a diff --git a/src/compiler-libs-406/tast_mapper.ml b/src/compiler-libs-406/tast_mapper.ml deleted file mode 100644 index 512132ef..00000000 --- a/src/compiler-libs-406/tast_mapper.ml +++ /dev/null @@ -1,611 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Alain Frisch, LexiFi *) -(* *) -(* Copyright 2015 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Asttypes -open Typedtree - -(* TODO: add 'methods' for location, attribute, extension, - open_description, include_declaration, include_description *) - -type mapper = - { - case: mapper -> case -> case; - cases: mapper -> case list -> case list; - class_description: mapper -> class_description -> class_description; - - class_signature: mapper -> class_signature -> class_signature; - class_type: mapper -> class_type -> class_type; - class_type_declaration: mapper -> class_type_declaration -> - class_type_declaration; - class_type_field: mapper -> class_type_field -> class_type_field; - env: mapper -> Env.t -> Env.t; - expr: mapper -> expression -> expression; - extension_constructor: mapper -> extension_constructor -> - extension_constructor; - module_binding: mapper -> module_binding -> module_binding; - module_coercion: mapper -> module_coercion -> module_coercion; - module_declaration: mapper -> module_declaration -> module_declaration; - module_expr: mapper -> module_expr -> module_expr; - module_type: mapper -> module_type -> module_type; - module_type_declaration: - mapper -> module_type_declaration -> module_type_declaration; - package_type: mapper -> package_type -> package_type; - pat: mapper -> pattern -> pattern; - row_field: mapper -> row_field -> row_field; - object_field: mapper -> object_field -> object_field; - signature: mapper -> signature -> signature; - signature_item: mapper -> signature_item -> signature_item; - structure: mapper -> structure -> structure; - structure_item: mapper -> structure_item -> structure_item; - typ: mapper -> core_type -> core_type; - type_declaration: mapper -> type_declaration -> type_declaration; - type_declarations: mapper -> (rec_flag * type_declaration list) -> - (rec_flag * type_declaration list); - type_extension: mapper -> type_extension -> type_extension; - type_kind: mapper -> type_kind -> type_kind; - value_binding: mapper -> value_binding -> value_binding; - value_bindings: mapper -> (rec_flag * value_binding list) -> - (rec_flag * value_binding list); - value_description: mapper -> value_description -> value_description; - with_constraint: mapper -> with_constraint -> with_constraint; - } - -let id x = x -let tuple2 f1 f2 (x, y) = (f1 x, f2 y) -let tuple3 f1 f2 f3 (x, y, z) = (f1 x, f2 y, f3 z) -let opt f = function None -> None | Some x -> Some (f x) - -let structure sub {str_items; str_type; str_final_env} = - { - str_items = List.map (sub.structure_item sub) str_items; - str_final_env = sub.env sub str_final_env; - str_type; - } - -let class_infos sub f x = - {x with - ci_params = List.map (tuple2 (sub.typ sub) id) x.ci_params; - ci_expr = f x.ci_expr; - } - -let module_type_declaration sub x = - let mtd_type = opt (sub.module_type sub) x.mtd_type in - {x with mtd_type} - -let module_declaration sub x = - let md_type = sub.module_type sub x.md_type in - {x with md_type} - -let include_infos f x = {x with incl_mod = f x.incl_mod} - -let class_type_declaration sub x = - class_infos sub (sub.class_type sub) x - - -let structure_item sub {str_desc; str_loc; str_env} = - let str_env = sub.env sub str_env in - let str_desc = - match str_desc with - | Tstr_eval (exp, attrs) -> Tstr_eval (sub.expr sub exp, attrs) - | Tstr_value (rec_flag, list) -> - let (rec_flag, list) = sub.value_bindings sub (rec_flag, list) in - Tstr_value (rec_flag, list) - | Tstr_primitive v -> Tstr_primitive (sub.value_description sub v) - | Tstr_type (rec_flag, list) -> - let (rec_flag, list) = sub.type_declarations sub (rec_flag, list) in - Tstr_type (rec_flag, list) - | Tstr_typext te -> Tstr_typext (sub.type_extension sub te) - | Tstr_exception ext -> Tstr_exception (sub.extension_constructor sub ext) - | Tstr_module mb -> Tstr_module (sub.module_binding sub mb) - | Tstr_recmodule list -> - Tstr_recmodule (List.map (sub.module_binding sub) list) - | Tstr_modtype x -> Tstr_modtype (sub.module_type_declaration sub x) - | Tstr_class () -> Tstr_class () - | Tstr_class_type list -> - Tstr_class_type - (List.map (tuple3 id id (sub.class_type_declaration sub)) list) - | Tstr_include incl -> - Tstr_include (include_infos (sub.module_expr sub) incl) - | Tstr_open _ - | Tstr_attribute _ as d -> d - in - {str_desc; str_env; str_loc} - -let value_description sub x = - let val_desc = sub.typ sub x.val_desc in - {x with val_desc} - -let label_decl sub x = - let ld_type = sub.typ sub x.ld_type in - {x with ld_type} - -let constructor_args sub = function - | Cstr_tuple l -> Cstr_tuple (List.map (sub.typ sub) l) - | Cstr_record l -> Cstr_record (List.map (label_decl sub) l) - -let constructor_decl sub cd = - let cd_args = constructor_args sub cd.cd_args in - let cd_res = opt (sub.typ sub) cd.cd_res in - {cd with cd_args; cd_res} - -let type_kind sub = function - | Ttype_abstract -> Ttype_abstract - | Ttype_variant list -> Ttype_variant (List.map (constructor_decl sub) list) - | Ttype_record list -> Ttype_record (List.map (label_decl sub) list) - | Ttype_open -> Ttype_open - -let type_declaration sub x = - let typ_cstrs = - List.map - (tuple3 (sub.typ sub) (sub.typ sub) id) - x.typ_cstrs - in - let typ_kind = sub.type_kind sub x.typ_kind in - let typ_manifest = opt (sub.typ sub) x.typ_manifest in - let typ_params = List.map (tuple2 (sub.typ sub) id) x.typ_params in - {x with typ_cstrs; typ_kind; typ_manifest; typ_params} - -let type_declarations sub (rec_flag, list) = - (rec_flag, List.map (sub.type_declaration sub) list) - -let type_extension sub x = - let tyext_params = List.map (tuple2 (sub.typ sub) id) x.tyext_params in - let tyext_constructors = - List.map (sub.extension_constructor sub) x.tyext_constructors - in - {x with tyext_constructors; tyext_params} - -let extension_constructor sub x = - let ext_kind = - match x.ext_kind with - Text_decl(ctl, cto) -> - Text_decl(constructor_args sub ctl, opt (sub.typ sub) cto) - | Text_rebind _ as d -> d - in - {x with ext_kind} - -let pat sub x = - let extra = function - | Tpat_type _ - | Tpat_unpack as d -> d - | Tpat_open (path,loc,env) -> Tpat_open (path, loc, sub.env sub env) - | Tpat_constraint ct -> Tpat_constraint (sub.typ sub ct) - in - let pat_env = sub.env sub x.pat_env in - let pat_extra = List.map (tuple3 extra id id) x.pat_extra in - let pat_desc = - match x.pat_desc with - | Tpat_any - | Tpat_var _ - | Tpat_constant _ as d -> d - | Tpat_tuple l -> Tpat_tuple (List.map (sub.pat sub) l) - | Tpat_construct (loc, cd, l) -> - Tpat_construct (loc, cd, List.map (sub.pat sub) l) - | Tpat_variant (l, po, rd) -> Tpat_variant (l, opt (sub.pat sub) po, rd) - | Tpat_record (l, closed) -> - Tpat_record (List.map (tuple3 id id (sub.pat sub)) l, closed) - | Tpat_array l -> Tpat_array (List.map (sub.pat sub) l) - | Tpat_or (p1, p2, rd) -> - Tpat_or (sub.pat sub p1, sub.pat sub p2, rd) - | Tpat_alias (p, id, s) -> Tpat_alias (sub.pat sub p, id, s) - | Tpat_lazy p -> Tpat_lazy (sub.pat sub p) - in - {x with pat_extra; pat_desc; pat_env} - -let expr sub x = - let extra = function - | Texp_constraint cty -> - Texp_constraint (sub.typ sub cty) - | Texp_coerce (cty1, cty2) -> - Texp_coerce (opt (sub.typ sub) cty1, sub.typ sub cty2) - | Texp_open (ovf, path, loc, env) -> - Texp_open (ovf, path, loc, sub.env sub env) - | Texp_newtype _ as d -> d - | Texp_poly cto -> Texp_poly (opt (sub.typ sub) cto) - in - let exp_extra = List.map (tuple3 extra id id) x.exp_extra in - let exp_env = sub.env sub x.exp_env in - let exp_desc = - match x.exp_desc with - | Texp_ident _ - | Texp_constant _ as d -> d - | Texp_let (rec_flag, list, exp) -> - let (rec_flag, list) = sub.value_bindings sub (rec_flag, list) in - Texp_let (rec_flag, list, sub.expr sub exp) - | Texp_function { arg_label; param; cases; partial; } -> - Texp_function { arg_label; param; cases = sub.cases sub cases; - partial; } - | Texp_apply (exp, list) -> - Texp_apply ( - sub.expr sub exp, - List.map (tuple2 id (opt (sub.expr sub))) list - ) - | Texp_match (exp, cases, exn_cases, p) -> - Texp_match ( - sub.expr sub exp, - sub.cases sub cases, - sub.cases sub exn_cases, - p - ) - | Texp_try (exp, cases) -> - Texp_try ( - sub.expr sub exp, - sub.cases sub cases - ) - | Texp_tuple list -> - Texp_tuple (List.map (sub.expr sub) list) - | Texp_construct (lid, cd, args) -> - Texp_construct (lid, cd, List.map (sub.expr sub) args) - | Texp_variant (l, expo) -> - Texp_variant (l, opt (sub.expr sub) expo) - | Texp_record { fields; representation; extended_expression } -> - let fields = Array.map (function - | label, Kept t -> label, Kept t - | label, Overridden (lid, exp) -> - label, Overridden (lid, sub.expr sub exp)) - fields - in - Texp_record { - fields; representation; - extended_expression = opt (sub.expr sub) extended_expression; - } - | Texp_field (exp, lid, ld) -> - Texp_field (sub.expr sub exp, lid, ld) - | Texp_setfield (exp1, lid, ld, exp2) -> - Texp_setfield ( - sub.expr sub exp1, - lid, - ld, - sub.expr sub exp2 - ) - | Texp_array list -> - Texp_array (List.map (sub.expr sub) list) - | Texp_ifthenelse (exp1, exp2, expo) -> - Texp_ifthenelse ( - sub.expr sub exp1, - sub.expr sub exp2, - opt (sub.expr sub) expo - ) - | Texp_sequence (exp1, exp2) -> - Texp_sequence ( - sub.expr sub exp1, - sub.expr sub exp2 - ) - | Texp_while (exp1, exp2) -> - Texp_while ( - sub.expr sub exp1, - sub.expr sub exp2 - ) - | Texp_for (id, p, exp1, exp2, dir, exp3) -> - Texp_for ( - id, - p, - sub.expr sub exp1, - sub.expr sub exp2, - dir, - sub.expr sub exp3 - ) - | Texp_send (exp, meth, expo) -> - Texp_send - ( - sub.expr sub exp, - meth, - opt (sub.expr sub) expo - ) - | Texp_new _ - | Texp_instvar _ as d -> d - | Texp_setinstvar _ - | Texp_override _ -> - assert false - | Texp_letmodule (id, s, mexpr, exp) -> - Texp_letmodule ( - id, - s, - sub.module_expr sub mexpr, - sub.expr sub exp - ) - | Texp_letexception (cd, exp) -> - Texp_letexception ( - sub.extension_constructor sub cd, - sub.expr sub exp - ) - | Texp_assert exp -> - Texp_assert (sub.expr sub exp) - | Texp_lazy exp -> - Texp_lazy (sub.expr sub exp) - | Texp_object () -> - Texp_object () - | Texp_pack mexpr -> - Texp_pack (sub.module_expr sub mexpr) - | Texp_unreachable -> - Texp_unreachable - | Texp_extension_constructor _ as e -> - e - in - {x with exp_extra; exp_desc; exp_env} - - -let package_type sub x = - let pack_fields = List.map (tuple2 id (sub.typ sub)) x.pack_fields in - {x with pack_fields} - -let signature sub x = - let sig_final_env = sub.env sub x.sig_final_env in - let sig_items = List.map (sub.signature_item sub) x.sig_items in - {x with sig_items; sig_final_env} - -let signature_item sub x = - let sig_env = sub.env sub x.sig_env in - let sig_desc = - match x.sig_desc with - | Tsig_value v -> - Tsig_value (sub.value_description sub v) - | Tsig_type (rec_flag, list) -> - let (rec_flag, list) = sub.type_declarations sub (rec_flag, list) in - Tsig_type (rec_flag, list) - | Tsig_typext te -> - Tsig_typext (sub.type_extension sub te) - | Tsig_exception ext -> - Tsig_exception (sub.extension_constructor sub ext) - | Tsig_module x -> - Tsig_module (sub.module_declaration sub x) - | Tsig_recmodule list -> - Tsig_recmodule (List.map (sub.module_declaration sub) list) - | Tsig_modtype x -> - Tsig_modtype (sub.module_type_declaration sub x) - | Tsig_include incl -> - Tsig_include (include_infos (sub.module_type sub) incl) - | Tsig_class list -> - Tsig_class (List.map (sub.class_description sub) list) - | Tsig_class_type list -> - Tsig_class_type - (List.map (sub.class_type_declaration sub) list) - | Tsig_open _ - | Tsig_attribute _ as d -> d - in - {x with sig_desc; sig_env} - -let class_description sub x = - class_infos sub (sub.class_type sub) x - -let module_type sub x = - let mty_env = sub.env sub x.mty_env in - let mty_desc = - match x.mty_desc with - | Tmty_ident _ - | Tmty_alias _ as d -> d - | Tmty_signature sg -> Tmty_signature (sub.signature sub sg) - | Tmty_functor (id, s, mtype1, mtype2) -> - Tmty_functor ( - id, - s, - opt (sub.module_type sub) mtype1, - sub.module_type sub mtype2 - ) - | Tmty_with (mtype, list) -> - Tmty_with ( - sub.module_type sub mtype, - List.map (tuple3 id id (sub.with_constraint sub)) list - ) - | Tmty_typeof mexpr -> - Tmty_typeof (sub.module_expr sub mexpr) - in - {x with mty_desc; mty_env} - -let with_constraint sub = function - | Twith_type decl -> Twith_type (sub.type_declaration sub decl) - | Twith_typesubst decl -> Twith_typesubst (sub.type_declaration sub decl) - | Twith_module _ - | Twith_modsubst _ as d -> d - -let module_coercion sub = function - | Tcoerce_none -> Tcoerce_none - | Tcoerce_functor (c1,c2) -> - Tcoerce_functor (sub.module_coercion sub c1, sub.module_coercion sub c2) - | Tcoerce_alias (p, c1) -> - Tcoerce_alias (p, sub.module_coercion sub c1) - | Tcoerce_structure (l1, l2, runtime_fields) -> - let l1' = List.map (fun (i,c) -> i, sub.module_coercion sub c) l1 in - let l2' = - List.map (fun (id,i,c) -> id, i, sub.module_coercion sub c) l2 - in - Tcoerce_structure (l1', l2', runtime_fields) - | Tcoerce_primitive pc -> - Tcoerce_primitive {pc with pc_env = sub.env sub pc.pc_env} - -let module_expr sub x = - let mod_env = sub.env sub x.mod_env in - let mod_desc = - match x.mod_desc with - | Tmod_ident _ as d -> d - | Tmod_structure st -> Tmod_structure (sub.structure sub st) - | Tmod_functor (id, s, mtype, mexpr) -> - Tmod_functor ( - id, - s, - opt (sub.module_type sub) mtype, - sub.module_expr sub mexpr - ) - | Tmod_apply (mexp1, mexp2, c) -> - Tmod_apply ( - sub.module_expr sub mexp1, - sub.module_expr sub mexp2, - sub.module_coercion sub c - ) - | Tmod_constraint (mexpr, mt, Tmodtype_implicit, c) -> - Tmod_constraint (sub.module_expr sub mexpr, mt, Tmodtype_implicit, - sub.module_coercion sub c) - | Tmod_constraint (mexpr, mt, Tmodtype_explicit mtype, c) -> - Tmod_constraint ( - sub.module_expr sub mexpr, - mt, - Tmodtype_explicit (sub.module_type sub mtype), - sub.module_coercion sub c - ) - | Tmod_unpack (exp, mty) -> - Tmod_unpack - ( - sub.expr sub exp, - mty - ) - in - {x with mod_desc; mod_env} - -let module_binding sub x = - let mb_expr = sub.module_expr sub x.mb_expr in - {x with mb_expr} - - -let class_type sub x = - let cltyp_env = sub.env sub x.cltyp_env in - let cltyp_desc = - match x.cltyp_desc with - | Tcty_signature csg -> Tcty_signature (sub.class_signature sub csg) - | Tcty_constr (path, lid, list) -> - Tcty_constr ( - path, - lid, - List.map (sub.typ sub) list - ) - | Tcty_arrow (label, ct, cl) -> - Tcty_arrow - (label, - sub.typ sub ct, - sub.class_type sub cl - ) - | Tcty_open (ovf, p, lid, env, e) -> - Tcty_open (ovf, p, lid, sub.env sub env, sub.class_type sub e) - in - {x with cltyp_desc; cltyp_env} - -let class_signature sub x = - let csig_self = sub.typ sub x.csig_self in - let csig_fields = List.map (sub.class_type_field sub) x.csig_fields in - {x with csig_self; csig_fields} - -let class_type_field sub x = - let ctf_desc = - match x.ctf_desc with - | Tctf_inherit ct -> - Tctf_inherit (sub.class_type sub ct) - | Tctf_val (s, mut, virt, ct) -> - Tctf_val (s, mut, virt, sub.typ sub ct) - | Tctf_method (s, priv, virt, ct) -> - Tctf_method (s, priv, virt, sub.typ sub ct) - | Tctf_constraint (ct1, ct2) -> - Tctf_constraint (sub.typ sub ct1, sub.typ sub ct2) - | Tctf_attribute _ as d -> d - in - {x with ctf_desc} - -let typ sub x = - let ctyp_env = sub.env sub x.ctyp_env in - let ctyp_desc = - match x.ctyp_desc with - | Ttyp_any - | Ttyp_var _ as d -> d - | Ttyp_arrow (label, ct1, ct2) -> - Ttyp_arrow (label, sub.typ sub ct1, sub.typ sub ct2) - | Ttyp_tuple list -> Ttyp_tuple (List.map (sub.typ sub) list) - | Ttyp_constr (path, lid, list) -> - Ttyp_constr (path, lid, List.map (sub.typ sub) list) - | Ttyp_object (list, closed) -> - Ttyp_object ((List.map (sub.object_field sub) list), closed) - | Ttyp_class (path, lid, list) -> - Ttyp_class - (path, - lid, - List.map (sub.typ sub) list - ) - | Ttyp_alias (ct, s) -> - Ttyp_alias (sub.typ sub ct, s) - | Ttyp_variant (list, closed, labels) -> - Ttyp_variant (List.map (sub.row_field sub) list, closed, labels) - | Ttyp_poly (sl, ct) -> - Ttyp_poly (sl, sub.typ sub ct) - | Ttyp_package pack -> - Ttyp_package (sub.package_type sub pack) - in - {x with ctyp_desc; ctyp_env} - - -let row_field sub = function - | Ttag (label, attrs, b, list) -> - Ttag (label, attrs, b, List.map (sub.typ sub) list) - | Tinherit ct -> Tinherit (sub.typ sub ct) - -let object_field sub = function - | OTtag (label, attrs, ct) -> - OTtag (label, attrs, (sub.typ sub ct)) - | OTinherit ct -> OTinherit (sub.typ sub ct) - - - -let value_bindings sub (rec_flag, list) = - (rec_flag, List.map (sub.value_binding sub) list) - -let cases sub l = - List.map (sub.case sub) l - -let case sub {c_lhs; c_guard; c_rhs} = - { - c_lhs = sub.pat sub c_lhs; - c_guard = opt (sub.expr sub) c_guard; - c_rhs = sub.expr sub c_rhs; - } - -let value_binding sub x = - let vb_pat = sub.pat sub x.vb_pat in - let vb_expr = sub.expr sub x.vb_expr in - {x with vb_pat; vb_expr} - -let env _sub x = x - -let default = - { - case; - cases; - class_description; - class_signature; - class_type; - class_type_declaration; - class_type_field; - env; - expr; - extension_constructor; - module_binding; - module_coercion; - module_declaration; - module_expr; - module_type; - module_type_declaration; - package_type; - pat; - row_field; - object_field; - signature; - signature_item; - structure; - structure_item; - typ; - type_declaration; - type_declarations; - type_extension; - type_kind; - value_binding; - value_bindings; - value_description; - with_constraint; - } diff --git a/src/compiler-libs-406/tast_mapper.mli b/src/compiler-libs-406/tast_mapper.mli deleted file mode 100644 index 4fd87b69..00000000 --- a/src/compiler-libs-406/tast_mapper.mli +++ /dev/null @@ -1,64 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Alain Frisch, LexiFi *) -(* *) -(* Copyright 2015 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Asttypes -open Typedtree - -(** {1 A generic Typedtree mapper} *) - -type mapper = - { - case: mapper -> case -> case; - cases: mapper -> case list -> case list; - class_description: mapper -> class_description -> class_description; - class_signature: mapper -> class_signature -> class_signature; - class_type: mapper -> class_type -> class_type; - class_type_declaration: mapper -> class_type_declaration -> - class_type_declaration; - class_type_field: mapper -> class_type_field -> class_type_field; - env: mapper -> Env.t -> Env.t; - expr: mapper -> expression -> expression; - extension_constructor: mapper -> extension_constructor -> - extension_constructor; - module_binding: mapper -> module_binding -> module_binding; - module_coercion: mapper -> module_coercion -> module_coercion; - module_declaration: mapper -> module_declaration -> module_declaration; - module_expr: mapper -> module_expr -> module_expr; - module_type: mapper -> module_type -> module_type; - module_type_declaration: - mapper -> module_type_declaration -> module_type_declaration; - package_type: mapper -> package_type -> package_type; - pat: mapper -> pattern -> pattern; - row_field: mapper -> row_field -> row_field; - object_field: mapper -> object_field -> object_field; - signature: mapper -> signature -> signature; - signature_item: mapper -> signature_item -> signature_item; - structure: mapper -> structure -> structure; - structure_item: mapper -> structure_item -> structure_item; - typ: mapper -> core_type -> core_type; - type_declaration: mapper -> type_declaration -> type_declaration; - type_declarations: mapper -> (rec_flag * type_declaration list) -> - (rec_flag * type_declaration list); - type_extension: mapper -> type_extension -> type_extension; - type_kind: mapper -> type_kind -> type_kind; - value_binding: mapper -> value_binding -> value_binding; - value_bindings: mapper -> (rec_flag * value_binding list) -> - (rec_flag * value_binding list); - value_description: mapper -> value_description -> value_description; - with_constraint: mapper -> with_constraint -> with_constraint; - } - - -val default: mapper diff --git a/src/compiler-libs-406/tbl.ml b/src/compiler-libs-406/tbl.ml deleted file mode 100644 index fa278b43..00000000 --- a/src/compiler-libs-406/tbl.ml +++ /dev/null @@ -1,123 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -type ('k, 'v) t = - Empty - | Node of ('k, 'v) t * 'k * 'v * ('k, 'v) t * int - -let empty = Empty - -let height = function - Empty -> 0 - | Node(_,_,_,_,h) -> h - -let create l x d r = - let hl = height l and hr = height r in - Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1)) - -let bal l x d r = - let hl = height l and hr = height r in - if hl > hr + 1 then - match l with - | Node (ll, lv, ld, lr, _) when height ll >= height lr -> - create ll lv ld (create lr x d r) - | Node (ll, lv, ld, Node (lrl, lrv, lrd, lrr, _), _) -> - create (create ll lv ld lrl) lrv lrd (create lrr x d r) - | _ -> assert false - else if hr > hl + 1 then - match r with - | Node (rl, rv, rd, rr, _) when height rr >= height rl -> - create (create l x d rl) rv rd rr - | Node (Node (rll, rlv, rld, rlr, _), rv, rd, rr, _) -> - create (create l x d rll) rlv rld (create rlr rv rd rr) - | _ -> assert false - else - create l x d r - -let rec add x data = function - Empty -> - Node(Empty, x, data, Empty, 1) - | Node(l, v, d, r, h) -> - let c = compare x v in - if c = 0 then - Node(l, x, data, r, h) - else if c < 0 then - bal (add x data l) v d r - else - bal l v d (add x data r) - -let rec find x = function - Empty -> - raise Not_found - | Node(l, v, d, r, _) -> - let c = compare x v in - if c = 0 then d - else find x (if c < 0 then l else r) - -let rec find_str (x : string) = function - Empty -> - raise Not_found - | Node(l, v, d, r, _) -> - let c = compare x v in - if c = 0 then d - else find_str x (if c < 0 then l else r) - -let rec mem x = function - Empty -> false - | Node(l, v, _d, r, _) -> - let c = compare x v in - c = 0 || mem x (if c < 0 then l else r) - -let rec merge t1 t2 = - match (t1, t2) with - (Empty, t) -> t - | (t, Empty) -> t - | (Node(l1, v1, d1, r1, _h1), Node(l2, v2, d2, r2, _h2)) -> - bal l1 v1 d1 (bal (merge r1 l2) v2 d2 r2) - -let rec remove x = function - Empty -> - Empty - | Node(l, v, d, r, _h) -> - let c = compare x v in - if c = 0 then - merge l r - else if c < 0 then - bal (remove x l) v d r - else - bal l v d (remove x r) - -let rec iter f = function - Empty -> () - | Node(l, v, d, r, _) -> - iter f l; f v d; iter f r - -let rec map f = function - Empty -> Empty - | Node(l, v, d, r, h) -> Node(map f l, v, f v d, map f r, h) - -let rec fold f m accu = - match m with - | Empty -> accu - | Node(l, v, d, r, _) -> - fold f r (f v d (fold f l accu)) - -open Format - -let print print_key print_data ppf tbl = - let print_tbl ppf tbl = - iter (fun k d -> fprintf ppf "@[<2>%a ->@ %a;@]@ " print_key k print_data d) - tbl in - fprintf ppf "@[[[%a]]@]" print_tbl tbl diff --git a/src/compiler-libs-406/tbl.mli b/src/compiler-libs-406/tbl.mli deleted file mode 100644 index d23b959c..00000000 --- a/src/compiler-libs-406/tbl.mli +++ /dev/null @@ -1,34 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Association tables from any ordered type to any type. - We use the generic ordering to compare keys. *) - -type ('k, 'v) t - -val empty: ('k, 'v) t -val add: 'k -> 'v -> ('k, 'v) t -> ('k, 'v) t -val find: 'k -> ('k, 'v) t -> 'v -val find_str: string -> (string, 'v) t -> 'v -val mem: 'k -> ('k, 'v) t -> bool -val remove: 'k -> ('k, 'v) t -> ('k, 'v) t -val iter: ('k -> 'v -> unit) -> ('k, 'v) t -> unit -val map: ('k -> 'v1 -> 'v2) -> ('k, 'v1) t -> ('k, 'v2) t -val fold: ('k -> 'v -> 'acc -> 'acc) -> ('k, 'v) t -> 'acc -> 'acc - -open Format - -val print: (formatter -> 'k -> unit) -> (formatter -> 'v -> unit) -> - formatter -> ('k, 'v) t -> unit diff --git a/src/compiler-libs-406/typedtree.ml b/src/compiler-libs-406/typedtree.ml deleted file mode 100644 index 8aa47a14..00000000 --- a/src/compiler-libs-406/typedtree.ml +++ /dev/null @@ -1,569 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Abstract syntax tree after typing *) - -open Misc -open Asttypes -open Types - -(* Value expressions for the core language *) - -type partial = Partial | Total - -type attribute = Parsetree.attribute -type attributes = attribute list - -type pattern = - { pat_desc: pattern_desc; - pat_loc: Location.t; - pat_extra : (pat_extra * Location.t * attribute list) list; - pat_type: type_expr; - mutable pat_env: Env.t; - pat_attributes: attribute list; - } - -and pat_extra = - | Tpat_constraint of core_type - | Tpat_type of Path.t * Longident.t loc - | Tpat_open of Path.t * Longident.t loc * Env.t - | Tpat_unpack - -and pattern_desc = - Tpat_any - | Tpat_var of Ident.t * string loc - | Tpat_alias of pattern * Ident.t * string loc - | Tpat_constant of constant - | Tpat_tuple of pattern list - | Tpat_construct of - Longident.t loc * constructor_description * pattern list - | Tpat_variant of label * pattern option * row_desc ref - | Tpat_record of - (Longident.t loc * label_description * pattern) list * - closed_flag - | Tpat_array of pattern list - | Tpat_or of pattern * pattern * row_desc option - | Tpat_lazy of pattern - -and expression = - { exp_desc: expression_desc; - exp_loc: Location.t; - exp_extra: (exp_extra * Location.t * attribute list) list; - exp_type: type_expr; - exp_env: Env.t; - exp_attributes: attribute list; - } - -and exp_extra = - | Texp_constraint of core_type - | Texp_coerce of core_type option * core_type - | Texp_open of override_flag * Path.t * Longident.t loc * Env.t - | Texp_poly of core_type option - | Texp_newtype of string - -and expression_desc = - Texp_ident of Path.t * Longident.t loc * Types.value_description - | Texp_constant of constant - | Texp_let of rec_flag * value_binding list * expression - | Texp_function of { arg_label : arg_label; param : Ident.t; - cases : case list; partial : partial; } - | Texp_apply of expression * (arg_label * expression option) list - | Texp_match of expression * case list * case list * partial - | Texp_try of expression * case list - | Texp_tuple of expression list - | Texp_construct of - Longident.t loc * constructor_description * expression list - | Texp_variant of label * expression option - | Texp_record of { - fields : ( Types.label_description * record_label_definition ) array; - representation : Types.record_representation; - extended_expression : expression option; - } - | Texp_field of expression * Longident.t loc * label_description - | Texp_setfield of - expression * Longident.t loc * label_description * expression - | Texp_array of expression list - | Texp_ifthenelse of expression * expression * expression option - | Texp_sequence of expression * expression - | Texp_while of expression * expression - | Texp_for of - Ident.t * Parsetree.pattern * expression * expression * direction_flag * - expression - | Texp_send of expression * meth * expression option - | Texp_new of unit - | Texp_instvar of unit - | Texp_setinstvar of unit - | Texp_override of unit - | Texp_letmodule of Ident.t * string loc * module_expr * expression - | Texp_letexception of extension_constructor * expression - | Texp_assert of expression - | Texp_lazy of expression - | Texp_object of unit - | Texp_pack of module_expr - | Texp_unreachable - | Texp_extension_constructor of Longident.t loc * Path.t - -and meth = - Tmeth_name of string - -and case = - { - c_lhs: pattern; - c_guard: expression option; - c_rhs: expression; - } - -and record_label_definition = - | Kept of Types.type_expr - | Overridden of Longident.t loc * expression - -(* Value expressions for the class language *) - - - - - -(* Value expressions for the module language *) - -and module_expr = - { mod_desc: module_expr_desc; - mod_loc: Location.t; - mod_type: Types.module_type; - mod_env: Env.t; - mod_attributes: attribute list; - } - -and module_type_constraint = - Tmodtype_implicit -| Tmodtype_explicit of module_type - -and module_expr_desc = - Tmod_ident of Path.t * Longident.t loc - | Tmod_structure of structure - | Tmod_functor of Ident.t * string loc * module_type option * module_expr - | Tmod_apply of module_expr * module_expr * module_coercion - | Tmod_constraint of - module_expr * Types.module_type * module_type_constraint * module_coercion - | Tmod_unpack of expression * Types.module_type - -and structure = { - str_items : structure_item list; - str_type : Types.signature; - str_final_env : Env.t; -} - -and structure_item = - { str_desc : structure_item_desc; - str_loc : Location.t; - str_env : Env.t - } - -and structure_item_desc = - Tstr_eval of expression * attributes - | Tstr_value of rec_flag * value_binding list - | Tstr_primitive of value_description - | Tstr_type of rec_flag * type_declaration list - | Tstr_typext of type_extension - | Tstr_exception of extension_constructor - | Tstr_module of module_binding - | Tstr_recmodule of module_binding list - | Tstr_modtype of module_type_declaration - | Tstr_open of open_description - | Tstr_class of unit - | Tstr_class_type of (Ident.t * string loc * class_type_declaration) list - | Tstr_include of include_declaration - | Tstr_attribute of attribute - -and module_binding = - { - mb_id: Ident.t; - mb_name: string loc; - mb_expr: module_expr; - mb_attributes: attribute list; - mb_loc: Location.t; - } - -and value_binding = - { - vb_pat: pattern; - vb_expr: expression; - vb_attributes: attributes; - vb_loc: Location.t; - } - -and module_coercion = - Tcoerce_none - | Tcoerce_structure of (int * module_coercion) list * - (Ident.t * int * module_coercion) list * - string list (* runtime fields *) - | Tcoerce_functor of module_coercion * module_coercion - | Tcoerce_primitive of primitive_coercion - | Tcoerce_alias of Path.t * module_coercion - -and module_type = - { mty_desc: module_type_desc; - mty_type : Types.module_type; - mty_env : Env.t; - mty_loc: Location.t; - mty_attributes: attribute list; - } - -and module_type_desc = - Tmty_ident of Path.t * Longident.t loc - | Tmty_signature of signature - | Tmty_functor of Ident.t * string loc * module_type option * module_type - | Tmty_with of module_type * (Path.t * Longident.t loc * with_constraint) list - | Tmty_typeof of module_expr - | Tmty_alias of Path.t * Longident.t loc - -(* Keep primitive type information for type-based lambda-code specialization *) -and primitive_coercion = - { - pc_desc: Primitive.description; - pc_type: type_expr; - pc_env: Env.t; - pc_loc : Location.t; - pc_id : Ident.t; (*RE:Added *) - } - -and signature = { - sig_items : signature_item list; - sig_type : Types.signature; - sig_final_env : Env.t; -} - -and signature_item = - { sig_desc: signature_item_desc; - sig_env : Env.t; (* BINANNOT ADDED *) - sig_loc: Location.t } - -and signature_item_desc = - Tsig_value of value_description - | Tsig_type of rec_flag * type_declaration list - | Tsig_typext of type_extension - | Tsig_exception of extension_constructor - | Tsig_module of module_declaration - | Tsig_recmodule of module_declaration list - | Tsig_modtype of module_type_declaration - | Tsig_open of open_description - | Tsig_include of include_description - | Tsig_class of class_description list - | Tsig_class_type of class_type_declaration list - | Tsig_attribute of attribute - -and module_declaration = - { - md_id: Ident.t; - md_name: string loc; - md_type: module_type; - md_attributes: attribute list; - md_loc: Location.t; - } - -and module_type_declaration = - { - mtd_id: Ident.t; - mtd_name: string loc; - mtd_type: module_type option; - mtd_attributes: attribute list; - mtd_loc: Location.t; - } - -and open_description = - { - open_path: Path.t; - open_txt: Longident.t loc; - open_override: override_flag; - open_loc: Location.t; - open_attributes: attribute list; - } - -and 'a include_infos = - { - incl_mod: 'a; - incl_type: Types.signature; - incl_loc: Location.t; - incl_attributes: attribute list; - } - -and include_description = module_type include_infos - -and include_declaration = module_expr include_infos - -and with_constraint = - Twith_type of type_declaration - | Twith_module of Path.t * Longident.t loc - | Twith_typesubst of type_declaration - | Twith_modsubst of Path.t * Longident.t loc - -and core_type = -(* mutable because of [Typeclass.declare_method] *) - { mutable ctyp_desc : core_type_desc; - mutable ctyp_type : type_expr; - ctyp_env : Env.t; (* BINANNOT ADDED *) - ctyp_loc : Location.t; - ctyp_attributes: attribute list; - } - -and core_type_desc = - Ttyp_any - | Ttyp_var of string - | Ttyp_arrow of arg_label * core_type * core_type - | Ttyp_tuple of core_type list - | Ttyp_constr of Path.t * Longident.t loc * core_type list - | Ttyp_object of object_field list * closed_flag - | Ttyp_class of Path.t * Longident.t loc * core_type list - | Ttyp_alias of core_type * string - | Ttyp_variant of row_field list * closed_flag * label list option - | Ttyp_poly of string list * core_type - | Ttyp_package of package_type - -and package_type = { - pack_path : Path.t; - pack_fields : (Longident.t loc * core_type) list; - pack_type : Types.module_type; - pack_txt : Longident.t loc; -} - -and row_field = - Ttag of string loc * attributes * bool * core_type list - | Tinherit of core_type - -and object_field = - | OTtag of string loc * attributes * core_type - | OTinherit of core_type - -and value_description = - { val_id: Ident.t; - val_name: string loc; - val_desc: core_type; - val_val: Types.value_description; - val_prim: string list; - val_loc: Location.t; - val_attributes: attribute list; - } - -and type_declaration = - { typ_id: Ident.t; - typ_name: string loc; - typ_params: (core_type * variance) list; - typ_type: Types.type_declaration; - typ_cstrs: (core_type * core_type * Location.t) list; - typ_kind: type_kind; - typ_private: private_flag; - typ_manifest: core_type option; - typ_loc: Location.t; - typ_attributes: attribute list; - } - -and type_kind = - Ttype_abstract - | Ttype_variant of constructor_declaration list - | Ttype_record of label_declaration list - | Ttype_open - -and label_declaration = - { - ld_id: Ident.t; - ld_name: string loc; - ld_mutable: mutable_flag; - ld_type: core_type; - ld_loc: Location.t; - ld_attributes: attribute list; - } - -and constructor_declaration = - { - cd_id: Ident.t; - cd_name: string loc; - cd_args: constructor_arguments; - cd_res: core_type option; - cd_loc: Location.t; - cd_attributes: attribute list; - } - -and constructor_arguments = - | Cstr_tuple of core_type list - | Cstr_record of label_declaration list - -and type_extension = - { - tyext_path: Path.t; - tyext_txt: Longident.t loc; - tyext_params: (core_type * variance) list; - tyext_constructors: extension_constructor list; - tyext_private: private_flag; - tyext_attributes: attribute list; - } - -and extension_constructor = - { - ext_id: Ident.t; - ext_name: string loc; - ext_type: Types.extension_constructor; - ext_kind: extension_constructor_kind; - ext_loc: Location.t; - ext_attributes: attribute list; - } - -and extension_constructor_kind = - Text_decl of constructor_arguments * core_type option - | Text_rebind of Path.t * Longident.t loc - -and class_type = - { - cltyp_desc: class_type_desc; - cltyp_type: Types.class_type; - cltyp_env: Env.t; - cltyp_loc: Location.t; - cltyp_attributes: attribute list; - } - -and class_type_desc = - Tcty_constr of Path.t * Longident.t loc * core_type list - | Tcty_signature of class_signature - | Tcty_arrow of arg_label * core_type * class_type - | Tcty_open of override_flag * Path.t * Longident.t loc * Env.t * class_type - -and class_signature = { - csig_self: core_type; - csig_fields: class_type_field list; - csig_type: Types.class_signature; - } - -and class_type_field = { - ctf_desc: class_type_field_desc; - ctf_loc: Location.t; - ctf_attributes: attribute list; - } - -and class_type_field_desc = - | Tctf_inherit of class_type - | Tctf_val of (string * mutable_flag * virtual_flag * core_type) - | Tctf_method of (string * private_flag * virtual_flag * core_type) - | Tctf_constraint of (core_type * core_type) - | Tctf_attribute of attribute - - -and class_description = - class_type class_infos - -and class_type_declaration = - class_type class_infos - -and 'a class_infos = - { ci_virt: virtual_flag; - ci_params: (core_type * variance) list; - ci_id_name: string loc; - ci_id_class: Ident.t; - ci_id_class_type: Ident.t; - ci_id_object: Ident.t; - ci_id_typehash: Ident.t; - ci_expr: 'a; - ci_decl: Types.class_declaration; - ci_type_decl: Types.class_type_declaration; - ci_loc: Location.t; - ci_attributes: attribute list; - } - -(* Auxiliary functions over the a.s.t. *) - -let iter_pattern_desc f = function - | Tpat_alias(p, _, _) -> f p - | Tpat_tuple patl -> List.iter f patl - | Tpat_construct(_, _, patl) -> List.iter f patl - | Tpat_variant(_, pat, _) -> may f pat - | Tpat_record (lbl_pat_list, _) -> - List.iter (fun (_, _, pat) -> f pat) lbl_pat_list - | Tpat_array patl -> List.iter f patl - | Tpat_or(p1, p2, _) -> f p1; f p2 - | Tpat_lazy p -> f p - | Tpat_any - | Tpat_var _ - | Tpat_constant _ -> () - -let map_pattern_desc f d = - match d with - | Tpat_alias (p1, id, s) -> - Tpat_alias (f p1, id, s) - | Tpat_tuple pats -> - Tpat_tuple (List.map f pats) - | Tpat_record (lpats, closed) -> - Tpat_record (List.map (fun (lid, l,p) -> lid, l, f p) lpats, closed) - | Tpat_construct (lid, c,pats) -> - Tpat_construct (lid, c, List.map f pats) - | Tpat_array pats -> - Tpat_array (List.map f pats) - | Tpat_lazy p1 -> Tpat_lazy (f p1) - | Tpat_variant (x1, Some p1, x2) -> - Tpat_variant (x1, Some (f p1), x2) - | Tpat_or (p1,p2,path) -> - Tpat_or (f p1, f p2, path) - | Tpat_var _ - | Tpat_constant _ - | Tpat_any - | Tpat_variant (_,None,_) -> d - -(* List the identifiers bound by a pattern or a let *) - -let idents = ref([]: (Ident.t * string loc) list) - -let rec bound_idents pat = - match pat.pat_desc with - | Tpat_var (id,s) -> idents := (id,s) :: !idents - | Tpat_alias(p, id, s ) -> - bound_idents p; idents := (id,s) :: !idents - | Tpat_or(p1, _, _) -> - (* Invariant : both arguments binds the same variables *) - bound_idents p1 - | d -> iter_pattern_desc bound_idents d - -let pat_bound_idents pat = - idents := []; - bound_idents pat; - let res = !idents in - idents := []; - List.map fst res - -let rev_let_bound_idents_with_loc bindings = - idents := []; - List.iter (fun vb -> bound_idents vb.vb_pat) bindings; - let res = !idents in idents := []; res - -let let_bound_idents_with_loc pat_expr_list = - List.rev(rev_let_bound_idents_with_loc pat_expr_list) - -let rev_let_bound_idents pat = List.map fst (rev_let_bound_idents_with_loc pat) -let let_bound_idents pat = List.map fst (let_bound_idents_with_loc pat) - -let alpha_var env id = List.assoc id env - -let rec alpha_pat env p = match p.pat_desc with -| Tpat_var (id, s) -> (* note the ``Not_found'' case *) - {p with pat_desc = - try Tpat_var (alpha_var env id, s) with - | Not_found -> Tpat_any} -| Tpat_alias (p1, id, s) -> - let new_p = alpha_pat env p1 in - begin try - {p with pat_desc = Tpat_alias (new_p, alpha_var env id, s)} - with - | Not_found -> new_p - end -| d -> - {p with pat_desc = map_pattern_desc (alpha_pat env) d} - -let mkloc = Location.mkloc -let mknoloc = Location.mknoloc diff --git a/src/compiler-libs-406/typedtree.mli b/src/compiler-libs-406/typedtree.mli deleted file mode 100644 index fac00f22..00000000 --- a/src/compiler-libs-406/typedtree.mli +++ /dev/null @@ -1,616 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Abstract syntax tree after typing *) - - -(** By comparison with {!Parsetree}: - - Every {!Longindent.t} is accompanied by a resolved {!Path.t}. - -*) - -open Asttypes -open Types - -(* Value expressions for the core language *) - -type partial = Partial | Total - -(** {1 Extension points} *) - -type attribute = Parsetree.attribute -type attributes = attribute list - -(** {1 Core language} *) - -type pattern = - { pat_desc: pattern_desc; - pat_loc: Location.t; - pat_extra : (pat_extra * Location.t * attributes) list; - pat_type: type_expr; - mutable pat_env: Env.t; - pat_attributes: attributes; - } - -and pat_extra = - | Tpat_constraint of core_type - (** P : T { pat_desc = P - ; pat_extra = (Tpat_constraint T, _, _) :: ... } - *) - | Tpat_type of Path.t * Longident.t loc - (** #tconst { pat_desc = disjunction - ; pat_extra = (Tpat_type (P, "tconst"), _, _) :: ...} - - where [disjunction] is a [Tpat_or _] representing the - branches of [tconst]. - *) - | Tpat_open of Path.t * Longident.t loc * Env.t - | Tpat_unpack - (** (module P) { pat_desc = Tpat_var "P" - ; pat_extra = (Tpat_unpack, _, _) :: ... } - *) - -and pattern_desc = - Tpat_any - (** _ *) - | Tpat_var of Ident.t * string loc - (** x *) - | Tpat_alias of pattern * Ident.t * string loc - (** P as a *) - | Tpat_constant of constant - (** 1, 'a', "true", 1.0, 1l, 1L, 1n *) - | Tpat_tuple of pattern list - (** (P1, ..., Pn) - - Invariant: n >= 2 - *) - | Tpat_construct of - Longident.t loc * constructor_description * pattern list - (** C [] - C P [P] - C (P1, ..., Pn) [P1; ...; Pn] - *) - | Tpat_variant of label * pattern option * row_desc ref - (** `A (None) - `A P (Some P) - - See {!Types.row_desc} for an explanation of the last parameter. - *) - | Tpat_record of - (Longident.t loc * label_description * pattern) list * - closed_flag - (** { l1=P1; ...; ln=Pn } (flag = Closed) - { l1=P1; ...; ln=Pn; _} (flag = Open) - - Invariant: n > 0 - *) - | Tpat_array of pattern list - (** [| P1; ...; Pn |] *) - | Tpat_or of pattern * pattern * row_desc option - (** P1 | P2 - - [row_desc] = [Some _] when translating [Ppat_type _], - [None] otherwise. - *) - | Tpat_lazy of pattern - (** lazy P *) - -and expression = - { exp_desc: expression_desc; - exp_loc: Location.t; - exp_extra: (exp_extra * Location.t * attributes) list; - exp_type: type_expr; - exp_env: Env.t; - exp_attributes: attributes; - } - -and exp_extra = - | Texp_constraint of core_type - (** E : T *) - | Texp_coerce of core_type option * core_type - (** E :> T [Texp_coerce (None, T)] - E : T0 :> T [Texp_coerce (Some T0, T)] - *) - | Texp_open of override_flag * Path.t * Longident.t loc * Env.t - (** let open[!] M in [Texp_open (!, P, M, env)] - where [env] is the environment after opening [P] - *) - | Texp_poly of core_type option - (** Used for method bodies. *) - | Texp_newtype of string - (** fun (type t) -> *) - -and expression_desc = - Texp_ident of Path.t * Longident.t loc * Types.value_description - (** x - M.x - *) - | Texp_constant of constant - (** 1, 'a', "true", 1.0, 1l, 1L, 1n *) - | Texp_let of rec_flag * value_binding list * expression - (** let P1 = E1 and ... and Pn = EN in E (flag = Nonrecursive) - let rec P1 = E1 and ... and Pn = EN in E (flag = Recursive) - *) - | Texp_function of { arg_label : arg_label; param : Ident.t; - cases : case list; partial : partial; } - (** [Pexp_fun] and [Pexp_function] both translate to [Texp_function]. - See {!Parsetree} for more details. - - [param] is the identifier that is to be used to name the - parameter of the function. - - partial = - [Partial] if the pattern match is partial - [Total] otherwise. - *) - | Texp_apply of expression * (arg_label * expression option) list - (** E0 ~l1:E1 ... ~ln:En - - The expression can be None if the expression is abstracted over - this argument. It currently appears when a label is applied. - - For example: - let f x ~y = x + y in - f ~y:3 - - The resulting typedtree for the application is: - Texp_apply (Texp_ident "f/1037", - [(Nolabel, None); - (Labelled "y", Some (Texp_constant Const_int 3)) - ]) - *) - | Texp_match of expression * case list * case list * partial - (** match E0 with - | P1 -> E1 - | P2 -> E2 - | exception P3 -> E3 - - [Texp_match (E0, [(P1, E1); (P2, E2)], [(P3, E3)], _)] - *) - | Texp_try of expression * case list - (** try E with P1 -> E1 | ... | PN -> EN *) - | Texp_tuple of expression list - (** (E1, ..., EN) *) - | Texp_construct of - Longident.t loc * constructor_description * expression list - (** C [] - C E [E] - C (E1, ..., En) [E1;...;En] - *) - | Texp_variant of label * expression option - | Texp_record of { - fields : ( Types.label_description * record_label_definition ) array; - representation : Types.record_representation; - extended_expression : expression option; - } - (** { l1=P1; ...; ln=Pn } (extended_expression = None) - { E0 with l1=P1; ...; ln=Pn } (extended_expression = Some E0) - - Invariant: n > 0 - - If the type is { l1: t1; l2: t2 }, the expression - { E0 with t2=P2 } is represented as - Texp_record - { fields = [| l1, Kept t1; l2 Override P2 |]; representation; - extended_expression = Some E0 } - *) - | Texp_field of expression * Longident.t loc * label_description - | Texp_setfield of - expression * Longident.t loc * label_description * expression - | Texp_array of expression list - | Texp_ifthenelse of expression * expression * expression option - | Texp_sequence of expression * expression - | Texp_while of expression * expression - | Texp_for of - Ident.t * Parsetree.pattern * expression * expression * direction_flag * - expression - | Texp_send of expression * meth * expression option - | Texp_new of unit - | Texp_instvar of unit - | Texp_setinstvar of unit - | Texp_override of unit - | Texp_letmodule of Ident.t * string loc * module_expr * expression - | Texp_letexception of extension_constructor * expression - | Texp_assert of expression - | Texp_lazy of expression - | Texp_object of unit - | Texp_pack of module_expr - | Texp_unreachable - | Texp_extension_constructor of Longident.t loc * Path.t - -and meth = - Tmeth_name of string - -and case = - { - c_lhs: pattern; - c_guard: expression option; - c_rhs: expression; - } - -and record_label_definition = - | Kept of Types.type_expr - | Overridden of Longident.t loc * expression - - - -(* Value expressions for the module language *) - -and module_expr = - { mod_desc: module_expr_desc; - mod_loc: Location.t; - mod_type: Types.module_type; - mod_env: Env.t; - mod_attributes: attributes; - } - -(** Annotations for [Tmod_constraint]. *) -and module_type_constraint = - | Tmodtype_implicit - (** The module type constraint has been synthesized during typechecking. *) - | Tmodtype_explicit of module_type - (** The module type was in the source file. *) - -and module_expr_desc = - Tmod_ident of Path.t * Longident.t loc - | Tmod_structure of structure - | Tmod_functor of Ident.t * string loc * module_type option * module_expr - | Tmod_apply of module_expr * module_expr * module_coercion - | Tmod_constraint of - module_expr * Types.module_type * module_type_constraint * module_coercion - (** ME (constraint = Tmodtype_implicit) - (ME : MT) (constraint = Tmodtype_explicit MT) - *) - | Tmod_unpack of expression * Types.module_type - -and structure = { - str_items : structure_item list; - str_type : Types.signature; - str_final_env : Env.t; -} - -and structure_item = - { str_desc : structure_item_desc; - str_loc : Location.t; - str_env : Env.t - } - -and structure_item_desc = - Tstr_eval of expression * attributes - | Tstr_value of rec_flag * value_binding list - | Tstr_primitive of value_description - | Tstr_type of rec_flag * type_declaration list - | Tstr_typext of type_extension - | Tstr_exception of extension_constructor - | Tstr_module of module_binding - | Tstr_recmodule of module_binding list - | Tstr_modtype of module_type_declaration - | Tstr_open of open_description - | Tstr_class of unit - | Tstr_class_type of (Ident.t * string loc * class_type_declaration) list - | Tstr_include of include_declaration - | Tstr_attribute of attribute - -and module_binding = - { - mb_id: Ident.t; - mb_name: string loc; - mb_expr: module_expr; - mb_attributes: attributes; - mb_loc: Location.t; - } - -and value_binding = - { - vb_pat: pattern; - vb_expr: expression; - vb_attributes: attributes; - vb_loc: Location.t; - } - -and module_coercion = - Tcoerce_none - | Tcoerce_structure of (int * module_coercion) list * - (Ident.t * int * module_coercion) list * - string list (* runtime fields *) - | Tcoerce_functor of module_coercion * module_coercion - | Tcoerce_primitive of primitive_coercion - | Tcoerce_alias of Path.t * module_coercion - -and module_type = - { mty_desc: module_type_desc; - mty_type : Types.module_type; - mty_env : Env.t; - mty_loc: Location.t; - mty_attributes: attributes; - } - -and module_type_desc = - Tmty_ident of Path.t * Longident.t loc - | Tmty_signature of signature - | Tmty_functor of Ident.t * string loc * module_type option * module_type - | Tmty_with of module_type * (Path.t * Longident.t loc * with_constraint) list - | Tmty_typeof of module_expr - | Tmty_alias of Path.t * Longident.t loc - -and primitive_coercion = - { - pc_desc: Primitive.description; - pc_type: type_expr; - pc_env: Env.t; - pc_loc : Location.t; - pc_id : Ident.t; - } - -and signature = { - sig_items : signature_item list; - sig_type : Types.signature; - sig_final_env : Env.t; -} - -and signature_item = - { sig_desc: signature_item_desc; - sig_env : Env.t; (* BINANNOT ADDED *) - sig_loc: Location.t } - -and signature_item_desc = - Tsig_value of value_description - | Tsig_type of rec_flag * type_declaration list - | Tsig_typext of type_extension - | Tsig_exception of extension_constructor - | Tsig_module of module_declaration - | Tsig_recmodule of module_declaration list - | Tsig_modtype of module_type_declaration - | Tsig_open of open_description - | Tsig_include of include_description - | Tsig_class of class_description list - | Tsig_class_type of class_type_declaration list - | Tsig_attribute of attribute - -and module_declaration = - { - md_id: Ident.t; - md_name: string loc; - md_type: module_type; - md_attributes: attributes; - md_loc: Location.t; - } - -and module_type_declaration = - { - mtd_id: Ident.t; - mtd_name: string loc; - mtd_type: module_type option; - mtd_attributes: attributes; - mtd_loc: Location.t; - } - -and open_description = - { - open_path: Path.t; - open_txt: Longident.t loc; - open_override: override_flag; - open_loc: Location.t; - open_attributes: attribute list; - } - -and 'a include_infos = - { - incl_mod: 'a; - incl_type: Types.signature; - incl_loc: Location.t; - incl_attributes: attribute list; - } - -and include_description = module_type include_infos - -and include_declaration = module_expr include_infos - -and with_constraint = - Twith_type of type_declaration - | Twith_module of Path.t * Longident.t loc - | Twith_typesubst of type_declaration - | Twith_modsubst of Path.t * Longident.t loc - -and core_type = - { mutable ctyp_desc : core_type_desc; - (** mutable because of [Typeclass.declare_method] *) - mutable ctyp_type : type_expr; - (** mutable because of [Typeclass.declare_method] *) - ctyp_env : Env.t; (* BINANNOT ADDED *) - ctyp_loc : Location.t; - ctyp_attributes: attributes; - } - -and core_type_desc = - Ttyp_any - | Ttyp_var of string - | Ttyp_arrow of arg_label * core_type * core_type - | Ttyp_tuple of core_type list - | Ttyp_constr of Path.t * Longident.t loc * core_type list - | Ttyp_object of object_field list * closed_flag - | Ttyp_class of Path.t * Longident.t loc * core_type list - | Ttyp_alias of core_type * string - | Ttyp_variant of row_field list * closed_flag * label list option - | Ttyp_poly of string list * core_type - | Ttyp_package of package_type - -and package_type = { - pack_path : Path.t; - pack_fields : (Longident.t loc * core_type) list; - pack_type : Types.module_type; - pack_txt : Longident.t loc; -} - -and row_field = - Ttag of string loc * attributes * bool * core_type list - | Tinherit of core_type - -and object_field = - | OTtag of string loc * attributes * core_type - | OTinherit of core_type - -and value_description = - { val_id: Ident.t; - val_name: string loc; - val_desc: core_type; - val_val: Types.value_description; - val_prim: string list; - val_loc: Location.t; - val_attributes: attributes; - } - -and type_declaration = - { - typ_id: Ident.t; - typ_name: string loc; - typ_params: (core_type * variance) list; - typ_type: Types.type_declaration; - typ_cstrs: (core_type * core_type * Location.t) list; - typ_kind: type_kind; - typ_private: private_flag; - typ_manifest: core_type option; - typ_loc: Location.t; - typ_attributes: attributes; - } - -and type_kind = - Ttype_abstract - | Ttype_variant of constructor_declaration list - | Ttype_record of label_declaration list - | Ttype_open - -and label_declaration = - { - ld_id: Ident.t; - ld_name: string loc; - ld_mutable: mutable_flag; - ld_type: core_type; - ld_loc: Location.t; - ld_attributes: attributes; - } - -and constructor_declaration = - { - cd_id: Ident.t; - cd_name: string loc; - cd_args: constructor_arguments; - cd_res: core_type option; - cd_loc: Location.t; - cd_attributes: attributes; - } - -and constructor_arguments = - | Cstr_tuple of core_type list - | Cstr_record of label_declaration list - -and type_extension = - { - tyext_path: Path.t; - tyext_txt: Longident.t loc; - tyext_params: (core_type * variance) list; - tyext_constructors: extension_constructor list; - tyext_private: private_flag; - tyext_attributes: attributes; - } - -and extension_constructor = - { - ext_id: Ident.t; - ext_name: string loc; - ext_type : Types.extension_constructor; - ext_kind : extension_constructor_kind; - ext_loc : Location.t; - ext_attributes: attributes; - } - -and extension_constructor_kind = - Text_decl of constructor_arguments * core_type option - | Text_rebind of Path.t * Longident.t loc - -and class_type = - { - cltyp_desc: class_type_desc; - cltyp_type: Types.class_type; - cltyp_env: Env.t; - cltyp_loc: Location.t; - cltyp_attributes: attributes; - } - -and class_type_desc = - Tcty_constr of Path.t * Longident.t loc * core_type list - | Tcty_signature of class_signature - | Tcty_arrow of arg_label * core_type * class_type - | Tcty_open of override_flag * Path.t * Longident.t loc * Env.t * class_type - -and class_signature = { - csig_self : core_type; - csig_fields : class_type_field list; - csig_type : Types.class_signature; - } - -and class_type_field = { - ctf_desc: class_type_field_desc; - ctf_loc: Location.t; - ctf_attributes: attributes; - } - -and class_type_field_desc = - | Tctf_inherit of class_type - | Tctf_val of (string * mutable_flag * virtual_flag * core_type) - | Tctf_method of (string * private_flag * virtual_flag * core_type) - | Tctf_constraint of (core_type * core_type) - | Tctf_attribute of attribute - - -and class_description = - class_type class_infos - -and class_type_declaration = - class_type class_infos - -and 'a class_infos = - { ci_virt: virtual_flag; - ci_params: (core_type * variance) list; - ci_id_name : string loc; - ci_id_class: Ident.t; - ci_id_class_type : Ident.t; - ci_id_object : Ident.t; - ci_id_typehash : Ident.t; - ci_expr: 'a; - ci_decl: Types.class_declaration; - ci_type_decl : Types.class_type_declaration; - ci_loc: Location.t; - ci_attributes: attributes; - } - -(* Auxiliary functions over the a.s.t. *) - -val iter_pattern_desc: (pattern -> unit) -> pattern_desc -> unit -val map_pattern_desc: (pattern -> pattern) -> pattern_desc -> pattern_desc - -val let_bound_idents: value_binding list -> Ident.t list -val rev_let_bound_idents: value_binding list -> Ident.t list - -val let_bound_idents_with_loc: - value_binding list -> (Ident.t * string loc) list - -(** Alpha conversion of patterns *) -val alpha_pat: (Ident.t * Ident.t) list -> pattern -> pattern - -val mknoloc: 'a -> 'a Asttypes.loc -val mkloc: 'a -> Location.t -> 'a Asttypes.loc - -val pat_bound_idents: pattern -> Ident.t list diff --git a/src/compiler-libs-406/types.ml b/src/compiler-libs-406/types.ml deleted file mode 100644 index 9489b121..00000000 --- a/src/compiler-libs-406/types.ml +++ /dev/null @@ -1,340 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Representation of types and declarations *) - -open Asttypes - -(* Type expressions for the core language *) - -type type_expr = - { mutable desc: type_desc; - mutable level: int; - id: int } - -and type_desc = - Tvar of string option - | Tarrow of arg_label * type_expr * type_expr * commutable - | Ttuple of type_expr list - | Tconstr of Path.t * type_expr list * abbrev_memo ref - | Tobject of type_expr * (Path.t * type_expr list) option ref - | Tfield of string * field_kind * type_expr * type_expr - | Tnil - | Tlink of type_expr - | Tsubst of type_expr (* for copying *) - | Tvariant of row_desc - | Tunivar of string option - | Tpoly of type_expr * type_expr list - | Tpackage of Path.t * Longident.t list * type_expr list - -and row_desc = - { row_fields: (label * row_field) list; - row_more: type_expr; - row_bound: unit; - row_closed: bool; - row_fixed: bool; - row_name: (Path.t * type_expr list) option } - -and row_field = - Rpresent of type_expr option - | Reither of bool * type_expr list * bool * row_field option ref - (* 1st true denotes a constant constructor *) - (* 2nd true denotes a tag in a pattern matching, and - is erased later *) - | Rabsent - -and abbrev_memo = - Mnil - | Mcons of private_flag * Path.t * type_expr * type_expr * abbrev_memo - | Mlink of abbrev_memo ref - -and field_kind = - Fvar of field_kind option ref - | Fpresent - | Fabsent - -and commutable = - Cok - | Cunknown - | Clink of commutable ref - -module TypeOps = struct - type t = type_expr - let compare t1 t2 = t1.id - t2.id - let hash t = t.id - let equal t1 t2 = t1 == t2 -end - -(* Maps of methods and instance variables *) - -module OrderedString = - struct type t = string let compare (x:t) y = compare x y end -module Meths = Map.Make(OrderedString) -module Vars = Meths - -(* Value descriptions *) - -type value_description = - { val_type: type_expr; (* Type of the value *) - val_kind: value_kind; - val_loc: Location.t; - val_attributes: Parsetree.attributes; - } - -and value_kind = - Val_reg (* Regular value *) - | Val_prim of Primitive.description (* Primitive *) - -(* Variance *) - -module Variance = struct - type t = int - type f = May_pos | May_neg | May_weak | Inj | Pos | Neg | Inv - let single = function - | May_pos -> 1 - | May_neg -> 2 - | May_weak -> 4 - | Inj -> 8 - | Pos -> 16 - | Neg -> 32 - | Inv -> 64 - let union v1 v2 = v1 lor v2 - let inter v1 v2 = v1 land v2 - let subset v1 v2 = (v1 land v2 = v1) - let set x b v = - if b then v lor single x else v land (lnot (single x)) - let mem x = subset (single x) - let null = 0 - let may_inv = 7 - let full = 127 - let covariant = single May_pos lor single Pos lor single Inj - let swap f1 f2 v = - let v' = set f1 (mem f2 v) v in set f2 (mem f1 v) v' - let conjugate v = swap May_pos May_neg (swap Pos Neg v) - let get_upper v = (mem May_pos v, mem May_neg v) - let get_lower v = (mem Pos v, mem Neg v, mem Inv v, mem Inj v) -end - -(* Type definitions *) - -type type_declaration = - { type_params: type_expr list; - type_arity: int; - type_kind: type_kind; - type_private: private_flag; - type_manifest: type_expr option; - type_variance: Variance.t list; - type_newtype_level: (int * int) option; - type_loc: Location.t; - type_attributes: Parsetree.attributes; - type_immediate: bool; - type_unboxed: unboxed_status; - } - -and type_kind = - Type_abstract - | Type_record of label_declaration list * record_representation - | Type_variant of constructor_declaration list - | Type_open - -and record_representation = - Record_regular (* All fields are boxed / tagged *) - | Record_float (* All fields are floats *) - | Record_unboxed of bool (* Unboxed single-field record, inlined or not *) - | Record_inlined of {tag : int; name : string; num_nonconsts : int} (* Inlined record *) - | Record_extension (* Inlined record under extension *) - -and label_declaration = - { - ld_id: Ident.t; - ld_mutable: mutable_flag; - ld_type: type_expr; - ld_loc: Location.t; - ld_attributes: Parsetree.attributes; - } - -and constructor_declaration = - { - cd_id: Ident.t; - cd_args: constructor_arguments; - cd_res: type_expr option; - cd_loc: Location.t; - cd_attributes: Parsetree.attributes; - } - -and constructor_arguments = - | Cstr_tuple of type_expr list - | Cstr_record of label_declaration list - -and unboxed_status = - { - unboxed: bool; - default: bool; (* False if the unboxed field was set from an attribute. *) - } - -let unboxed_false_default_false = {unboxed = false; default = false} -let unboxed_false_default_true = {unboxed = false; default = true} -let unboxed_true_default_false = {unboxed = true; default = false} -let unboxed_true_default_true = {unboxed = true; default = true} - -type extension_constructor = - { ext_type_path: Path.t; - ext_type_params: type_expr list; - ext_args: constructor_arguments; - ext_ret_type: type_expr option; - ext_private: private_flag; - ext_loc: Location.t; - ext_attributes: Parsetree.attributes; } - -and type_transparence = - Type_public (* unrestricted expansion *) - | Type_new (* "new" type *) - | Type_private (* private type *) - -(* Type expressions for the class language *) - -module Concr = Set.Make(OrderedString) - -type class_type = - Cty_constr of Path.t * type_expr list * class_type - | Cty_signature of class_signature - | Cty_arrow of arg_label * type_expr * class_type - -and class_signature = - { csig_self: type_expr; - csig_vars: - (Asttypes.mutable_flag * Asttypes.virtual_flag * type_expr) Vars.t; - csig_concr: Concr.t; - csig_inher: (Path.t * type_expr list) list } - -type class_declaration = - { cty_params: type_expr list; - mutable cty_type: class_type; - cty_path: Path.t; - cty_new: type_expr option; - cty_variance: Variance.t list; - cty_loc: Location.t; - cty_attributes: Parsetree.attributes; - } - -type class_type_declaration = - { clty_params: type_expr list; - clty_type: class_type; - clty_path: Path.t; - clty_variance: Variance.t list; - clty_loc: Location.t; - clty_attributes: Parsetree.attributes; - } - -(* Type expressions for the module language *) - -type module_type = - Mty_ident of Path.t - | Mty_signature of signature - | Mty_functor of Ident.t * module_type option * module_type - | Mty_alias of alias_presence * Path.t - -and alias_presence = - | Mta_present - | Mta_absent - -and signature = signature_item list - -and signature_item = - Sig_value of Ident.t * value_description - | Sig_type of Ident.t * type_declaration * rec_status - | Sig_typext of Ident.t * extension_constructor * ext_status - | Sig_module of Ident.t * module_declaration * rec_status - | Sig_modtype of Ident.t * modtype_declaration - | Sig_class of Ident.t * class_declaration * rec_status - | Sig_class_type of Ident.t * class_type_declaration * rec_status - -and module_declaration = - { - md_type: module_type; - md_attributes: Parsetree.attributes; - md_loc: Location.t; - } - -and modtype_declaration = - { - mtd_type: module_type option; (* Note: abstract *) - mtd_attributes: Parsetree.attributes; - mtd_loc: Location.t; - } - -and rec_status = - Trec_not (* first in a nonrecursive group *) - | Trec_first (* first in a recursive group *) - | Trec_next (* not first in a recursive/nonrecursive group *) - -and ext_status = - Text_first (* first constructor of an extension *) - | Text_next (* not first constructor of an extension *) - | Text_exception (* an exception *) - - -(* Constructor and record label descriptions inserted held in typing - environments *) - -type constructor_description = - { cstr_name: string; (* Constructor name *) - cstr_res: type_expr; (* Type of the result *) - cstr_existentials: type_expr list; (* list of existentials *) - cstr_args: type_expr list; (* Type of the arguments *) - cstr_arity: int; (* Number of arguments *) - cstr_tag: constructor_tag; (* Tag for heap blocks *) - cstr_consts: int; (* Number of constant constructors *) - cstr_nonconsts: int; (* Number of non-const constructors *) - cstr_normal: int; (* Number of non generalized constrs *) - cstr_generalized: bool; (* Constrained return type? *) - cstr_private: private_flag; (* Read-only constructor? *) - cstr_loc: Location.t; - cstr_attributes: Parsetree.attributes; - cstr_inlined: type_declaration option; - } - -and constructor_tag = - Cstr_constant of int (* Constant constructor (an int) *) - | Cstr_block of int (* Regular constructor (a block) *) - | Cstr_unboxed (* Constructor of an unboxed type *) - | Cstr_extension of Path.t * bool (* Extension constructor - true if a constant false if a block*) - -let equal_tag t1 t2 = - match (t1, t2) with - | Cstr_constant i1, Cstr_constant i2 -> i2 = i1 - | Cstr_block i1, Cstr_block i2 -> i2 = i1 - | Cstr_unboxed, Cstr_unboxed -> true - | Cstr_extension (path1, b1), Cstr_extension (path2, b2) -> - Path.same path1 path2 && b1 = b2 - | (Cstr_constant _|Cstr_block _|Cstr_unboxed|Cstr_extension _), _ -> false - -let may_equal_constr c1 c2 = match c1.cstr_tag,c2.cstr_tag with -| Cstr_extension _,Cstr_extension _ -> c1.cstr_arity = c2.cstr_arity -| tag1,tag2 -> equal_tag tag1 tag2 - -type label_description = - { lbl_name: string; (* Short name *) - lbl_res: type_expr; (* Type of the result *) - lbl_arg: type_expr; (* Type of the argument *) - lbl_mut: mutable_flag; (* Is this a mutable field? *) - lbl_pos: int; (* Position in block *) - lbl_all: label_description array; (* All the labels in this type *) - lbl_repres: record_representation; (* Representation for this record *) - lbl_private: private_flag; (* Read-only field? *) - lbl_loc: Location.t; - lbl_attributes: Parsetree.attributes; - } diff --git a/src/compiler-libs-406/types.mli b/src/compiler-libs-406/types.mli deleted file mode 100644 index 825b9458..00000000 --- a/src/compiler-libs-406/types.mli +++ /dev/null @@ -1,486 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** {0 Representation of types and declarations} *) - -(** [Types] defines the representation of types and declarations (that is, the - content of module signatures). - - CMI files are made of marshalled types. -*) - -(** Asttypes exposes basic definitions shared both by Parsetree and Types. *) -open Asttypes - -(** Type expressions for the core language. - - The [type_desc] variant defines all the possible type expressions one can - find in OCaml. [type_expr] wraps this with some annotations. - - The [level] field tracks the level of polymorphism associated to a type, - guiding the generalization algorithm. - Put shortly, when referring to a type in a given environment, both the type - and the environment have a level. If the type has an higher level, then it - can be considered fully polymorphic (type variables will be printed as - ['a]), otherwise it'll be weakly polymorphic, or non generalized (type - variables printed as ['_a]). - See [http://okmij.org/ftp/ML/generalization.html] for more information. - - Note about [type_declaration]: one should not make the confusion between - [type_expr] and [type_declaration]. - - [type_declaration] refers specifically to the [type] construct in OCaml - language, where you create and name a new type or type alias. - - [type_expr] is used when you refer to existing types, e.g. when annotating - the expected type of a value. - - Also, as the type system of OCaml is generative, a [type_declaration] can - have the side-effect of introducing a new type constructor, different from - all other known types. - Whereas [type_expr] is a pure construct which allows referring to existing - types. - - Note on mutability: TBD. - *) -type type_expr = - { mutable desc: type_desc; - mutable level: int; - id: int } - -and type_desc = - | Tvar of string option - (** [Tvar (Some "a")] ==> ['a] or ['_a] - [Tvar None] ==> [_] *) - - | Tarrow of arg_label * type_expr * type_expr * commutable - (** [Tarrow (Nolabel, e1, e2, c)] ==> [e1 -> e2] - [Tarrow (Labelled "l", e1, e2, c)] ==> [l:e1 -> e2] - [Tarrow (Optional "l", e1, e2, c)] ==> [?l:e1 -> e2] - - See [commutable] for the last argument. *) - - | Ttuple of type_expr list - (** [Ttuple [t1;...;tn]] ==> [(t1 * ... * tn)] *) - - | Tconstr of Path.t * type_expr list * abbrev_memo ref - (** [Tconstr (`A.B.t', [t1;...;tn], _)] ==> [(t1,...,tn) A.B.t] - The last parameter keep tracks of known expansions, see [abbrev_memo]. *) - - | Tobject of type_expr * (Path.t * type_expr list) option ref - (** [Tobject (`f1:t1;...;fn: tn', `None')] ==> [< f1: t1; ...; fn: tn >] - f1, fn are represented as a linked list of types using Tfield and Tnil - constructors. - - [Tobject (_, `Some (`A.ct', [t1;...;tn]')] ==> [(t1, ..., tn) A.ct]. - where A.ct is the type of some class. - - There are also special cases for so-called "class-types", cf. [Typeclass] - and [Ctype.set_object_name]: - - [Tobject (Tfield(_,_,...(Tfield(_,_,rv)...), - Some(`A.#ct`, [rv;t1;...;tn])] - ==> [(t1, ..., tn) #A.ct] - [Tobject (_, Some(`A.#ct`, [Tnil;t1;...;tn])] ==> [(t1, ..., tn) A.ct] - - where [rv] is the hidden row variable. - *) - - | Tfield of string * field_kind * type_expr * type_expr - (** [Tfield ("foo", Fpresent, t, ts)] ==> [<...; foo : t; ts>] *) - - | Tnil - (** [Tnil] ==> [<...; >] *) - - | Tlink of type_expr - (** Indirection used by unification engine. *) - - | Tsubst of type_expr (* for copying *) - (** [Tsubst] is used temporarily to store information in low-level - functions manipulating representation of types, such as - instantiation or copy. - This constructor should not appear outside of these cases. *) - - | Tvariant of row_desc - (** Representation of polymorphic variants, see [row_desc]. *) - - | Tunivar of string option - (** Occurrence of a type variable introduced by a - forall quantifier / [Tpoly]. *) - - | Tpoly of type_expr * type_expr list - (** [Tpoly (ty,tyl)] ==> ['a1... 'an. ty], - where 'a1 ... 'an are names given to types in tyl - and occurrences of those types in ty. *) - - | Tpackage of Path.t * Longident.t list * type_expr list - (** Type of a first-class module (a.k.a package). *) - -(** [ `X | `Y ] (row_closed = true) - [< `X | `Y ] (row_closed = true) - [> `X | `Y ] (row_closed = false) - [< `X | `Y > `X ] (row_closed = true) - - type t = [> `X ] as 'a (row_more = Tvar a) - type t = private [> `X ] (row_more = Tconstr (t#row, [], ref Mnil) - - And for: - - let f = function `X -> `X -> | `Y -> `X - - the type of "f" will be a [Tarrow] whose lhs will (basically) be: - - Tvariant { row_fields = [("X", _)]; - row_more = - Tvariant { row_fields = [("Y", _)]; - row_more = - Tvariant { row_fields = []; - row_more = _; - _ }; - _ }; - _ - } - -*) -and row_desc = - { row_fields: (label * row_field) list; - row_more: type_expr; - row_bound: unit; (* kept for compatibility *) - row_closed: bool; - row_fixed: bool; - row_name: (Path.t * type_expr list) option } - -and row_field = - Rpresent of type_expr option - | Reither of bool * type_expr list * bool * row_field option ref - (* 1st true denotes a constant constructor *) - (* 2nd true denotes a tag in a pattern matching, and - is erased later *) - | Rabsent - -(** [abbrev_memo] allows one to keep track of different expansions of a type - alias. This is done for performance purposes. - - For instance, when defining [type 'a pair = 'a * 'a], when one refers to an - ['a pair], it is just a shortcut for the ['a * 'a] type. - This expansion will be stored in the [abbrev_memo] of the corresponding - [Tconstr] node. - - In practice, [abbrev_memo] behaves like list of expansions with a mutable - tail. - - Note on marshalling: [abbrev_memo] must not appear in saved types. - [Btype], with [cleanup_abbrev] and [memo], takes care of tracking and - removing abbreviations. -*) -and abbrev_memo = - | Mnil (** No known abbreviation *) - - | Mcons of private_flag * Path.t * type_expr * type_expr * abbrev_memo - (** Found one abbreviation. - A valid abbreviation should be at least as visible and reachable by the - same path. - The first expression is the abbreviation and the second the expansion. *) - - | Mlink of abbrev_memo ref - (** Abbreviations can be found after this indirection *) - -and field_kind = - Fvar of field_kind option ref - | Fpresent - | Fabsent - -(** [commutable] is a flag appended to every arrow type. - - When typing an application, if the type of the functional is - known, its type is instantiated with [Cok] arrows, otherwise as - [Clink (ref Cunknown)]. - - When the type is not known, the application will be used to infer - the actual type. This is fragile in presence of labels where - there is no principal type. - - Two incompatible applications relying on [Cunknown] arrows will - trigger an error. - - let f g = - g ~a:() ~b:(); - g ~b:() ~a:(); - - Error: This function is applied to arguments - in an order different from other calls. - This is only allowed when the real type is known. -*) -and commutable = - Cok - | Cunknown - | Clink of commutable ref - -module TypeOps : sig - type t = type_expr - val compare : t -> t -> int - val equal : t -> t -> bool - val hash : t -> int -end - -(* Maps of methods and instance variables *) - -module Meths : Map.S with type key = string -module Vars : Map.S with type key = string - -(* Value descriptions *) - -type value_description = - { val_type: type_expr; (* Type of the value *) - val_kind: value_kind; - val_loc: Location.t; - val_attributes: Parsetree.attributes; - } - -and value_kind = - Val_reg (* Regular value *) - | Val_prim of Primitive.description (* Primitive *) - -(* Variance *) - -module Variance : sig - type t - type f = May_pos | May_neg | May_weak | Inj | Pos | Neg | Inv - val null : t (* no occurrence *) - val full : t (* strictly invariant *) - val covariant : t (* strictly covariant *) - val may_inv : t (* maybe invariant *) - val union : t -> t -> t - val inter : t -> t -> t - val subset : t -> t -> bool - val set : f -> bool -> t -> t - val mem : f -> t -> bool - val conjugate : t -> t (* exchange positive and negative *) - val get_upper : t -> bool * bool (* may_pos, may_neg *) - val get_lower : t -> bool * bool * bool * bool (* pos, neg, inv, inj *) -end - -(* Type definitions *) - -type type_declaration = - { type_params: type_expr list; - type_arity: int; - type_kind: type_kind; - type_private: private_flag; - type_manifest: type_expr option; - type_variance: Variance.t list; - (* covariant, contravariant, weakly contravariant, injective *) - type_newtype_level: (int * int) option; - (* definition level * expansion level *) - type_loc: Location.t; - type_attributes: Parsetree.attributes; - type_immediate: bool; (* true iff type should not be a pointer *) - type_unboxed: unboxed_status; - } - -and type_kind = - Type_abstract - | Type_record of label_declaration list * record_representation - | Type_variant of constructor_declaration list - | Type_open - -and record_representation = - Record_regular (* All fields are boxed / tagged *) - | Record_float (* All fields are floats *) - | Record_unboxed of bool (* Unboxed single-field record, inlined or not *) - | Record_inlined of { tag : int ; name : string; num_nonconsts : int} (* Inlined record *) - | Record_extension (* Inlined record under extension *) - -and label_declaration = - { - ld_id: Ident.t; - ld_mutable: mutable_flag; - ld_type: type_expr; - ld_loc: Location.t; - ld_attributes: Parsetree.attributes; - } - -and constructor_declaration = - { - cd_id: Ident.t; - cd_args: constructor_arguments; - cd_res: type_expr option; - cd_loc: Location.t; - cd_attributes: Parsetree.attributes; - } - -and constructor_arguments = - | Cstr_tuple of type_expr list - | Cstr_record of label_declaration list - -and unboxed_status = private - (* This type must be private in order to ensure perfect sharing of the - four possible values. Otherwise, ocamlc.byte and ocamlc.opt produce - different executables. *) - { - unboxed: bool; - default: bool; (* True for unannotated unboxable types. *) - } - -val unboxed_false_default_false : unboxed_status -val unboxed_false_default_true : unboxed_status -val unboxed_true_default_false : unboxed_status -val unboxed_true_default_true : unboxed_status - -type extension_constructor = - { - ext_type_path: Path.t; - ext_type_params: type_expr list; - ext_args: constructor_arguments; - ext_ret_type: type_expr option; - ext_private: private_flag; - ext_loc: Location.t; - ext_attributes: Parsetree.attributes; - } - -and type_transparence = - Type_public (* unrestricted expansion *) - | Type_new (* "new" type *) - | Type_private (* private type *) - -(* Type expressions for the class language *) - -module Concr : Set.S with type elt = string - -type class_type = - Cty_constr of Path.t * type_expr list * class_type - | Cty_signature of class_signature - | Cty_arrow of arg_label * type_expr * class_type - -and class_signature = - { csig_self: type_expr; - csig_vars: - (Asttypes.mutable_flag * Asttypes.virtual_flag * type_expr) Vars.t; - csig_concr: Concr.t; - csig_inher: (Path.t * type_expr list) list } - -type class_declaration = - { cty_params: type_expr list; - mutable cty_type: class_type; - cty_path: Path.t; - cty_new: type_expr option; - cty_variance: Variance.t list; - cty_loc: Location.t; - cty_attributes: Parsetree.attributes; - } - -type class_type_declaration = - { clty_params: type_expr list; - clty_type: class_type; - clty_path: Path.t; - clty_variance: Variance.t list; - clty_loc: Location.t; - clty_attributes: Parsetree.attributes; - } - -(* Type expressions for the module language *) - -type module_type = - Mty_ident of Path.t - | Mty_signature of signature - | Mty_functor of Ident.t * module_type option * module_type - | Mty_alias of alias_presence * Path.t - -and alias_presence = - | Mta_present - | Mta_absent - -and signature = signature_item list - -and signature_item = - Sig_value of Ident.t * value_description - | Sig_type of Ident.t * type_declaration * rec_status - | Sig_typext of Ident.t * extension_constructor * ext_status - | Sig_module of Ident.t * module_declaration * rec_status - | Sig_modtype of Ident.t * modtype_declaration - | Sig_class of Ident.t * class_declaration * rec_status - | Sig_class_type of Ident.t * class_type_declaration * rec_status - -and module_declaration = - { - md_type: module_type; - md_attributes: Parsetree.attributes; - md_loc: Location.t; - } - -and modtype_declaration = - { - mtd_type: module_type option; (* None: abstract *) - mtd_attributes: Parsetree.attributes; - mtd_loc: Location.t; - } - -and rec_status = - Trec_not (* first in a nonrecursive group *) - | Trec_first (* first in a recursive group *) - | Trec_next (* not first in a recursive/nonrecursive group *) - -and ext_status = - Text_first (* first constructor in an extension *) - | Text_next (* not first constructor in an extension *) - | Text_exception - - -(* Constructor and record label descriptions inserted held in typing - environments *) - -type constructor_description = - { cstr_name: string; (* Constructor name *) - cstr_res: type_expr; (* Type of the result *) - cstr_existentials: type_expr list; (* list of existentials *) - cstr_args: type_expr list; (* Type of the arguments *) - cstr_arity: int; (* Number of arguments *) - cstr_tag: constructor_tag; (* Tag for heap blocks *) - cstr_consts: int; (* Number of constant constructors *) - cstr_nonconsts: int; (* Number of non-const constructors *) - cstr_normal: int; (* Number of non generalized constrs *) - cstr_generalized: bool; (* Constrained return type? *) - cstr_private: private_flag; (* Read-only constructor? *) - cstr_loc: Location.t; - cstr_attributes: Parsetree.attributes; - cstr_inlined: type_declaration option; - } - -and constructor_tag = - Cstr_constant of int (* Constant constructor (an int) *) - | Cstr_block of int (* Regular constructor (a block) *) - | Cstr_unboxed (* Constructor of an unboxed type *) - | Cstr_extension of Path.t * bool (* Extension constructor - true if a constant false if a block*) - -(* Constructors are the same *) -val equal_tag : constructor_tag -> constructor_tag -> bool - -(* Constructors may be the same, given potential rebinding *) -val may_equal_constr : - constructor_description -> constructor_description -> bool - -type label_description = - { lbl_name: string; (* Short name *) - lbl_res: type_expr; (* Type of the result *) - lbl_arg: type_expr; (* Type of the argument *) - lbl_mut: mutable_flag; (* Is this a mutable field? *) - lbl_pos: int; (* Position in block *) - lbl_all: label_description array; (* All the labels in this type *) - lbl_repres: record_representation; (* Representation for this record *) - lbl_private: private_flag; (* Read-only field? *) - lbl_loc: Location.t; - lbl_attributes: Parsetree.attributes; - } diff --git a/src/compiler-libs-406/warnings.ml b/src/compiler-libs-406/warnings.ml deleted file mode 100644 index ffab8606..00000000 --- a/src/compiler-libs-406/warnings.ml +++ /dev/null @@ -1,706 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Weis && Damien Doligez, INRIA Rocquencourt *) -(* *) -(* Copyright 1998 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* When you change this, you need to update the documentation: - - man/ocamlc.m - - man/ocamlopt.m - - manual/manual/cmds/comp.etex - - manual/manual/cmds/native.etex -*) - -type loc = { - loc_start: Lexing.position; - loc_end: Lexing.position; - loc_ghost: bool; -} - -type t = - | Comment_start (* 1 *) - | Comment_not_end (* 2 *) - | Deprecated of string * loc * loc (* 3 *) - | Fragile_match of string (* 4 *) - | Partial_application (* 5 *) - | Labels_omitted of string list (* 6 *) - | Method_override of string list (* 7 *) - | Partial_match of string (* 8 *) - | Non_closed_record_pattern of string (* 9 *) - | Statement_type (* 10 *) - | Unused_match (* 11 *) - | Unused_pat (* 12 *) - | Instance_variable_override of string list (* 13 *) - | Illegal_backslash (* 14 *) - | Implicit_public_methods of string list (* 15 *) - | Unerasable_optional_argument (* 16 *) - | Undeclared_virtual_method of string (* 17 *) - | Not_principal of string (* 18 *) - | Without_principality of string (* 19 *) - | Unused_argument (* 20 *) - | Nonreturning_statement (* 21 *) - | Preprocessor of string (* 22 *) - | Useless_record_with (* 23 *) - | Bad_module_name of string (* 24 *) - | All_clauses_guarded (* 8, used to be 25 *) - | Unused_var of string (* 26 *) - | Unused_var_strict of string (* 27 *) - | Wildcard_arg_to_constant_constr (* 28 *) - | Eol_in_string (* 29 *) - | Duplicate_definitions of string * string * string * string (*30 *) - | Unused_value_declaration of string (* 32 *) - | Unused_open of string (* 33 *) - | Unused_type_declaration of string (* 34 *) - | Unused_for_index of string (* 35 *) - | Unused_ancestor of string (* 36 *) - | Unused_constructor of string * bool * bool (* 37 *) - | Unused_extension of string * bool * bool * bool (* 38 *) - | Unused_rec_flag (* 39 *) - | Name_out_of_scope of string * string list * bool (* 40 *) - | Ambiguous_name of string list * string list * bool (* 41 *) - | Disambiguated_name of string (* 42 *) - | Nonoptional_label of string (* 43 *) - | Open_shadow_identifier of string * string (* 44 *) - | Open_shadow_label_constructor of string * string (* 45 *) - | Bad_env_variable of string * string (* 46 *) - | Attribute_payload of string * string (* 47 *) - | Eliminated_optional_arguments of string list (* 48 *) - | No_cmi_file of string * string option (* 49 *) - | Bad_docstring of bool (* 50 *) - | Fragile_literal_pattern (* 52 *) - | Misplaced_attribute of string (* 53 *) - | Duplicated_attribute of string (* 54 *) - | Inlining_impossible of string (* 55 *) - | Unreachable_case (* 56 *) - | Ambiguous_pattern of string list (* 57 *) - | Assignment_to_non_mutable_value (* 59 *) - | Unused_module of string (* 60 *) - | Unboxable_type_in_prim_decl of string (* 61 *) - | Constraint_on_gadt (* 62 *) - - | Bs_unused_attribute of string (* 101 *) - | Bs_polymorphic_comparison (* 102 *) - | Bs_ffi_warning of string (* 103 *) - | Bs_derive_warning of string (* 104 *) - | Bs_fragile_external of string (* 105 *) - | Bs_unimplemented_primitive of string (* 106 *) - | Bs_integer_literal_overflow (* 107 *) - | Bs_uninterpreted_delimiters of string (* 108 *) - | Bs_toplevel_expression_unit (* 109 *) -;; - -(* If you remove a warning, leave a hole in the numbering. NEVER change - the numbers of existing warnings. - If you add a new warning, add it at the end with a new number; - do NOT reuse one of the holes. -*) - -let number = function - | Comment_start -> 1 - | Comment_not_end -> 2 - | Deprecated _ -> 3 - | Fragile_match _ -> 4 - | Partial_application -> 5 - | Labels_omitted _ -> 6 - | Method_override _ -> 7 - | Partial_match _ -> 8 - | Non_closed_record_pattern _ -> 9 - | Statement_type -> 10 - | Unused_match -> 11 - | Unused_pat -> 12 - | Instance_variable_override _ -> 13 - | Illegal_backslash -> 14 - | Implicit_public_methods _ -> 15 - | Unerasable_optional_argument -> 16 - | Undeclared_virtual_method _ -> 17 - | Not_principal _ -> 18 - | Without_principality _ -> 19 - | Unused_argument -> 20 - | Nonreturning_statement -> 21 - | Preprocessor _ -> 22 - | Useless_record_with -> 23 - | Bad_module_name _ -> 24 - | All_clauses_guarded -> 8 (* used to be 25 *) - | Unused_var _ -> 26 - | Unused_var_strict _ -> 27 - | Wildcard_arg_to_constant_constr -> 28 - | Eol_in_string -> 29 - | Duplicate_definitions _ -> 30 - | Unused_value_declaration _ -> 32 - | Unused_open _ -> 33 - | Unused_type_declaration _ -> 34 - | Unused_for_index _ -> 35 - | Unused_ancestor _ -> 36 - | Unused_constructor _ -> 37 - | Unused_extension _ -> 38 - | Unused_rec_flag -> 39 - | Name_out_of_scope _ -> 40 - | Ambiguous_name _ -> 41 - | Disambiguated_name _ -> 42 - | Nonoptional_label _ -> 43 - | Open_shadow_identifier _ -> 44 - | Open_shadow_label_constructor _ -> 45 - | Bad_env_variable _ -> 46 - | Attribute_payload _ -> 47 - | Eliminated_optional_arguments _ -> 48 - | No_cmi_file _ -> 49 - | Bad_docstring _ -> 50 - | Fragile_literal_pattern -> 52 - | Misplaced_attribute _ -> 53 - | Duplicated_attribute _ -> 54 - | Inlining_impossible _ -> 55 - | Unreachable_case -> 56 - | Ambiguous_pattern _ -> 57 - | Assignment_to_non_mutable_value -> 59 - | Unused_module _ -> 60 - | Unboxable_type_in_prim_decl _ -> 61 - | Constraint_on_gadt -> 62 - | Bs_unused_attribute _ -> 101 - | Bs_polymorphic_comparison -> 102 - | Bs_ffi_warning _ -> 103 - | Bs_derive_warning _ -> 104 - | Bs_fragile_external _ -> 105 - | Bs_unimplemented_primitive _ -> 106 - | Bs_integer_literal_overflow -> 107 - | Bs_uninterpreted_delimiters _ -> 108 - | Bs_toplevel_expression_unit -> 109 -;; - -let last_warning_number = 109 -let letter_all = - let rec loop i = if i = 0 then [] else i :: loop (i - 1) in - loop last_warning_number - -(* Must be the max number returned by the [number] function. *) - -let letter = function - | 'a' -> letter_all - | 'b' -> [] - | 'c' -> [1; 2] - | 'd' -> [3] - | 'e' -> [4] - | 'f' -> [5] - | 'g' -> [] - | 'h' -> [] - | 'i' -> [] - | 'j' -> [] - | 'k' -> [32; 33; 34; 35; 36; 37; 38; 39] - | 'l' -> [6] - | 'm' -> [7] - | 'n' -> [] - | 'o' -> [] - | 'p' -> [8] - | 'q' -> [] - | 'r' -> [9] - | 's' -> [10] - | 't' -> [] - | 'u' -> [11; 12] - | 'v' -> [13] - | 'w' -> [] - | 'x' -> [14; 15; 16; 17; 18; 19; 20; 21; 22; 23; 24; 30] - | 'y' -> [26] - | 'z' -> [27] - | _ -> assert false -;; - -type state = - { - active: bool array; - error: bool array; - } - -let current = - ref - { - active = Array.make (last_warning_number + 1) true; - error = Array.make (last_warning_number + 1) false; - } - -let disabled = ref false - -let without_warnings f = - Misc.protect_refs [Misc.R(disabled, true)] f - -let backup () = !current - -let restore x = current := x - -let is_active x = not !disabled && (!current).active.(number x);; -let is_error x = not !disabled && (!current).error.(number x);; - -let mk_lazy f = - let state = backup () in - lazy - ( - let prev = backup () in - restore state; - try - let r = f () in - restore prev; - r - with exn -> - restore prev; - raise exn - ) - -let parse_opt error active flags s = - let set i = flags.(i) <- true in - let clear i = flags.(i) <- false in - let set_all i = active.(i) <- true; error.(i) <- true in - let error () = raise (Arg.Bad "Ill-formed list of warnings") in - let rec get_num n i = - if i >= String.length s then i, n - else match s.[i] with - | '0'..'9' -> get_num (10 * n + Char.code s.[i] - Char.code '0') (i + 1) - | _ -> i, n - in - let get_range i = - let i, n1 = get_num 0 i in - if i + 2 < String.length s && s.[i] = '.' && s.[i + 1] = '.' then - let i, n2 = get_num 0 (i + 2) in - if n2 < n1 then error (); - i, n1, n2 - else - i, n1, n1 - in - let rec loop i = - if i >= String.length s then () else - match s.[i] with - | 'A' .. 'Z' -> - List.iter set (letter (Char.lowercase_ascii s.[i])); - loop (i+1) - | 'a' .. 'z' -> - List.iter clear (letter s.[i]); - loop (i+1) - | '+' -> loop_letter_num set (i+1) - | '-' -> loop_letter_num clear (i+1) - | '@' -> loop_letter_num set_all (i+1) - | _ -> error () - and loop_letter_num myset i = - if i >= String.length s then error () else - match s.[i] with - | '0' .. '9' -> - let i, n1, n2 = get_range i in - for n = n1 to min n2 last_warning_number do myset n done; - loop i - | 'A' .. 'Z' -> - List.iter myset (letter (Char.lowercase_ascii s.[i])); - loop (i+1) - | 'a' .. 'z' -> - List.iter myset (letter s.[i]); - loop (i+1) - | _ -> error () - in - loop 0 -;; - -let parse_options errflag s = - let error = Array.copy (!current).error in - let active = Array.copy (!current).active in - parse_opt error active (if errflag then error else active) s; - current := {error; active} - - - -let reset () = - parse_options false Bsc_warnings.defaults_w; - parse_options true Bsc_warnings.defaults_warn_error;; - -let () = reset () - -let message = function - | Comment_start -> "this is the start of a comment." - | Comment_not_end -> "this is not the end of a comment." - | Deprecated (s, _, _) -> - (* Reduce \r\n to \n: - - Prevents any \r characters being printed on Unix when processing - Windows sources - - Prevents \r\r\n being generated on Windows, which affects the - testsuite - *) - "deprecated: " ^ Misc.normalise_eol s - | Fragile_match "" -> - "this pattern-matching is fragile." - | Fragile_match s -> - "this pattern-matching is fragile.\n\ - It will remain exhaustive when constructors are added to type " ^ s ^ "." - | Partial_application -> - "this function application is partial,\n\ - maybe some arguments are missing." - | Labels_omitted [] -> assert false - | Labels_omitted [l] -> - "label " ^ l ^ " was omitted in the application of this function." - | Labels_omitted ls -> - "labels " ^ String.concat ", " ls ^ - " were omitted in the application of this function." - | Method_override [lab] -> - "the method " ^ lab ^ " is overridden." - | Method_override (cname :: slist) -> - String.concat " " - ("the following methods are overridden by the class" - :: cname :: ":\n " :: slist) - | Method_override [] -> assert false - | Partial_match "" -> - "You forgot to handle a possible case here, though we don't have more information on the value." - | Partial_match s -> - "You forgot to handle a possible case here, for example: \n " ^ s - | Non_closed_record_pattern s -> - "the following labels are not bound in this record pattern: " ^ s ^ - "\nEither bind these labels explicitly or add '; _' to the pattern." - | Statement_type -> - "this expression should have type unit." - | Unused_match -> "this match case is unused." - | Unused_pat -> "this sub-pattern is unused." - | Instance_variable_override [lab] -> - "the instance variable " ^ lab ^ " is overridden.\n" ^ - "The behaviour changed in ocaml 3.10 (previous behaviour was hiding.)" - | Instance_variable_override (cname :: slist) -> - String.concat " " - ("the following instance variables are overridden by the class" - :: cname :: ":\n " :: slist) ^ - "\nThe behaviour changed in ocaml 3.10 (previous behaviour was hiding.)" - | Instance_variable_override [] -> assert false - | Illegal_backslash -> "illegal backslash escape in string." - | Implicit_public_methods l -> - "the following private methods were made public implicitly:\n " - ^ String.concat " " l ^ "." - | Unerasable_optional_argument -> - String.concat "" - ["This optional parameter in final position will, in practice, not be optional.\n"; - " Reorder the parameters so that at least one non-optional one is in final position or, if all parameters are optional, insert a final ().\n\n"; - " Explanation: If the final parameter is optional, it'd be unclear whether a function application that omits it should be considered fully applied, or partially applied. Imagine writing `let title = display(\"hello!\")`, only to realize `title` isn't your desired result, but a curried call that takes a final optional argument, e.g. `~showDate`.\n\n"; - " Formal rule: an optional argument is considered intentionally omitted when the 1st positional (i.e. neither labeled nor optional) argument defined after it is passed in." - ] - | Undeclared_virtual_method m -> "the virtual method "^m^" is not declared." - | Not_principal s -> s^" is not principal." - | Without_principality s -> s^" without principality." - | Unused_argument -> "this argument will not be used by the function." - | Nonreturning_statement -> - "this statement never returns (or has an unsound type.)" - | Preprocessor s -> s - | Useless_record_with -> - begin match !Config.syntax_kind with - | `ml -> - "all the fields are explicitly listed in this record:\n\ - the 'with' clause is useless." - | `reason | `rescript -> - "All the fields are already explicitly listed in this record. You can remove the `...` spread." - end - | Bad_module_name (modname) -> - "This file's name is potentially invalid. The build systems conventionally turn a file name into a module name by upper-casing the first letter. " ^ modname ^ " isn't a valid module name.\n" ^ - "Note: some build systems might e.g. turn kebab-case into CamelCase module, which is why this isn't a hard error." - | All_clauses_guarded -> - "this pattern-matching is not exhaustive.\n\ - All clauses in this pattern-matching are guarded." - | Unused_var v | Unused_var_strict v -> "unused variable " ^ v ^ "." - | Wildcard_arg_to_constant_constr -> - "wildcard pattern given as argument to a constant constructor" - | Eol_in_string -> - "unescaped end-of-line in a string constant (non-portable code)" - | Duplicate_definitions (kind, cname, tc1, tc2) -> - Printf.sprintf "the %s %s is defined in both types %s and %s." - kind cname tc1 tc2 - | Unused_value_declaration v -> "unused value " ^ v ^ "." - | Unused_open s -> "unused open " ^ s ^ "." - | Unused_type_declaration s -> "unused type " ^ s ^ "." - | Unused_for_index s -> "unused for-loop index " ^ s ^ "." - | Unused_ancestor s -> "unused ancestor variable " ^ s ^ "." - | Unused_constructor (s, false, false) -> "unused constructor " ^ s ^ "." - | Unused_constructor (s, true, _) -> - "constructor " ^ s ^ - " is never used to build values.\n\ - (However, this constructor appears in patterns.)" - | Unused_constructor (s, false, true) -> - "constructor " ^ s ^ - " is never used to build values.\n\ - Its type is exported as a private type." - | Unused_extension (s, is_exception, cu_pattern, cu_privatize) -> - let kind = - if is_exception then "exception" else "extension constructor" in - let name = kind ^ " " ^ s in - begin match cu_pattern, cu_privatize with - | false, false -> "unused " ^ name - | true, _ -> - name ^ - " is never used to build values.\n\ - (However, this constructor appears in patterns.)" - | false, true -> - name ^ - " is never used to build values.\n\ - It is exported or rebound as a private extension." - end - | Unused_rec_flag -> - "unused rec flag." - | Name_out_of_scope (ty, [nm], false) -> - nm ^ " was selected from type " ^ ty ^ - ".\nIt is not visible in the current scope, and will not \n\ - be selected if the type becomes unknown." - | Name_out_of_scope (_, _, false) -> assert false - | Name_out_of_scope (ty, slist, true) -> - "this record of type "^ ty ^" contains fields that are \n\ - not visible in the current scope: " - ^ String.concat " " slist ^ ".\n\ - They will not be selected if the type becomes unknown." - | Ambiguous_name ([s], tl, false) -> - s ^ " belongs to several types: " ^ String.concat " " tl ^ - "\nThe first one was selected. Please disambiguate if this is wrong." - | Ambiguous_name (_, _, false) -> assert false - | Ambiguous_name (_slist, tl, true) -> - "these field labels belong to several types: " ^ - String.concat " " tl ^ - "\nThe first one was selected. Please disambiguate if this is wrong." - | Disambiguated_name s -> - "this use of " ^ s ^ " relies on type-directed disambiguation,\n\ - it will not compile with OCaml 4.00 or earlier." - | Nonoptional_label s -> - "the label " ^ s ^ " is not optional." - | Open_shadow_identifier (kind, s) -> - Printf.sprintf - "this open statement shadows the %s identifier %s (which is later used)" - kind s - | Open_shadow_label_constructor (kind, s) -> - Printf.sprintf - "this open statement shadows the %s %s (which is later used)" - kind s - | Bad_env_variable (var, s) -> - Printf.sprintf "illegal environment variable %s : %s" var s - | Attribute_payload (a, s) -> - Printf.sprintf "illegal payload for attribute '%s'.\n%s" a s - | Eliminated_optional_arguments sl -> - Printf.sprintf "implicit elimination of optional argument%s %s" - (if List.length sl = 1 then "" else "s") - (String.concat ", " sl) - | No_cmi_file(name, None) -> - "no cmi file was found in path for module " ^ name - | No_cmi_file(name, Some msg) -> - Printf.sprintf - "no valid cmi file was found in path for module %s. %s" - name msg - | Bad_docstring unattached -> - if unattached then "unattached documentation comment (ignored)" - else "ambiguous documentation comment" - | Fragile_literal_pattern -> - Printf.sprintf - "Code should not depend on the actual values of\n\ - this constructor's arguments. They are only for information\n\ - and may change in future versions. (See manual section 8.5)" - | Unreachable_case -> - "this match case is unreachable.\n\ - Consider replacing it with a refutation case ' -> .'" - | Misplaced_attribute attr_name -> - Printf.sprintf "the %S attribute cannot appear in this context" attr_name - | Duplicated_attribute attr_name -> - Printf.sprintf "the %S attribute is used more than once on this \ - expression" - attr_name - | Inlining_impossible reason -> - Printf.sprintf "Cannot inline: %s" reason - | Ambiguous_pattern vars -> - let msg = - let vars = List.sort String.compare vars in - match vars with - | [] -> assert false - | [x] -> "variable " ^ x - | _::_ -> - "variables " ^ String.concat "," vars in - Printf.sprintf - "Ambiguous or-pattern variables under guard;\n\ - %s may match different arguments. (See manual section 8.5)" - msg - | Assignment_to_non_mutable_value -> - "A potential assignment to a non-mutable value was detected \n\ - in this source file. Such assignments may generate incorrect code \n\ - when using Flambda." - | Unused_module s -> "unused module " ^ s ^ "." - | Unboxable_type_in_prim_decl t -> - Printf.sprintf - "This primitive declaration uses type %s, which is unannotated and\n\ - unboxable. The representation of such types may change in future\n\ - versions. You should annotate the declaration of %s with [@@boxed]\n\ - or [@@unboxed]." t t - | Constraint_on_gadt -> - "Type constraints do not apply to GADT cases of variant types." - - | Bs_unused_attribute s -> - "Unused attribute: " ^ s ^ "\n\ - This means such annotation is not annotated properly. \n\ - for example, some annotations is only meaningful in externals \n" - | Bs_polymorphic_comparison -> - "Polymorphic comparison introduced (maybe unsafe)" - | Bs_ffi_warning s -> - "FFI warning: " ^ s - | Bs_derive_warning s -> - "bs.deriving warning: " ^ s - | Bs_fragile_external s -> - s ^ " : using an empty string as a shorthand to infer the external's name from the value's name is dangerous when refactoring, and therefore deprecated" - | Bs_unimplemented_primitive s -> - "Unimplemented primitive used:" ^ s - | Bs_integer_literal_overflow -> - "Integer literal exceeds the range of representable integers of type int" - | Bs_uninterpreted_delimiters s -> - "Uninterpreted delimiters " ^ s - | Bs_toplevel_expression_unit -> - "Toplevel expression is expected to have unit type." -;; - -let sub_locs = function - | Deprecated (_, def, use) -> - [ - def, "Definition"; - use, "Expected signature"; - ] - | _ -> [] - -let has_warnings = ref false ;; -let nerrors = ref 0;; - -type reporting_information = - { number : int - ; message : string - ; is_error : bool - ; sub_locs : (loc * string) list; - } - -let report w = - match w with - | Name_out_of_scope _ (* 40 *) - | Disambiguated_name _ (* 42 *) - | Unboxable_type_in_prim_decl _ (* 61 *) -> `Inactive - (* TODO: we could simplify the code even more *) - | _ -> - match is_active w with - | false -> `Inactive - | true -> - has_warnings := true; - if is_error w then incr nerrors; - `Active { number = number w; message = message w; is_error = is_error w; - sub_locs = sub_locs w; - } -;; - - -exception Errors;; - -let reset_fatal () = - nerrors := 0 - -let check_fatal () = - if !nerrors > 0 then begin - nerrors := 0; - raise Errors; - end; -;; - -let descriptions = - [ - 1, "Suspicious-looking start-of-comment mark."; - 2, "Suspicious-looking end-of-comment mark."; - 3, "Deprecated feature."; - 4, "Fragile pattern matching: matching that will remain complete even\n\ - \ if additional constructors are added to one of the variant types\n\ - \ matched."; - 5, "Partially applied function: expression whose result has function\n\ - \ type and is ignored."; - 6, "Label omitted in function application."; - 7, "Method overridden."; - 8, "Partial match: missing cases in pattern-matching."; - 9, "Missing fields in a record pattern."; - 10, "Expression on the left-hand side of a sequence that doesn't have \ - type\n\ - \ \"unit\" (and that is not a function, see warning number 5)."; - 11, "Redundant case in a pattern matching (unused match case)."; - 12, "Redundant sub-pattern in a pattern-matching."; - 13, "Instance variable overridden."; - 14, "Illegal backslash escape in a string constant."; - 15, "Private method made public implicitly."; - 16, "Unerasable optional argument."; - 17, "Undeclared virtual method."; - 18, "Non-principal type."; - 19, "Type without principality."; - 20, "Unused function argument."; - 21, "Non-returning statement."; - 22, "Preprocessor warning."; - 23, "Useless record \"with\" clause."; - 24, "Bad module name: the source file name is not a valid OCaml module \ - name."; - 25, "Deprecated: now part of warning 8."; - 26, "Suspicious unused variable: unused variable that is bound\n\ - \ with \"let\" or \"as\", and doesn't start with an underscore (\"_\")\n\ - \ character."; - 27, "Innocuous unused variable: unused variable that is not bound with\n\ - \ \"let\" nor \"as\", and doesn't start with an underscore (\"_\")\n\ - \ character."; - 28, "Wildcard pattern given as argument to a constant constructor."; - 29, "Unescaped end-of-line in a string constant (non-portable code)."; - 30, "Two labels or constructors of the same name are defined in two\n\ - \ mutually recursive types."; - 31, "A module is linked twice in the same executable."; - 32, "Unused value declaration."; - 33, "Unused open statement."; - 34, "Unused type declaration."; - 35, "Unused for-loop index."; - 36, "Unused ancestor variable."; - 37, "Unused constructor."; - 38, "Unused extension constructor."; - 39, "Unused rec flag."; - 40, "Constructor or label name used out of scope."; - 41, "Ambiguous constructor or label name."; - 42, "Disambiguated constructor or label name (compatibility warning)."; - 43, "Nonoptional label applied as optional."; - 44, "Open statement shadows an already defined identifier."; - 45, "Open statement shadows an already defined label or constructor."; - 46, "Error in environment variable."; - 47, "Illegal attribute payload."; - 48, "Implicit elimination of optional arguments."; - 49, "Absent cmi file when looking up module alias."; - 50, "Unexpected documentation comment."; - 51, "Warning on non-tail calls if @tailcall present."; - 52, "Fragile constant pattern."; - 53, "Attribute cannot appear in this context"; - 54, "Attribute used more than once on an expression"; - 55, "Inlining impossible"; - 56, "Unreachable case in a pattern-matching (based on type information)."; - 57, "Ambiguous or-pattern variables under guard"; - 58, "Missing cmx file"; - 59, "Assignment to non-mutable value"; - 60, "Unused module declaration"; - 61, "Unboxable type in primitive declaration"; - 62, "Type constraint on GADT type declaration"; - - 101, "Unused bs attributes"; - 102, "Polymorphic comparison introduced (maybe unsafe)"; - 103, "Fragile FFI definitions" ; - 104, "bs.deriving warning with customized message "; - 105, "External name is inferred from val name is unsafe from refactoring when changing value name"; - 106, "Unimplemented primitive used:"; - 107, "Integer literal exceeds the range of representable integers of type int"; - 108, "Uninterpreted delimiters (for unicode)" ; - 109, "Toplevel expression has unit type" - ] -;; - -let help_warnings () = - List.iter (fun (i, s) -> Printf.printf "%3i %s\n" i s) descriptions; - print_endline " A all warnings"; - for i = Char.code 'b' to Char.code 'z' do - let c = Char.chr i in - match letter c with - | [] -> () - | [n] -> - Printf.printf " %c Alias for warning %i.\n" (Char.uppercase_ascii c) n - | l -> - Printf.printf " %c warnings %s.\n" - (Char.uppercase_ascii c) - (String.concat ", " (List.map string_of_int l)) - done; - exit 0 -;; \ No newline at end of file diff --git a/src/dune b/src/dune index fa6401be..ac7344ff 100644 --- a/src/dune +++ b/src/dune @@ -11,4 +11,4 @@ (name Reanalyze) (flags "-w" "+6+26+27+32+33+39") ; Depends on: - (libraries unix str compiler-libs.common compilerlibs406)) + (libraries unix str compiler-libs.common)) diff --git a/src/dune.406 b/src/dune.406 deleted file mode 100644 index 0556c4fe..00000000 --- a/src/dune.406 +++ /dev/null @@ -1,14 +0,0 @@ -(copy_files# ext/*.{ml,mli}) -(copy_files# vendor/*.{ml,mli}) - -(executable - (public_name reanalyze.exe) - (modes byte exe) - (preprocess - (action - (run %{bin:cppo} -V OCAML:4.06.1 %{input-file}))) - ; The main module that will become the binary. - (name Reanalyze) - (flags "-w" "+6+26+27+32+33+39") - ; Depends on: - (libraries unix str compiler-libs.common compilerlibs406))