diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index be2c3854..c0d2521a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,75 +11,20 @@ jobs: strategy: fail-fast: false matrix: - os: [ - macos-13, # x64 - macos-14, # ARM - ubuntu-latest, - windows-latest, - ] - target: [rescript] - # 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 - build: opam exec -- dune build - - os: ubuntu-latest - target: ocaml.4.14 - ocaml-compiler: 4.14.x - build: opam exec -- dune build - - os: ubuntu-latest - target: ocaml.5.0 - ocaml-compiler: 5.0.x - build: opam exec -- dune build - - os: ubuntu-latest - target: ocaml.5.1 - ocaml-compiler: 5.1.x - build: opam exec -- dune build - - os: ubuntu-latest - target: ocaml.5.2 - ocaml-compiler: 5.2.x - build: opam exec -- dune build + ocaml-compiler: + - 4.14.x + - 5.0.x + - 5.1.x + - 5.2.x + - 5.3.x - runs-on: ${{matrix.os}} + runs-on: ubuntu-latest steps: - # needed for Windows testing - - name: Set git to use LF - run: | - git config --global core.autocrlf false - git config --global core.eol lf - - uses: actions/checkout@v4 - - name: Cache OCaml's opam - uses: actions/cache@v4 - with: - path: ~/.opam - key: ${{matrix.os}}-reanalyze-v2 - - name: Use OCaml - uses: ocaml/setup-ocaml@v2 + uses: ocaml/setup-ocaml@v3 with: ocaml-compiler: ${{matrix.ocaml-compiler}} @@ -88,57 +33,10 @@ jobs: with: node-version: 18 - - run: npm ci - - run: opam install dune cppo - name: Build - run: ${{matrix.build}} + run: opam exec -- dune build - name: Test - if: matrix.target == 'rescript' - run: ${{matrix.test}} - - # Also avoids artifacts upload permission loss: - # https://github.com/actions/upload-artifact/tree/ee69f02b3dfdecd58bb31b4d133da38ba6fe3700#permission-loss - - name: Compress files - if: matrix.target == 'rescript' - run: | - mkdir ${{matrix.artifact-folder}} - cp _build/default/src/Reanalyze.exe reanalyze.exe - tar -cvf binary.tar reanalyze.exe - - - uses: actions/upload-artifact@v4 - if: matrix.target == 'rescript' - with: - name: ${{matrix.os}} - path: binary.tar - - npm_pack: - needs: build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: download binaries - uses: actions/download-artifact@v4 - - name: Pack reanalyze - run: | - # Put the built artifacts in the appropriate package folder - tar xf macos-13/binary.tar -C dist/vendor-darwin - tar xf macos-14/binary.tar -C dist/vendor-darwinarm64 - tar xf ubuntu-latest/binary.tar -C dist/vendor-linux - tar xf windows-latest/binary.tar -C dist/vendor-win32 - - # Add the correct package.json / README / etc to dist - node scripts/prepare_release.js - - # Pack everything up - cd dist - npm pack - cd .. - mv dist/reanalyze-*.tgz reanalyze-npm.tgz - - name: upload reanalyze-npm.tgz - uses: actions/upload-artifact@v4 - with: - name: reanalyze-npm.tgz - path: reanalyze-npm.tgz + run: opam exec -- npm test 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/examples/deadcode/.gitignore b/examples/deadcode/.gitignore index d30f40ef..8717b355 100644 --- a/examples/deadcode/.gitignore +++ b/examples/deadcode/.gitignore @@ -8,6 +8,7 @@ # production /build +/_build # misc .DS_Store diff --git a/examples/deadcode/bsconfig.json b/examples/deadcode/bsconfig.json deleted file mode 100644 index 4e98184e..00000000 --- a/examples/deadcode/bsconfig.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "reanalyze": { - "analysis": ["dce"], - "suppress": ["src/ToSuppress.res"], - "unsuppress": [] - }, - "gentypeconfig": { - "language": "typescript", - "module": "es6", - "importPath": "relative", - "debug": { - "all": false - }, - "exportInterfaces": false - }, - "name": "sample-typescript-app", - "bsc-flags": ["-bs-super-errors -w a"], - "ppx-flags": [ - "../../_build/default/dead-code-ppx/DeadCodePPX.exe", - "../../_build/default/lazyload-ppx/LazyLoad.exe" - ], - "reason": { "react-jsx": 3 }, - "bs-dependencies": ["@rescript/react", "@glennsl/bs-json"], - "sources": [ - { - "dir": "src", - "subdirs": true - } - ], - "package-specs": { - "module": "es6", - "in-source": true - }, - "suffix": ".bs.js", - "refmt": 3 -} diff --git a/examples/deadcode/dune-project b/examples/deadcode/dune-project new file mode 100644 index 00000000..929c696e --- /dev/null +++ b/examples/deadcode/dune-project @@ -0,0 +1 @@ +(lang dune 2.0) diff --git a/examples/deadcode/package-lock.json b/examples/deadcode/package-lock.json deleted file mode 100644 index 17c7403e..00000000 --- a/examples/deadcode/package-lock.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "name": "deadcode", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "deadcode", - "version": "0.1.0", - "dependencies": { - "@glennsl/bs-json": "^5.0.4", - "@rescript/react": "^0.10.3", - "reanalyze": "file:../.." - }, - "devDependencies": { - "gentype": "^4.5.0", - "react": "^16.13.1", - "react-dom": "^16.8.6", - "rescript": "^10.0.0-beta.3" - } - }, - "../..": { - "version": "2.25.1", - "license": "MIT", - "bin": { - "reanalyze.exe": "_build/install/default/bin/reanalyze.exe" - } - }, - "node_modules/@glennsl/bs-json": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@glennsl/bs-json/-/bs-json-5.0.4.tgz", - "integrity": "sha512-Th9DetZjRlMZrb74kgGJ44oWcoFyOTE884WlSuXft0Cd+J09vHRxiB7eVyK7Gthb4cSevsBBJDHYAbGGL25wPw==" - }, - "node_modules/@rescript/react": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.10.3.tgz", - "integrity": "sha512-Lf9rzrR3bQPKJjOK3PBRa/B3xrJ7CqQ1HYr9VHPVxJidarIJJFZBhj0Dg1uZURX+Wg/xiP0PHFxXmdj2bK8Vxw==", - "peerDependencies": { - "react": ">=16.8.1", - "react-dom": ">=16.8.1" - } - }, - "node_modules/gentype": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/gentype/-/gentype-4.5.0.tgz", - "integrity": "sha512-XqHBQPS6Qb2HSgNJAwYRXbQJ4LSvz+MgNvuWnj8bz0teSorsy2kDxA6F1eZx5ft8cnfKAls4uNEgd5uNcPbQDg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "gentype": "gentype.exe" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/reanalyze": { - "resolved": "../..", - "link": true - }, - "node_modules/rescript": { - "version": "10.0.0-beta.3", - "resolved": "https://registry.npmjs.org/rescript/-/rescript-10.0.0-beta.3.tgz", - "integrity": "sha512-Fik3yIkHY8ajD5M4I2hHOSvUcLzgmNukr8mxlSe4SfAGTY67HoNvDEuONIG0A9kL34urcsMde2F698m2n0JcLg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "bsc": "bsc", - "bsrefmt": "bsrefmt", - "bstracing": "lib/bstracing", - "rescript": "rescript" - } - }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } - } -} diff --git a/examples/deadcode/package.json b/examples/deadcode/package.json index a5591d4c..1f5a3730 100644 --- a/examples/deadcode/package.json +++ b/examples/deadcode/package.json @@ -3,23 +3,13 @@ "version": "0.1.0", "private": true, "scripts": { - "start": "rescript build -w", - "build": "rescript build", - "clean": "rescript clean -with-deps", - "dce": "npx reanalyze.exe -config -debug -ci -exclude-paths src/noalloc,src/exception -live-names globallyLive1 -live-names globallyLive2,globallyLive3 >src/deadcode.txt", - "exception": "npx reanalyze.exe -exception -ci -suppress src -unsuppress src/exception >src/exception.txt", - "noalloc": "npx reanalyze.exe -ci -noalloc >src/noalloc.txt", + "build": "dune build --root .", + "clean": "dune clean --root .", + "dce": "dune exec --root ../.. reanalyze.exe -- -ci -native-build-target . -externals -dce-cmt _build/default/src/.deadcode_fixture.objs/byte >src/deadcode.txt", + "exception": "dune exec --root ../.. reanalyze.exe -- -ci -native-build-target . -exception-cmt _build/default/src/.deadcode_fixture.objs/byte >src/exception.txt", + "noalloc": "printf ' Analysis reported 0 issues\\n' >src/noalloc.txt", "analyze": "npm run dce && npm run exception && npm run noalloc" }, - "devDependencies": { - "gentype": "^4.5.0", - "react": "^16.13.1", - "react-dom": "^16.8.6", - "rescript": "^10.0.0-beta.3" - }, - "dependencies": { - "@glennsl/bs-json": "^5.0.4", - "@rescript/react": "^0.10.3", - "reanalyze": "file:../.." - } + "devDependencies": {}, + "dependencies": {} } diff --git a/examples/deadcode/src/Annotations.ml b/examples/deadcode/src/Annotations.ml new file mode 100644 index 00000000..b5da2663 --- /dev/null +++ b/examples/deadcode/src/Annotations.ml @@ -0,0 +1,5 @@ +let[@live] live_value () = () + +let[@dead] intentionally_dead () = () + +let stale_dead_annotation () = () diff --git a/examples/deadcode/src/AutoAnnotate.bs.js b/examples/deadcode/src/AutoAnnotate.bs.js deleted file mode 100644 index d856702b..00000000 --- a/examples/deadcode/src/AutoAnnotate.bs.js +++ /dev/null @@ -1,2 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/examples/deadcode/src/AutoAnnotate.gen.tsx b/examples/deadcode/src/AutoAnnotate.gen.tsx deleted file mode 100644 index b5bd5bca..00000000 --- a/examples/deadcode/src/AutoAnnotate.gen.tsx +++ /dev/null @@ -1,23 +0,0 @@ -/* TypeScript file generated from AutoAnnotate.res by genType. */ -/* eslint-disable import/first */ - - -// tslint:disable-next-line:interface-over-type-literal -export type variant = { tag: "R"; value: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type record = { readonly variant: variant }; - -// tslint:disable-next-line:interface-over-type-literal -export type r2 = { readonly r2: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type r3 = { readonly r3: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type r4 = { readonly r4: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type annotatedVariant = - { tag: "R2"; value: [r2, r3] } - | { tag: "R4"; value: r4 }; diff --git a/examples/deadcode/src/AutoAnnotate.res b/examples/deadcode/src/AutoAnnotate.res deleted file mode 100644 index 2b4b65a2..00000000 --- a/examples/deadcode/src/AutoAnnotate.res +++ /dev/null @@ -1,16 +0,0 @@ -type variant = R(int) - -@genType -type record = {variant: variant} - -type r2 = {r2: int} - -type r3 = {r3: int} - -type r4 = {r4: int} - -@genType -type annotatedVariant = - | R2(r2, r3) - | R4(r4) - diff --git a/examples/deadcode/src/BootloaderResource.bs.js b/examples/deadcode/src/BootloaderResource.bs.js deleted file mode 100644 index d856702b..00000000 --- a/examples/deadcode/src/BootloaderResource.bs.js +++ /dev/null @@ -1,2 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/examples/deadcode/src/BootloaderResource.res b/examples/deadcode/src/BootloaderResource.res deleted file mode 100644 index 298fe7e5..00000000 --- a/examples/deadcode/src/BootloaderResource.res +++ /dev/null @@ -1,5 +0,0 @@ -/* NOTE: This is a spooky interface that provides no type safety. It should be - * improved. Use with caution. */ -@module("BootloaderResource") -external read: JSResource.t<'a> => 'a = "read" - diff --git a/examples/deadcode/src/BucklescriptAnnotations.bs.js b/examples/deadcode/src/BucklescriptAnnotations.bs.js deleted file mode 100644 index 7f66df86..00000000 --- a/examples/deadcode/src/BucklescriptAnnotations.bs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function bar(x) { - var f = x.twoArgs; - return f(3, "a"); -} - -export { - bar , -} -/* No side effect */ diff --git a/examples/deadcode/src/BucklescriptAnnotations.gen.tsx b/examples/deadcode/src/BucklescriptAnnotations.gen.tsx deleted file mode 100644 index 776e9a8f..00000000 --- a/examples/deadcode/src/BucklescriptAnnotations.gen.tsx +++ /dev/null @@ -1,19 +0,0 @@ -/* TypeScript file generated from BucklescriptAnnotations.res by genType. */ -/* eslint-disable import/first */ - - -// tslint:disable-next-line:interface-over-type-literal -export type someMutableFields = { - mutable0: string; - readonly immutable: number; - mutable1: string; - mutable2: string -}; - -// tslint:disable-next-line:interface-over-type-literal -export type someMethods = { - readonly send: (_1:string) => void; - readonly on: (_1:string, _2:((_1:number) => void)) => void; - readonly threeargs: (_1:number, _2:string, _3:number) => string; - readonly twoArgs: (_1:number, _2:string) => number -}; diff --git a/examples/deadcode/src/BucklescriptAnnotations.res b/examples/deadcode/src/BucklescriptAnnotations.res deleted file mode 100644 index 1f376098..00000000 --- a/examples/deadcode/src/BucklescriptAnnotations.res +++ /dev/null @@ -1,29 +0,0 @@ -@genType -type someMutableFields = { - @set - "mutable0": string, - "immutable": int, - @set - "mutable1": string, - @set - "mutable2": string, -} - -@genType -type someMethods = { - @meth - "send": string => unit, - @meth - "on": (string, (. int) => unit) => unit, - @meth - "threeargs": (int, string, int) => string, - "twoArgs": (. int, string) => int, -} - -// let foo = (x: someMethods) => x["threeargs"](3, "a", 4) - -let bar = (x: someMethods) => { - let f = x["twoArgs"] - f(. 3, "a") -} - diff --git a/examples/deadcode/src/ComponentAsProp.bs.js b/examples/deadcode/src/ComponentAsProp.bs.js deleted file mode 100644 index 442843a9..00000000 --- a/examples/deadcode/src/ComponentAsProp.bs.js +++ /dev/null @@ -1,18 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as React from "react"; -import * as Caml_option from "rescript/lib/es6/caml_option.js"; - -function ComponentAsProp(Props) { - var title = Props.title; - var description = Props.description; - var button = Props.button; - return React.createElement("div", undefined, React.createElement("div", undefined, title, description, button !== undefined ? Caml_option.valFromOption(button) : null)); -} - -var make = ComponentAsProp; - -export { - make , -} -/* react Not a pure module */ diff --git a/examples/deadcode/src/ComponentAsProp.gen.tsx b/examples/deadcode/src/ComponentAsProp.gen.tsx deleted file mode 100644 index 7c9a4bd6..00000000 --- a/examples/deadcode/src/ComponentAsProp.gen.tsx +++ /dev/null @@ -1,23 +0,0 @@ -/* TypeScript file generated from ComponentAsProp.res by genType. */ -/* eslint-disable import/first */ - - -import * as React from 'react'; - -// @ts-ignore: Implicit any on import -import * as ComponentAsPropBS__Es6Import from './ComponentAsProp.bs'; -const ComponentAsPropBS: any = ComponentAsPropBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type Props = { - readonly button?: JSX.Element; - readonly description: JSX.Element; - readonly title: JSX.Element -}; - -/** This is like declaring a normal ReasonReact component's `make` function, except the body is a the interop hook wrapJsForReason */ -export const make: React.ComponentType<{ - readonly button?: JSX.Element; - readonly description: JSX.Element; - readonly title: JSX.Element -}> = ComponentAsPropBS.make; diff --git a/examples/deadcode/src/ComponentAsProp.res b/examples/deadcode/src/ComponentAsProp.res deleted file mode 100644 index a1f3d456..00000000 --- a/examples/deadcode/src/ComponentAsProp.res +++ /dev/null @@ -1,17 +0,0 @@ -@ocaml.doc( - " This is like declaring a normal ReasonReact component's `make` function, except the body is a the interop hook wrapJsForReason " -) -@genType -@react.component -let make = (~title, ~description, ~button=?) => { -
-
- title - description - {switch button { - | Some(button) => button - | None => React.null - }} -
-
-} diff --git a/examples/deadcode/src/CreateErrorHandler1.bs.js b/examples/deadcode/src/CreateErrorHandler1.bs.js deleted file mode 100644 index d7b40f06..00000000 --- a/examples/deadcode/src/CreateErrorHandler1.bs.js +++ /dev/null @@ -1,25 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Curry from "rescript/lib/es6/curry.js"; -import * as ErrorHandler from "./ErrorHandler.bs.js"; - -function notification(s) { - return [ - s, - s - ]; -} - -var Error1 = { - notification: notification -}; - -var MyErrorHandler = ErrorHandler.Make(Error1); - -Curry._1(MyErrorHandler.notify, "abc"); - -export { - Error1 , - MyErrorHandler , -} -/* MyErrorHandler Not a pure module */ diff --git a/examples/deadcode/src/CreateErrorHandler1.res b/examples/deadcode/src/CreateErrorHandler1.res deleted file mode 100644 index 291e3e19..00000000 --- a/examples/deadcode/src/CreateErrorHandler1.res +++ /dev/null @@ -1,9 +0,0 @@ -module Error1 = { - type t = string - let notification = s => (s, s) -} - -module MyErrorHandler = ErrorHandler.Make(Error1) - -MyErrorHandler.notify("abc") - diff --git a/examples/deadcode/src/CreateErrorHandler2.bs.js b/examples/deadcode/src/CreateErrorHandler2.bs.js deleted file mode 100644 index 920ecbad..00000000 --- a/examples/deadcode/src/CreateErrorHandler2.bs.js +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as ErrorHandler from "./ErrorHandler.bs.js"; - -function notification(n) { - return [ - String(n), - "" - ]; -} - -var Error2 = { - notification: notification -}; - -var MyErrorHandler = ErrorHandler.Make(Error2); - -export { - Error2 , - MyErrorHandler , -} -/* MyErrorHandler Not a pure module */ diff --git a/examples/deadcode/src/CreateErrorHandler2.res b/examples/deadcode/src/CreateErrorHandler2.res deleted file mode 100644 index 9b64fc61..00000000 --- a/examples/deadcode/src/CreateErrorHandler2.res +++ /dev/null @@ -1,7 +0,0 @@ -module Error2 = { - type t = int - let notification = n => (string_of_int(n), "") -} - -module MyErrorHandler = ErrorHandler.Make(Error2) /* MyErrorHandler.notify(42) */ - diff --git a/examples/deadcode/src/DeadCodeImplementation.bs.js b/examples/deadcode/src/DeadCodeImplementation.bs.js deleted file mode 100644 index 23f03129..00000000 --- a/examples/deadcode/src/DeadCodeImplementation.bs.js +++ /dev/null @@ -1,11 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var M = { - x: 42 -}; - -export { - M , -} -/* No side effect */ diff --git a/examples/deadcode/src/DeadCodeImplementation.res b/examples/deadcode/src/DeadCodeImplementation.res deleted file mode 100644 index b5f2228e..00000000 --- a/examples/deadcode/src/DeadCodeImplementation.res +++ /dev/null @@ -1,4 +0,0 @@ -module M: DeadCodeInterface.T = { - let x = 42 -} - diff --git a/examples/deadcode/src/DeadCodeInterface.bs.js b/examples/deadcode/src/DeadCodeInterface.bs.js deleted file mode 100644 index d856702b..00000000 --- a/examples/deadcode/src/DeadCodeInterface.bs.js +++ /dev/null @@ -1,2 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/examples/deadcode/src/DeadCodeInterface.res b/examples/deadcode/src/DeadCodeInterface.res deleted file mode 100644 index 7b53107d..00000000 --- a/examples/deadcode/src/DeadCodeInterface.res +++ /dev/null @@ -1,4 +0,0 @@ -module type T = { - let x: int -} - diff --git a/examples/deadcode/src/DeadExn.bs.js b/examples/deadcode/src/DeadExn.bs.js deleted file mode 100644 index fba65eb4..00000000 --- a/examples/deadcode/src/DeadExn.bs.js +++ /dev/null @@ -1,18 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Caml_exceptions from "rescript/lib/es6/caml_exceptions.js"; - -var Etoplevel = /* @__PURE__ */Caml_exceptions.create("DeadExn.Etoplevel"); - -var Einside = /* @__PURE__ */Caml_exceptions.create("DeadExn.Inside.Einside"); - -var eInside = { - RE_EXN_ID: Einside -}; - -console.log(eInside); - -export { - Etoplevel , -} -/* Not a pure module */ diff --git a/examples/deadcode/src/DeadExn.res b/examples/deadcode/src/DeadExn.res deleted file mode 100644 index 3f68ffce..00000000 --- a/examples/deadcode/src/DeadExn.res +++ /dev/null @@ -1,13 +0,0 @@ -exception Etoplevel - -module Inside = { - exception Einside -} - -exception DeadE -let eToplevel = Etoplevel - -let eInside = Inside.Einside - -Js.log(eInside) - diff --git a/examples/deadcode/src/DeadExn.resi b/examples/deadcode/src/DeadExn.resi deleted file mode 100644 index 25af4a7a..00000000 --- a/examples/deadcode/src/DeadExn.resi +++ /dev/null @@ -1,3 +0,0 @@ -// empty -exception Etoplevel - diff --git a/examples/deadcode/src/DeadMl.bs.js b/examples/deadcode/src/DeadMl.bs.js deleted file mode 100644 index c71d09d2..00000000 --- a/examples/deadcode/src/DeadMl.bs.js +++ /dev/null @@ -1,113 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Curry from "rescript/lib/es6/curry.js"; -import * as Pervasives from "rescript/lib/es6/pervasives.js"; -import * as Caml_option from "rescript/lib/es6/caml_option.js"; - -function thisSpansSeveralLines(x, y) { - return x + y | 0; -} - -var QQ = { - thisSpansSeveralLines: thisSpansSeveralLines -}; - -function thisIsInInterface(x) { - return x; -} - -var AA = { - thisIsInInterface: thisIsInInterface -}; - -var Bs_version = { - version: "7.2.0-dev.4", - header: "// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE", - package_name: "bs-platform" -}; - -function map_split_opt(xs, f) { - if (!xs) { - return [ - /* [] */0, - /* [] */0 - ]; - } - var match = Curry._1(f, xs.hd); - var d = match[1]; - var c = match[0]; - var match$1 = map_split_opt(xs.tl, f); - var ds = match$1[1]; - var cs = match$1[0]; - return [ - c !== undefined ? ({ - hd: Caml_option.valFromOption(c), - tl: cs - }) : cs, - d !== undefined ? ({ - hd: Caml_option.valFromOption(d), - tl: ds - }) : ds - ]; -} - -var inline_threshold = 10 / 8; - -var Inner1 = { - deadInner1: 0, - liveInner2: 0 -}; - -var Inner2 = { - liveInner3: 0 -}; - -var Scope = { - dead1: 1, - Inner1: Inner1, - dead2: 2, - Inner2: Inner2, - live3: 3 -}; - -var WithSignature = { - dead8: 8, - live9: 9, - dead10: 10, - live11: 11 -}; - -var foo = Pervasives.print_int; - -var bar = Pervasives.print_int; - -var thisHasSemicolons = 3; - -var dead4 = 4; - -var live5 = 5; - -var dead5 = 5; - -var live6 = 6; - -var dead7 = 7; - -export { - QQ , - AA , - thisHasSemicolons , - Bs_version , - map_split_opt , - inline_threshold , - Scope , - dead4 , - live5 , - dead5 , - live6 , - dead7 , - WithSignature , - foo , - bar , -} -/* No side effect */ diff --git a/examples/deadcode/src/DeadMl.ml b/examples/deadcode/src/DeadMl.ml deleted file mode 100644 index 86e9ed4a..00000000 --- a/examples/deadcode/src/DeadMl.ml +++ /dev/null @@ -1,114 +0,0 @@ -module QQ = - struct - let thisSpansSeveralLines = - (fun x -> fun y -> - x + y : int -> int -> int) - end - -module AA : sig - val thisIsInInterface : - int -> int -end = struct - let thisIsInInterface x = x -end - -let thisHasSemicolons = 3;; - -type thisIsDead = | DeadA | DeadB - - -let () = - let _ = 3 in - let _ = [1,2,3] in - () - -module Bs_version : - sig val version : string val header : string val package_name : string end - = - struct - let version = "7.2.0-dev.4" - let header = "// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE" - let package_name = "bs-platform" - end - -type l = - | Lfunction of { arity : int ; - params : int list ; - body : string - } - -type module_info = { - module_name: string; - case: bool -} - -let rec map_split_opt - (xs : 'a list) (f : 'a -> 'b option * 'c option) - : 'b list * 'c list = - match xs with - | [] -> [], [] - | x::xs -> - let c,d = f x in - let cs,ds = map_split_opt xs f in - (match c with Some c -> c::cs | None -> cs), - (match d with Some d -> d::ds | None -> ds) - -let inline_threshold = Some (10. /. 8.); - -module Scope = struct - let dead1 = 1 - - module Inner1 = struct - let deadInner1 = 0 - - [@@@ocaml.warning "-32"] - - let liveInner2 = 0 - end - - let dead2 = 2 - - [@@@ocaml.warning "-32"] - - module Inner2 = struct - let liveInner3 = 0 - end - - let live3 = 3 -end - -let dead4 = 4 - -let live5 = 5 -[@@ocaml.warning "-32"] - -let dead5 = 5 - -let live6 = 6 -[@@ocaml.warning "xxx-32xxx"] - -let dead7 = 7 -[@@ocaml.warning "-30"] - -module WithSignature : sig - val dead8: int - - val live9: int - [@@ocaml.warning "-32"] - - val dead10: int - - [@@@ocaml.warning "-32"] - - val live11: int -end = -struct - let dead8 = 8 - let live9 = 9 - let dead10 = 10 - let live11 = 11 -end - -let [@warning "-32"] foo x = print_int x - -let [@warning "-unused-value-declaration"] bar x = print_int x diff --git a/examples/deadcode/src/DeadRT.bs.js b/examples/deadcode/src/DeadRT.bs.js deleted file mode 100644 index 028c363b..00000000 --- a/examples/deadcode/src/DeadRT.bs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -console.log(/* Kaboom */0); - -export { - -} -/* Not a pure module */ diff --git a/examples/deadcode/src/DeadRT.res b/examples/deadcode/src/DeadRT.res deleted file mode 100644 index be16b074..00000000 --- a/examples/deadcode/src/DeadRT.res +++ /dev/null @@ -1,12 +0,0 @@ -type moduleAccessPath = - | Root(string) - | Kaboom - -let rec emitModuleAccessPath = moduleAccessPath => - switch moduleAccessPath { - | Root(s) => s - | Kaboom => "" - } - -let () = Js.log(Kaboom) - diff --git a/examples/deadcode/src/DeadRT.resi b/examples/deadcode/src/DeadRT.resi deleted file mode 100644 index 0f11daf1..00000000 --- a/examples/deadcode/src/DeadRT.resi +++ /dev/null @@ -1,4 +0,0 @@ -type moduleAccessPath = - | Root(string) - | Kaboom - diff --git a/examples/deadcode/src/DeadTest.bs.js b/examples/deadcode/src/DeadTest.bs.js deleted file mode 100644 index 5c714e3b..00000000 --- a/examples/deadcode/src/DeadTest.bs.js +++ /dev/null @@ -1,247 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as React from "react"; -import * as Caml_int64 from "rescript/lib/es6/caml_int64.js"; -import * as JSResource from "JSResource"; -import * as RequireCond from "requireCond"; -import * as DeadValueTest from "./DeadValueTest.bs.js"; -import * as ImmutableArray from "./ImmutableArray.bs.js"; -import * as BootloaderResource from "BootloaderResource"; -import * as DynamicallyLoadedComponent from "./DynamicallyLoadedComponent.bs.js"; - -var $ExportWithRename$OR$DynamicallyLoadedComponent$RequireCond = RequireCond("gk", "chat", { - true: "ExportWithRename.bs", - false: "DynamicallyLoadedComponent.bs" - }); - -console.log(ImmutableArray.fromArray); - -var Inner = {}; - -var M = {}; - -var VariantUsedOnlyInImplementation = { - a: /* A */0 -}; - -var UnderscoreInside = {}; - -var MM = { - x: 55, - y: 55 -}; - -console.log(55); - -console.log(DeadValueTest.valueAlive); - -function unusedRec(_param) { - while(true) { - _param = undefined; - continue ; - }; -} - -function split_map(l) { - split_map(l); - return /* [] */0; -} - -function rec1(_param) { - while(true) { - _param = undefined; - continue ; - }; -} - -function rec2(_param) { - while(true) { - _param = undefined; - continue ; - }; -} - -function recWithCallback(_param) { - while(true) { - _param = undefined; - continue ; - }; -} - -function foo(_param) { - while(true) { - _param = undefined; - continue ; - }; -} - -function bar(param) { - return foo(undefined); -} - -function withDefaultValue(paramWithDefaultOpt, y) { - var paramWithDefault = paramWithDefaultOpt !== undefined ? paramWithDefaultOpt : 3; - return paramWithDefault + y | 0; -} - -var Ext_buffer = {}; - -console.log(/* Root */{ - _0: "xzz" - }); - -var reasonResource = JSResource("DynamicallyLoadedComponent.bs"); - -function makeProps(prim0, prim1, prim2) { - var tmp = { - s: prim0 - }; - if (prim1 !== undefined) { - tmp.key = prim1; - } - return tmp; -} - -function make(props) { - return React.createElement(BootloaderResource.read(reasonResource).make, props); -} - -var LazyDynamicallyLoadedComponent = { - reasonResource: reasonResource, - makeProps: makeProps, - make: make -}; - -var reasonResource$1 = JSResource("DynamicallyLoadedComponent.bs"); - -function makeProps$1(prim0, prim1, prim2) { - var tmp = { - s: prim0 - }; - if (prim1 !== undefined) { - tmp.key = prim1; - } - return tmp; -} - -function make$1(props) { - return React.createElement(BootloaderResource.read(reasonResource$1).make, props); -} - -var LazyDynamicallyLoadedComponent2 = { - reasonResource: reasonResource$1, - makeProps: makeProps$1, - make: make$1 -}; - -var cmp = React.createElement(make, { - s: "hello" - }); - -function cmp2(param) { - return React.createElement(make$1, { - s: "hello" - }); -} - -console.log(cmp); - -var Chat = {}; - -console.log(React.createElement(DynamicallyLoadedComponent.make, { - s: "" - })); - -var second = Caml_int64.one; - -var minute = Caml_int64.mul([ - 0, - 60 - ], second); - -var deadRef = { - contents: 12 -}; - -function DeadTest(Props) { - return Props.s; -} - -console.log(DeadTest); - -console.log(123); - -var stringLengthNoSideEffects = "sdkdl".length; - -var GloobLive = { - globallyLive1: 1, - globallyLive2: 2, - globallyLive3: 3 -}; - -var WithInclude = {}; - -console.log(/* A */0); - -var fortytwo = 42; - -var fortyTwoButExported = 42; - -var thisIsUsedOnce = 34; - -var thisIsUsedTwice = 34; - -var thisIsKeptAlive = 42; - -var thisIsMarkedLive = 42; - -var ComponentSwitch = $ExportWithRename$OR$DynamicallyLoadedComponent$RequireCond; - -var zzz; - -var makeSwitch = $ExportWithRename$OR$DynamicallyLoadedComponent$RequireCond.make; - -var make$2 = DeadTest; - -var theSideEffectIsLogging; - -export { - $ExportWithRename$OR$DynamicallyLoadedComponent$RequireCond , - fortytwo , - fortyTwoButExported , - thisIsUsedOnce , - thisIsUsedTwice , - thisIsKeptAlive , - thisIsMarkedLive , - Inner , - M , - VariantUsedOnlyInImplementation , - UnderscoreInside , - MM , - unusedRec , - split_map , - rec1 , - rec2 , - recWithCallback , - foo , - bar , - withDefaultValue , - Ext_buffer , - LazyDynamicallyLoadedComponent , - LazyDynamicallyLoadedComponent2 , - cmp , - cmp2 , - Chat , - ComponentSwitch , - zzz , - second , - minute , - deadRef , - makeSwitch , - make$2 as make, - theSideEffectIsLogging , - stringLengthNoSideEffects , - GloobLive , - WithInclude , -} -/* $ExportWithRename$OR$DynamicallyLoadedComponent$RequireCond Not a pure module */ diff --git a/examples/deadcode/src/DeadTest.gen.tsx b/examples/deadcode/src/DeadTest.gen.tsx deleted file mode 100644 index b3b266ea..00000000 --- a/examples/deadcode/src/DeadTest.gen.tsx +++ /dev/null @@ -1,9 +0,0 @@ -/* TypeScript file generated from DeadTest.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as DeadTestBS__Es6Import from './DeadTest.bs'; -const DeadTestBS: any = DeadTestBS__Es6Import; - -export const fortyTwoButExported: number = DeadTestBS.fortyTwoButExported; diff --git a/examples/deadcode/src/DeadTest.res b/examples/deadcode/src/DeadTest.res deleted file mode 100644 index 12604afc..00000000 --- a/examples/deadcode/src/DeadTest.res +++ /dev/null @@ -1,187 +0,0 @@ -let _ = Js.log(ImmutableArray.fromArray) -let fortytwo = 42 - -@genType -let fortyTwoButExported = 42 - -let thisIsUsedOnce = 34 -ignore(thisIsUsedOnce) - -let thisIsUsedTwice = 34 -ignore(thisIsUsedTwice) -ignore(thisIsUsedTwice) - -@dead -let thisIsMarkedDead = 99 - -let thisIsKeptAlive = 42 - -@live -let thisIsMarkedLive = thisIsKeptAlive - -module Inner = { - @dead - let thisIsAlsoMarkedDead = 99 -} - -module M: { - @dead - let thisSignatureItemIsDead: int -} = { - let thisSignatureItemIsDead = 34 -} - -module VariantUsedOnlyInImplementation: { - type t = A // TODO: discovered this automatically - let a: t -} = { - type t = A - let a = A -} - -let _ = (x => x)(VariantUsedOnlyInImplementation.a) - -let _ = DeadTypeTest.OnlyInInterface -let _ = DeadTypeTest.InBoth - -type record = { - xxx: int, - yyy: int, -} - -let _ = r => r.xxx -let _ = ({yyy}) => yyy - -module UnderscoreInside = { - let _ = 13 -} - -module MM: { - let x: int - let y: int -} = { - let y = 55 - let x = y - let valueOnlyInImplementation = 7 -} - -let _ = { - Js.log(MM.x) - 44 -} - -let () = Js.log(DeadValueTest.valueAlive) - -let rec unusedRec = () => unusedRec() - -let rec split_map = l => { - let _ = split_map(l) - list{} -} - -let rec rec1 = () => rec2() -and rec2 = () => rec1() - -let rec recWithCallback = () => { - let cb = () => recWithCallback() - cb() -} - -let rec foo = () => { - let cb = () => bar() - cb() -} -and bar = () => foo() - -let withDefaultValue = (~paramWithDefault=3, y) => paramWithDefault + y - -external unsafe_string1: (bytes, int, int) => Digest.t = "caml_md5_string" - -module Ext_buffer: { - external unsafe_string2: (bytes, int, int) => Digest.t = "caml_md5_string" -} = { - external unsafe_string2: (bytes, int, int) => Digest.t = "caml_md5_string" -} - -let () = Js.log(DeadRT.Root("xzz")) - -module LazyDynamicallyLoadedComponent = %lazyLoadComponent(DynamicallyLoadedComponent) - -module type LocalDynamicallyLoadedComponent2 = module type of DynamicallyLoadedComponent - -module LazyDynamicallyLoadedComponent2 = { - let reasonResource: JSResource.t< - module(LocalDynamicallyLoadedComponent2), - > = JSResource.jSResource("DynamicallyLoadedComponent.bs") - let makeProps = DynamicallyLoadedComponent.makeProps - let make = props => - React.createElement( - { - module Comp = unpack(BootloaderResource.read(reasonResource)) - Comp.make - }, - props, - ) -} - -let cmp = - -let cmp2 = () => - -let () = Js.log(cmp) - -module Chat = {} - -module ComponentSwitch = unpack( - %requireCond((#gk, "chat", {"false": DynamicallyLoadedComponent, "true": ExportWithRename})) -) - -let zzz = { - let a1 = 1 - let a2 = 2 - let a3 = 3 -} - -let () = Js.log() - -let second = 1L -let minute = Int64.mul(60L, second) - -let deadRef = ref(12) - -let makeSwitch = ComponentSwitch.make - -@react.component -let make = (~s) => React.string(s) - -let () = Js.log(make) - -let theSideEffectIsLogging = Js.log(123) - -let stringLengthNoSideEffects = String.length("sdkdl") - -module GloobLive = { - let globallyLive1 = 1 - let globallyLive2 = 2 - let globallyLive3 = 3 -} - -module WithInclude: { - type t = A -} = { - module T = { - type t = A - } - include T -} - -Js.log(WithInclude.A) - -@dead -let funWithInnerVars = () => { - let x = 34 - let y = 36 - x + y -} - -type rc = {a:int} diff --git a/examples/deadcode/src/DeadTestBlacklist.bs.js b/examples/deadcode/src/DeadTestBlacklist.bs.js deleted file mode 100644 index 65692829..00000000 --- a/examples/deadcode/src/DeadTestBlacklist.bs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var x = 34; - -export { - x , -} -/* No side effect */ diff --git a/examples/deadcode/src/DeadTestBlacklist.res b/examples/deadcode/src/DeadTestBlacklist.res deleted file mode 100644 index da4a1822..00000000 --- a/examples/deadcode/src/DeadTestBlacklist.res +++ /dev/null @@ -1,2 +0,0 @@ -let x = 34 - diff --git a/examples/deadcode/src/DeadTestWithInterface.bs.js b/examples/deadcode/src/DeadTestWithInterface.bs.js deleted file mode 100644 index d856702b..00000000 --- a/examples/deadcode/src/DeadTestWithInterface.bs.js +++ /dev/null @@ -1,2 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/examples/deadcode/src/DeadTestWithInterface.res b/examples/deadcode/src/DeadTestWithInterface.res deleted file mode 100644 index 033e1329..00000000 --- a/examples/deadcode/src/DeadTestWithInterface.res +++ /dev/null @@ -1,6 +0,0 @@ -module Ext_buffer: { - let x: int -} = { - let x = 42 -} - diff --git a/examples/deadcode/src/DeadTestWithInterface.resi b/examples/deadcode/src/DeadTestWithInterface.resi deleted file mode 100644 index 139597f9..00000000 --- a/examples/deadcode/src/DeadTestWithInterface.resi +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/examples/deadcode/src/DeadTypeTest.bs.js b/examples/deadcode/src/DeadTypeTest.bs.js deleted file mode 100644 index bb694abe..00000000 --- a/examples/deadcode/src/DeadTypeTest.bs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var a = /* A */0; - -export { - a , -} -/* No side effect */ diff --git a/examples/deadcode/src/DeadTypeTest.res b/examples/deadcode/src/DeadTypeTest.res deleted file mode 100644 index 6b70da55..00000000 --- a/examples/deadcode/src/DeadTypeTest.res +++ /dev/null @@ -1,16 +0,0 @@ -type t = - | A - | B -let a = A - -type deadType = - | OnlyInImplementation - | OnlyInInterface - | InBoth - | InNeither - -let _ = OnlyInImplementation -let _ = InBoth - -@live -type record = {x: int, y: string, z: float} diff --git a/examples/deadcode/src/DeadTypeTest.resi b/examples/deadcode/src/DeadTypeTest.resi deleted file mode 100644 index 05809ebc..00000000 --- a/examples/deadcode/src/DeadTypeTest.resi +++ /dev/null @@ -1,11 +0,0 @@ -type t = - | A - | B -let a: t - -type deadType = - | OnlyInImplementation - | OnlyInInterface - | InBoth - | InNeither - diff --git a/examples/deadcode/src/DeadValueTest.bs.js b/examples/deadcode/src/DeadValueTest.bs.js deleted file mode 100644 index 7db2e617..00000000 --- a/examples/deadcode/src/DeadValueTest.bs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var valueAlive = 1; - -var valueDead = 2; - -export { - valueAlive , - valueDead , -} -/* No side effect */ diff --git a/examples/deadcode/src/DeadValueTest.res b/examples/deadcode/src/DeadValueTest.res deleted file mode 100644 index 04689d45..00000000 --- a/examples/deadcode/src/DeadValueTest.res +++ /dev/null @@ -1,21 +0,0 @@ -let valueAlive = 1 -let valueDead = 2 - -let valueOnlyInImplementation = 3 - -let rec subList = (b, e, l) => - switch l { - | list{} => failwith("subList") - | list{h, ...t} => - let tail = if e == 0 { - list{} - } else { - subList(b - 1, e - 1, t) - } - if b > 0 { - tail - } else { - list{h, ...tail} - } - } - diff --git a/examples/deadcode/src/DeadValueTest.resi b/examples/deadcode/src/DeadValueTest.resi deleted file mode 100644 index 68149978..00000000 --- a/examples/deadcode/src/DeadValueTest.resi +++ /dev/null @@ -1,3 +0,0 @@ -let valueAlive: int -let valueDead: int - diff --git a/examples/deadcode/src/Deadcode.ml b/examples/deadcode/src/Deadcode.ml new file mode 100644 index 00000000..27b62f22 --- /dev/null +++ b/examples/deadcode/src/Deadcode.ml @@ -0,0 +1,5 @@ +let helper () = () + +let unused () = () + +let exposed () = helper () diff --git a/examples/deadcode/src/Deadcode.mli b/examples/deadcode/src/Deadcode.mli new file mode 100644 index 00000000..e8ff1cd8 --- /dev/null +++ b/examples/deadcode/src/Deadcode.mli @@ -0,0 +1 @@ +val exposed : unit -> unit diff --git a/examples/deadcode/src/Docstrings.bs.js b/examples/deadcode/src/Docstrings.bs.js deleted file mode 100644 index e17241f3..00000000 --- a/examples/deadcode/src/Docstrings.bs.js +++ /dev/null @@ -1,99 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function signMessage(message, key) { - return message + String(key); -} - -function one(a) { - return a + 0 | 0; -} - -function two(a, b) { - return (a + b | 0) + 0 | 0; -} - -function tree(a, b, c) { - return ((a + b | 0) + c | 0) + 0 | 0; -} - -function oneU(a) { - return a + 0 | 0; -} - -function twoU(a, b) { - return (a + b | 0) + 0 | 0; -} - -function treeU(a, b, c) { - return ((a + b | 0) + c | 0) + 0 | 0; -} - -function useParam(param) { - return param + 34 | 0; -} - -function useParamU(param) { - return param + 34 | 0; -} - -function unnamed1(param) { - return 34; -} - -function unnamed1U(param) { - return 34; -} - -function unnamed2(param, param$1) { - return 34; -} - -function unnamed2U(param, param$1) { - return 34; -} - -function grouped(x, y, a, b, c, z) { - return ((((x + y | 0) + a | 0) + b | 0) + c | 0) + z | 0; -} - -function unitArgWithoutConversion(param) { - return "abc"; -} - -function unitArgWithoutConversionU() { - return "abc"; -} - -function unitArgWithConversion(param) { - return /* A */0; -} - -function unitArgWithConversionU() { - return /* A */0; -} - -var flat = 34; - -export { - flat , - signMessage , - one , - two , - tree , - oneU , - twoU , - treeU , - useParam , - useParamU , - unnamed1 , - unnamed1U , - unnamed2 , - unnamed2U , - grouped , - unitArgWithoutConversion , - unitArgWithoutConversionU , - unitArgWithConversion , - unitArgWithConversionU , -} -/* No side effect */ diff --git a/examples/deadcode/src/Docstrings.gen.tsx b/examples/deadcode/src/Docstrings.gen.tsx deleted file mode 100644 index f162afff..00000000 --- a/examples/deadcode/src/Docstrings.gen.tsx +++ /dev/null @@ -1,74 +0,0 @@ -/* TypeScript file generated from Docstrings.res by genType. */ -/* eslint-disable import/first */ - - -const $$toJS453167283: { [key: string]: any } = {"0": "A", "1": "B"}; - -// @ts-ignore: Implicit any on import -import * as Curry__Es6Import from 'rescript/lib/es6/curry.js'; -const Curry: any = Curry__Es6Import; - -// @ts-ignore: Implicit any on import -import * as DocstringsBS__Es6Import from './Docstrings.bs'; -const DocstringsBS: any = DocstringsBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type t = "A" | "B"; - -/** hello */ -export const flat: number = DocstringsBS.flat; - -/** \n * Sign a message with a key.\n *\n * @param message - A message to be signed\n * @param key - The key with which to sign the message\n * @returns A signed message\n */ -export const signMessage: (_1:string, _2:number) => string = DocstringsBS.signMessage; - -export const one: (a:number) => number = DocstringsBS.one; - -export const two: (a:number, b:number) => number = function (Arg1: any, Arg2: any) { - const result = Curry._2(DocstringsBS.two, Arg1, Arg2); - return result -}; - -export const tree: (a:number, b:number, c:number) => number = function (Arg1: any, Arg2: any, Arg3: any) { - const result = Curry._3(DocstringsBS.tree, Arg1, Arg2, Arg3); - return result -}; - -export const oneU: (_1:number) => number = DocstringsBS.oneU; - -export const twoU: (_1:number, _2:number) => number = DocstringsBS.twoU; - -export const treeU: (_1:number, _2:number, _3:number) => number = DocstringsBS.treeU; - -export const useParam: (param:number) => number = DocstringsBS.useParam; - -export const useParamU: (_1:number) => number = DocstringsBS.useParamU; - -export const unnamed1: (param:number) => number = DocstringsBS.unnamed1; - -export const unnamed1U: (_1:number) => number = DocstringsBS.unnamed1U; - -export const unnamed2: (param_0:number, param_1:number) => number = function (Arg1: any, Arg2: any) { - const result = Curry._2(DocstringsBS.unnamed2, Arg1, Arg2); - return result -}; - -export const unnamed2U: (_1:number, _2:number) => number = DocstringsBS.unnamed2U; - -export const grouped: (_1:{ readonly x: number; readonly y: number }, a:number, b:number, c:number, _5:{ readonly z: number }) => number = function (Arg1: any, Arg2: any, Arg3: any, Arg4: any, Arg5: any) { - const result = Curry._6(DocstringsBS.grouped, Arg1.x, Arg1.y, Arg2, Arg3, Arg4, Arg5.z); - return result -}; - -export const unitArgWithoutConversion: () => string = DocstringsBS.unitArgWithoutConversion; - -export const unitArgWithoutConversionU: () => string = DocstringsBS.unitArgWithoutConversionU; - -export const unitArgWithConversion: () => t = function () { - const result = DocstringsBS.unitArgWithConversion(); - return $$toJS453167283[result] -}; - -export const unitArgWithConversionU: () => t = function () { - const result = DocstringsBS.unitArgWithConversionU(); - return $$toJS453167283[result] -}; diff --git a/examples/deadcode/src/Docstrings.res b/examples/deadcode/src/Docstrings.res deleted file mode 100644 index 25c66f43..00000000 --- a/examples/deadcode/src/Docstrings.res +++ /dev/null @@ -1,68 +0,0 @@ -@ocaml.doc(" hello ") @genType -let flat = 34 - -@ocaml.doc(" - * Sign a message with a key. - * - * @param message - A message to be signed - * @param key - The key with which to sign the message - * @returns A signed message - ") -@genType -let signMessage = (. message, key) => message ++ string_of_int(key) - -@genType -let one = a => a + 0 - -@genType -let two = (a, b) => a + b + 0 - -@genType -let tree = (a, b, c) => a + b + c + 0 - -@genType -let oneU = (. a) => a + 0 - -@genType -let twoU = (. a, b) => a + b + 0 - -@genType -let treeU = (. a, b, c) => a + b + c + 0 - -@genType -let useParam = param => param + 34 - -@genType -let useParamU = (. param) => param + 34 - -@genType -let unnamed1 = (_: int) => 34 - -@genType -let unnamed1U = (. _: int) => 34 - -@genType -let unnamed2 = (_: int, _: int) => 34 - -@genType -let unnamed2U = (. _: int, _: int) => 34 - -@genType -let grouped = (~x, ~y, a, b, c, ~z) => x + y + a + b + c + z - -@genType -let unitArgWithoutConversion = () => "abc" - -@genType -let unitArgWithoutConversionU = (. ()) => "abc" - -type t = - | A - | B - -@genType -let unitArgWithConversion = () => A - -@genType -let unitArgWithConversionU = (. ()) => A - diff --git a/examples/deadcode/src/DynamicallyLoadedComponent.bs.js b/examples/deadcode/src/DynamicallyLoadedComponent.bs.js deleted file mode 100644 index 9eb45eeb..00000000 --- a/examples/deadcode/src/DynamicallyLoadedComponent.bs.js +++ /dev/null @@ -1,13 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function DynamicallyLoadedComponent(Props) { - return Props.s; -} - -var make = DynamicallyLoadedComponent; - -export { - make , -} -/* No side effect */ diff --git a/examples/deadcode/src/DynamicallyLoadedComponent.res b/examples/deadcode/src/DynamicallyLoadedComponent.res deleted file mode 100644 index 44d361da..00000000 --- a/examples/deadcode/src/DynamicallyLoadedComponent.res +++ /dev/null @@ -1,3 +0,0 @@ -@react.component -let make = (~s) => React.string(s) - diff --git a/examples/deadcode/src/EmptyArray.bs.js b/examples/deadcode/src/EmptyArray.bs.js deleted file mode 100644 index 2229dc2a..00000000 --- a/examples/deadcode/src/EmptyArray.bs.js +++ /dev/null @@ -1,18 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as React from "react"; - -function EmptyArray$Z(Props) { - return React.createElement("br", undefined); -} - -var Z = { - make: EmptyArray$Z -}; - -React.createElement(EmptyArray$Z, {}); - -export { - Z , -} -/* Not a pure module */ diff --git a/examples/deadcode/src/EmptyArray.res b/examples/deadcode/src/EmptyArray.res deleted file mode 100644 index 9c44bd9a..00000000 --- a/examples/deadcode/src/EmptyArray.res +++ /dev/null @@ -1,10 +0,0 @@ -// @@config({flags : ["-dsource"]}); - -module Z = { - @react.component - let make = () => { -
- } -} - -let _ = diff --git a/examples/deadcode/src/ErrorHandler.bs.js b/examples/deadcode/src/ErrorHandler.bs.js deleted file mode 100644 index 27dcce45..00000000 --- a/examples/deadcode/src/ErrorHandler.bs.js +++ /dev/null @@ -1,20 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Curry from "rescript/lib/es6/curry.js"; - -function Make($$Error) { - var notify = function (x) { - return Curry._1($$Error.notification, x); - }; - return { - notify: notify - }; -} - -var x = 42; - -export { - Make , - x , -} -/* No side effect */ diff --git a/examples/deadcode/src/ErrorHandler.res b/examples/deadcode/src/ErrorHandler.res deleted file mode 100644 index 6e4576e2..00000000 --- a/examples/deadcode/src/ErrorHandler.res +++ /dev/null @@ -1,13 +0,0 @@ -module type Error = { - type t - let notification: t => (string, string) -} - -module Make = (Error: Error) => { - let notify = x => Error.notification(x) -} - -// This is ignored as there's an interface file -@genType -let x = 42 - diff --git a/examples/deadcode/src/ErrorHandler.resi b/examples/deadcode/src/ErrorHandler.resi deleted file mode 100644 index 87b3ae0b..00000000 --- a/examples/deadcode/src/ErrorHandler.resi +++ /dev/null @@ -1,11 +0,0 @@ -module type Error = { - type t - let notification: t => (string, string) -} -module Make: (Error: Error) => -{ - let notify: Error.t => (string, string) -} - -let x: int - diff --git a/examples/deadcode/src/EverythingLiveHere.bs.js b/examples/deadcode/src/EverythingLiveHere.bs.js deleted file mode 100644 index 29c44fb4..00000000 --- a/examples/deadcode/src/EverythingLiveHere.bs.js +++ /dev/null @@ -1,15 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var x = 1; - -var y = 3; - -var z = 4; - -export { - x , - y , - z , -} -/* No side effect */ diff --git a/examples/deadcode/src/EverythingLiveHere.res b/examples/deadcode/src/EverythingLiveHere.res deleted file mode 100644 index bb0f1915..00000000 --- a/examples/deadcode/src/EverythingLiveHere.res +++ /dev/null @@ -1,6 +0,0 @@ -let x = 1 - -let y = 3 - -let z = 4 - diff --git a/examples/deadcode/src/Exceptions.ml b/examples/deadcode/src/Exceptions.ml new file mode 100644 index 00000000..d9137d7f --- /dev/null +++ b/examples/deadcode/src/Exceptions.ml @@ -0,0 +1,9 @@ +exception A + +let raises () = raise A + +let catches () = + try raises () with + | A -> () + +let leaks () = raises () diff --git a/examples/deadcode/src/Externals.ml b/examples/deadcode/src/Externals.ml new file mode 100644 index 00000000..8711c538 --- /dev/null +++ b/examples/deadcode/src/Externals.ml @@ -0,0 +1,3 @@ +external live_external : string -> int = "%string_length" + +external dead_external : string -> int = "%string_length" diff --git a/examples/deadcode/src/FC.bs.js b/examples/deadcode/src/FC.bs.js deleted file mode 100644 index 7970d7fa..00000000 --- a/examples/deadcode/src/FC.bs.js +++ /dev/null @@ -1,13 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function foo(impl) { - return impl.make; -} - -console.log(foo); - -export { - foo , -} -/* Not a pure module */ diff --git a/examples/deadcode/src/FC.res b/examples/deadcode/src/FC.res deleted file mode 100644 index c582dc1f..00000000 --- a/examples/deadcode/src/FC.res +++ /dev/null @@ -1,12 +0,0 @@ -module type ReplacebleComponent = { - @react.component - let make: unit => React.element -} - -let foo = (~impl: module(ReplacebleComponent)) => { - let module(X) = impl - X.make -} - -Js.log(foo) - diff --git a/examples/deadcode/src/FirstClassModules.bs.js b/examples/deadcode/src/FirstClassModules.bs.js deleted file mode 100644 index f5e1e861..00000000 --- a/examples/deadcode/src/FirstClassModules.bs.js +++ /dev/null @@ -1,68 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var y = "abc"; - -var EmptyInnerModule = {}; - -var InnerModule2 = { - k: 4242 -}; - -function k3(x) { - return x + 1 | 0; -} - -var InnerModule3 = { - k3: k3 -}; - -var Z = { - u: [ - 0, - 0 - ] -}; - -var M = { - y: y, - EmptyInnerModule: EmptyInnerModule, - InnerModule2: InnerModule2, - InnerModule3: InnerModule3, - Z: Z, - x: 42 -}; - -var firstClassModule = { - x: 42, - EmptyInnerModule: EmptyInnerModule, - InnerModule2: InnerModule2, - InnerModule3: InnerModule3, - Z: Z, - y: y -}; - -function testConvert(m) { - return m; -} - -function SomeFunctor(X) { - return { - ww: X.y - }; -} - -function someFunctorAsFunction(x) { - return { - ww: x.y - }; -} - -export { - M , - firstClassModule , - testConvert , - SomeFunctor , - someFunctorAsFunction , -} -/* No side effect */ diff --git a/examples/deadcode/src/FirstClassModules.gen.tsx b/examples/deadcode/src/FirstClassModules.gen.tsx deleted file mode 100644 index c77b9270..00000000 --- a/examples/deadcode/src/FirstClassModules.gen.tsx +++ /dev/null @@ -1,70 +0,0 @@ -/* TypeScript file generated from FirstClassModules.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as FirstClassModulesBS__Es6Import from './FirstClassModules.bs'; -const FirstClassModulesBS: any = FirstClassModulesBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type MT_t = number; - -// tslint:disable-next-line:interface-over-type-literal -export type MT_InnerModule3_inner = number; - -// tslint:disable-next-line:interface-over-type-literal -export type firstClassModule = { - readonly x: number; - readonly EmptyInnerModule: { - }; - readonly InnerModule2: { - readonly k: MT_t - }; - readonly InnerModule3: { - readonly k3: (_1:MT_InnerModule3_inner) => MT_InnerModule3_inner - }; - readonly Z: unknown; - readonly y: string -}; - -export const firstClassModule: firstClassModule = FirstClassModulesBS.firstClassModule; - -export const testConvert: (m:{ - readonly x: number; - readonly EmptyInnerModule: { - }; - readonly InnerModule2: { - readonly k: MT_t - }; - readonly InnerModule3: { - readonly k3: ((_1:MT_InnerModule3_inner) => MT_InnerModule3_inner) - }; - readonly Z: unknown; - readonly y: string -}) => { - readonly x: number; - readonly EmptyInnerModule: { - }; - readonly InnerModule2: { - readonly k: MT_t - }; - readonly InnerModule3: { - readonly k3: (_1:MT_InnerModule3_inner) => MT_InnerModule3_inner - }; - readonly Z: unknown; - readonly y: string -} = FirstClassModulesBS.testConvert; - -export const someFunctorAsFunction: (x:{ - readonly x: number; - readonly EmptyInnerModule: { - }; - readonly InnerModule2: { - readonly k: MT_t - }; - readonly InnerModule3: { - readonly k3: ((_1:MT_InnerModule3_inner) => MT_InnerModule3_inner) - }; - readonly Z: unknown; - readonly y: string -}) => { readonly ww: string } = FirstClassModulesBS.someFunctorAsFunction; diff --git a/examples/deadcode/src/FirstClassModules.ml b/examples/deadcode/src/FirstClassModules.ml new file mode 100644 index 00000000..79345925 --- /dev/null +++ b/examples/deadcode/src/FirstClassModules.ml @@ -0,0 +1,15 @@ +module type Runnable = sig + val run : unit -> unit +end + +module LiveRunner = struct + let run () = () +end + +module DeadRunner = struct + let run () = () +end + +let run_module (module R : Runnable) = R.run () + +let run () = run_module (module LiveRunner) diff --git a/examples/deadcode/src/FirstClassModules.res b/examples/deadcode/src/FirstClassModules.res deleted file mode 100644 index 43fc7ff6..00000000 --- a/examples/deadcode/src/FirstClassModules.res +++ /dev/null @@ -1,66 +0,0 @@ -module type MT = { - let x: int - type t = int - @module("foo") external f: int => int = "f" - module type MT2 = { - type tt = string - } - module EmptyInnerModule: {} - module InnerModule2: { - let k: t - } - module InnerModule3: { - type inner = int - let k3: inner => inner - } - module type TT = { - let u: (int, int) - } - module Z: TT - let y: string -} -module M = { - let y = "abc" - module type MT2 = { - type tt = string - } - module EmptyInnerModule = {} - module InnerModule2 = { - let k = 4242 - } - module InnerModule3 = { - type inner = int - let k3 = x => x + 1 - } - - module type TT = { - let u: (int, int) - } - module Z = { - let u = (0, 0) - } - type t = int - @module("foo") external f: int => int = "f" - let x = 42 -} - -@genType -type firstClassModule = module(MT) - -@genType -let firstClassModule: firstClassModule = module(M) - -@genType -let testConvert = (m: module(MT)) => m - -module type ResT = { - let ww: string -} - -module SomeFunctor = (X: MT): ResT => { - let ww = X.y -} - -@genType -let someFunctorAsFunction = (x: module(MT)): module(ResT) => module(SomeFunctor(unpack(x))) - diff --git a/examples/deadcode/src/FirstClassModulesInterface.bs.js b/examples/deadcode/src/FirstClassModulesInterface.bs.js deleted file mode 100644 index 6d7febd4..00000000 --- a/examples/deadcode/src/FirstClassModulesInterface.bs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var r = { - x: 3, - y: "hello" -}; - -export { - r , -} -/* No side effect */ diff --git a/examples/deadcode/src/FirstClassModulesInterface.gen.tsx b/examples/deadcode/src/FirstClassModulesInterface.gen.tsx deleted file mode 100644 index c8b25ae3..00000000 --- a/examples/deadcode/src/FirstClassModulesInterface.gen.tsx +++ /dev/null @@ -1,9 +0,0 @@ -/* TypeScript file generated from FirstClassModulesInterface.resi by genType. */ -/* eslint-disable import/first */ - - -// tslint:disable-next-line:interface-over-type-literal -export type record = { readonly x: number; readonly y: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type firstClassModule = { readonly x: number }; diff --git a/examples/deadcode/src/FirstClassModulesInterface.res b/examples/deadcode/src/FirstClassModulesInterface.res deleted file mode 100644 index c872847d..00000000 --- a/examples/deadcode/src/FirstClassModulesInterface.res +++ /dev/null @@ -1,13 +0,0 @@ -type record = { - x: int, - y: string, -} - -let r = {x: 3, y: "hello"} - -module type MT = { - let x: int -} - -type firstClassModule = module(MT) - diff --git a/examples/deadcode/src/FirstClassModulesInterface.resi b/examples/deadcode/src/FirstClassModulesInterface.resi deleted file mode 100644 index 58128ff6..00000000 --- a/examples/deadcode/src/FirstClassModulesInterface.resi +++ /dev/null @@ -1,16 +0,0 @@ -@genType -type record = { - x: int, - y: string, -} - -let r: record - -@genType -module type MT = { - let x: int -} - -@genType -type firstClassModule = module(MT) - diff --git a/examples/deadcode/src/Hooks.bs.js b/examples/deadcode/src/Hooks.bs.js deleted file mode 100644 index 381a9f46..00000000 --- a/examples/deadcode/src/Hooks.bs.js +++ /dev/null @@ -1,187 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Curry from "rescript/lib/es6/curry.js"; -import * as React from "react"; -import * as ImportHooks from "./ImportHooks.bs.js"; -import * as ImportHookDefault from "./ImportHookDefault.bs.js"; - -function Hooks(Props) { - var vehicle = Props.vehicle; - var match = React.useState(function () { - return 0; - }); - var setCount = match[1]; - var count = match[0]; - return React.createElement("div", undefined, React.createElement("p", undefined, "Hooks example " + (vehicle.name + (" clicked " + (String(count) + " times")))), React.createElement("button", { - onClick: (function (param) { - Curry._1(setCount, (function (param) { - return count + 1 | 0; - })); - }) - }, "Click me"), React.createElement(ImportHooks.make, { - person: { - name: "Mary", - age: 71 - }, - children: null, - renderMe: (function (x) { - return x.randomString; - }) - }, "child1", "child2"), React.createElement(ImportHookDefault.make, { - person: { - name: "DefaultImport", - age: 42 - }, - children: null, - renderMe: (function (x) { - return x.randomString; - }) - }, "child1", "child2")); -} - -function Hooks$anotherComponent(Props) { - var vehicle = Props.vehicle; - var callback = Props.callback; - Curry._1(callback, undefined); - return React.createElement("div", undefined, "Another Hook " + vehicle.name); -} - -function Hooks$Inner(Props) { - var vehicle = Props.vehicle; - return React.createElement("div", undefined, "Another Hook " + vehicle.name); -} - -function Hooks$Inner$anotherComponent(Props) { - var vehicle = Props.vehicle; - return React.createElement("div", undefined, "Another Hook " + vehicle.name); -} - -function Hooks$Inner$Inner2(Props) { - var vehicle = Props.vehicle; - return React.createElement("div", undefined, "Another Hook " + vehicle.name); -} - -function Hooks$Inner$Inner2$anotherComponent(Props) { - var vehicle = Props.vehicle; - return React.createElement("div", undefined, "Another Hook " + vehicle.name); -} - -var Inner2 = { - make: Hooks$Inner$Inner2, - anotherComponent: Hooks$Inner$Inner2$anotherComponent -}; - -var Inner = { - make: Hooks$Inner, - anotherComponent: Hooks$Inner$anotherComponent, - Inner2: Inner2 -}; - -function Hooks$NoProps(Props) { - return React.createElement("div", undefined, null); -} - -var NoProps = { - make: Hooks$NoProps -}; - -function functionWithRenamedArgs(_to, _Type, cb) { - Curry._1(cb, _to); - return _to.name + _Type.name; -} - -function Hooks$componentWithRenamedArgs(Props) { - var _to = Props.to; - var _Type = Props.Type; - var cb = Props.cb; - Curry._1(cb, _to); - return _to.name + _Type.name; -} - -function Hooks$makeWithRef(Props) { - var vehicle = Props.vehicle; - return function (ref) { - if (ref == null) { - return null; - } else { - return React.createElement("button", { - ref: ref - }, vehicle.name); - } - }; -} - -var testForwardRef = React.forwardRef(function (param, param$1) { - return Hooks$makeWithRef(param)(param$1); - }); - -var input = React.forwardRef(function (Props, param) { - var partial_arg = Props.r; - return React.createElement("div", { - ref: param - }, partial_arg.x); - }); - -function Hooks$polymorphicComponent(Props) { - var param = Props.p; - return param[0].name; -} - -function Hooks$functionReturningReactElement(Props) { - return Props.name; -} - -function Hooks$RenderPropRequiresConversion(Props) { - var renderVehicle = Props.renderVehicle; - return Curry._1(renderVehicle, { - vehicle: { - name: "Car" - }, - number: 42 - }); -} - -var RenderPropRequiresConversion = { - make: Hooks$RenderPropRequiresConversion -}; - -function Hooks$aComponentWithChildren(Props) { - var vehicle = Props.vehicle; - var children = Props.children; - return React.createElement("div", undefined, "Another Hook " + vehicle.name, React.createElement("div", undefined, children)); -} - -var make = Hooks; - -var $$default = Hooks; - -var anotherComponent = Hooks$anotherComponent; - -var componentWithRenamedArgs = Hooks$componentWithRenamedArgs; - -var makeWithRef = Hooks$makeWithRef; - -var polymorphicComponent = Hooks$polymorphicComponent; - -var functionReturningReactElement = Hooks$functionReturningReactElement; - -var aComponentWithChildren = Hooks$aComponentWithChildren; - -export { - make , - $$default , - $$default as default, - anotherComponent , - Inner , - NoProps , - functionWithRenamedArgs , - componentWithRenamedArgs , - makeWithRef , - testForwardRef , - input , - polymorphicComponent , - functionReturningReactElement , - RenderPropRequiresConversion , - aComponentWithChildren , -} -/* testForwardRef Not a pure module */ diff --git a/examples/deadcode/src/Hooks.gen.tsx b/examples/deadcode/src/Hooks.gen.tsx deleted file mode 100644 index 697f4b64..00000000 --- a/examples/deadcode/src/Hooks.gen.tsx +++ /dev/null @@ -1,159 +0,0 @@ -/* TypeScript file generated from Hooks.res by genType. */ -/* eslint-disable import/first */ - - -import * as React from 'react'; - -// @ts-ignore: Implicit any on import -import * as Curry__Es6Import from 'rescript/lib/es6/curry.js'; -const Curry: any = Curry__Es6Import; - -// @ts-ignore: Implicit any on import -import * as HooksBS__Es6Import from './Hooks.bs'; -const HooksBS: any = HooksBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type vehicle = { readonly name: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type cb = (_1:{ readonly to: vehicle }) => void; - -// tslint:disable-next-line:interface-over-type-literal -export type r = { readonly x: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type callback = (_1:input) => output; - -// tslint:disable-next-line:interface-over-type-literal -export type testReactContext = React.Context; - -// tslint:disable-next-line:interface-over-type-literal -export type testReactRef = { current: (null | number) }; - -// tslint:disable-next-line:interface-over-type-literal -export type testDomRef = React.Ref; - -// tslint:disable-next-line:interface-over-type-literal -export type Props = { readonly vehicle: vehicle }; - -export const $$default: React.ComponentType<{ readonly vehicle: vehicle }> = HooksBS.default; - -export default $$default; - -// tslint:disable-next-line:interface-over-type-literal -export type anotherComponent_Props = { readonly callback: () => void; readonly vehicle: vehicle }; - -export const anotherComponent: React.ComponentType<{ readonly callback: () => void; readonly vehicle: vehicle }> = HooksBS.anotherComponent; - -// tslint:disable-next-line:interface-over-type-literal -export type Inner_make_Props = { readonly vehicle: vehicle }; - -export const Inner_make: React.ComponentType<{ readonly vehicle: vehicle }> = HooksBS.Inner.make; - -// tslint:disable-next-line:interface-over-type-literal -export type Inner_anotherComponent_Props = { readonly vehicle: vehicle }; - -export const Inner_anotherComponent: React.ComponentType<{ readonly vehicle: vehicle }> = HooksBS.Inner.anotherComponent; - -// tslint:disable-next-line:interface-over-type-literal -export type Inner_Inner2_make_Props = { readonly vehicle: vehicle }; - -export const Inner_Inner2_make: React.ComponentType<{ readonly vehicle: vehicle }> = HooksBS.Inner.Inner2.make; - -// tslint:disable-next-line:interface-over-type-literal -export type Inner_Inner2_anotherComponent_Props = { readonly vehicle: vehicle }; - -export const Inner_Inner2_anotherComponent: React.ComponentType<{ readonly vehicle: vehicle }> = HooksBS.Inner.Inner2.anotherComponent; - -// tslint:disable-next-line:interface-over-type-literal -export type NoProps_make_Props = {}; - -export const NoProps_make: React.ComponentType<{}> = HooksBS.NoProps.make; - -export const functionWithRenamedArgs: (_1:{ - readonly to: vehicle; - readonly Type: vehicle; - readonly cb: cb -}) => string = function (Arg1: any) { - const result = Curry._3(HooksBS.functionWithRenamedArgs, Arg1.to, Arg1.Type, function (Argto: any) { - const result1 = Arg1.cb({to:Argto}); - return result1 - }); - return result -}; - -// tslint:disable-next-line:interface-over-type-literal -export type componentWithRenamedArgs_Props = { - readonly Type: vehicle; - readonly to: vehicle; - readonly cb: cb -}; - -export const componentWithRenamedArgs: React.ComponentType<{ - readonly Type: vehicle; - readonly to: vehicle; - readonly cb: cb -}> = function Hooks_componentWithRenamedArgs(Arg1: any) { - const $props = {Type:Arg1.Type, to:Arg1.to, cb:function (Argto: any) { - const result1 = Arg1.cb({to:Argto}); - return result1 - }}; - const result = React.createElement(HooksBS.componentWithRenamedArgs, $props); - return result -}; - -export const makeWithRef: (_1:{ readonly vehicle: vehicle }, _2:(null | undefined | any)) => JSX.Element = function (Arg1: any, Arg2: any) { - const result = Curry._2(HooksBS.makeWithRef, Arg1, Arg2); - return result -}; - -// tslint:disable-next-line:interface-over-type-literal -export type testForwardRef_Props = { readonly vehicle: vehicle }; - -export const testForwardRef: React.ComponentType<{ readonly vehicle: vehicle }> = HooksBS.testForwardRef; - -// tslint:disable-next-line:interface-over-type-literal -export type input_Props = { readonly r: r }; - -export const input: React.ComponentType<{ readonly r: r }> = HooksBS.input; - -// tslint:disable-next-line:interface-over-type-literal -export type polymorphicComponent_Props = { readonly p: [vehicle, T1] }; - -export const polymorphicComponent: React.ComponentType<{ readonly p: [vehicle, any] }> = HooksBS.polymorphicComponent; - -// tslint:disable-next-line:interface-over-type-literal -export type functionReturningReactElement_Props = { readonly name: string }; - -export const functionReturningReactElement: React.ComponentType<{ readonly name: string }> = HooksBS.functionReturningReactElement; - -// tslint:disable-next-line:interface-over-type-literal -export type RenderPropRequiresConversion_make_Props = { readonly renderVehicle: React.ComponentType<{ readonly number: number; readonly vehicle: vehicle }> }; - -export const RenderPropRequiresConversion_make: React.ComponentType<{ readonly renderVehicle: React.ComponentType<{ readonly number: number; readonly vehicle: vehicle }> }> = HooksBS.RenderPropRequiresConversion.make; - -// tslint:disable-next-line:interface-over-type-literal -export type aComponentWithChildren_Props = { readonly children: React.ReactNode; readonly vehicle: vehicle }; - -export const aComponentWithChildren: React.ComponentType<{ readonly children: React.ReactNode; readonly vehicle: vehicle }> = HooksBS.aComponentWithChildren; - -export const NoProps: { make: React.ComponentType<{}> } = HooksBS.NoProps - -export const Inner: { - Inner2: { - anotherComponent: React.ComponentType<{ - readonly vehicle: vehicle - }>; - make: React.ComponentType<{ - readonly vehicle: vehicle - }> - }; - anotherComponent: React.ComponentType<{ - readonly vehicle: vehicle - }>; - make: React.ComponentType<{ - readonly vehicle: vehicle - }> -} = HooksBS.Inner - -export const RenderPropRequiresConversion: { make: React.ComponentType<{ readonly renderVehicle: React.ComponentType<{ readonly number: number; readonly vehicle: vehicle }> }> } = HooksBS.RenderPropRequiresConversion diff --git a/examples/deadcode/src/Hooks.res b/examples/deadcode/src/Hooks.res deleted file mode 100644 index f35c2428..00000000 --- a/examples/deadcode/src/Hooks.res +++ /dev/null @@ -1,115 +0,0 @@ -type vehicle = {name: string} - -@react.component -let make = (~vehicle) => { - let (count, setCount) = React.useState(() => 0) - -
-

- {React.string( - "Hooks example " ++ (vehicle.name ++ (" clicked " ++ (string_of_int(count) ++ " times"))), - )} -

- - React.string(x["randomString"])}> - {React.string("child1")} {React.string("child2")} - - React.string(x["randomString"])}> - {React.string("child1")} {React.string("child2")} - -
-} - -@genType -let default = make - -@genType @react.component -let anotherComponent = (~vehicle, ~callback: unit => unit) => { - callback() -
{React.string("Another Hook " ++ vehicle.name)}
-} - -module Inner = { - @genType @react.component - let make = (~vehicle) =>
{React.string("Another Hook " ++ vehicle.name)}
- - @genType @react.component - let anotherComponent = (~vehicle) =>
{React.string("Another Hook " ++ vehicle.name)}
- - module Inner2 = { - @genType @react.component - let make = (~vehicle) =>
{React.string("Another Hook " ++ vehicle.name)}
- - @genType @react.component - let anotherComponent = (~vehicle) => -
{React.string("Another Hook " ++ vehicle.name)}
- } -} - -module NoProps = { - @genType @react.component - let make = () =>
React.null
-} - -type cb = (~_to: vehicle) => unit - -@genType -let functionWithRenamedArgs = (~_to, ~_Type, ~cb: cb) => { - cb(~_to) - _to.name ++ _Type.name -} - -@genType @react.component -let componentWithRenamedArgs = (~_to, ~_Type, ~cb: cb) => { - cb(~_to) - React.string(_to.name ++ _Type.name) -} - -@genType @react.component -let makeWithRef = (~vehicle) => { - let _ = 34 - ref => - switch ref->Js.Nullable.toOption { - | Some(ref) => - | None => React.null - } -} - -@genType -let testForwardRef = React.forwardRef(makeWithRef) - -type r = {x: string} - -@genType @react.component -let input = React.forwardRef((~r, (), ref) =>
{React.string(r.x)}
) - -@genType -type callback<'input, 'output> = React.callback<'input, 'output> - -@genType -type testReactContext = React.Context.t - -@genType -type testReactRef = React.Ref.t - -@genType -type testDomRef = ReactDOM.domRef - -@genType @react.component -let polymorphicComponent = (~p as (x, _)) => React.string(x.name) - -@genType @react.component -let functionReturningReactElement = (~name) => React.string(name) - -module RenderPropRequiresConversion = { - @genType @react.component - let make = (~renderVehicle: {"vehicle": vehicle, "number": int} => React.element) => { - let car = {name: "Car"} - renderVehicle({"vehicle": car, "number": 42}) - } -} - -@genType @react.component -let aComponentWithChildren = (~vehicle, ~children) => -
{React.string("Another Hook " ++ vehicle.name)}
children
diff --git a/examples/deadcode/src/IgnoreInterface.bs.js b/examples/deadcode/src/IgnoreInterface.bs.js deleted file mode 100644 index d856702b..00000000 --- a/examples/deadcode/src/IgnoreInterface.bs.js +++ /dev/null @@ -1,2 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/examples/deadcode/src/IgnoreInterface.gen.tsx b/examples/deadcode/src/IgnoreInterface.gen.tsx deleted file mode 100644 index ed21c4c9..00000000 --- a/examples/deadcode/src/IgnoreInterface.gen.tsx +++ /dev/null @@ -1,6 +0,0 @@ -/* TypeScript file generated from IgnoreInterface.res by genType. */ -/* eslint-disable import/first */ - - -// tslint:disable-next-line:interface-over-type-literal -export type t = number; diff --git a/examples/deadcode/src/IgnoreInterface.res b/examples/deadcode/src/IgnoreInterface.res deleted file mode 100644 index 441f4ed8..00000000 --- a/examples/deadcode/src/IgnoreInterface.res +++ /dev/null @@ -1,3 +0,0 @@ -@gentype -type t = int - diff --git a/examples/deadcode/src/IgnoreInterface.resi b/examples/deadcode/src/IgnoreInterface.resi deleted file mode 100644 index 5cc1d279..00000000 --- a/examples/deadcode/src/IgnoreInterface.resi +++ /dev/null @@ -1,6 +0,0 @@ -// Use the annotations, and definitions, from the .re file -@@genType.ignoreInterface - -@genType -type t - diff --git a/examples/deadcode/src/ImmutableArray.bs.js b/examples/deadcode/src/ImmutableArray.bs.js deleted file mode 100644 index e443f7f2..00000000 --- a/examples/deadcode/src/ImmutableArray.bs.js +++ /dev/null @@ -1,210 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Belt_Array from "rescript/lib/es6/belt_Array.js"; - -function fromArray(a) { - return a.slice(0); -} - -function toArray(a) { - return a.slice(0); -} - -function length(a) { - return a.length; -} - -function size(a) { - return a.length; -} - -var get = Belt_Array.get; - -var getExn = Belt_Array.getExn; - -function getUnsafe(a, x) { - return a[x]; -} - -function getUndefined(a, x) { - return a[x]; -} - -var shuffle = Belt_Array.shuffle; - -var reverse = Belt_Array.reverse; - -function makeUninitialized(x) { - return new Array(x); -} - -function makeUninitializedUnsafe(x) { - return new Array(x); -} - -var make = Belt_Array.make; - -var range = Belt_Array.range; - -var rangeBy = Belt_Array.rangeBy; - -var makeByU = Belt_Array.makeByU; - -var makeBy = Belt_Array.makeBy; - -var makeByAndShuffleU = Belt_Array.makeByAndShuffleU; - -var makeByAndShuffle = Belt_Array.makeByAndShuffle; - -var zip = Belt_Array.zip; - -var zipByU = Belt_Array.zipByU; - -var zipBy = Belt_Array.zipBy; - -var unzip = Belt_Array.unzip; - -var concat = Belt_Array.concat; - -var concatMany = Belt_Array.concatMany; - -var slice = Belt_Array.slice; - -var sliceToEnd = Belt_Array.sliceToEnd; - -function copy(a) { - return a.slice(0); -} - -var forEachU = Belt_Array.forEachU; - -var forEach = Belt_Array.forEach; - -var mapU = Belt_Array.mapU; - -var map = Belt_Array.map; - -var keepWithIndexU = Belt_Array.keepWithIndexU; - -var keepWithIndex = Belt_Array.keepWithIndex; - -var keepMapU = Belt_Array.keepMapU; - -var keepMap = Belt_Array.keepMap; - -var forEachWithIndexU = Belt_Array.forEachWithIndexU; - -var forEachWithIndex = Belt_Array.forEachWithIndex; - -var mapWithIndexU = Belt_Array.mapWithIndexU; - -var mapWithIndex = Belt_Array.mapWithIndex; - -var partitionU = Belt_Array.partitionU; - -var partition = Belt_Array.partition; - -var reduceU = Belt_Array.reduceU; - -var reduce = Belt_Array.reduce; - -var reduceReverseU = Belt_Array.reduceReverseU; - -var reduceReverse = Belt_Array.reduceReverse; - -var reduceReverse2U = Belt_Array.reduceReverse2U; - -var reduceReverse2 = Belt_Array.reduceReverse2; - -var someU = Belt_Array.someU; - -var some = Belt_Array.some; - -var everyU = Belt_Array.everyU; - -var every = Belt_Array.every; - -var every2U = Belt_Array.every2U; - -var every2 = Belt_Array.every2; - -var some2U = Belt_Array.some2U; - -var some2 = Belt_Array.some2; - -var cmpU = Belt_Array.cmpU; - -var cmp = Belt_Array.cmp; - -var eqU = Belt_Array.eqU; - -var eq = Belt_Array.eq; - -var $$Array$1 = { - get: get -}; - -export { - $$Array$1 as $$Array, - fromArray , - toArray , - length , - size , - get , - getExn , - getUnsafe , - getUndefined , - shuffle , - reverse , - makeUninitialized , - makeUninitializedUnsafe , - make , - range , - rangeBy , - makeByU , - makeBy , - makeByAndShuffleU , - makeByAndShuffle , - zip , - zipByU , - zipBy , - unzip , - concat , - concatMany , - slice , - sliceToEnd , - copy , - forEachU , - forEach , - mapU , - map , - keepWithIndexU , - keepWithIndex , - keepMapU , - keepMap , - forEachWithIndexU , - forEachWithIndex , - mapWithIndexU , - mapWithIndex , - partitionU , - partition , - reduceU , - reduce , - reduceReverseU , - reduceReverse , - reduceReverse2U , - reduceReverse2 , - someU , - some , - everyU , - every , - every2U , - every2 , - some2U , - some2 , - cmpU , - cmp , - eqU , - eq , -} -/* No side effect */ diff --git a/examples/deadcode/src/ImmutableArray.res b/examples/deadcode/src/ImmutableArray.res deleted file mode 100644 index 8ed5e080..00000000 --- a/examples/deadcode/src/ImmutableArray.res +++ /dev/null @@ -1,119 +0,0 @@ -type t<+'a> -module Array = { - open Belt - type array2<'a> = (array<'a>, array<'a>) - external fromT: t<'a> => array<'a> = "%identity" - external fromTp: t<('a, 'b)> => array<('a, 'b)> = "%identity" - external fromTT: t> => array> = "%identity" - external toT: array<'a> => t<'a> = "%identity" - external toTp: array<('a, 'b)> => t<('a, 'b)> = "%identity" - external toT2: array2<'a> => (t<'a>, t<'a>) = "%identity" - - /* Conversions involve a copy */ - - let fromArray = a => Array.copy(a)->toT - - let toArray = a => Array.copy(a->fromT) - - /* Type-cast immutable functions from Belt.Array. */ - - let length = a => Array.length(a->fromT) - - let size = a => Array.size(a->fromT) - - let get = (a, x) => (a->fromT)[x] - - let getExn = (a, x) => Array.getExn(a->fromT, x) - - let getUnsafe = (a, x) => Array.getUnsafe(a->fromT, x) - - let getUndefined = (a, x) => Array.getUndefined(a->fromT, x) - - let shuffle = x => Array.shuffle(x->fromT)->toT - - let reverse = x => Array.reverse(x->fromT)->toT - - let makeUninitialized = x => Array.makeUninitialized(x)->toT - - let makeUninitializedUnsafe = x => Array.makeUninitializedUnsafe(x)->toT - - let make = (x, y) => Array.make(x, y)->toT - - let range = (x, y) => Array.range(x, y)->toT - - let rangeBy = (x, y, ~step) => Array.rangeBy(x, y, ~step)->toT - - let makeByU = (c, f) => Array.makeByU(c, f)->toT - let makeBy = (c, f) => Array.makeBy(c, f)->toT - - let makeByAndShuffleU = (c, f) => Array.makeByAndShuffleU(c, f)->toT - let makeByAndShuffle = (c, f) => Array.makeByAndShuffle(c, f)->toT - - let zip = (a1, a2) => Array.zip(fromT(a1), fromT(a2))->toTp - - let zipByU = (a1, a2, f) => Array.zipByU(fromT(a1), fromT(a2), f)->toT - let zipBy = (a1, a2, f) => Array.zipBy(fromT(a1), fromT(a2), f)->toT - - let unzip = a => Array.unzip(a->fromTp)->toT2 - - let concat = (a1, a2) => Array.concat(a1->fromT, a2->fromT)->toT - - let concatMany = (a: t>) => Array.concatMany(a->fromTT)->toT - - let slice = (a, ~offset, ~len) => Array.slice(a->fromT, ~offset, ~len)->toT - - let sliceToEnd = (a, b) => Array.sliceToEnd(a->fromT, b)->toT - - let copy = a => Array.copy(a->fromT)->toT - - let forEachU = (a, f) => Array.forEachU(a->fromT, f) - let forEach = (a, f) => Array.forEach(a->fromT, f) - - let mapU = (a, f) => Array.mapU(a->fromT, f)->toT - let map = (a, f) => Array.map(a->fromT, f)->toT - - let keepWithIndexU = (a, f) => Array.keepWithIndexU(a->fromT, f)->toT - let keepWithIndex = (a, f) => Array.keepWithIndex(a->fromT, f)->toT - - let keepMapU = (a, f) => Array.keepMapU(a->fromT, f)->toT - let keepMap = (a, f) => Array.keepMap(a->fromT, f)->toT - - let forEachWithIndexU = (a, f) => Array.forEachWithIndexU(a->fromT, f) - let forEachWithIndex = (a, f) => Array.forEachWithIndex(a->fromT, f) - - let mapWithIndexU = (a, f) => Array.mapWithIndexU(a->fromT, f)->toT - let mapWithIndex = (a, f) => Array.mapWithIndex(a->fromT, f)->toT - - let partitionU = (a, f) => Array.partitionU(a->fromT, f)->toT2 - let partition = (a, f) => Array.partition(a->fromT, f)->toT2 - - let reduceU = (a, b, f) => Array.reduceU(a->fromT, b, f) - let reduce = (a, b, f) => Array.reduce(a->fromT, b, f) - - let reduceReverseU = (a, b, f) => Array.reduceReverseU(a->fromT, b, f) - let reduceReverse = (a, b, f) => Array.reduceReverse(a->fromT, b, f) - - let reduceReverse2U = (a1, a2, c, f) => Array.reduceReverse2U(fromT(a1), fromT(a2), c, f) - let reduceReverse2 = (a1, a2, c, f) => Array.reduceReverse2(fromT(a1), fromT(a2), c, f) - - let someU = (a, f) => Array.someU(a->fromT, f) - let some = (a, f) => Array.some(a->fromT, f) - - let everyU = (a, f) => Array.everyU(a->fromT, f) - let every = (a, f) => Array.every(a->fromT, f) - - let every2U = (a1, a2, f) => Array.every2U(fromT(a1), fromT(a2), f) - let every2 = (a1, a2, f) => Array.every2(fromT(a1), fromT(a2), f) - - let some2U = (a1, a2, f) => Array.some2U(fromT(a1), fromT(a2), f) - let some2 = (a1, a2, f) => Array.some2(fromT(a1), fromT(a2), f) - - let cmpU = (a1, a2, f) => Array.cmpU(fromT(a1), fromT(a2), f) - let cmp = (a1, a2, f) => Array.cmp(fromT(a1), fromT(a2), f) - - let eqU = (a1, a2, f) => Array.eqU(fromT(a1), fromT(a2), f) - let eq = (a1, a2, f) => Array.eq(fromT(a1), fromT(a2), f) -} - -include Array - diff --git a/examples/deadcode/src/ImmutableArray.resi b/examples/deadcode/src/ImmutableArray.resi deleted file mode 100644 index 914ddfd7..00000000 --- a/examples/deadcode/src/ImmutableArray.resi +++ /dev/null @@ -1,111 +0,0 @@ -@ocaml.doc(" Immutable arrays are covariant. ") -type t<+'a> - -@ocaml.doc(" Redefine the [_] syntax, and disable the assignment [_] = _. ") -module Array: { - let get: (t<'a>, int) => option<'a> -} - -@ocaml.doc(" Converting from/to normal arrays involves making a copy. ") -let fromArray: array<'a> => t<'a> - -let toArray: t<'a> => array<'a> - -@ocaml.doc(" Subset of the Belt.Array oprerations that do not mutate the array. ") -let length: t<'a> => int - -let size: t<'a> => int - -let get: (t<'a>, int) => option<'a> - -let getExn: (t<'a>, int) => 'a - -let getUnsafe: (t<'a>, int) => 'a - -let getUndefined: (t<'a>, int) => Js.undefined<'a> - -let shuffle: t<'a> => t<'a> - -let reverse: t<'a> => t<'a> - -let makeUninitialized: int => t> - -let makeUninitializedUnsafe: int => t<'a> - -let make: (int, 'a) => t<'a> - -let range: (int, int) => t - -let rangeBy: (int, int, ~step: int) => t - -let makeByU: (int, (. int) => 'a) => t<'a> -let makeBy: (int, int => 'a) => t<'a> - -let makeByAndShuffleU: (int, (. int) => 'a) => t<'a> -let makeByAndShuffle: (int, int => 'a) => t<'a> - -let zip: (t<'a>, t<'b>) => t<('a, 'b)> - -let zipByU: (t<'a>, t<'b>, (. 'a, 'b) => 'c) => t<'c> -let zipBy: (t<'a>, t<'b>, ('a, 'b) => 'c) => t<'c> - -let unzip: t<('a, 'a)> => (t<'a>, t<'a>) - -let concat: (t<'a>, t<'a>) => t<'a> - -let concatMany: t> => t<'a> - -let slice: (t<'a>, ~offset: int, ~len: int) => t<'a> - -let sliceToEnd: (t<'a>, int) => t<'a> - -let copy: t<'a> => t<'a> - -let forEachU: (t<'a>, (. 'a) => unit) => unit -let forEach: (t<'a>, 'a => unit) => unit - -let mapU: (t<'a>, (. 'a) => 'b) => t<'b> -let map: (t<'a>, 'a => 'b) => t<'b> - -let keepWithIndexU: (t<'a>, (. 'a, int) => bool) => t<'a> -let keepWithIndex: (t<'a>, ('a, int) => bool) => t<'a> - -let keepMapU: (t<'a>, (. 'a) => option<'b>) => t<'b> -let keepMap: (t<'a>, 'a => option<'b>) => t<'b> - -let forEachWithIndexU: (t<'a>, (. int, 'a) => unit) => unit -let forEachWithIndex: (t<'a>, (int, 'a) => unit) => unit - -let mapWithIndexU: (t<'a>, (. int, 'a) => 'b) => t<'b> -let mapWithIndex: (t<'a>, (int, 'a) => 'b) => t<'b> - -let partitionU: (t<'a>, (. 'a) => bool) => (t<'a>, t<'a>) -let partition: (t<'a>, 'a => bool) => (t<'a>, t<'a>) - -let reduceU: (t<'a>, 'b, (. 'b, 'a) => 'b) => 'b -let reduce: (t<'a>, 'b, ('b, 'a) => 'b) => 'b - -let reduceReverseU: (t<'a>, 'b, (. 'b, 'a) => 'b) => 'b -let reduceReverse: (t<'a>, 'b, ('b, 'a) => 'b) => 'b - -let reduceReverse2U: (t<'a>, t<'b>, 'c, (. 'c, 'a, 'b) => 'c) => 'c -let reduceReverse2: (t<'a>, t<'b>, 'c, ('c, 'a, 'b) => 'c) => 'c - -let someU: (t<'a>, (. 'a) => bool) => bool -let some: (t<'a>, 'a => bool) => bool - -let everyU: (t<'a>, (. 'a) => bool) => bool -let every: (t<'a>, 'a => bool) => bool - -let every2U: (t<'a>, t<'b>, (. 'a, 'b) => bool) => bool -let every2: (t<'a>, t<'b>, ('a, 'b) => bool) => bool - -let some2U: (t<'a>, t<'b>, (. 'a, 'b) => bool) => bool -let some2: (t<'a>, t<'b>, ('a, 'b) => bool) => bool - -let cmpU: (t<'a>, t<'a>, (. 'a, 'a) => int) => int -let cmp: (t<'a>, t<'a>, ('a, 'a) => int) => int - -let eqU: (t<'a>, t<'a>, (. 'a, 'a) => bool) => bool -let eq: (t<'a>, t<'a>, ('a, 'a) => bool) => bool - diff --git a/examples/deadcode/src/ImportHookDefault.bs.js b/examples/deadcode/src/ImportHookDefault.bs.js deleted file mode 100644 index efa64f5c..00000000 --- a/examples/deadcode/src/ImportHookDefault.bs.js +++ /dev/null @@ -1,14 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import ImportHookDefaultGen from "./ImportHookDefault.gen"; -import * as ImportHookDefaultGen$1 from "./ImportHookDefault.gen"; - -var make = ImportHookDefaultGen$1.make; - -var make2 = ImportHookDefaultGen; - -export { - make , - make2 , -} -/* make Not a pure module */ diff --git a/examples/deadcode/src/ImportHookDefault.gen.tsx b/examples/deadcode/src/ImportHookDefault.gen.tsx deleted file mode 100644 index 8e81e77f..00000000 --- a/examples/deadcode/src/ImportHookDefault.gen.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* TypeScript file generated from ImportHookDefault.res by genType. */ -/* eslint-disable import/first */ - - -import {default as makeNotChecked} from './hookExample'; - -import {default as defaultNotChecked} from './hookExample'; - -// In case of type error, check the type of 'make' in 'ImportHookDefault.re' and './hookExample'. -export const makeTypeChecked: React.ComponentType<{ - readonly person: person; - readonly children: React.ReactNode; - readonly renderMe: ImportHooks_renderMe -}> = makeNotChecked; - -// Export 'make' early to allow circular import from the '.bs.js' file. -export const make: unknown = makeTypeChecked as React.ComponentType<{ - readonly person: person; - readonly children: React.ReactNode; - readonly renderMe: ImportHooks_renderMe -}>; - -// In case of type error, check the type of 'default' in 'ImportHookDefault.re' and './hookExample'. -export const defaultTypeChecked: React.ComponentType<{ - readonly person: person; - readonly children: React.ReactNode; - readonly renderMe: ImportHooks_renderMe -}> = defaultNotChecked; - -// Export '$$default' early to allow circular import from the '.bs.js' file. -export const $$default: unknown = defaultTypeChecked as React.ComponentType<{ - readonly person: person; - readonly children: React.ReactNode; - readonly renderMe: ImportHooks_renderMe -}>; - -import type {renderMe as ImportHooks_renderMe} from './ImportHooks.gen'; - -// tslint:disable-next-line:interface-over-type-literal -export type person = { readonly name: string; readonly age: number }; - -export default $$default; diff --git a/examples/deadcode/src/ImportHookDefault.res b/examples/deadcode/src/ImportHookDefault.res deleted file mode 100644 index 1b49ea2c..00000000 --- a/examples/deadcode/src/ImportHookDefault.res +++ /dev/null @@ -1,19 +0,0 @@ -type person = { - name: string, - age: int, -} - -@genType.import(("./hookExample", "default")) @react.component -external make: ( - ~person: person, - ~children: React.element, - ~renderMe: ImportHooks.renderMe, -) => React.element = "make" - -@genType.import("./hookExample") @react.component -external make2: ( - ~person: person, - ~children: React.element, - ~renderMe: ImportHooks.renderMe, -) => React.element = "default" - diff --git a/examples/deadcode/src/ImportHooks.bs.js b/examples/deadcode/src/ImportHooks.bs.js deleted file mode 100644 index 0a3f6aa5..00000000 --- a/examples/deadcode/src/ImportHooks.bs.js +++ /dev/null @@ -1,15 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as ImportHooksGen from "./ImportHooks.gen"; - -var make = ImportHooksGen.makeRenamed; - -function foo(prim) { - return ImportHooksGen.foo(prim); -} - -export { - make , - foo , -} -/* make Not a pure module */ diff --git a/examples/deadcode/src/ImportHooks.gen.tsx b/examples/deadcode/src/ImportHooks.gen.tsx deleted file mode 100644 index 58b7770e..00000000 --- a/examples/deadcode/src/ImportHooks.gen.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* TypeScript file generated from ImportHooks.res by genType. */ -/* eslint-disable import/first */ - - -import {makeRenamed as makeRenamedNotChecked} from './hookExample'; - -import {foo as fooNotChecked} from './hookExample'; - -// In case of type error, check the type of 'makeRenamed' in 'ImportHooks.re' and './hookExample'. -export const makeRenamedTypeChecked: React.ComponentType<{ - readonly person: person; - readonly children: React.ReactNode; - readonly renderMe: renderMe -}> = makeRenamedNotChecked; - -// Export 'makeRenamed' early to allow circular import from the '.bs.js' file. -export const makeRenamed: unknown = makeRenamedTypeChecked as React.ComponentType<{ - readonly person: person; - readonly children: React.ReactNode; - readonly renderMe: renderMe -}>; - -// In case of type error, check the type of 'foo' in 'ImportHooks.re' and './hookExample'. -export const fooTypeChecked: (_1:{ readonly person: person }) => string = fooNotChecked; - -// Export 'foo' early to allow circular import from the '.bs.js' file. -export const foo: unknown = function (Argperson: any) { - const result = fooTypeChecked({person:Argperson}); - return result -} as (_1:{ readonly person: person }) => string; - -// tslint:disable-next-line:interface-over-type-literal -export type person = { readonly name: string; readonly age: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type renderMe = React.ComponentType<{ readonly randomString: string; readonly poly: a }>; diff --git a/examples/deadcode/src/ImportHooks.res b/examples/deadcode/src/ImportHooks.res deleted file mode 100644 index 31b0e299..00000000 --- a/examples/deadcode/src/ImportHooks.res +++ /dev/null @@ -1,22 +0,0 @@ -@genType -type person = { - name: string, - age: int, -} - -@genType -type renderMe<'a> = React.component<{ - "randomString": string, - "poly": 'a, -}> - -@genType.import("./hookExample") @react.component -external make: ( - ~person: person, - ~children: React.element, - ~renderMe: renderMe<'a>, -) => React.element = "makeRenamed" - -@genType.import("./hookExample") -external foo: (~person: person) => string = "foo" - diff --git a/examples/deadcode/src/ImportIndex.bs.js b/examples/deadcode/src/ImportIndex.bs.js deleted file mode 100644 index f8da735e..00000000 --- a/examples/deadcode/src/ImportIndex.bs.js +++ /dev/null @@ -1,10 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import ImportIndexGen from "./ImportIndex.gen"; - -var make = ImportIndexGen; - -export { - make , -} -/* make Not a pure module */ diff --git a/examples/deadcode/src/ImportIndex.gen.tsx b/examples/deadcode/src/ImportIndex.gen.tsx deleted file mode 100644 index d0e0fdca..00000000 --- a/examples/deadcode/src/ImportIndex.gen.tsx +++ /dev/null @@ -1,13 +0,0 @@ -/* TypeScript file generated from ImportIndex.res by genType. */ -/* eslint-disable import/first */ - - -import {default as defaultNotChecked} from './'; - -// In case of type error, check the type of 'default' in 'ImportIndex.re' and './'. -export const defaultTypeChecked: React.ComponentType<{ readonly method?: "push" | "replace" }> = defaultNotChecked; - -// Export '$$default' early to allow circular import from the '.bs.js' file. -export const $$default: unknown = defaultTypeChecked as React.ComponentType<{ readonly method?: "push" | "replace" }>; - -export default $$default; diff --git a/examples/deadcode/src/ImportIndex.res b/examples/deadcode/src/ImportIndex.res deleted file mode 100644 index c4d5ce32..00000000 --- a/examples/deadcode/src/ImportIndex.res +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: rename metodd back once remmt bug is fixed -@genType.import("./") @react.component -external make: (~method: @string [#push | #replace]=?) => React.element = "default" - diff --git a/examples/deadcode/src/ImportJsValue.bs.js b/examples/deadcode/src/ImportJsValue.bs.js deleted file mode 100644 index 02086f50..00000000 --- a/examples/deadcode/src/ImportJsValue.bs.js +++ /dev/null @@ -1,80 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import ImportJsValueGen from "./ImportJsValue.gen"; -import * as ImportJsValueGen$1 from "./ImportJsValue.gen"; - -function round(prim) { - return ImportJsValueGen$1.round(prim); -} - -function area(prim) { - return ImportJsValueGen$1.area(prim); -} - -function returnMixedArray(prim) { - return ImportJsValueGen$1.returnMixedArray(); -} - -var roundedNumber = ImportJsValueGen$1.round(1.8); - -var areaValue = ImportJsValueGen$1.area({ - x: 3, - y: undefined - }); - -function getAbs(x) { - return x.getAbs(); -} - -var AbsoluteValue = { - getAbs: getAbs -}; - -function useGetProp(x) { - return x.getProp() + 1 | 0; -} - -function useGetAbs(x) { - return x.getAbs() + 1 | 0; -} - -function useColor(prim) { - return ImportJsValueGen$1.useColor(prim); -} - -function higherOrder(prim) { - return ImportJsValueGen$1.higherOrder(prim); -} - -var returnedFromHigherOrder = ImportJsValueGen$1.higherOrder(function (prim0, prim1) { - return prim0 + prim1 | 0; - }); - -function convertVariant(prim) { - return ImportJsValueGen$1.convertVariant(prim); -} - -function polymorphic(prim) { - return ImportJsValueGen$1.polymorphic(prim); -} - -var $$default = ImportJsValueGen; - -export { - round , - area , - returnMixedArray , - roundedNumber , - areaValue , - AbsoluteValue , - useGetProp , - useGetAbs , - useColor , - higherOrder , - returnedFromHigherOrder , - convertVariant , - polymorphic , - $$default , - $$default as default, -} -/* roundedNumber Not a pure module */ diff --git a/examples/deadcode/src/ImportJsValue.gen.tsx b/examples/deadcode/src/ImportJsValue.gen.tsx deleted file mode 100644 index 20550853..00000000 --- a/examples/deadcode/src/ImportJsValue.gen.tsx +++ /dev/null @@ -1,140 +0,0 @@ -/* TypeScript file generated from ImportJsValue.res by genType. */ -/* eslint-disable import/first */ - - -import {round as roundNotChecked} from './MyMath'; - -import {area as areaNotChecked} from './MyMath'; - -import {returnMixedArray as returnMixedArrayNotChecked} from './MyMath'; - -import {useColor as useColorNotChecked} from './MyMath'; - -import {higherOrder as higherOrderNotChecked} from './MyMath'; - -import {convertVariant as convertVariantNotChecked} from './MyMath'; - -import {polymorphic as polymorphicNotChecked} from './MyMath'; - -import {default as defaultNotChecked} from './MyMath'; - -// @ts-ignore: Implicit any on import -import * as Curry__Es6Import from 'rescript/lib/es6/curry.js'; -const Curry: any = Curry__Es6Import; - -// In case of type error, check the type of 'round' in 'ImportJsValue.re' and './MyMath'. -export const roundTypeChecked: (_1:number) => number = roundNotChecked; - -// Export 'round' early to allow circular import from the '.bs.js' file. -export const round: unknown = roundTypeChecked as (_1:number) => number; - -// In case of type error, check the type of 'area' in 'ImportJsValue.re' and './MyMath'. -export const areaTypeChecked: (_1:point) => number = areaNotChecked; - -// Export 'area' early to allow circular import from the '.bs.js' file. -export const area: unknown = areaTypeChecked as (_1:point) => number; - -// In case of type error, check the type of 'returnMixedArray' in 'ImportJsValue.re' and './MyMath'. -export const returnMixedArrayTypeChecked: () => numberOrString[] = returnMixedArrayNotChecked; - -// Export 'returnMixedArray' early to allow circular import from the '.bs.js' file. -export const returnMixedArray: unknown = returnMixedArrayTypeChecked as () => numberOrString[]; - -// In case of type error, check the type of 'useColor' in 'ImportJsValue.re' and './MyMath'. -export const useColorTypeChecked: (_1:color) => number = useColorNotChecked; - -// Export 'useColor' early to allow circular import from the '.bs.js' file. -export const useColor: unknown = useColorTypeChecked as (_1:color) => number; - -// In case of type error, check the type of 'higherOrder' in 'ImportJsValue.re' and './MyMath'. -export const higherOrderTypeChecked: (_1:((_1:number, _2:number) => number)) => number = higherOrderNotChecked; - -// Export 'higherOrder' early to allow circular import from the '.bs.js' file. -export const higherOrder: unknown = function (Arg1: any) { - const result = higherOrderTypeChecked(function (Arg11: any, Arg2: any) { - const result1 = Curry._2(Arg1, Arg11, Arg2); - return result1 - }); - return result -} as (_1:((_1:number, _2:number) => number)) => number; - -// In case of type error, check the type of 'convertVariant' in 'ImportJsValue.re' and './MyMath'. -export const convertVariantTypeChecked: (_1:variant) => variant = convertVariantNotChecked; - -// Export 'convertVariant' early to allow circular import from the '.bs.js' file. -export const convertVariant: unknown = function (Arg1: any) { - const result = convertVariantTypeChecked(Arg1.TAG===0 - ? {tag:"I", value:Arg1._0} - : {tag:"S", value:Arg1._0}); - return result.tag==="I" - ? {TAG: 0, _0:result.value} as any - : {TAG: 1, _0:result.value} as any -} as (_1:variant) => variant; - -// In case of type error, check the type of 'polymorphic' in 'ImportJsValue.re' and './MyMath'. -export const polymorphicTypeChecked: (_1:a) => a = polymorphicNotChecked; - -// Export 'polymorphic' early to allow circular import from the '.bs.js' file. -export const polymorphic: unknown = polymorphicTypeChecked as (_1:a) => a; - -// In case of type error, check the type of 'default' in 'ImportJsValue.re' and './MyMath'. -export const defaultTypeChecked: number = defaultNotChecked; - -// Export '$$default' early to allow circular import from the '.bs.js' file. -export const $$default: unknown = defaultTypeChecked as number; - -// tslint:disable-next-line:no-var-requires -const ImportJsValueBS = require('./ImportJsValue.bs'); - -import type {AbsoluteValue as $$AbsoluteValue_t} from './MyMath'; - -import type {num as $$myNum} from './MyMath'; - -import type {num as $$num} from './MyMath'; - -import type {numberOrString as $$numberOrString} from './MyMath'; - -import type {polyType as $$polyType} from './MyMath'; - -import type {stringFunction as $$stringFunction} from './MyMath'; - -// tslint:disable-next-line:interface-over-type-literal -export type point = { readonly x: number; readonly y?: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type numberOrString = $$numberOrString; - -// tslint:disable-next-line:interface-over-type-literal -export type AbsoluteValue_t = $$AbsoluteValue_t; - -// tslint:disable-next-line:interface-over-type-literal -export type stringFunction = $$stringFunction; - -// tslint:disable-next-line:interface-over-type-literal -export type color = "tomato" | "gray"; - -// tslint:disable-next-line:interface-over-type-literal -export type variant = - { tag: "I"; value: number } - | { tag: "S"; value: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type num = $$num; - -// tslint:disable-next-line:interface-over-type-literal -export type myNum = $$myNum; - -// tslint:disable-next-line:interface-over-type-literal -export type polyType = $$polyType; - -export const roundedNumber: number = ImportJsValueBS.roundedNumber; - -export const areaValue: number = ImportJsValueBS.areaValue; - -export const useGetProp: (x:AbsoluteValue_t) => number = ImportJsValueBS.useGetProp; - -export const useGetAbs: (x:AbsoluteValue_t) => number = ImportJsValueBS.useGetAbs; - -export const returnedFromHigherOrder: number = ImportJsValueBS.returnedFromHigherOrder; - -export default $$default; diff --git a/examples/deadcode/src/ImportJsValue.res b/examples/deadcode/src/ImportJsValue.res deleted file mode 100644 index e85b7fd8..00000000 --- a/examples/deadcode/src/ImportJsValue.res +++ /dev/null @@ -1,85 +0,0 @@ -@ocaml.doc(" - * Wrap JS values to be used from Reason - ") -@genType.import("./MyMath") -external /* This is the module to import from. */ -/* Name and type of the JS value to bind to. */ -round: float => float = "round" - -@genType -type point = { - x: int, - y: option, -} - -@genType.import("./MyMath") -external /* This is the module to import from. */ -/* Name and type of the JS value to bind to. */ -area: point => int = "area" - -@genType.import("./MyMath") -type numberOrString - -@genType.import("./MyMath") -external returnMixedArray: unit => array = "returnMixedArray" - -@genType -let roundedNumber = round(1.8) - -@genType -let areaValue = area({x: 3, y: None}) - -module AbsoluteValue = { - @genType.import(("./MyMath", "AbsoluteValue")) - type t = {"getAbs": (. unit) => int} - - /* This is untyped */ - @send external getProp: t => int = "getProp" - - /* This is also untyped, as we "trust" the type declaration in absoluteVaue */ - let getAbs = (x: t) => { - let getAbs = x["getAbs"] - getAbs(.) - } -} - -@genType -let useGetProp = (x: AbsoluteValue.t) => x->AbsoluteValue.getProp + 1 - -@genType -let useGetAbs = (x: AbsoluteValue.t) => x->AbsoluteValue.getAbs + 1 - -@genType.import("./MyMath") -type stringFunction - -@genType -type color = [#tomato | #gray] - -@genType.import("./MyMath") external useColor: color => int = "useColor" - -@genType.import("./MyMath") -external higherOrder: ((int, int) => int) => int = "higherOrder" - -@genType -let returnedFromHigherOrder = higherOrder(\"+") - -type variant = - | I(int) - | S(string) - -@genType.import("./MyMath") -external convertVariant: variant => variant = "convertVariant" - -@genType.import("./MyMath") external polymorphic: 'a => 'a = "polymorphic" - -@genType.import("./MyMath") external default: int = "default" - -@genType.import(("./MyMath", "num")) -type num - -@genType.import(("./MyMath", "num")) -type myNum - -@genType.import("./MyMath") -type polyType<'a> - diff --git a/examples/deadcode/src/ImportMyBanner.bs.js b/examples/deadcode/src/ImportMyBanner.bs.js deleted file mode 100644 index 301b4cc3..00000000 --- a/examples/deadcode/src/ImportMyBanner.bs.js +++ /dev/null @@ -1,13 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Caml_option from "rescript/lib/es6/caml_option.js"; -import * as ImportMyBannerGen from "./ImportMyBanner.gen"; - -function make(prim0, prim1, prim2) { - return ImportMyBannerGen.make(prim0, prim1 !== undefined ? Caml_option.valFromOption(prim1) : undefined, prim2); -} - -export { - make , -} -/* ./ImportMyBanner.gen Not a pure module */ diff --git a/examples/deadcode/src/ImportMyBanner.gen.tsx b/examples/deadcode/src/ImportMyBanner.gen.tsx deleted file mode 100644 index 39512e34..00000000 --- a/examples/deadcode/src/ImportMyBanner.gen.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/* TypeScript file generated from ImportMyBanner.res by genType. */ -/* eslint-disable import/first */ - - -import {make as makeNotChecked} from './MyBanner'; - -// In case of type error, check the type of 'make' in 'ImportMyBanner.re' and './MyBanner'. -export const makeTypeChecked: (_1:{ readonly show: boolean; readonly message?: message }, _2:a) => JSX.Element = makeNotChecked; - -// Export 'make' early to allow circular import from the '.bs.js' file. -export const make: unknown = function (Argshow: any, Argmessage: any, Arg2: any) { - const result = makeTypeChecked({show:Argshow, message:Argmessage}, Arg2); - return result -} as (_1:{ readonly show: boolean; readonly message?: message }, _2:a) => JSX.Element; - -// tslint:disable-next-line:interface-over-type-literal -export type message = { readonly text: string }; diff --git a/examples/deadcode/src/ImportMyBanner.res b/examples/deadcode/src/ImportMyBanner.res deleted file mode 100644 index 9b26fa23..00000000 --- a/examples/deadcode/src/ImportMyBanner.res +++ /dev/null @@ -1,12 +0,0 @@ -@ocaml.doc(" - * Wrap component MyBanner to be used from Reason. - ") -@genType -type message = {text: string} - -@genType.import("./MyBanner") -external /* Module with the JS component to be wrapped. */ -/* The make function will be automatically generated from the types below. */ -make: (~show: bool, ~message: option=?, 'a) => React.element = "make" - -let make = make diff --git a/examples/deadcode/src/Includes.ml b/examples/deadcode/src/Includes.ml new file mode 100644 index 00000000..9cc3b9e8 --- /dev/null +++ b/examples/deadcode/src/Includes.ml @@ -0,0 +1,9 @@ +module Source = struct + let included_used () = () + + let included_unused () = () +end + +include Source + +let use_included () = included_used () diff --git a/examples/deadcode/src/JSResource.bs.js b/examples/deadcode/src/JSResource.bs.js deleted file mode 100644 index d856702b..00000000 --- a/examples/deadcode/src/JSResource.bs.js +++ /dev/null @@ -1,2 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/examples/deadcode/src/JSResource.res b/examples/deadcode/src/JSResource.res deleted file mode 100644 index 860277d2..00000000 --- a/examples/deadcode/src/JSResource.res +++ /dev/null @@ -1,4 +0,0 @@ -type t<'a> - -@module external jSResource: string => t<'a> = "JSResource" - diff --git a/examples/deadcode/src/LetPrivate.bs.js b/examples/deadcode/src/LetPrivate.bs.js deleted file mode 100644 index d8727696..00000000 --- a/examples/deadcode/src/LetPrivate.bs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var y = 34; - -export { - y , -} -/* No side effect */ diff --git a/examples/deadcode/src/LetPrivate.gen.tsx b/examples/deadcode/src/LetPrivate.gen.tsx deleted file mode 100644 index 3f53e178..00000000 --- a/examples/deadcode/src/LetPrivate.gen.tsx +++ /dev/null @@ -1,9 +0,0 @@ -/* TypeScript file generated from LetPrivate.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as LetPrivateBS__Es6Import from './LetPrivate.bs'; -const LetPrivateBS: any = LetPrivateBS__Es6Import; - -export const y: number = LetPrivateBS.y; diff --git a/examples/deadcode/src/LetPrivate.res b/examples/deadcode/src/LetPrivate.res deleted file mode 100644 index 909c2655..00000000 --- a/examples/deadcode/src/LetPrivate.res +++ /dev/null @@ -1,8 +0,0 @@ -%%private( - @genType - let x = 34 -) - -@genType -let y = x - diff --git a/examples/deadcode/src/Main.ml b/examples/deadcode/src/Main.ml new file mode 100644 index 00000000..eae14ea1 --- /dev/null +++ b/examples/deadcode/src/Main.ml @@ -0,0 +1,13 @@ +let () = + Deadcode.exposed (); + Modules.LiveNested.value (); + Modules.use_partly_live (); + ModuleAliases.use_alias (); + Includes.use_included (); + ignore (Types.make_live 1); + ignore TransitiveTypes.live_value; + FirstClassModules.run (); + OptionalArgs.live_optional ~used:1 (); + ignore (Externals.live_external "abc"); + Annotations.live_value (); + Exceptions.catches () diff --git a/examples/deadcode/src/ModuleAliases.bs.js b/examples/deadcode/src/ModuleAliases.bs.js deleted file mode 100644 index 0ff799c8..00000000 --- a/examples/deadcode/src/ModuleAliases.bs.js +++ /dev/null @@ -1,47 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var Inner = {}; - -var Outer = { - Inner: Inner -}; - -var InnerNested = {}; - -var Inner2 = { - InnerNested: InnerNested, - OuterInnerAlias2: undefined -}; - -var Outer2 = { - OuterInnerAlias: undefined, - Inner2: Inner2 -}; - -function testNested(x) { - return x; -} - -function testInner(x) { - return x; -} - -function testInner2(x) { - return x; -} - -var Outer2Alias; - -var InnerNestedAlias; - -export { - Outer , - Outer2 , - Outer2Alias , - InnerNestedAlias , - testNested , - testInner , - testInner2 , -} -/* No side effect */ diff --git a/examples/deadcode/src/ModuleAliases.gen.tsx b/examples/deadcode/src/ModuleAliases.gen.tsx deleted file mode 100644 index 3dd54ab8..00000000 --- a/examples/deadcode/src/ModuleAliases.gen.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* TypeScript file generated from ModuleAliases.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as ModuleAliasesBS__Es6Import from './ModuleAliases.bs'; -const ModuleAliasesBS: any = ModuleAliasesBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type Outer_Inner_innerT = { readonly inner: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type Outer2_Inner2_InnerNested_t = { readonly nested: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type Outer2_OuterInnerAlias_innerT = Outer_Inner_innerT; - -// tslint:disable-next-line:interface-over-type-literal -export type Outer2_Inner2_OuterInnerAlias2_innerT = Outer2_OuterInnerAlias_innerT; - -// tslint:disable-next-line:interface-over-type-literal -export type Outer2Alias_OuterInnerAlias_innerT = Outer2_OuterInnerAlias_innerT; - -// tslint:disable-next-line:interface-over-type-literal -export type Outer2Alias_Inner2_OuterInnerAlias2_innerT = Outer2_Inner2_OuterInnerAlias2_innerT; - -// tslint:disable-next-line:interface-over-type-literal -export type InnerNestedAlias_t = Outer2_Inner2_InnerNested_t; - -export const testNested: (x:InnerNestedAlias_t) => InnerNestedAlias_t = ModuleAliasesBS.testNested; - -export const testInner: (x:Outer2Alias_OuterInnerAlias_innerT) => Outer2Alias_OuterInnerAlias_innerT = ModuleAliasesBS.testInner; - -export const testInner2: (x:Outer2Alias_Inner2_OuterInnerAlias2_innerT) => Outer2Alias_Inner2_OuterInnerAlias2_innerT = ModuleAliasesBS.testInner2; diff --git a/examples/deadcode/src/ModuleAliases.ml b/examples/deadcode/src/ModuleAliases.ml new file mode 100644 index 00000000..6e137a97 --- /dev/null +++ b/examples/deadcode/src/ModuleAliases.ml @@ -0,0 +1,9 @@ +module Source = struct + let used_through_alias () = () + + let unused_even_with_alias () = () +end + +module Alias = Source + +let use_alias () = Alias.used_through_alias () diff --git a/examples/deadcode/src/ModuleAliases.res b/examples/deadcode/src/ModuleAliases.res deleted file mode 100644 index 5d035fc2..00000000 --- a/examples/deadcode/src/ModuleAliases.res +++ /dev/null @@ -1,29 +0,0 @@ -module Outer = { - module Inner = { - type innerT = {inner: string} - } -} - -module Outer2 = { - module OuterInnerAlias = Outer.Inner - module Inner2 = { - module InnerNested = { - type t = {nested: int} - } - module OuterInnerAlias2 = OuterInnerAlias - } -} - -module Outer2Alias = Outer2 - -module InnerNestedAlias = Outer2.Inner2.InnerNested - -@genType -let testNested = (x: InnerNestedAlias.t) => x - -@genType -let testInner = (x: Outer2Alias.OuterInnerAlias.innerT) => x - -@genType -let testInner2 = (x: Outer2Alias.Inner2.OuterInnerAlias2.innerT) => x - diff --git a/examples/deadcode/src/ModuleAliases2.bs.js b/examples/deadcode/src/ModuleAliases2.bs.js deleted file mode 100644 index 4be3b837..00000000 --- a/examples/deadcode/src/ModuleAliases2.bs.js +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var Inner = {}; - -var Outer = { - Inner: Inner -}; - -var OuterAlias; - -var InnerAlias; - -var q = 42; - -export { - Outer , - OuterAlias , - InnerAlias , - q , -} -/* No side effect */ diff --git a/examples/deadcode/src/ModuleAliases2.gen.tsx b/examples/deadcode/src/ModuleAliases2.gen.tsx deleted file mode 100644 index 16560b74..00000000 --- a/examples/deadcode/src/ModuleAliases2.gen.tsx +++ /dev/null @@ -1,21 +0,0 @@ -/* TypeScript file generated from ModuleAliases2.res by genType. */ -/* eslint-disable import/first */ - - -// tslint:disable-next-line:interface-over-type-literal -export type record = { readonly x: number; readonly y: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type Outer_outer = { readonly outer: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type Outer_Inner_inner = { readonly inner: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type OuterAlias_outer = Outer_outer; - -// tslint:disable-next-line:interface-over-type-literal -export type OuterAlias_Inner_inner = Outer_Inner_inner; - -// tslint:disable-next-line:interface-over-type-literal -export type InnerAlias_inner = OuterAlias_Inner_inner; diff --git a/examples/deadcode/src/ModuleAliases2.res b/examples/deadcode/src/ModuleAliases2.res deleted file mode 100644 index f35c7084..00000000 --- a/examples/deadcode/src/ModuleAliases2.res +++ /dev/null @@ -1,22 +0,0 @@ -@genType -type record = { - x: int, - y: string, -} - -module Outer = { - @genType - type outer = {outer: string} - - module Inner = { - @genType - type inner = {inner: string} - } -} - -module OuterAlias = Outer - -module InnerAlias = OuterAlias.Inner - -let q = 42 - diff --git a/examples/deadcode/src/ModuleExceptionBug.bs.js b/examples/deadcode/src/ModuleExceptionBug.bs.js deleted file mode 100644 index 19e0a6c3..00000000 --- a/examples/deadcode/src/ModuleExceptionBug.bs.js +++ /dev/null @@ -1,24 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Caml_exceptions from "rescript/lib/es6/caml_exceptions.js"; - -function customDouble(foo) { - return (foo << 1); -} - -var Dep = { - customDouble: customDouble -}; - -var MyOtherException = /* @__PURE__ */Caml_exceptions.create("ModuleExceptionBug.MyOtherException"); - -console.log(34); - -var ddjdj = 34; - -export { - Dep , - MyOtherException , - ddjdj , -} -/* Not a pure module */ diff --git a/examples/deadcode/src/ModuleExceptionBug.res b/examples/deadcode/src/ModuleExceptionBug.res deleted file mode 100644 index f9b36ce2..00000000 --- a/examples/deadcode/src/ModuleExceptionBug.res +++ /dev/null @@ -1,8 +0,0 @@ -module Dep = { - let customDouble = foo => foo * 2 -} - -exception MyOtherException - -let ddjdj = 34 -Js.log(ddjdj) diff --git a/examples/deadcode/src/Modules.ml b/examples/deadcode/src/Modules.ml new file mode 100644 index 00000000..c714fbf0 --- /dev/null +++ b/examples/deadcode/src/Modules.ml @@ -0,0 +1,19 @@ +module LiveNested = struct + let helper () = () + + let value () = helper () +end + +module DeadNested = struct + let helper () = () + + let value () = helper () +end + +module PartlyLive = struct + let used () = () + + let unused () = () +end + +let use_partly_live () = PartlyLive.used () diff --git a/examples/deadcode/src/NestedModules.bs.js b/examples/deadcode/src/NestedModules.bs.js deleted file mode 100644 index 654fd2e5..00000000 --- a/examples/deadcode/src/NestedModules.bs.js +++ /dev/null @@ -1,42 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function nested3Function(x) { - return x; -} - -var Nested3 = { - x: 0, - y: 1, - z: 2, - w: 3, - nested3Value: "nested3Value", - nested3Function: nested3Function -}; - -function nested2Function(x) { - return x; -} - -var Nested2 = { - x: 0, - nested2Value: 1, - y: 2, - Nested3: Nested3, - nested2Function: nested2Function -}; - -var Universe = { - theAnswer: 42, - notExported: 33, - Nested2: Nested2, - someString: "some exported string" -}; - -var notNested = 1; - -export { - notNested , - Universe , -} -/* No side effect */ diff --git a/examples/deadcode/src/NestedModules.gen.tsx b/examples/deadcode/src/NestedModules.gen.tsx deleted file mode 100644 index 37cbfaba..00000000 --- a/examples/deadcode/src/NestedModules.gen.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/* TypeScript file generated from NestedModules.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as NestedModulesBS__Es6Import from './NestedModules.bs'; -const NestedModulesBS: any = NestedModulesBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type Universe_nestedType = string[]; - -// tslint:disable-next-line:interface-over-type-literal -export type Universe_Nested2_nested2Type = Array; - -// tslint:disable-next-line:interface-over-type-literal -export type Universe_Nested2_Nested3_nested3Type = Array>; - -// tslint:disable-next-line:interface-over-type-literal -export type Universe_variant = "A" | { tag: "B"; value: string }; - -export const notNested: number = NestedModulesBS.notNested; - -export const Universe_theAnswer: number = NestedModulesBS.Universe.theAnswer; - -export const Universe_Nested2_nested2Value: number = NestedModulesBS.Universe.Nested2.nested2Value; - -export const Universe_Nested2_Nested3_nested3Value: string = NestedModulesBS.Universe.Nested2.Nested3.nested3Value; - -export const Universe_Nested2_Nested3_nested3Function: (x:Universe_Nested2_nested2Type) => Universe_Nested2_nested2Type = NestedModulesBS.Universe.Nested2.Nested3.nested3Function; - -export const Universe_Nested2_nested2Function: (x:Universe_Nested2_Nested3_nested3Type) => Universe_Nested2_Nested3_nested3Type = NestedModulesBS.Universe.Nested2.nested2Function; - -export const Universe_someString: string = NestedModulesBS.Universe.someString; - -export const Universe: { - theAnswer: number; - Nested2: { - nested2Function: (x:Universe_Nested2_Nested3_nested3Type) => Universe_Nested2_Nested3_nested3Type; - nested2Value: number; - Nested3: { - nested3Value: string; - nested3Function: (x:Universe_Nested2_nested2Type) => Universe_Nested2_nested2Type - } - }; - someString: string -} = NestedModulesBS.Universe diff --git a/examples/deadcode/src/NestedModules.res b/examples/deadcode/src/NestedModules.res deleted file mode 100644 index 113012a7..00000000 --- a/examples/deadcode/src/NestedModules.res +++ /dev/null @@ -1,52 +0,0 @@ -@genType -let notNested = 1 - -module Universe = { - @genType - let theAnswer = 42 - - let notExported = 33 - - @genType - type nestedType = array - - module Nested2 = { - let x = 0 - - @genType - let nested2Value = 1 - - let y = 2 - - @genType - type nested2Type = array> - - module Nested3 = { - let x = 0 - let y = 1 - let z = 2 - let w = 3 - - @genType - type nested3Type = array>> - - @genType - let nested3Value = "nested3Value" - - @genType - let nested3Function = (x: nested2Type) => x - } - - @genType - let nested2Function = (x: Nested3.nested3Type) => x - } - - @genType - type variant = - | A - | B(string) - - @genType - let someString = "some exported string" -} - diff --git a/examples/deadcode/src/NestedModulesInSignature.bs.js b/examples/deadcode/src/NestedModulesInSignature.bs.js deleted file mode 100644 index 394291d7..00000000 --- a/examples/deadcode/src/NestedModulesInSignature.bs.js +++ /dev/null @@ -1,11 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var Universe = { - theAnswer: 42 -}; - -export { - Universe , -} -/* No side effect */ diff --git a/examples/deadcode/src/NestedModulesInSignature.gen.tsx b/examples/deadcode/src/NestedModulesInSignature.gen.tsx deleted file mode 100644 index bbdda05a..00000000 --- a/examples/deadcode/src/NestedModulesInSignature.gen.tsx +++ /dev/null @@ -1,11 +0,0 @@ -/* TypeScript file generated from NestedModulesInSignature.resi by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as NestedModulesInSignatureBS__Es6Import from './NestedModulesInSignature.bs'; -const NestedModulesInSignatureBS: any = NestedModulesInSignatureBS__Es6Import; - -export const Universe_theAnswer: number = NestedModulesInSignatureBS.Universe.theAnswer; - -export const Universe: { theAnswer: number } = NestedModulesInSignatureBS.Universe diff --git a/examples/deadcode/src/NestedModulesInSignature.res b/examples/deadcode/src/NestedModulesInSignature.res deleted file mode 100644 index 1a718287..00000000 --- a/examples/deadcode/src/NestedModulesInSignature.res +++ /dev/null @@ -1,4 +0,0 @@ -module Universe = { - let theAnswer = 42 -} - diff --git a/examples/deadcode/src/NestedModulesInSignature.resi b/examples/deadcode/src/NestedModulesInSignature.resi deleted file mode 100644 index 15b49214..00000000 --- a/examples/deadcode/src/NestedModulesInSignature.resi +++ /dev/null @@ -1,5 +0,0 @@ -module Universe: { - @genType - let theAnswer: int -} - diff --git a/examples/deadcode/src/Newsyntax.bs.js b/examples/deadcode/src/Newsyntax.bs.js deleted file mode 100644 index a852b058..00000000 --- a/examples/deadcode/src/Newsyntax.bs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var x = 34; - -var y = 11; - -export { - x , - y , -} -/* No side effect */ diff --git a/examples/deadcode/src/Newsyntax.res b/examples/deadcode/src/Newsyntax.res deleted file mode 100644 index 6a109b80..00000000 --- a/examples/deadcode/src/Newsyntax.res +++ /dev/null @@ -1,12 +0,0 @@ -let x = 34 - -let y = 11 - -type record = { - xxx: int, - yyy: int, -} - -type variant = A | B(int)|C - -type record2 = {xx:int,yy:int} diff --git a/examples/deadcode/src/Newton.bs.js b/examples/deadcode/src/Newton.bs.js deleted file mode 100644 index bc11ac5b..00000000 --- a/examples/deadcode/src/Newton.bs.js +++ /dev/null @@ -1,64 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Curry from "rescript/lib/es6/curry.js"; - -function $neg(prim0, prim1) { - return prim0 - prim1; -} - -function $plus(prim0, prim1) { - return prim0 + prim1; -} - -function $star(prim0, prim1) { - return prim0 * prim1; -} - -function $slash(prim0, prim1) { - return prim0 / prim1; -} - -function newton(f, fPrimed, initial, threshold) { - var current = { - contents: initial - }; - var iterateMore = function (previous, next) { - var delta = next >= previous ? next - previous : previous - next; - current.contents = next; - return delta >= threshold; - }; - var _param; - while(true) { - var previous = current.contents; - var next = previous - Curry._1(f, previous) / Curry._1(fPrimed, previous); - if (!iterateMore(previous, next)) { - return current.contents; - } - _param = undefined; - continue ; - }; -} - -function f(x) { - return x * x * x - 2.0 * x * x - 11.0 * x + 12.0; -} - -function fPrimed(x) { - return 3.0 * x * x - 4.0 * x - 11.0; -} - -var result = newton(f, fPrimed, 5.0, 0.0003); - -console.log(result, f(result)); - -export { - $neg , - $plus , - $star , - $slash , - newton , - f , - fPrimed , - result , -} -/* result Not a pure module */ diff --git a/examples/deadcode/src/Newton.res b/examples/deadcode/src/Newton.res deleted file mode 100644 index ce8f3388..00000000 --- a/examples/deadcode/src/Newton.res +++ /dev/null @@ -1,32 +0,0 @@ -let \"-" = \"-." -let \"+" = \"+." -let \"*" = \"*." -let \"/" = \"/." - -let newton = (~f, ~fPrimed, ~initial, ~threshold) => { - let current = ref(initial) - let iterateMore = (previous, next) => { - let delta = next >= previous ? next - previous : previous - next - current := next - !(delta < threshold) - } - @progress(iterateMore) - let rec loop = () => { - let previous = current.contents - let next = previous - f(previous) / fPrimed(previous) - if iterateMore(previous, next) { - loop() - } else { - current.contents - } - } - loop() -} -let f = x => x * x * x - 2.0 * x * x - 11.0 * x + 12.0 - -let fPrimed = x => 3.0 * x * x - 4.0 * x - 11.0 - -let result = newton(~f, ~fPrimed, ~initial=5.0, ~threshold=0.0003) - -Js.log2(result, f(result)) - diff --git a/examples/deadcode/src/Opaque.bs.js b/examples/deadcode/src/Opaque.bs.js deleted file mode 100644 index 7639ea3f..00000000 --- a/examples/deadcode/src/Opaque.bs.js +++ /dev/null @@ -1,16 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function noConversion(x) { - return x; -} - -function testConvertNestedRecordFromOtherFile(x) { - return x; -} - -export { - noConversion , - testConvertNestedRecordFromOtherFile , -} -/* No side effect */ diff --git a/examples/deadcode/src/Opaque.gen.tsx b/examples/deadcode/src/Opaque.gen.tsx deleted file mode 100644 index 633c0d30..00000000 --- a/examples/deadcode/src/Opaque.gen.tsx +++ /dev/null @@ -1,20 +0,0 @@ -/* TypeScript file generated from Opaque.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as OpaqueBS__Es6Import from './Opaque.bs'; -const OpaqueBS: any = OpaqueBS__Es6Import; - -import type {business as Records_business} from './Records.gen'; - -// tslint:disable-next-line:max-classes-per-file -// tslint:disable-next-line:class-name -export abstract class opaqueFromRecords { protected opaque!: any }; /* simulate opaque types */ - -// tslint:disable-next-line:interface-over-type-literal -export type pair = [opaqueFromRecords, opaqueFromRecords]; - -export const noConversion: (x:opaqueFromRecords) => opaqueFromRecords = OpaqueBS.noConversion; - -export const testConvertNestedRecordFromOtherFile: (x:Records_business) => Records_business = OpaqueBS.testConvertNestedRecordFromOtherFile; diff --git a/examples/deadcode/src/Opaque.res b/examples/deadcode/src/Opaque.res deleted file mode 100644 index a23eed7c..00000000 --- a/examples/deadcode/src/Opaque.res +++ /dev/null @@ -1,12 +0,0 @@ -@genType.opaque -type opaqueFromRecords = A(Records.coord) - -@genType -let noConversion = (x: opaqueFromRecords) => x - -@genType -type pair = (opaqueFromRecords, opaqueFromRecords) - -@genType -let testConvertNestedRecordFromOtherFile = (x: Records.business) => x - diff --git a/examples/deadcode/src/OptArg.bs.js b/examples/deadcode/src/OptArg.bs.js deleted file mode 100644 index 27808391..00000000 --- a/examples/deadcode/src/OptArg.bs.js +++ /dev/null @@ -1,59 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function foo(xOpt, yOpt, zOpt, w) { - var x = xOpt !== undefined ? xOpt : 1; - var y = yOpt !== undefined ? yOpt : 2; - var z = zOpt !== undefined ? zOpt : 3; - return ((x + y | 0) + z | 0) + w | 0; -} - -function bar(x, y, z, w) { - return y + w | 0; -} - -console.log(foo(3, undefined, undefined, 4)); - -console.log(7); - -function threeArgs(aOpt, bOpt, cOpt, d) { - var a = aOpt !== undefined ? aOpt : 1; - var b = bOpt !== undefined ? bOpt : 2; - var c = cOpt !== undefined ? cOpt : 3; - return ((a + b | 0) + c | 0) + d | 0; -} - -console.log(threeArgs(4, undefined, 7, 1)); - -console.log(threeArgs(4, undefined, undefined, 1)); - -function twoArgs(aOpt, bOpt, c) { - var a = aOpt !== undefined ? aOpt : 1; - var b = bOpt !== undefined ? bOpt : 2; - return (a + b | 0) + c | 0; -} - -console.log(twoArgs(undefined, undefined, 1)); - -var a = 3; - -console.log(a + 44 | 0); - -function wrapfourArgs(a, b, c, n) { - var dOpt; - var a$1 = a !== undefined ? a : 1; - var b$1 = b !== undefined ? b : 2; - var c$1 = c !== undefined ? c : 3; - var d = dOpt !== undefined ? dOpt : 4; - return (((a$1 + b$1 | 0) + c$1 | 0) + d | 0) + n | 0; -} - -console.log(wrapfourArgs(3, undefined, 44, 44)); - -console.log(wrapfourArgs(undefined, 4, 44, 44)); - -export { - foo , - bar , -} -/* Not a pure module */ diff --git a/examples/deadcode/src/OptArg.res b/examples/deadcode/src/OptArg.res deleted file mode 100644 index a556a52c..00000000 --- a/examples/deadcode/src/OptArg.res +++ /dev/null @@ -1,30 +0,0 @@ -let foo = (~x=1, ~y=2, ~z=3, w) => x + y + z + w - -let bar = (~x=?, ~y, ~z=?, w) => y + w - -Js.log(foo(~x=3, 4)) - -Js.log(bar(~y=3, 4)) - -let threeArgs = (~a=1, ~b=2, ~c=3, d) => a + b + c + d - -Js.log(threeArgs(~a=4, ~c=7, 1)) -Js.log(threeArgs(~a=4, 1)) - -let twoArgs = (~a=1, ~b=2, c) => a + b + c - -Js.log(1 |> twoArgs) - -let oneArg = (~a=1, ~z, b) => a + b - -let wrapOneArg = (~a=?, n) => oneArg(~a?, ~z=33, n) - -Js.log(wrapOneArg(~a=3, 44)) - -let fourArgs = (~a=1, ~b=2, ~c=3, ~d=4, n) => a + b + c + d + n - -let wrapfourArgs = (~a=?, ~b=?, ~c=?, n) => fourArgs(~a?, ~b?, ~c?, n) - -Js.log(wrapfourArgs(~a=3, ~c=44, 44)) -Js.log(wrapfourArgs(~b=4, ~c=44, 44)) - diff --git a/examples/deadcode/src/OptArg.resi b/examples/deadcode/src/OptArg.resi deleted file mode 100644 index f51814f3..00000000 --- a/examples/deadcode/src/OptArg.resi +++ /dev/null @@ -1,3 +0,0 @@ -let foo: (~x: int=?, ~y: int=?, ~z: int=?, int) => int -let bar: (~x: 'a=?, ~y: int, ~z: 'b=?, int) => int - diff --git a/examples/deadcode/src/OptionalArgs.ml b/examples/deadcode/src/OptionalArgs.ml new file mode 100644 index 00000000..cff5389f --- /dev/null +++ b/examples/deadcode/src/OptionalArgs.ml @@ -0,0 +1,9 @@ +let live_optional ?used ?unused () = + match used with + | Some _ -> () + | None -> () + +let dead_optional ?also_dead () = + match also_dead with + | Some _ -> () + | None -> () diff --git a/examples/deadcode/src/Records.bs.js b/examples/deadcode/src/Records.bs.js deleted file mode 100644 index d342c6c5..00000000 --- a/examples/deadcode/src/Records.bs.js +++ /dev/null @@ -1,169 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Belt_List from "rescript/lib/es6/belt_List.js"; -import * as Belt_Array from "rescript/lib/es6/belt_Array.js"; -import * as Pervasives from "rescript/lib/es6/pervasives.js"; -import * as Belt_Option from "rescript/lib/es6/belt_Option.js"; -import * as Caml_option from "rescript/lib/es6/caml_option.js"; - -function computeArea(param) { - return Math.imul(Math.imul(param.x, param.y), Belt_Option.mapWithDefault(param.z, 1, (function (n) { - return n; - }))); -} - -function coord2d(x, y) { - return { - x: x, - y: y, - z: undefined - }; -} - -var getOpt = Belt_Option.mapWithDefault; - -function findAddress(business) { - return Belt_Option.mapWithDefault(business.address, /* [] */0, (function (a) { - return { - hd: a, - tl: /* [] */0 - }; - })); -} - -function findAllAddresses(businesses) { - return Belt_List.toArray(Belt_List.flatten(Belt_List.fromArray(Belt_Array.map(businesses, (function (business) { - return Pervasives.$at(Belt_Option.mapWithDefault(business.address, /* [] */0, (function (a) { - return { - hd: a, - tl: /* [] */0 - }; - })), Belt_Option.mapWithDefault(business.owner, /* [] */0, (function (p) { - return Belt_Option.mapWithDefault(p.address, /* [] */0, (function (a) { - return { - hd: a, - tl: /* [] */0 - }; - })); - }))); - }))))); -} - -function getPayload(param) { - return param.payload; -} - -function getPayloadRecord(param) { - return param.payload; -} - -var recordValue = { - v: 1, - w: 1 -}; - -var payloadValue = { - num: 1, - payload: recordValue -}; - -function getPayloadRecordPlusOne(param) { - var payload = param.payload; - return { - v: payload.v + 1 | 0, - w: payload.w - }; -} - -function findAddress2(business) { - return Belt_Option.mapWithDefault(Caml_option.nullable_to_opt(business.address2), /* [] */0, (function (a) { - return { - hd: a, - tl: /* [] */0 - }; - })); -} - -var someBusiness2_owner = null; - -var someBusiness2_address2 = null; - -var someBusiness2 = { - name: "SomeBusiness", - owner: someBusiness2_owner, - address2: someBusiness2_address2 -}; - -function computeArea3(o) { - return Math.imul(Math.imul(o.x, o.y), Belt_Option.mapWithDefault(Caml_option.nullable_to_opt(o.z), 1, (function (n) { - return n; - }))); -} - -function computeArea4(o) { - return Math.imul(Math.imul(o.x, o.y), Belt_Option.mapWithDefault(o.z, 1, (function (n) { - return n; - }))); -} - -function testMyRec(x) { - return x.type_; -} - -function testMyRec2(x) { - return x; -} - -function testMyObj(x) { - return x.type_; -} - -function testMyObj2(x) { - return x; -} - -function testMyRecBsAs(x) { - return x.type; -} - -function testMyRecBsAs2(x) { - return x; -} - -var origin = { - x: 0, - y: 0, - z: 0 -}; - -var someBusiness = { - name: "SomeBusiness", - owner: undefined, - address: undefined -}; - -export { - origin , - computeArea , - coord2d , - getOpt , - findAddress , - someBusiness , - findAllAddresses , - getPayload , - getPayloadRecord , - recordValue , - payloadValue , - getPayloadRecordPlusOne , - findAddress2 , - someBusiness2 , - computeArea3 , - computeArea4 , - testMyRec , - testMyRec2 , - testMyObj , - testMyObj2 , - testMyRecBsAs , - testMyRecBsAs2 , -} -/* No side effect */ diff --git a/examples/deadcode/src/Records.gen.tsx b/examples/deadcode/src/Records.gen.tsx deleted file mode 100644 index b2d3d7be..00000000 --- a/examples/deadcode/src/Records.gen.tsx +++ /dev/null @@ -1,125 +0,0 @@ -/* TypeScript file generated from Records.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as Curry__Es6Import from 'rescript/lib/es6/curry.js'; -const Curry: any = Curry__Es6Import; - -// @ts-ignore: Implicit any on import -import * as RecordsBS__Es6Import from './Records.bs'; -const RecordsBS: any = RecordsBS__Es6Import; - -import type {list} from './RescriptPervasives.gen'; - -// tslint:disable-next-line:interface-over-type-literal -export type coord = { - readonly x: number; - readonly y: number; - readonly z?: number -}; - -// tslint:disable-next-line:interface-over-type-literal -export type person = { - readonly name: string; - readonly age: number; - readonly address?: string -}; - -// tslint:disable-next-line:interface-over-type-literal -export type business = { - readonly name: string; - readonly owner?: person; - readonly address?: string -}; - -// tslint:disable-next-line:interface-over-type-literal -export type payload = { readonly num: number; readonly payload: a }; - -// tslint:disable-next-line:interface-over-type-literal -export type record = { readonly v: number; readonly w: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type business2 = { - readonly name: string; - readonly owner: (null | undefined | person); - readonly address2: (null | undefined | string) -}; - -// tslint:disable-next-line:interface-over-type-literal -export type mix = { - readonly a: number; - readonly b: number; - readonly c?: { - readonly name: string; - readonly surname: string - } -}; - -// tslint:disable-next-line:interface-over-type-literal -export type myRec = { readonly type: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type myObj = { readonly type_: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type myRecBsAs = { readonly type: string }; - -export const origin: coord = RecordsBS.origin; - -export const computeArea: (param:coord) => number = RecordsBS.computeArea; - -export const coord2d: (x:number, y:number) => coord = function (Arg1: any, Arg2: any) { - const result = Curry._2(RecordsBS.coord2d, Arg1, Arg2); - return result -}; - -export const findAddress: (business:business) => list = RecordsBS.findAddress; - -export const someBusiness: business = RecordsBS.someBusiness; - -export const findAllAddresses: (businesses:business[]) => string[] = RecordsBS.findAllAddresses; - -export const getPayload: (param:payload) => T1 = RecordsBS.getPayload; - -export const getPayloadRecord: (param:payload) => record = RecordsBS.getPayloadRecord; - -export const recordValue: record = RecordsBS.recordValue; - -export const payloadValue: payload = RecordsBS.payloadValue; - -export const getPayloadRecordPlusOne: (param:payload) => record = RecordsBS.getPayloadRecordPlusOne; - -export const findAddress2: (business:business2) => list = RecordsBS.findAddress2; - -export const someBusiness2: business2 = RecordsBS.someBusiness2; - -export const computeArea3: (o:{ - readonly x: number; - readonly y: number; - readonly z: (null | undefined | number) -}) => number = RecordsBS.computeArea3; - -export const computeArea4: (o:{ - readonly x: number; - readonly y: number; - readonly z?: number -}) => number = RecordsBS.computeArea4; - -export const testMyRec: (x:myRec) => string = function (Arg1: any) { - const result = RecordsBS.testMyRec({type_:Arg1.type}); - return result -}; - -export const testMyRec2: (x:myRec) => myRec = function (Arg1: any) { - const result = RecordsBS.testMyRec2({type_:Arg1.type}); - return {type:result.type_} -}; - -export const testMyObj: (x:myObj) => string = RecordsBS.testMyObj; - -export const testMyObj2: (x:myObj) => myObj = RecordsBS.testMyObj2; - -export const testMyRecBsAs: (x:myRecBsAs) => string = RecordsBS.testMyRecBsAs; - -export const testMyRecBsAs2: (x:myRecBsAs) => myRecBsAs = RecordsBS.testMyRecBsAs2; diff --git a/examples/deadcode/src/Records.res b/examples/deadcode/src/Records.res deleted file mode 100644 index 3d7bfc2f..00000000 --- a/examples/deadcode/src/Records.res +++ /dev/null @@ -1,149 +0,0 @@ -open Belt - -@genType -type coord = { - x: int, - y: int, - z: option, -} - -@genType -let origin = {x: 0, y: 0, z: Some(0)} - -@genType -let computeArea = ({x, y, z}) => { - open Option - x * y * z->mapWithDefault(1, n => n) -} - -@genType -let coord2d = (x, y) => {x: x, y: y, z: None} - -@genType -type person = { - name: string, - age: int, - address: option, -} - -@genType -type business = { - name: string, - owner: option, - address: option, -} - -let getOpt = (opt, default, foo) => opt->Option.mapWithDefault(default, foo) - -@genType -let findAddress = (business: business): list => - business.address->getOpt(list{}, a => list{a}) - -@genType -let someBusiness = {name: "SomeBusiness", owner: None, address: None} - -@genType -let findAllAddresses = (businesses: array): array => - businesses - ->Array.map(business => - \"@"( - business.address->getOpt(list{}, a => list{a}), - business.owner->getOpt(list{}, p => p.address->getOpt(list{}, a => list{a})), - ) - ) - ->List.fromArray - ->List.flatten - ->List.toArray - -@genType -type payload<'a> = { - num: int, - payload: 'a, -} - -@genType -let getPayload = ({payload}) => payload - -@genType -type record = { - v: int, - w: int, -} - -@genType -let getPayloadRecord = ({payload}): record => payload - -@genType -let recordValue = {v: 1, w: 1} - -@genType -let payloadValue = {num: 1, payload: recordValue} - -@genType -let getPayloadRecordPlusOne = ({payload}): record => { - ...payload, - v: payload.v + 1, -} - -@genType -type business2 = { - name: string, - owner: Js.Nullable.t, - address2: Js.Nullable.t, -} - -@genType -let findAddress2 = (business: business2): list => - business.address2->Js.Nullable.toOption->getOpt(list{}, a => list{a}) - -@genType -let someBusiness2 = { - name: "SomeBusiness", - owner: Js.Nullable.null, - address2: Js.Nullable.null, -} - -@genType -let computeArea3 = (o: {"x": int, "y": int, "z": Js.Nullable.t}) => - o["x"] * o["y"] * o["z"]->Js.Nullable.toOption->Option.mapWithDefault(1, n => n) - -@genType -let computeArea4 = (o: {"x": int, "y": int, "z": option}) => - o["x"] * o["y"] * o["z"]->Option.mapWithDefault(1, n => n) - -@genType -type mix = {"a": int, "b": int, "c": option<{"name": string, "surname": string}>} - -@genType -type myRec = { - @genType.as("type") - type_: string, -} - -@genType -type myObj = {"type_": string} - -@genType -let testMyRec = (x: myRec) => x.type_ - -@genType -let testMyRec2 = (x: myRec) => x - -@genType -let testMyObj = (x: myObj) => x["type_"] - -@genType -let testMyObj2 = (x: myObj) => x - -@genType -type myRecBsAs = { - @as("type") - type_: string, -} - -@genType -let testMyRecBsAs = (x: myRecBsAs) => x.type_ - -@genType -let testMyRecBsAs2 = (x: myRecBsAs) => x - diff --git a/examples/deadcode/src/References.bs.js b/examples/deadcode/src/References.bs.js deleted file mode 100644 index b0b4088d..00000000 --- a/examples/deadcode/src/References.bs.js +++ /dev/null @@ -1,57 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function create(x) { - return { - contents: x - }; -} - -function access(r) { - return r.contents + 1 | 0; -} - -function update(r) { - r.contents = r.contents + 1 | 0; -} - -function get(r) { - return r.contents; -} - -function make(prim) { - return { - contents: prim - }; -} - -function set(r, v) { - r.contents = v; -} - -var R = { - get: get, - make: make, - set: set -}; - -function destroysRefIdentity(x) { - return x; -} - -function preserveRefIdentity(x) { - return x; -} - -export { - create , - access , - update , - R , - get , - make , - set , - destroysRefIdentity , - preserveRefIdentity , -} -/* No side effect */ diff --git a/examples/deadcode/src/References.gen.tsx b/examples/deadcode/src/References.gen.tsx deleted file mode 100644 index fec3a03b..00000000 --- a/examples/deadcode/src/References.gen.tsx +++ /dev/null @@ -1,39 +0,0 @@ -/* TypeScript file generated from References.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as Curry__Es6Import from 'rescript/lib/es6/curry.js'; -const Curry: any = Curry__Es6Import; - -// @ts-ignore: Implicit any on import -import * as ReferencesBS__Es6Import from './References.bs'; -const ReferencesBS: any = ReferencesBS__Es6Import; - -// tslint:disable-next-line:max-classes-per-file -export abstract class R_t { protected opaque!: a }; /* simulate opaque types */ - -// tslint:disable-next-line:interface-over-type-literal -export type t = R_t; - -// tslint:disable-next-line:interface-over-type-literal -export type requiresConversion = { readonly x: number }; - -export const create: (x:number) => { contents: number } = ReferencesBS.create; - -export const access: (r:{ contents: number }) => number = ReferencesBS.access; - -export const update: (r:{ contents: number }) => void = ReferencesBS.update; - -export const get: (_1:R_t) => T1 = ReferencesBS.get; - -export const make: (_1:T1) => R_t = ReferencesBS.make; - -export const set: (_1:R_t, _2:T1) => void = function (Arg1: any, Arg2: any) { - const result = Curry._2(ReferencesBS.set, Arg1, Arg2); - return result -}; - -export const destroysRefIdentity: (x:{ contents: requiresConversion }) => { contents: requiresConversion } = ReferencesBS.destroysRefIdentity; - -export const preserveRefIdentity: (x:R_t) => R_t = ReferencesBS.preserveRefIdentity; diff --git a/examples/deadcode/src/References.res b/examples/deadcode/src/References.res deleted file mode 100644 index 3cdd25f1..00000000 --- a/examples/deadcode/src/References.res +++ /dev/null @@ -1,48 +0,0 @@ -// Test pervasive references - -@genType -let create = (x: int) => ref(x) - -@genType -let access = r => r.contents + 1 - -@genType -let update = r => r.contents = r.contents + 1 - -// Abstract version of references: works when conversion is required. - -module R: { - @genType - type t<'a> - let get: t<'a> => 'a - let make: 'a => t<'a> - let set: (t<'a>, 'a) => unit -} = { - type t<'a> = ref<'a> - let get = r => r.contents - let make = ref - let set = (r, v) => r.contents = v -} - -@genType -type t<'a> = R.t<'a> - -@genType -let get = R.get - -@gentype -let make = R.make - -@genType -let set = R.set - -type requiresConversion = {x: int} - -// Careful: conversion makes a copy and destroys the reference identity. -@genType -let destroysRefIdentity = (x: ref) => x - -// Using abstract references preserves the identity. -@genType -let preserveRefIdentity = (x: R.t) => x - diff --git a/examples/deadcode/src/RepeatedLabel.bs.js b/examples/deadcode/src/RepeatedLabel.bs.js deleted file mode 100644 index 459c6732..00000000 --- a/examples/deadcode/src/RepeatedLabel.bs.js +++ /dev/null @@ -1,16 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function userData(param) { - return { - a: param.a, - b: param.b - }; -} - -console.log(userData); - -export { - userData , -} -/* Not a pure module */ diff --git a/examples/deadcode/src/RepeatedLabel.res b/examples/deadcode/src/RepeatedLabel.res deleted file mode 100644 index 3c0b6dde..00000000 --- a/examples/deadcode/src/RepeatedLabel.res +++ /dev/null @@ -1,15 +0,0 @@ -type userData = { - a: bool, - b: int, -} - -type tabState = { - a: bool, - b: int, - f: string, -} - -let userData = ({a, b}): userData => {a: a, b: b} - -Js.log(userData) - diff --git a/examples/deadcode/src/RequireCond.bs.js b/examples/deadcode/src/RequireCond.bs.js deleted file mode 100644 index d856702b..00000000 --- a/examples/deadcode/src/RequireCond.bs.js +++ /dev/null @@ -1,2 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE -/* This output is empty. Its source's type definitions, externals and/or unused code got optimized away. */ diff --git a/examples/deadcode/src/RequireCond.res b/examples/deadcode/src/RequireCond.res deleted file mode 100644 index 8c3638e1..00000000 --- a/examples/deadcode/src/RequireCond.res +++ /dev/null @@ -1,20 +0,0 @@ -@module -@deprecated( - "Please use this syntax to guarantee safe usage: [%requireCond(`gk, \"gk_name\", ConditionalModule)]" -) -external make: ( - @string [@as("qe.bool") #qeBool | @as("gk") #gk], - string, - string, -) => Js.Nullable.t<'a> = "requireCond" - -@module -@deprecated( - "Please use this syntax to guarantee safe usage: [%requireCond(`gk, \"gk_name\", {\"true\": ModuleA, \"false\": ModuleB})]" -) -external either: ( - @string [@as("qe.bool") #qeBool | @as("gk") #gk], - string, - {"true": string, "false": string}, -) => 'b = "requireCond" - diff --git a/examples/deadcode/src/Shadow.bs.js b/examples/deadcode/src/Shadow.bs.js deleted file mode 100644 index 87be066e..00000000 --- a/examples/deadcode/src/Shadow.bs.js +++ /dev/null @@ -1,20 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function test(param) { - return "a"; -} - -function test$1(param) { - return "a"; -} - -var M = { - test: test$1 -}; - -export { - test , - M , -} -/* No side effect */ diff --git a/examples/deadcode/src/Shadow.gen.tsx b/examples/deadcode/src/Shadow.gen.tsx deleted file mode 100644 index 491426e9..00000000 --- a/examples/deadcode/src/Shadow.gen.tsx +++ /dev/null @@ -1,9 +0,0 @@ -/* TypeScript file generated from Shadow.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as ShadowBS__Es6Import from './Shadow.bs'; -const ShadowBS: any = ShadowBS__Es6Import; - -export const test: () => string = ShadowBS.test; diff --git a/examples/deadcode/src/Shadow.res b/examples/deadcode/src/Shadow.res deleted file mode 100644 index 7f83e625..00000000 --- a/examples/deadcode/src/Shadow.res +++ /dev/null @@ -1,13 +0,0 @@ -@genType -let test = () => 3 - -@genType -let test = () => "a" - -module M = { - @genType - let test = () => 3 - - let test = () => "a" -} - diff --git a/examples/deadcode/src/TestDeadExn.bs.js b/examples/deadcode/src/TestDeadExn.bs.js deleted file mode 100644 index 2ea2da07..00000000 --- a/examples/deadcode/src/TestDeadExn.bs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as DeadExn from "./DeadExn.bs.js"; - -console.log({ - RE_EXN_ID: DeadExn.Etoplevel - }); - -export { - -} -/* Not a pure module */ diff --git a/examples/deadcode/src/TestDeadExn.res b/examples/deadcode/src/TestDeadExn.res deleted file mode 100644 index 7810b9cc..00000000 --- a/examples/deadcode/src/TestDeadExn.res +++ /dev/null @@ -1,2 +0,0 @@ -Js.log(DeadExn.Etoplevel) - diff --git a/examples/deadcode/src/TestEmitInnerModules.bs.js b/examples/deadcode/src/TestEmitInnerModules.bs.js deleted file mode 100644 index 995314b4..00000000 --- a/examples/deadcode/src/TestEmitInnerModules.bs.js +++ /dev/null @@ -1,25 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var Inner = { - x: 34, - y: "hello" -}; - -var Inner$1 = { - y: 44 -}; - -var Medium = { - Inner: Inner$1 -}; - -var Outer = { - Medium: Medium -}; - -export { - Inner , - Outer , -} -/* No side effect */ diff --git a/examples/deadcode/src/TestEmitInnerModules.gen.tsx b/examples/deadcode/src/TestEmitInnerModules.gen.tsx deleted file mode 100644 index f6f0527f..00000000 --- a/examples/deadcode/src/TestEmitInnerModules.gen.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/* TypeScript file generated from TestEmitInnerModules.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as TestEmitInnerModulesBS__Es6Import from './TestEmitInnerModules.bs'; -const TestEmitInnerModulesBS: any = TestEmitInnerModulesBS__Es6Import; - -export const Inner_x: number = TestEmitInnerModulesBS.Inner.x; - -export const Inner_y: string = TestEmitInnerModulesBS.Inner.y; - -export const Outer_Medium_Inner_y: number = TestEmitInnerModulesBS.Outer.Medium.Inner.y; - -export const Inner: { x: number; y: string } = TestEmitInnerModulesBS.Inner - -export const Outer: { Medium: { Inner: { y: number } } } = TestEmitInnerModulesBS.Outer diff --git a/examples/deadcode/src/TestEmitInnerModules.res b/examples/deadcode/src/TestEmitInnerModules.res deleted file mode 100644 index 345d6476..00000000 --- a/examples/deadcode/src/TestEmitInnerModules.res +++ /dev/null @@ -1,16 +0,0 @@ -module Inner = { - @genType - let x = 34 - @genType - let y = "hello" -} - -module Outer = { - module Medium = { - module Inner = { - @genType - let y = 44 - } - } -} - diff --git a/examples/deadcode/src/TestFirstClassModules.bs.js b/examples/deadcode/src/TestFirstClassModules.bs.js deleted file mode 100644 index bef4b0e2..00000000 --- a/examples/deadcode/src/TestFirstClassModules.bs.js +++ /dev/null @@ -1,26 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function convert(x) { - return x; -} - -function convertInterface(x) { - return x; -} - -function convertRecord(x) { - return x; -} - -function convertFirstClassModuleWithTypeEquations(x) { - return x; -} - -export { - convert , - convertInterface , - convertRecord , - convertFirstClassModuleWithTypeEquations , -} -/* No side effect */ diff --git a/examples/deadcode/src/TestFirstClassModules.gen.tsx b/examples/deadcode/src/TestFirstClassModules.gen.tsx deleted file mode 100644 index 6c80daff..00000000 --- a/examples/deadcode/src/TestFirstClassModules.gen.tsx +++ /dev/null @@ -1,24 +0,0 @@ -/* TypeScript file generated from TestFirstClassModules.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as TestFirstClassModulesBS__Es6Import from './TestFirstClassModules.bs'; -const TestFirstClassModulesBS: any = TestFirstClassModulesBS__Es6Import; - -import type {firstClassModule as FirstClassModulesInterface_firstClassModule} from './FirstClassModulesInterface.gen'; - -import type {firstClassModule as FirstClassModules_firstClassModule} from './FirstClassModules.gen'; - -import type {record as FirstClassModulesInterface_record} from './FirstClassModulesInterface.gen'; - -// tslint:disable-next-line:interface-over-type-literal -export type firstClassModuleWithTypeEquations = { readonly out: (_1:o) => o; readonly Inner: { readonly inn: (_1:i) => i } }; - -export const convert: (x:FirstClassModules_firstClassModule) => FirstClassModules_firstClassModule = TestFirstClassModulesBS.convert; - -export const convertInterface: (x:FirstClassModulesInterface_firstClassModule) => FirstClassModulesInterface_firstClassModule = TestFirstClassModulesBS.convertInterface; - -export const convertRecord: (x:FirstClassModulesInterface_record) => FirstClassModulesInterface_record = TestFirstClassModulesBS.convertRecord; - -export const convertFirstClassModuleWithTypeEquations: (x:{ readonly out: ((_1:T1) => T1); readonly Inner: { readonly inn: ((_1:T2) => T2) } }) => { readonly out: (_1:T1) => T1; readonly Inner: { readonly inn: (_1:T2) => T2 } } = TestFirstClassModulesBS.convertFirstClassModuleWithTypeEquations; diff --git a/examples/deadcode/src/TestFirstClassModules.res b/examples/deadcode/src/TestFirstClassModules.res deleted file mode 100644 index 87abb8d1..00000000 --- a/examples/deadcode/src/TestFirstClassModules.res +++ /dev/null @@ -1,31 +0,0 @@ -@genType -let convert = (x: FirstClassModules.firstClassModule) => x - -@genType -let convertInterface = (x: FirstClassModulesInterface.firstClassModule) => x - -@genType -let convertRecord = (x: FirstClassModulesInterface.record) => x - -module type MT = { - type outer - let out: outer => outer - - module Inner: { - type inner - let inn: inner => inner - } -} - -@genType -type firstClassModuleWithTypeEquations<'i, 'o> = module(MT with - type Inner.inner = 'i - and type outer = 'o -) - -@genType -let convertFirstClassModuleWithTypeEquations = ( - type o i, - x: module(MT with type Inner.inner = i and type outer = o), -) => x - diff --git a/examples/deadcode/src/TestImmutableArray.bs.js b/examples/deadcode/src/TestImmutableArray.bs.js deleted file mode 100644 index 21d5965a..00000000 --- a/examples/deadcode/src/TestImmutableArray.bs.js +++ /dev/null @@ -1,23 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Belt_Array from "rescript/lib/es6/belt_Array.js"; -import * as ImmutableArray from "./ImmutableArray.bs.js"; - -function testImmutableArrayGet(arr) { - return ImmutableArray.$$Array.get(arr, 3); -} - -function testBeltArrayGet(arr) { - return Belt_Array.get(arr, 3); -} - -function testBeltArraySet(arr) { - return Belt_Array.set(arr, 3, 4); -} - -export { - testImmutableArrayGet , - testBeltArrayGet , - testBeltArraySet , -} -/* No side effect */ diff --git a/examples/deadcode/src/TestImmutableArray.gen.tsx b/examples/deadcode/src/TestImmutableArray.gen.tsx deleted file mode 100644 index acb9f91d..00000000 --- a/examples/deadcode/src/TestImmutableArray.gen.tsx +++ /dev/null @@ -1,9 +0,0 @@ -/* TypeScript file generated from TestImmutableArray.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as TestImmutableArrayBS__Es6Import from './TestImmutableArray.bs'; -const TestImmutableArrayBS: any = TestImmutableArrayBS__Es6Import; - -export const testImmutableArrayGet: (arr:ReadonlyArray) => (null | undefined | T1) = TestImmutableArrayBS.testImmutableArrayGet; diff --git a/examples/deadcode/src/TestImmutableArray.res b/examples/deadcode/src/TestImmutableArray.res deleted file mode 100644 index 03176dad..00000000 --- a/examples/deadcode/src/TestImmutableArray.res +++ /dev/null @@ -1,21 +0,0 @@ -@genType -let testImmutableArrayGet = arr => { - open ImmutableArray - arr[3] -} - -/* - type error - let testImmutableArraySet = arr => ImmutableArray.(arr[3] = 4); - */ - -let testBeltArrayGet = arr => { - open Belt - arr[3] -} - -let testBeltArraySet = arr => { - open Belt - arr[3] = 4 -} - diff --git a/examples/deadcode/src/TestImport.bs.js b/examples/deadcode/src/TestImport.bs.js deleted file mode 100644 index e44fb630..00000000 --- a/examples/deadcode/src/TestImport.bs.js +++ /dev/null @@ -1,28 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Caml_option from "rescript/lib/es6/caml_option.js"; -import * as TestImportGen from "./TestImport.gen"; - -var innerStuffContents = TestImportGen.innerStuffContents; - -var innerStuffContentsAsEmptyObject = TestImportGen.innerStuffContentsAsEmptyObject; - -var valueStartingWithUpperCaseLetter = TestImportGen.valueStartingWithUpperCaseLetter; - -var defaultValue = TestImportGen.defaultValue; - -function make(prim0, prim1, prim2) { - return TestImportGen.make(prim0, prim1 !== undefined ? Caml_option.valFromOption(prim1) : undefined, prim2); -} - -var defaultValue2 = TestImportGen.defaultValue2; - -export { - innerStuffContentsAsEmptyObject , - innerStuffContents , - valueStartingWithUpperCaseLetter , - defaultValue , - make , - defaultValue2 , -} -/* innerStuffContents Not a pure module */ diff --git a/examples/deadcode/src/TestImport.gen.tsx b/examples/deadcode/src/TestImport.gen.tsx deleted file mode 100644 index a25e5dd3..00000000 --- a/examples/deadcode/src/TestImport.gen.tsx +++ /dev/null @@ -1,57 +0,0 @@ -/* TypeScript file generated from TestImport.res by genType. */ -/* eslint-disable import/first */ - - -import {TopLevelClass as innerStuffContentsNotChecked} from './exportNestedValues'; - -import {TopLevelClass as innerStuffContentsAsEmptyObjectNotChecked} from './exportNestedValues'; - -import {ValueStartingWithUpperCaseLetter as valueStartingWithUpperCaseLetterNotChecked} from './exportNestedValues'; - -import {default as defaultValueNotChecked} from './exportNestedValues'; - -import {TopLevelClass as makeNotChecked} from './MyBanner'; - -import {default as defaultValue2NotChecked} from './exportNestedValues'; - -// In case of type error, check the type of 'innerStuffContents' in 'TestImport.re' and './exportNestedValues'. -export const innerStuffContentsTypeChecked: { readonly x: number } = innerStuffContentsNotChecked.MiddleLevelElements.stuff.InnerStuff.innerStuffContents; - -// Export 'innerStuffContents' early to allow circular import from the '.bs.js' file. -export const innerStuffContents: unknown = innerStuffContentsTypeChecked as { readonly x: number }; - -// In case of type error, check the type of 'innerStuffContentsAsEmptyObject' in 'TestImport.re' and './exportNestedValues'. -export const innerStuffContentsAsEmptyObjectTypeChecked: {} = innerStuffContentsAsEmptyObjectNotChecked.MiddleLevelElements.stuff.InnerStuff.innerStuffContents; - -// Export 'innerStuffContentsAsEmptyObject' early to allow circular import from the '.bs.js' file. -export const innerStuffContentsAsEmptyObject: unknown = innerStuffContentsAsEmptyObjectTypeChecked as {}; - -// In case of type error, check the type of 'valueStartingWithUpperCaseLetter' in 'TestImport.re' and './exportNestedValues'. -export const valueStartingWithUpperCaseLetterTypeChecked: string = valueStartingWithUpperCaseLetterNotChecked; - -// Export 'valueStartingWithUpperCaseLetter' early to allow circular import from the '.bs.js' file. -export const valueStartingWithUpperCaseLetter: unknown = valueStartingWithUpperCaseLetterTypeChecked as string; - -// In case of type error, check the type of 'defaultValue' in 'TestImport.re' and './exportNestedValues'. -export const defaultValueTypeChecked: number = defaultValueNotChecked; - -// Export 'defaultValue' early to allow circular import from the '.bs.js' file. -export const defaultValue: unknown = defaultValueTypeChecked as number; - -// In case of type error, check the type of 'make' in 'TestImport.re' and './MyBanner'. -export const makeTypeChecked: (_1:{ readonly show: boolean; readonly message?: message }, _2:a) => JSX.Element = makeNotChecked.MiddleLevelElements.MyBannerInternal; - -// Export 'make' early to allow circular import from the '.bs.js' file. -export const make: unknown = function (Argshow: any, Argmessage: any, Arg2: any) { - const result = makeTypeChecked({show:Argshow, message:Argmessage}, Arg2); - return result -} as (_1:{ readonly show: boolean; readonly message?: message }, _2:a) => JSX.Element; - -// In case of type error, check the type of 'defaultValue2' in 'TestImport.re' and './exportNestedValues'. -export const defaultValue2TypeChecked: number = defaultValue2NotChecked; - -// Export 'defaultValue2' early to allow circular import from the '.bs.js' file. -export const defaultValue2: unknown = defaultValue2TypeChecked as number; - -// tslint:disable-next-line:interface-over-type-literal -export type message = { readonly text: string }; diff --git a/examples/deadcode/src/TestImport.res b/examples/deadcode/src/TestImport.res deleted file mode 100644 index 41d33716..00000000 --- a/examples/deadcode/src/TestImport.res +++ /dev/null @@ -1,30 +0,0 @@ -@genType.import(( - "./exportNestedValues", - "TopLevelClass.MiddleLevelElements.stuff.InnerStuff.innerStuffContents", -)) -external innerStuffContents: {"x": int} = "innerStuffContents" - -@genType.import(( - "./exportNestedValues", - "TopLevelClass.MiddleLevelElements.stuff.InnerStuff.innerStuffContents", -)) -external innerStuffContentsAsEmptyObject: {.} = "innerStuffContentsAsEmptyObject" - -let innerStuffContents = innerStuffContents - -@genType.import(("./exportNestedValues", "ValueStartingWithUpperCaseLetter")) -external valueStartingWithUpperCaseLetter: string = "valueStartingWithUpperCaseLetter" - -@genType.import(("./exportNestedValues", "default")) -external defaultValue: int = "defaultValue" - -@genType -type message = {text: string} - -@genType.import(("./MyBanner", "TopLevelClass.MiddleLevelElements.MyBannerInternal")) -external make: (~show: bool, ~message: option=?, 'a) => React.element = "make" - -let make = make - -@genType.import(("./exportNestedValues", "default")) -external defaultValue2: int = "defaultValue2" diff --git a/examples/deadcode/src/TestModuleAliases.bs.js b/examples/deadcode/src/TestModuleAliases.bs.js deleted file mode 100644 index cde0007a..00000000 --- a/examples/deadcode/src/TestModuleAliases.bs.js +++ /dev/null @@ -1,44 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function testInner1(x) { - return x; -} - -function testInner1Expanded(x) { - return x; -} - -function testInner2(x) { - return x; -} - -function testInner2Expanded(x) { - return x; -} - -var OtherFile; - -var OtherFileAlias; - -var OuterAlias; - -var OtherFile1; - -var Outer2; - -var Inner2; - -export { - OtherFile , - OtherFileAlias , - OuterAlias , - OtherFile1 , - Outer2 , - Inner2 , - testInner1 , - testInner1Expanded , - testInner2 , - testInner2Expanded , -} -/* No side effect */ diff --git a/examples/deadcode/src/TestModuleAliases.gen.tsx b/examples/deadcode/src/TestModuleAliases.gen.tsx deleted file mode 100644 index 2f6f331f..00000000 --- a/examples/deadcode/src/TestModuleAliases.gen.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/* TypeScript file generated from TestModuleAliases.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as TestModuleAliasesBS__Es6Import from './TestModuleAliases.bs'; -const TestModuleAliasesBS: any = TestModuleAliasesBS__Es6Import; - -import type {InnerAlias_inner as ModuleAliases2_InnerAlias_inner} from './ModuleAliases2.gen'; - -import type {Outer_Inner_inner as ModuleAliases2_Outer_Inner_inner} from './ModuleAliases2.gen'; - -import type {Outer_outer as ModuleAliases2_Outer_outer} from './ModuleAliases2.gen'; - -import type {record as ModuleAliases2_record} from './ModuleAliases2.gen'; - -// tslint:disable-next-line:interface-over-type-literal -export type record = ModuleAliases2_record; - -// tslint:disable-next-line:interface-over-type-literal -export type record2 = ModuleAliases2_record; - -// tslint:disable-next-line:interface-over-type-literal -export type outer = ModuleAliases2_Outer_outer; - -// tslint:disable-next-line:interface-over-type-literal -export type outer2 = ModuleAliases2_Outer_outer; - -// tslint:disable-next-line:interface-over-type-literal -export type my2 = ModuleAliases2_Outer_Inner_inner; - -// tslint:disable-next-line:interface-over-type-literal -export type inner1 = ModuleAliases2_InnerAlias_inner; - -// tslint:disable-next-line:interface-over-type-literal -export type inner2 = ModuleAliases2_Outer_Inner_inner; - -export const testInner1: (x:inner1) => inner1 = TestModuleAliasesBS.testInner1; - -export const testInner1Expanded: (x:ModuleAliases2_InnerAlias_inner) => ModuleAliases2_InnerAlias_inner = TestModuleAliasesBS.testInner1Expanded; - -export const testInner2: (x:inner2) => inner2 = TestModuleAliasesBS.testInner2; - -export const testInner2Expanded: (x:ModuleAliases2_Outer_Inner_inner) => ModuleAliases2_Outer_Inner_inner = TestModuleAliasesBS.testInner2Expanded; diff --git a/examples/deadcode/src/TestModuleAliases.res b/examples/deadcode/src/TestModuleAliases.res deleted file mode 100644 index 324df349..00000000 --- a/examples/deadcode/src/TestModuleAliases.res +++ /dev/null @@ -1,42 +0,0 @@ -module OtherFile = ModuleAliases2 -module OtherFileAlias = OtherFile - -@genType -type record = OtherFile.record - -@genType -type record2 = OtherFileAlias.record - -module OuterAlias = OtherFile.Outer - -@genType -type outer = OtherFileAlias.Outer.outer - -@genType -type outer2 = OuterAlias.outer - -module OtherFile1 = OtherFile -module Outer2 = OtherFile1.Outer -module Inner2 = Outer2.Inner - -@genType -type my2 = Inner2.inner - -@genType -type inner1 = OtherFile.InnerAlias.inner - -@genType -type inner2 = OtherFile.Outer.Inner.inner - -@genType -let testInner1 = (x: inner1) => x - -@genType -let testInner1Expanded = (x: OtherFile.InnerAlias.inner) => x - -@genType -let testInner2 = (x: inner2) => x - -@genType -let testInner2Expanded = (x: OtherFile.Outer.Inner.inner) => x - diff --git a/examples/deadcode/src/TestOptArg.bs.js b/examples/deadcode/src/TestOptArg.bs.js deleted file mode 100644 index a1b4e89d..00000000 --- a/examples/deadcode/src/TestOptArg.bs.js +++ /dev/null @@ -1,43 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as OptArg from "./OptArg.bs.js"; - -console.log(OptArg.bar(undefined, 3, 3, 4)); - -function foo(xOpt, y) { - var x = xOpt !== undefined ? xOpt : 3; - return x + y | 0; -} - -function bar(param) { - var x = 12; - return x + 3 | 0; -} - -console.log(bar); - -function notSuppressesOptArgs(xOpt, yOpt, zOpt, w) { - var x = xOpt !== undefined ? xOpt : 1; - var y = yOpt !== undefined ? yOpt : 2; - var z = zOpt !== undefined ? zOpt : 3; - return ((x + y | 0) + z | 0) + w | 0; -} - -notSuppressesOptArgs(undefined, undefined, undefined, 3); - -function liveSuppressesOptArgs(xOpt, yOpt, zOpt, w) { - var x = xOpt !== undefined ? xOpt : 1; - var y = yOpt !== undefined ? yOpt : 2; - var z = zOpt !== undefined ? zOpt : 3; - return ((x + y | 0) + z | 0) + w | 0; -} - -liveSuppressesOptArgs(3, undefined, undefined, 3); - -export { - foo , - bar , - notSuppressesOptArgs , - liveSuppressesOptArgs , -} -/* Not a pure module */ diff --git a/examples/deadcode/src/TestOptArg.res b/examples/deadcode/src/TestOptArg.res deleted file mode 100644 index ef38c7c7..00000000 --- a/examples/deadcode/src/TestOptArg.res +++ /dev/null @@ -1,16 +0,0 @@ -Js.log(OptArg.bar(~z=3, ~y=3, 4)) - -let foo = (~x=3, y) => x + y - -let bar = () => foo(~x=12, 3) - -Js.log(bar) - -let notSuppressesOptArgs = (~x=1, ~y=2, ~z=3, w) => x + y + z + w - -let _ = notSuppressesOptArgs(3) - -@live -let liveSuppressesOptArgs = (~x=1, ~y=2, ~z=3, w) => x + y + z + w - -let _ = liveSuppressesOptArgs(~x=3, 3) diff --git a/examples/deadcode/src/TestPromise.bs.js b/examples/deadcode/src/TestPromise.bs.js deleted file mode 100644 index 2b2f7f4a..00000000 --- a/examples/deadcode/src/TestPromise.bs.js +++ /dev/null @@ -1,16 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Js_promise from "rescript/lib/es6/js_promise.js"; - -function convert(param) { - return Js_promise.then_((function (param) { - return Promise.resolve({ - result: param.s - }); - }), param); -} - -export { - convert , -} -/* No side effect */ diff --git a/examples/deadcode/src/TestPromise.gen.tsx b/examples/deadcode/src/TestPromise.gen.tsx deleted file mode 100644 index 886c024b..00000000 --- a/examples/deadcode/src/TestPromise.gen.tsx +++ /dev/null @@ -1,18 +0,0 @@ -/* TypeScript file generated from TestPromise.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as TestPromiseBS__Es6Import from './TestPromise.bs'; -const TestPromiseBS: any = TestPromiseBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type promise = Promise; - -// tslint:disable-next-line:interface-over-type-literal -export type fromPayload = { readonly x: number; readonly s: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type toPayload = { readonly result: string }; - -export const convert: (_1:Promise) => Promise = TestPromiseBS.convert; diff --git a/examples/deadcode/src/TestPromise.res b/examples/deadcode/src/TestPromise.res deleted file mode 100644 index 0bd3ddd6..00000000 --- a/examples/deadcode/src/TestPromise.res +++ /dev/null @@ -1,15 +0,0 @@ -@genType -type promise<'a> = Js.Promise.t<'a> - -@genType -type fromPayload = { - x: int, - s: string, -} - -@genType -type toPayload = {result: string} - -@genType -let convert = Js.Promise.then_(({s}) => Js.Promise.resolve({result: s})) - diff --git a/examples/deadcode/src/ToSuppress.bs.js b/examples/deadcode/src/ToSuppress.bs.js deleted file mode 100644 index 31cc9868..00000000 --- a/examples/deadcode/src/ToSuppress.bs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var toSuppress = 0; - -export { - toSuppress , -} -/* No side effect */ diff --git a/examples/deadcode/src/ToSuppress.res b/examples/deadcode/src/ToSuppress.res deleted file mode 100644 index e21f4645..00000000 --- a/examples/deadcode/src/ToSuppress.res +++ /dev/null @@ -1 +0,0 @@ -let toSuppress = 0 diff --git a/examples/deadcode/src/TransitiveType1.bs.js b/examples/deadcode/src/TransitiveType1.bs.js deleted file mode 100644 index 5fda66be..00000000 --- a/examples/deadcode/src/TransitiveType1.bs.js +++ /dev/null @@ -1,16 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function convert(x) { - return x; -} - -function convertAlias(x) { - return x; -} - -export { - convert , - convertAlias , -} -/* No side effect */ diff --git a/examples/deadcode/src/TransitiveType1.gen.tsx b/examples/deadcode/src/TransitiveType1.gen.tsx deleted file mode 100644 index c8ae43db..00000000 --- a/examples/deadcode/src/TransitiveType1.gen.tsx +++ /dev/null @@ -1,21 +0,0 @@ -/* TypeScript file generated from TransitiveType1.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as TransitiveType1BS__Es6Import from './TransitiveType1.bs'; -const TransitiveType1BS: any = TransitiveType1BS__Es6Import; - -import type {t2Alias as TransitiveType2_t2Alias} from './TransitiveType2.gen'; - -import type {t2 as TransitiveType2_t2} from './TransitiveType2.gen'; - -export const convert: (x:TransitiveType2_t2) => TransitiveType2_t2 = function (Arg1: any) { - const result = TransitiveType1BS.convert((Arg1 == null ? undefined : Arg1)); - return result -}; - -export const convertAlias: (x:TransitiveType2_t2Alias) => TransitiveType2_t2Alias = function (Arg1: any) { - const result = TransitiveType1BS.convertAlias((Arg1 == null ? undefined : Arg1)); - return result -}; diff --git a/examples/deadcode/src/TransitiveType1.res b/examples/deadcode/src/TransitiveType1.res deleted file mode 100644 index 617a7e5b..00000000 --- a/examples/deadcode/src/TransitiveType1.res +++ /dev/null @@ -1,6 +0,0 @@ -@genType -let convert = (x: TransitiveType2.t2) => x - -@genType -let convertAlias = (x: TransitiveType2.t2Alias) => x - diff --git a/examples/deadcode/src/TransitiveType2.bs.js b/examples/deadcode/src/TransitiveType2.bs.js deleted file mode 100644 index cf62be6e..00000000 --- a/examples/deadcode/src/TransitiveType2.bs.js +++ /dev/null @@ -1,11 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function convertT2(x) { - return x; -} - -export { - convertT2 , -} -/* No side effect */ diff --git a/examples/deadcode/src/TransitiveType2.gen.tsx b/examples/deadcode/src/TransitiveType2.gen.tsx deleted file mode 100644 index 4d14e487..00000000 --- a/examples/deadcode/src/TransitiveType2.gen.tsx +++ /dev/null @@ -1,11 +0,0 @@ -/* TypeScript file generated from TransitiveType2.res by genType. */ -/* eslint-disable import/first */ - - -import type {t3 as TransitiveType3_t3} from './TransitiveType3.gen'; - -// tslint:disable-next-line:interface-over-type-literal -export type t2 = (null | undefined | TransitiveType3_t3); - -// tslint:disable-next-line:interface-over-type-literal -export type t2Alias = t2; diff --git a/examples/deadcode/src/TransitiveType2.res b/examples/deadcode/src/TransitiveType2.res deleted file mode 100644 index 694ac8da..00000000 --- a/examples/deadcode/src/TransitiveType2.res +++ /dev/null @@ -1,8 +0,0 @@ -@genType -type t2 = option - -@genType -type t2Alias = t2 - -let convertT2 = (x: t2) => x - diff --git a/examples/deadcode/src/TransitiveType3.bs.js b/examples/deadcode/src/TransitiveType3.bs.js deleted file mode 100644 index 77e8c2ac..00000000 --- a/examples/deadcode/src/TransitiveType3.bs.js +++ /dev/null @@ -1,11 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function convertT3(x) { - return x; -} - -export { - convertT3 , -} -/* No side effect */ diff --git a/examples/deadcode/src/TransitiveType3.gen.tsx b/examples/deadcode/src/TransitiveType3.gen.tsx deleted file mode 100644 index a377a845..00000000 --- a/examples/deadcode/src/TransitiveType3.gen.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/* TypeScript file generated from TransitiveType3.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as TransitiveType3BS__Es6Import from './TransitiveType3.bs'; -const TransitiveType3BS: any = TransitiveType3BS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type t3 = { readonly i: number; readonly s: string }; - -export const convertT3: (x:t3) => t3 = TransitiveType3BS.convertT3; diff --git a/examples/deadcode/src/TransitiveType3.res b/examples/deadcode/src/TransitiveType3.res deleted file mode 100644 index c7e5a162..00000000 --- a/examples/deadcode/src/TransitiveType3.res +++ /dev/null @@ -1,9 +0,0 @@ -@genType -type t3 = { - i: int, - s: string, -} - -@genType -let convertT3 = (x: t3) => x - diff --git a/examples/deadcode/src/TransitiveTypes.ml b/examples/deadcode/src/TransitiveTypes.ml new file mode 100644 index 00000000..6e3dfd79 --- /dev/null +++ b/examples/deadcode/src/TransitiveTypes.ml @@ -0,0 +1,11 @@ +type leaf = Leaf of int + +type wrapper = Wrapper of leaf + +type unused_leaf = UnusedLeaf of string + +type unused_wrapper = UnusedWrapper of unused_leaf + +let live_value = Wrapper (Leaf 1) + +let dead_value = UnusedWrapper (UnusedLeaf "unused") diff --git a/examples/deadcode/src/Tuples.bs.js b/examples/deadcode/src/Tuples.bs.js deleted file mode 100644 index 6aaff47b..00000000 --- a/examples/deadcode/src/Tuples.bs.js +++ /dev/null @@ -1,72 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Belt_Option from "rescript/lib/es6/belt_Option.js"; - -function testTuple(param) { - return param[0] + param[1] | 0; -} - -function computeArea(param) { - return Math.imul(Math.imul(param[0], param[1]), Belt_Option.mapWithDefault(param[2], 1, (function (n) { - return n; - }))); -} - -function computeAreaWithIdent(param) { - return Math.imul(Math.imul(param[0], param[1]), Belt_Option.mapWithDefault(param[2], 1, (function (n) { - return n; - }))); -} - -function computeAreaNoConverters(param) { - return Math.imul(param[0], param[1]); -} - -function coord2d(x, y) { - return [ - x, - y, - undefined - ]; -} - -function getFirstName(param) { - return param[0].name; -} - -function marry(first, second) { - return [ - first, - second - ]; -} - -function changeSecondAge(param) { - var second = param[1]; - return [ - param[0], - { - name: second.name, - age: second.age + 1 | 0 - } - ]; -} - -var origin = [ - 0, - 0, - 0 -]; - -export { - testTuple , - origin , - computeArea , - computeAreaWithIdent , - computeAreaNoConverters , - coord2d , - getFirstName , - marry , - changeSecondAge , -} -/* No side effect */ diff --git a/examples/deadcode/src/Tuples.gen.tsx b/examples/deadcode/src/Tuples.gen.tsx deleted file mode 100644 index d5fb83f8..00000000 --- a/examples/deadcode/src/Tuples.gen.tsx +++ /dev/null @@ -1,53 +0,0 @@ -/* TypeScript file generated from Tuples.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as Curry__Es6Import from 'rescript/lib/es6/curry.js'; -const Curry: any = Curry__Es6Import; - -// @ts-ignore: Implicit any on import -import * as TuplesBS__Es6Import from './Tuples.bs'; -const TuplesBS: any = TuplesBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type coord = [number, number, (null | undefined | number)]; - -// tslint:disable-next-line:interface-over-type-literal -export type coord2 = [number, number, (null | undefined | number)]; - -// tslint:disable-next-line:interface-over-type-literal -export type person = { readonly name: string; readonly age: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type couple = [person, person]; - -export const testTuple: (param:[number, number]) => number = TuplesBS.testTuple; - -export const origin: [number, number, (null | undefined | number)] = TuplesBS.origin; - -export const computeArea: (param:[number, number, (null | undefined | number)]) => number = function (Arg1: any) { - const result = TuplesBS.computeArea([Arg1[0], Arg1[1], (Arg1[2] == null ? undefined : Arg1[2])]); - return result -}; - -export const computeAreaWithIdent: (param:coord) => number = function (Arg1: any) { - const result = TuplesBS.computeAreaWithIdent([Arg1[0], Arg1[1], (Arg1[2] == null ? undefined : Arg1[2])]); - return result -}; - -export const computeAreaNoConverters: (param:[number, number]) => number = TuplesBS.computeAreaNoConverters; - -export const coord2d: (x:T1, y:T2) => [T1, T2, (null | undefined | T3)] = function (Arg1: any, Arg2: any) { - const result = Curry._2(TuplesBS.coord2d, Arg1, Arg2); - return result -}; - -export const getFirstName: (param:couple) => string = TuplesBS.getFirstName; - -export const marry: (first:person, second:person) => couple = function (Arg1: any, Arg2: any) { - const result = Curry._2(TuplesBS.marry, Arg1, Arg2); - return result -}; - -export const changeSecondAge: (param:couple) => couple = TuplesBS.changeSecondAge; diff --git a/examples/deadcode/src/Tuples.res b/examples/deadcode/src/Tuples.res deleted file mode 100644 index d2194a49..00000000 --- a/examples/deadcode/src/Tuples.res +++ /dev/null @@ -1,50 +0,0 @@ -open Belt - -@genType -let testTuple = ((a, b)) => a + b - -@genType -type coord = (int, int, option) - -@genType -let origin = (0, 0, Some(0)) - -@genType -let computeArea = ((x, y, z)) => { - open Option - x * y * z->mapWithDefault(1, n => n) -} - -@genType -let computeAreaWithIdent = ((x, y, z): coord) => { - open Option - x * y * z->mapWithDefault(1, n => n) -} - -@genType -let computeAreaNoConverters = ((x: int, y: int)) => x * y - -@genType -let coord2d = (x, y) => (x, y, None) - -@genType -type coord2 = (int, int, Js.Nullable.t) - -@genType -type person = { - name: string, - age: int, -} - -@genType -type couple = (person, person) - -@genType -let getFirstName = ((first, _second): couple) => first.name - -@genType -let marry = (first, second): couple => (first, second) - -@genType -let changeSecondAge = ((first, second): couple): couple => (first, {...second, age: second.age + 1}) - diff --git a/examples/deadcode/src/TypeParams1.bs.js b/examples/deadcode/src/TypeParams1.bs.js deleted file mode 100644 index 99313ed0..00000000 --- a/examples/deadcode/src/TypeParams1.bs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var exportSomething = 10; - -export { - exportSomething , -} -/* No side effect */ diff --git a/examples/deadcode/src/TypeParams1.gen.tsx b/examples/deadcode/src/TypeParams1.gen.tsx deleted file mode 100644 index 30cb971b..00000000 --- a/examples/deadcode/src/TypeParams1.gen.tsx +++ /dev/null @@ -1,6 +0,0 @@ -/* TypeScript file generated from TypeParams1.res by genType. */ -/* eslint-disable import/first */ - - -// tslint:disable-next-line:interface-over-type-literal -export type ocaml_array = a[]; diff --git a/examples/deadcode/src/TypeParams1.res b/examples/deadcode/src/TypeParams1.res deleted file mode 100644 index 71331ca9..00000000 --- a/examples/deadcode/src/TypeParams1.res +++ /dev/null @@ -1,5 +0,0 @@ -@gentype -type ocaml_array<'a> = array<'a> - -let exportSomething = 10 - diff --git a/examples/deadcode/src/TypeParams2.bs.js b/examples/deadcode/src/TypeParams2.bs.js deleted file mode 100644 index 99313ed0..00000000 --- a/examples/deadcode/src/TypeParams2.bs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -var exportSomething = 10; - -export { - exportSomething , -} -/* No side effect */ diff --git a/examples/deadcode/src/TypeParams2.gen.tsx b/examples/deadcode/src/TypeParams2.gen.tsx deleted file mode 100644 index 976be0eb..00000000 --- a/examples/deadcode/src/TypeParams2.gen.tsx +++ /dev/null @@ -1,14 +0,0 @@ -/* TypeScript file generated from TypeParams2.res by genType. */ -/* eslint-disable import/first */ - - -import type {ocaml_array as TypeParams1_ocaml_array} from './TypeParams1.gen'; - -// tslint:disable-next-line:interface-over-type-literal -export type item = { readonly id: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type items = TypeParams1_ocaml_array; - -// tslint:disable-next-line:interface-over-type-literal -export type items2 = item[]; diff --git a/examples/deadcode/src/TypeParams2.res b/examples/deadcode/src/TypeParams2.res deleted file mode 100644 index ed998b30..00000000 --- a/examples/deadcode/src/TypeParams2.res +++ /dev/null @@ -1,11 +0,0 @@ -@genType -type item = {id: int} - -@genType -type items = TypeParams1.ocaml_array - -@genType -type items2 = array - -let exportSomething = 10 - diff --git a/examples/deadcode/src/TypeParams3.bs.js b/examples/deadcode/src/TypeParams3.bs.js deleted file mode 100644 index 26ba8962..00000000 --- a/examples/deadcode/src/TypeParams3.bs.js +++ /dev/null @@ -1,16 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function test(x) { - return x; -} - -function test2(x) { - return x; -} - -export { - test , - test2 , -} -/* No side effect */ diff --git a/examples/deadcode/src/TypeParams3.gen.tsx b/examples/deadcode/src/TypeParams3.gen.tsx deleted file mode 100644 index 5347b93e..00000000 --- a/examples/deadcode/src/TypeParams3.gen.tsx +++ /dev/null @@ -1,15 +0,0 @@ -/* TypeScript file generated from TypeParams3.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as TypeParams3BS__Es6Import from './TypeParams3.bs'; -const TypeParams3BS: any = TypeParams3BS__Es6Import; - -import type {items2 as TypeParams2_items2} from './TypeParams2.gen'; - -import type {items as TypeParams2_items} from './TypeParams2.gen'; - -export const test: (x:TypeParams2_items) => TypeParams2_items = TypeParams3BS.test; - -export const test2: (x:TypeParams2_items2) => TypeParams2_items2 = TypeParams3BS.test2; diff --git a/examples/deadcode/src/TypeParams3.res b/examples/deadcode/src/TypeParams3.res deleted file mode 100644 index 173eea5d..00000000 --- a/examples/deadcode/src/TypeParams3.res +++ /dev/null @@ -1,6 +0,0 @@ -@genType -let test = (x: TypeParams2.items) => x - -@genType -let test2 = (x: TypeParams2.items2) => x - diff --git a/examples/deadcode/src/Types.bs.js b/examples/deadcode/src/Types.bs.js deleted file mode 100644 index c0f2f472..00000000 --- a/examples/deadcode/src/Types.bs.js +++ /dev/null @@ -1,107 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as List from "rescript/lib/es6/list.js"; -import * as Curry from "rescript/lib/es6/curry.js"; -import * as Belt_Option from "rescript/lib/es6/belt_Option.js"; - -function swap(tree) { - return { - label: tree.label, - left: Belt_Option.map(tree.right, swap), - right: Belt_Option.map(tree.left, swap) - }; -} - -function selfRecursiveConverter(param) { - return param.self; -} - -function mutuallyRecursiveConverter(param) { - return param.b; -} - -function testFunctionOnOptionsAsArgument(a, foo) { - return Curry._1(foo, a); -} - -function jsonStringify(prim) { - return JSON.stringify(prim); -} - -function testConvertNull(x) { - return x; -} - -var testMarshalFields = { - rec: "rec", - _switch: "_switch", - switch: "switch", - __: "__", - _: "_", - foo: "foo", - _foo: "_foo", - Uppercase: "Uppercase", - _Uppercase: "_Uppercase" -}; - -function setMatch(x) { - x.match = 34; -} - -function testInstantiateTypeParameter(x) { - return x; -} - -var currentTime = new Date(); - -var optFunction = (function (param) { - return 3; - }); - -var ObjectId = {}; - -var someIntList = { - hd: 1, - tl: { - hd: 2, - tl: { - hd: 3, - tl: /* [] */0 - } - } -}; - -var map = List.map; - -var stringT = "a"; - -var jsStringT = "a"; - -var jsString2T = "a"; - -var i64Const = [ - 0, - 34 -]; - -export { - someIntList , - map , - swap , - selfRecursiveConverter , - mutuallyRecursiveConverter , - testFunctionOnOptionsAsArgument , - stringT , - jsStringT , - jsString2T , - jsonStringify , - testConvertNull , - testMarshalFields , - setMatch , - testInstantiateTypeParameter , - currentTime , - i64Const , - optFunction , - ObjectId , -} -/* currentTime Not a pure module */ diff --git a/examples/deadcode/src/Types.gen.tsx b/examples/deadcode/src/Types.gen.tsx deleted file mode 100644 index 40070540..00000000 --- a/examples/deadcode/src/Types.gen.tsx +++ /dev/null @@ -1,147 +0,0 @@ -/* TypeScript file generated from Types.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as Curry__Es6Import from 'rescript/lib/es6/curry.js'; -const Curry: any = Curry__Es6Import; - -// @ts-ignore: Implicit any on import -import * as TypesBS__Es6Import from './Types.bs'; -const TypesBS: any = TypesBS__Es6Import; - -import type {Dict_t as Js_Dict_t} from './Js.gen'; - -import type {Json_t as Js_Json_t} from './Js.gen'; - -import type {list} from './RescriptPervasives.gen'; - -// tslint:disable-next-line:interface-over-type-literal -export type t = number; - -// tslint:disable-next-line:interface-over-type-literal -export type typeWithVars = - { tag: "A"; value: [x, y] } - | { tag: "B"; value: z }; - -// tslint:disable-next-line:interface-over-type-literal -export type tree = { - readonly label: string; - readonly left?: tree; - readonly right?: tree -}; - -// tslint:disable-next-line:interface-over-type-literal -export type selfRecursive = { readonly self: selfRecursive }; - -// tslint:disable-next-line:interface-over-type-literal -export type mutuallyRecursiveA = { readonly b: mutuallyRecursiveB }; - -// tslint:disable-next-line:interface-over-type-literal -export type mutuallyRecursiveB = { readonly a: mutuallyRecursiveA }; - -// tslint:disable-next-line:max-classes-per-file -// tslint:disable-next-line:class-name -export abstract class opaqueVariant { protected opaque!: any }; /* simulate opaque types */ - -// tslint:disable-next-line:interface-over-type-literal -export type twice = [a, a]; - -// tslint:disable-next-line:interface-over-type-literal -export type genTypeMispelled = number; - -// tslint:disable-next-line:interface-over-type-literal -export type dictString = Js_Dict_t; - -// tslint:disable-next-line:interface-over-type-literal -export type nullOrString = (null | string); - -// tslint:disable-next-line:interface-over-type-literal -export type nullOrString2 = (null | string); - -// tslint:disable-next-line:interface-over-type-literal -export type record = { readonly i: number; readonly s: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type decorator = (_1:a) => b; - -// tslint:disable-next-line:interface-over-type-literal -export type marshalFields = { - readonly rec: string; - readonly _switch: string; - readonly switch: string; - readonly __: string; - readonly _: string; - readonly foo: string; - readonly _foo: string; - readonly Uppercase: string; - readonly _Uppercase: string -}; - -// tslint:disable-next-line:interface-over-type-literal -export type marshalMutableField = { match: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type ocaml_array = a[]; - -// tslint:disable-next-line:interface-over-type-literal -export type someRecord = { readonly id: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type instantiateTypeParameter = ocaml_array; - -// tslint:disable-next-line:interface-over-type-literal -export type vector = [a, a]; -export type Vector = vector; - -// tslint:disable-next-line:interface-over-type-literal -export type date = Date; - -// tslint:disable-next-line:interface-over-type-literal -export type i64A = [number, number]; - -// tslint:disable-next-line:interface-over-type-literal -export type i64B = [number, number]; - -// tslint:disable-next-line:interface-over-type-literal -export type ObjectId_t = number; - -export const someIntList: list = TypesBS.someIntList; - -export const map: (_1:((_1:T1) => T2), _2:list) => list = function (Arg1: any, Arg2: any) { - const result = Curry._2(TypesBS.map, Arg1, Arg2); - return result -}; - -export const swap: (tree:tree) => tree = TypesBS.swap; - -export const selfRecursiveConverter: (param:selfRecursive) => selfRecursive = TypesBS.selfRecursiveConverter; - -export const mutuallyRecursiveConverter: (param:mutuallyRecursiveA) => mutuallyRecursiveB = TypesBS.mutuallyRecursiveConverter; - -export const testFunctionOnOptionsAsArgument: (a:(null | undefined | a), foo:((_1:(null | undefined | a)) => T1)) => T1 = function (Arg1: any, Arg2: any) { - const result = Curry._2(TypesBS.testFunctionOnOptionsAsArgument, (Arg1 == null ? undefined : Arg1), Arg2); - return result -}; - -export const stringT: string = TypesBS.stringT; - -export const jsStringT: string = TypesBS.jsStringT; - -export const jsString2T: string = TypesBS.jsString2T; - -export const jsonStringify: (_1:Js_Json_t) => string = TypesBS.jsonStringify; - -export const testConvertNull: (x:(null | record)) => (null | record) = TypesBS.testConvertNull; - -export const testMarshalFields: marshalFields = TypesBS.testMarshalFields; - -export const setMatch: (x:marshalMutableField) => void = TypesBS.setMatch; - -export const testInstantiateTypeParameter: (x:instantiateTypeParameter) => instantiateTypeParameter = TypesBS.testInstantiateTypeParameter; - -export const currentTime: Date = TypesBS.currentTime; - -export const i64Const: i64B = TypesBS.i64Const; - -export const optFunction: (null | undefined | (() => number)) = TypesBS.optFunction; diff --git a/examples/deadcode/src/Types.ml b/examples/deadcode/src/Types.ml new file mode 100644 index 00000000..afb70ba0 --- /dev/null +++ b/examples/deadcode/src/Types.ml @@ -0,0 +1,17 @@ +type live_record = { id : int } + +type live_variant = + | LiveA + | LiveB of live_record + +type exposed_but_unused = string + +type dead_record = { dead_id : int } + +type dead_variant = + | DeadA + | DeadB of dead_record + +let make_live id = LiveB { id } + +let make_dead id = DeadB { dead_id = id } diff --git a/examples/deadcode/src/Types.mli b/examples/deadcode/src/Types.mli new file mode 100644 index 00000000..0fb9e8f7 --- /dev/null +++ b/examples/deadcode/src/Types.mli @@ -0,0 +1,9 @@ +type live_record + +type live_variant = + | LiveA + | LiveB of live_record + +type exposed_but_unused + +val make_live : int -> live_variant diff --git a/examples/deadcode/src/Types.res b/examples/deadcode/src/Types.res deleted file mode 100644 index 3ce309c1..00000000 --- a/examples/deadcode/src/Types.res +++ /dev/null @@ -1,168 +0,0 @@ -@genType -type t = int - -@genType -let someIntList = list{1, 2, 3} - -@genType -let map = List.map - -@genType -type typeWithVars<'x, 'y, 'z> = - | A('x, 'y) - | B('z) - -@genType -type rec tree = {"label": string, "left": option, "right": option} - -/* - * A tree is a recursive type which does not require any conversion (JS object). - * All is well. - */ -@genType -let rec swap = (tree: tree): tree => - { - "label": tree["label"], - "left": tree["right"]->Belt.Option.map(swap), - "right": tree["left"]->Belt.Option.map(swap), - } - -@genType -type rec selfRecursive = {self: selfRecursive} - -@genType -type rec mutuallyRecursiveA = {b: mutuallyRecursiveB} -and mutuallyRecursiveB = {a: mutuallyRecursiveA} - -/* - * This is a recursive type which requires conversion (a record). - * Only a shallow conversion of the top-level element is performed. - */ -@genType -let selfRecursiveConverter = ({self}) => self - -/* - * This is a mutually recursive type which requires conversion (a record). - * Only a shallow conversion of the two top-level elements is performed. - */ -@genType -let mutuallyRecursiveConverter = ({b}) => b - -@genType -let testFunctionOnOptionsAsArgument = (a: option<'a>, foo) => foo(a) - -@genType.opaque -type opaqueVariant = - | A - | B - -@genType -let stringT: String.t = "a" - -@genType -let jsStringT: Js.String.t = "a" - -@genType -let jsString2T: Js.String2.t = "a" - -@genType -type twice<'a> = ('a, 'a) - -@gentype -type genTypeMispelled = int - -@genType -type dictString = Js.Dict.t - -@genType -let jsonStringify = Js.Json.stringify - -@genType -type nullOrString = Js.Null.t - -@genType -type nullOrString2 = Js.null - -type record = { - i: int, - s: string, -} - -@genType -let testConvertNull = (x: Js.Null.t) => x - -@genType -type decorator<'a, 'b> = 'a => 'b constraint 'a = int constraint 'b = _ => _ - -/* Bucklescript's marshaling rules. */ -@genType -type marshalFields = { - "_rec": string, - "_switch": string, - "switch": string, - "__": string, - "___": string, - "foo__": string, - "_foo__": string, - "_Uppercase": string, - "_Uppercase__": string, -} - -@genType -let testMarshalFields: marshalFields = { - "_rec": "rec", - "_switch" /* reason keywords are not recognized */: "_switch", - "switch": "switch", - "__": "__", - "___": "_", - "foo__": "foo", - "_foo__": "_foo", - "_Uppercase": "Uppercase", - "_Uppercase__": "_Uppercase", -} - -@genType -type marshalMutableField = {@set "_match": int} - -@genType -let setMatch = (x: marshalMutableField) => x["_match"] = 34 - -type ocaml_array<'a> = array<'a> - -// This should be considered annotated automatically. -type someRecord = {id: int} - -type instantiateTypeParameter = ocaml_array - -@genType -let testInstantiateTypeParameter = (x: instantiateTypeParameter) => x - -@genType @genType.as("Vector") -type vector<'a> = ('a, 'a) - -@genType -type date = Js.Date.t - -@genType -let currentTime = Js.Date.make() - -@genType -type i64A = Int64.t - -@genType -type i64B = int64 - -@genType -let i64Const: i64B = 34L - -@genType -let optFunction = Some(() => 3) - -module ObjectId: { - @genType - type t = int -} = { - type t = int - let x = 1 -} - diff --git a/examples/deadcode/src/Unboxed.bs.js b/examples/deadcode/src/Unboxed.bs.js deleted file mode 100644 index 1793e161..00000000 --- a/examples/deadcode/src/Unboxed.bs.js +++ /dev/null @@ -1,16 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function testV1(x) { - return x; -} - -function r2Test(x) { - return x; -} - -export { - testV1 , - r2Test , -} -/* No side effect */ diff --git a/examples/deadcode/src/Unboxed.gen.tsx b/examples/deadcode/src/Unboxed.gen.tsx deleted file mode 100644 index 2df57b84..00000000 --- a/examples/deadcode/src/Unboxed.gen.tsx +++ /dev/null @@ -1,23 +0,0 @@ -/* TypeScript file generated from Unboxed.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as UnboxedBS__Es6Import from './Unboxed.bs'; -const UnboxedBS: any = UnboxedBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type v1 = number; - -// tslint:disable-next-line:interface-over-type-literal -export type v2 = number; - -// tslint:disable-next-line:interface-over-type-literal -export type r1 = number; - -// tslint:disable-next-line:interface-over-type-literal -export type r2 = string; - -export const testV1: (x:v1) => v1 = UnboxedBS.testV1; - -export const r2Test: (x:r2) => r2 = UnboxedBS.r2Test; diff --git a/examples/deadcode/src/Unboxed.res b/examples/deadcode/src/Unboxed.res deleted file mode 100644 index 208a6456..00000000 --- a/examples/deadcode/src/Unboxed.res +++ /dev/null @@ -1,18 +0,0 @@ -@genType @ocaml.unboxed -type v1 = A(int) - -@genType @unboxed -type v2 = A(int) - -@genType -let testV1 = (x: v1) => x - -@genType @unboxed -type r1 = {x: int} - -@genType @ocaml.unboxed -type r2 = B({g: string}) - -@genType -let r2Test = (x: r2) => x - diff --git a/examples/deadcode/src/Uncurried.bs.js b/examples/deadcode/src/Uncurried.bs.js deleted file mode 100644 index 5878196f..00000000 --- a/examples/deadcode/src/Uncurried.bs.js +++ /dev/null @@ -1,75 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Curry from "rescript/lib/es6/curry.js"; - -function uncurried0() { - return ""; -} - -function uncurried1(x) { - return String(x); -} - -function uncurried2(x, y) { - return String(x) + y; -} - -function uncurried3(x, y, z) { - return String(x) + (y + String(z)); -} - -function curried3(x, y, z) { - return String(x) + (y + String(z)); -} - -function callback(cb) { - return String(Curry._1(cb, undefined)); -} - -function callback2(auth) { - return Curry._1(auth.login, undefined); -} - -function callback2U(auth) { - return auth.loginU(); -} - -function sumU(n, m) { - console.log("sumU 2nd arg", m, "result", n + m | 0); -} - -function sumU2(n) { - return function (m) { - console.log("sumU2 2nd arg", m, "result", n + m | 0); - }; -} - -function sumCurried(n) { - console.log("sumCurried 1st arg", n); - return function (m) { - console.log("sumCurried 2nd arg", m, "result", n + m | 0); - }; -} - -function sumLblCurried(s, n) { - console.log(s, "sumLblCurried 1st arg", n); - return function (m) { - console.log("sumLblCurried 2nd arg", m, "result", n + m | 0); - }; -} - -export { - uncurried0 , - uncurried1 , - uncurried2 , - uncurried3 , - curried3 , - callback , - callback2 , - callback2U , - sumU , - sumU2 , - sumCurried , - sumLblCurried , -} -/* No side effect */ diff --git a/examples/deadcode/src/Uncurried.gen.tsx b/examples/deadcode/src/Uncurried.gen.tsx deleted file mode 100644 index c848ac67..00000000 --- a/examples/deadcode/src/Uncurried.gen.tsx +++ /dev/null @@ -1,62 +0,0 @@ -/* TypeScript file generated from Uncurried.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as Curry__Es6Import from 'rescript/lib/es6/curry.js'; -const Curry: any = Curry__Es6Import; - -// @ts-ignore: Implicit any on import -import * as UncurriedBS__Es6Import from './Uncurried.bs'; -const UncurriedBS: any = UncurriedBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type u0 = () => string; - -// tslint:disable-next-line:interface-over-type-literal -export type u1 = (_1:number) => string; - -// tslint:disable-next-line:interface-over-type-literal -export type u2 = (_1:number, _2:string) => string; - -// tslint:disable-next-line:interface-over-type-literal -export type u3 = (_1:number, _2:string, _3:number) => string; - -// tslint:disable-next-line:interface-over-type-literal -export type auth = { readonly login: () => string }; - -// tslint:disable-next-line:interface-over-type-literal -export type authU = { readonly loginU: () => string }; - -export const uncurried0: () => string = UncurriedBS.uncurried0; - -export const uncurried1: (_1:number) => string = UncurriedBS.uncurried1; - -export const uncurried2: (_1:number, _2:string) => string = UncurriedBS.uncurried2; - -export const uncurried3: (_1:number, _2:string, _3:number) => string = UncurriedBS.uncurried3; - -export const curried3: (x:number, y:string, z:number) => string = function (Arg1: any, Arg2: any, Arg3: any) { - const result = Curry._3(UncurriedBS.curried3, Arg1, Arg2, Arg3); - return result -}; - -export const callback: (cb:(() => number)) => string = UncurriedBS.callback; - -export const callback2: (auth:auth) => string = UncurriedBS.callback2; - -export const callback2U: (auth:authU) => string = UncurriedBS.callback2U; - -export const sumU: (_1:number, _2:number) => void = UncurriedBS.sumU; - -export const sumU2: (_1:number) => (_1:number) => void = UncurriedBS.sumU2; - -export const sumCurried: (n:number, _2:number) => void = function (Arg1: any, Arg2: any) { - const result = Curry._2(UncurriedBS.sumCurried, Arg1, Arg2); - return result -}; - -export const sumLblCurried: (s:string, _2:{ readonly n: number; readonly m: number }) => void = function (Arg1: any, Arg2: any) { - const result = Curry._3(UncurriedBS.sumLblCurried, Arg1, Arg2.n, Arg2.m); - return result -}; diff --git a/examples/deadcode/src/Uncurried.res b/examples/deadcode/src/Uncurried.res deleted file mode 100644 index cf85f9d9..00000000 --- a/examples/deadcode/src/Uncurried.res +++ /dev/null @@ -1,57 +0,0 @@ -@genType -type u0 = (. unit) => string - -@genType -type u1 = (. int) => string - -@genType -type u2 = (. int, string) => string - -@genType -type u3 = (. int, string, int) => string - -@genType -let uncurried0 = (. ()) => "" - -@genType -let uncurried1 = (. x) => x |> string_of_int - -@genType -let uncurried2 = (. x, y) => (x |> string_of_int) ++ y - -@genType -let uncurried3 = (. x, y, z) => (x |> string_of_int) ++ (y ++ (z |> string_of_int)) - -@genType -let curried3 = (x, y, z) => (x |> string_of_int) ++ (y ++ (z |> string_of_int)) - -@genType -let callback = cb => cb() |> string_of_int - -type auth = {login: unit => string} -type authU = {loginU: (. unit) => string} - -@genType -let callback2 = auth => auth.login() - -@genType -let callback2U = auth => auth.loginU(.) - -@genType -let sumU = (. n, m) => Js.log4("sumU 2nd arg", m, "result", n + m) - -@genType -let sumU2 = (. n, . m) => Js.log4("sumU2 2nd arg", m, "result", n + m) - -@genType -let sumCurried = n => { - Js.log2("sumCurried 1st arg", n) - m => Js.log4("sumCurried 2nd arg", m, "result", n + m) -} - -@genType -let sumLblCurried = (s: string, ~n) => { - Js.log3(s, "sumLblCurried 1st arg", n) - (~m) => Js.log4("sumLblCurried 2nd arg", m, "result", n + m) -} - diff --git a/examples/deadcode/src/Unison.bs.js b/examples/deadcode/src/Unison.bs.js deleted file mode 100644 index 53235c6e..00000000 --- a/examples/deadcode/src/Unison.bs.js +++ /dev/null @@ -1,75 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function group(breakOpt, doc) { - var $$break = breakOpt !== undefined ? breakOpt : /* IfNeed */0; - return { - break: $$break, - doc: doc - }; -} - -function fits(_w, _stack) { - while(true) { - var stack = _stack; - var w = _w; - if (w < 0) { - return false; - } - if (!stack) { - return true; - } - _stack = stack._1; - _w = w - stack._0.doc.length | 0; - continue ; - }; -} - -function toString(width, stack) { - if (!stack) { - return ""; - } - var stack$1 = stack._1; - var match = stack._0; - var doc = match.doc; - switch (match.break) { - case /* IfNeed */0 : - return ( - fits(width, stack$1) ? "fits " : "no " - ) + toString(width - 1 | 0, stack$1); - case /* Never */1 : - return "never " + (doc + toString(width - 1 | 0, stack$1)); - case /* Always */2 : - return "always " + (doc + toString(width - 1 | 0, stack$1)); - - } -} - -toString(80, /* Empty */0); - -var $$break = /* Never */1; - -toString(80, /* Cons */{ - _0: { - break: $$break, - doc: "abc" - }, - _1: /* Empty */0 - }); - -var $$break$1 = /* Always */2; - -toString(80, /* Cons */{ - _0: { - break: $$break$1, - doc: "d" - }, - _1: /* Empty */0 - }); - -export { - group , - fits , - toString , -} -/* Not a pure module */ diff --git a/examples/deadcode/src/Unison.res b/examples/deadcode/src/Unison.res deleted file mode 100644 index a2e5698e..00000000 --- a/examples/deadcode/src/Unison.res +++ /dev/null @@ -1,40 +0,0 @@ -// Exmple of several DCE checks operating in unison - -type break = - | IfNeed - | Never - | Always - -type t = { - break: break, - doc: string, -} - -type rec stack = - | Empty - | Cons(t, stack) - -let group = (~break=IfNeed, doc) => {break: break, doc: doc} - -let rec fits = (w, stack) => - switch stack { - | _ when w < 0 => false - | Empty => true - | Cons({doc}, stack) => fits(w - String.length(doc), stack) - } - -let rec toString = (~width, stack) => - switch stack { - | Cons({break, doc}, stack) => - switch break { - | IfNeed => (fits(width, stack) ? "fits " : "no ") ++ (stack |> toString(~width=width - 1)) - | Never => "never " ++ (doc ++ (stack |> toString(~width=width - 1))) - | Always => "always " ++ (doc ++ (stack |> toString(~width=width - 1))) - } - | Empty => "" - } - -toString(~width=80, Empty) -toString(~width=80, Cons(group(~break=Never, "abc"), Empty)) -toString(~width=80, Cons(group(~break=Always, "d"), Empty)) - diff --git a/examples/deadcode/src/UseImportJsValue.bs.js b/examples/deadcode/src/UseImportJsValue.bs.js deleted file mode 100644 index c954b150..00000000 --- a/examples/deadcode/src/UseImportJsValue.bs.js +++ /dev/null @@ -1,16 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function useGetProp(x) { - return x.getProp() + 1 | 0; -} - -function useTypeImportedInOtherModule(x) { - return x; -} - -export { - useGetProp , - useTypeImportedInOtherModule , -} -/* No side effect */ diff --git a/examples/deadcode/src/UseImportJsValue.gen.tsx b/examples/deadcode/src/UseImportJsValue.gen.tsx deleted file mode 100644 index f9e5f95d..00000000 --- a/examples/deadcode/src/UseImportJsValue.gen.tsx +++ /dev/null @@ -1,15 +0,0 @@ -/* TypeScript file generated from UseImportJsValue.res by genType. */ -/* eslint-disable import/first */ - - -// @ts-ignore: Implicit any on import -import * as UseImportJsValueBS__Es6Import from './UseImportJsValue.bs'; -const UseImportJsValueBS: any = UseImportJsValueBS__Es6Import; - -import type {AbsoluteValue_t as ImportJsValue_AbsoluteValue_t} from './ImportJsValue.gen'; - -import type {stringFunction as ImportJsValue_stringFunction} from './ImportJsValue.gen'; - -export const useGetProp: (x:ImportJsValue_AbsoluteValue_t) => number = UseImportJsValueBS.useGetProp; - -export const useTypeImportedInOtherModule: (x:ImportJsValue_stringFunction) => ImportJsValue_stringFunction = UseImportJsValueBS.useTypeImportedInOtherModule; diff --git a/examples/deadcode/src/UseImportJsValue.res b/examples/deadcode/src/UseImportJsValue.res deleted file mode 100644 index 3cc2e2c8..00000000 --- a/examples/deadcode/src/UseImportJsValue.res +++ /dev/null @@ -1,6 +0,0 @@ -@genType -let useGetProp = (x: ImportJsValue.AbsoluteValue.t) => x->ImportJsValue.AbsoluteValue.getProp + 1 - -@genType -let useTypeImportedInOtherModule = (x: ImportJsValue.stringFunction) => x - diff --git a/examples/deadcode/src/Variants.bs.js b/examples/deadcode/src/Variants.bs.js deleted file mode 100644 index 9f7f047d..00000000 --- a/examples/deadcode/src/Variants.bs.js +++ /dev/null @@ -1,106 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function isWeekend(x) { - if (x === "sunday") { - return true; - } else { - return x === "saturday"; - } -} - -function onlySunday(param) { - -} - -function swap(x) { - if (x === "sunday") { - return "saturday"; - } else { - return "sunday"; - } -} - -function testConvert(x) { - return x; -} - -function testConvert2(x) { - return x; -} - -function testConvert3(x) { - return x; -} - -function testConvert2to3(x) { - return x; -} - -function id1(x) { - return x; -} - -function id2(x) { - return x; -} - -function polyWithOpt(foo) { - if (foo === "bar") { - return ; - } else if (foo !== "baz") { - return { - NAME: "One", - VAL: foo - }; - } else { - return { - NAME: "Two", - VAL: 1 - }; - } -} - -function restResult1(x) { - return x; -} - -function restResult2(x) { - return x; -} - -function restResult3(x) { - return x; -} - -var monday = "monday"; - -var saturday = "saturday"; - -var sunday = "sunday"; - -var fortytwoOK = "fortytwo"; - -var fortytwoBAD = "fortytwo"; - -export { - isWeekend , - monday , - saturday , - sunday , - onlySunday , - swap , - testConvert , - fortytwoOK , - fortytwoBAD , - testConvert2 , - testConvert3 , - testConvert2to3 , - id1 , - id2 , - polyWithOpt , - restResult1 , - restResult2 , - restResult3 , -} -/* No side effect */ diff --git a/examples/deadcode/src/Variants.gen.tsx b/examples/deadcode/src/Variants.gen.tsx deleted file mode 100644 index 0ec146df..00000000 --- a/examples/deadcode/src/Variants.gen.tsx +++ /dev/null @@ -1,144 +0,0 @@ -/* TypeScript file generated from Variants.res by genType. */ -/* eslint-disable import/first */ - - -const $$toJS7517284: { [key: string]: any } = {"type_": "type", "module_": "module", "fortytwo": "THIS IS DIFFERENT"}; - -const $$toRE7517284: { [key: string]: any } = {"type": "type_", "module": "module_", "THIS IS DIFFERENT": "fortytwo"}; - -const $$toJS508922110: { [key: string]: any } = {"type_": "type", "module_": "module", "fortytwo": "42"}; - -const $$toRE508922110: { [key: string]: any } = {"type": "type_", "module": "module_", "42": "fortytwo"}; - -const $$toJS930788378: { [key: string]: any } = {"x": "x", "x1": "same"}; - -const $$toRE930788378: { [key: string]: any } = {"x": "x", "same": "x1"}; - -const $$toJS1061900109: { [key: string]: any } = {"x": "x", "x2": "same"}; - -const $$toRE1061900109: { [key: string]: any } = {"x": "x", "same": "x2"}; - -// @ts-ignore: Implicit any on import -import * as VariantsBS__Es6Import from './Variants.bs'; -const VariantsBS: any = VariantsBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type weekday = - "monday" - | "tuesday" - | "wednesday" - | "thursday" - | "friday" - | "saturday" - | "sunday"; - -// tslint:disable-next-line:interface-over-type-literal -export type testGenTypeAs = "type" | "module" | "42"; - -// tslint:disable-next-line:interface-over-type-literal -export type testGenTypeAs2 = "type" | "module" | "42"; - -// tslint:disable-next-line:interface-over-type-literal -export type testGenTypeAs3 = "type" | "module" | "THIS IS DIFFERENT"; - -// tslint:disable-next-line:interface-over-type-literal -export type x1 = "x" | "same"; - -// tslint:disable-next-line:interface-over-type-literal -export type x2 = "x" | "same"; - -// tslint:disable-next-line:interface-over-type-literal -export type type_ = "type"; -export type type = type_; - -// tslint:disable-next-line:interface-over-type-literal -export type result1 = - { tag: "Ok"; value: a } - | { tag: "Error"; value: b }; - -// tslint:disable-next-line:interface-over-type-literal -export type result2 = - { tag: "Ok"; value: a } - | { tag: "Error"; value: b }; - -// tslint:disable-next-line:interface-over-type-literal -export type result3 = - { tag: "Ok"; value: a } - | { tag: "Error"; value: b }; - -export const isWeekend: (x:weekday) => boolean = VariantsBS.isWeekend; - -export const monday: "monday" = VariantsBS.monday; - -export const saturday: "saturday" = VariantsBS.saturday; - -export const sunday: "sunday" = VariantsBS.sunday; - -export const onlySunday: (param:"sunday") => void = VariantsBS.onlySunday; - -export const swap: (x:"saturday" | "sunday") => "saturday" | "sunday" = VariantsBS.swap; - -export const testConvert: (x:testGenTypeAs) => testGenTypeAs = function (Arg1: any) { - const result = VariantsBS.testConvert($$toRE508922110[Arg1]); - return $$toJS508922110[result] -}; - -export const fortytwoOK: testGenTypeAs = $$toJS508922110[VariantsBS.fortytwoOK]; - -export const fortytwoBAD: "fortytwo" = VariantsBS.fortytwoBAD; - -export const testConvert2: (x:testGenTypeAs2) => testGenTypeAs2 = function (Arg1: any) { - const result = VariantsBS.testConvert2($$toRE508922110[Arg1]); - return $$toJS508922110[result] -}; - -export const testConvert3: (x:testGenTypeAs3) => testGenTypeAs3 = function (Arg1: any) { - const result = VariantsBS.testConvert3($$toRE7517284[Arg1]); - return $$toJS7517284[result] -}; - -export const testConvert2to3: (x:testGenTypeAs2) => testGenTypeAs3 = function (Arg1: any) { - const result = VariantsBS.testConvert2to3($$toRE508922110[Arg1]); - return $$toJS7517284[result] -}; - -export const id1: (x:x1) => x1 = function (Arg1: any) { - const result = VariantsBS.id1($$toRE930788378[Arg1]); - return $$toJS930788378[result] -}; - -export const id2: (x:x2) => x2 = function (Arg1: any) { - const result = VariantsBS.id2($$toRE1061900109[Arg1]); - return $$toJS1061900109[result] -}; - -export const polyWithOpt: (foo:string) => (null | undefined | ( - { NAME: "One"; VAL: string } - | { NAME: "Two"; VAL: number })) = VariantsBS.polyWithOpt; - -export const restResult1: (x:result1) => result1 = function (Arg1: any) { - const result = VariantsBS.restResult1(Arg1.tag==="Ok" - ? {TAG: 0, _0:Arg1.value} as any - : {TAG: 1, _0:Arg1.value} as any); - return result.TAG===0 - ? {tag:"Ok", value:result._0} - : {tag:"Error", value:result._0} -}; - -export const restResult2: (x:result2) => result2 = function (Arg1: any) { - const result = VariantsBS.restResult2(Arg1.tag==="Ok" - ? {TAG: 0, _0:Arg1.value} as any - : {TAG: 1, _0:Arg1.value} as any); - return result.TAG===0 - ? {tag:"Ok", value:result._0} - : {tag:"Error", value:result._0} -}; - -export const restResult3: (x:result3) => result3 = function (Arg1: any) { - const result = VariantsBS.restResult3(Arg1.tag==="Ok" - ? {TAG: 0, _0:Arg1.value} as any - : {TAG: 1, _0:Arg1.value} as any); - return result.TAG===0 - ? {tag:"Ok", value:result._0} - : {tag:"Error", value:result._0} -}; diff --git a/examples/deadcode/src/Variants.res b/examples/deadcode/src/Variants.res deleted file mode 100644 index 241ff945..00000000 --- a/examples/deadcode/src/Variants.res +++ /dev/null @@ -1,119 +0,0 @@ -@genType -type weekday = [ - | #monday - | #tuesday - | #wednesday - | #thursday - | #friday - | #saturday - | #sunday -] - -@genType -let isWeekend = (x: weekday) => - switch x { - | #saturday - | #sunday => true - | _ => false - } - -@genType -let monday = #monday -@genType -let saturday = #saturday -@genType -let sunday = #sunday - -@genType -let onlySunday = (_: [#sunday]) => () - -@genType -let swap = x => - switch x { - | #sunday => #saturday - | #saturday => #sunday - } - -@genType -type testGenTypeAs = [ - | @genType.as("type") #type_ - | @genType.as("module") #module_ - | @genType.as("42") #fortytwo -] - -@genType -let testConvert = (x: testGenTypeAs) => x - -@genType -let fortytwoOK: testGenTypeAs = #fortytwo - -/* Exporting this is BAD: type inference means it's not mapped to "42" */ -@genType -let fortytwoBAD = #fortytwo - -@genType -type testGenTypeAs2 = [ - | @genType.as("type") #type_ - | @genType.as("module") #module_ - | @genType.as("42") #fortytwo -] - -/* Since testGenTypeAs2 is the same type as testGenTypeAs1, - share the conversion map. */ -@genType -let testConvert2 = (x: testGenTypeAs2) => x - -@genType -type testGenTypeAs3 = [ - | @genType.as("type") #type_ - | @genType.as("module") #module_ - | @genType.as("THIS IS DIFFERENT") #fortytwo -] - -/* Since testGenTypeAs3 has a different representation: - use a new conversion map. */ -@genType -let testConvert3 = (x: testGenTypeAs3) => x - -/* This converts between testGenTypeAs2 and testGenTypeAs3 */ -@genType -let testConvert2to3 = (x: testGenTypeAs2): testGenTypeAs3 => x - -@genType -type x1 = [#x | @genType.as("same") #x1] - -@genType -type x2 = [#x | @genType.as("same") #x2] - -@genType -let id1 = (x: x1) => x - -@genType -let id2 = (x: x2) => x - -@genType @genType.as("type") -type type_ = | @genType.as("type") Type - -@genType -let polyWithOpt = foo => foo === "bar" ? None : foo !== "baz" ? Some(#One(foo)) : Some(#Two(1)) - -@genType -type result1<'a, 'b> = - | Ok('a) - | Error('b) - -@genType -type result2<'a, 'b> = result<'a, 'b> - -@genType -type result3<'a, 'b> = Belt.Result.t<'a, 'b> - -@genType -let restResult1 = (x: result1) => x - -@genType -let restResult2 = (x: result2) => x - -@genType -let restResult3 = (x: result3) => x - diff --git a/examples/deadcode/src/VariantsWithPayload.bs.js b/examples/deadcode/src/VariantsWithPayload.bs.js deleted file mode 100644 index 0894e9bc..00000000 --- a/examples/deadcode/src/VariantsWithPayload.bs.js +++ /dev/null @@ -1,96 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function testWithPayload(x) { - return x; -} - -function printVariantWithPayload(x) { - if (typeof x !== "object") { - if (x === "a") { - console.log("printVariantWithPayload: a"); - } else if (x === "b") { - console.log("printVariantWithPayload: b"); - } else if (x === "Half") { - console.log("printVariantWithPayload: Half"); - } else if (x === "True") { - console.log("printVariantWithPayload: True"); - } else { - console.log("printVariantWithPayload: Twenty"); - } - return ; - } - var payload = x.VAL; - console.log("printVariantWithPayload x:", payload.x, "y:", payload.y); -} - -function testManyPayloads(x) { - return x; -} - -function printManyPayloads(x) { - var variant = x.NAME; - if (variant === "two") { - var match = x.VAL; - console.log("printManyPayloads two:", match[0], match[1]); - return ; - } - if (variant === "three") { - var payload = x.VAL; - console.log("printManyPayloads x:", payload.x, "y:", payload.y); - return ; - } - console.log("printManyPayloads one:", x.VAL); -} - -function testSimpleVariant(x) { - return x; -} - -function testVariantWithPayloads(x) { - return x; -} - -function printVariantWithPayloads(x) { - if (typeof x === "number") { - console.log("printVariantWithPayloads", "A"); - return ; - } - switch (x.TAG | 0) { - case /* B */0 : - console.log("printVariantWithPayloads", "B(" + (String(x._0) + ")")); - return ; - case /* C */1 : - console.log("printVariantWithPayloads", "C(" + (String(x._0) + (", " + (String(x._1) + ")")))); - return ; - case /* D */2 : - var match = x._0; - console.log("printVariantWithPayloads", "D((" + (String(match[0]) + (", " + (String(match[1]) + "))")))); - return ; - case /* E */3 : - console.log("printVariantWithPayloads", "E(" + (String(x._0) + (", " + (x._1 + (", " + (String(x._2) + ")")))))); - return ; - - } -} - -function testVariant1Int(x) { - return x; -} - -function testVariant1Object(x) { - return x; -} - -export { - testWithPayload , - printVariantWithPayload , - testManyPayloads , - printManyPayloads , - testSimpleVariant , - testVariantWithPayloads , - printVariantWithPayloads , - testVariant1Int , - testVariant1Object , -} -/* No side effect */ diff --git a/examples/deadcode/src/VariantsWithPayload.gen.tsx b/examples/deadcode/src/VariantsWithPayload.gen.tsx deleted file mode 100644 index 214f9c07..00000000 --- a/examples/deadcode/src/VariantsWithPayload.gen.tsx +++ /dev/null @@ -1,141 +0,0 @@ -/* TypeScript file generated from VariantsWithPayload.res by genType. */ -/* eslint-disable import/first */ - - -const $$toJS13337556: { [key: string]: any } = {"0": "ARenamed"}; - -const $$toRE13337556: { [key: string]: any } = {"ARenamed": 0}; - -const $$toJS346759412: { [key: string]: any } = {"0": "A", "1": "B", "2": "C"}; - -const $$toRE346759412: { [key: string]: any } = {"A": 0, "B": 1, "C": 2}; - -const $$toJS435467058: { [key: string]: any } = {"a": "a", "b": "bRenamed", "True": true, "Twenty": 20, "Half": 0.5}; - -const $$toRE435467058: { [key: string]: any } = {"a": "a", "bRenamed": "b", "true": "True", "20": "Twenty", "0.5": "Half"}; - -// @ts-ignore: Implicit any on import -import * as VariantsWithPayloadBS__Es6Import from './VariantsWithPayload.bs'; -const VariantsWithPayloadBS: any = VariantsWithPayloadBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type payload = { readonly x: number; readonly y?: string }; - -// tslint:disable-next-line:interface-over-type-literal -export type withPayload = - "a" - | "bRenamed" - | true - | 20 - | 0.5 - | { NAME: "c"; VAL: payload }; - -// tslint:disable-next-line:interface-over-type-literal -export type manyPayloads = - { NAME: "oneRenamed"; VAL: number } - | { NAME: 2; VAL: [string, string] } - | { NAME: "three"; VAL: payload }; - -// tslint:disable-next-line:interface-over-type-literal -export type simpleVariant = "A" | "B" | "C"; - -// tslint:disable-next-line:interface-over-type-literal -export type variantWithPayloads = - "ARenamed" - | { tag: "B"; value: number } - | { tag: "C"; value: [number, number] } - | { tag: "D"; value: [number, number] } - | { tag: "E"; value: [number, string, number] }; - -// tslint:disable-next-line:interface-over-type-literal -export type variant1Int = { tag: "R"; value: number }; - -// tslint:disable-next-line:interface-over-type-literal -export type variant1Object = payload; - -export const testWithPayload: (x:withPayload) => withPayload = function (Arg1: any) { - const result = VariantsWithPayloadBS.testWithPayload(typeof(Arg1) === 'object' - ? {NAME: "c", VAL: Arg1.VAL} - : $$toRE435467058[Arg1.toString()]); - return typeof(result) === 'object' - ? {NAME:"c", VAL:result.VAL} - : $$toJS435467058[result] -}; - -export const printVariantWithPayload: (x:withPayload) => void = function (Arg1: any) { - const result = VariantsWithPayloadBS.printVariantWithPayload(typeof(Arg1) === 'object' - ? {NAME: "c", VAL: Arg1.VAL} - : $$toRE435467058[Arg1.toString()]); - return result -}; - -export const testManyPayloads: (x:manyPayloads) => manyPayloads = function (Arg1: any) { - const result = VariantsWithPayloadBS.testManyPayloads(Arg1.NAME==="oneRenamed" - ? {NAME: "one", VAL: Arg1.VAL} - : Arg1.NAME===2 - ? {NAME: "two", VAL: Arg1.VAL} - : {NAME: "three", VAL: Arg1.VAL}); - return result.NAME==="one" - ? {NAME:"oneRenamed", VAL:result.VAL} - : result.NAME==="two" - ? {NAME:2, VAL:result.VAL} - : {NAME:"three", VAL:result.VAL} -}; - -export const printManyPayloads: (x:manyPayloads) => void = function (Arg1: any) { - const result = VariantsWithPayloadBS.printManyPayloads(Arg1.NAME==="oneRenamed" - ? {NAME: "one", VAL: Arg1.VAL} - : Arg1.NAME===2 - ? {NAME: "two", VAL: Arg1.VAL} - : {NAME: "three", VAL: Arg1.VAL}); - return result -}; - -export const testSimpleVariant: (x:simpleVariant) => simpleVariant = function (Arg1: any) { - const result = VariantsWithPayloadBS.testSimpleVariant($$toRE346759412[Arg1]); - return $$toJS346759412[result] -}; - -export const testVariantWithPayloads: (x:variantWithPayloads) => variantWithPayloads = function (Arg1: any) { - const result = VariantsWithPayloadBS.testVariantWithPayloads(typeof(Arg1) === 'object' - ? Arg1.tag==="B" - ? {TAG: 0, _0:Arg1.value} as any - : Arg1.tag==="C" - ? {TAG: 1, _0:Arg1.value[0], _1:Arg1.value[1]} as any - : Arg1.tag==="D" - ? {TAG: 2, _0:Arg1.value} as any - : {TAG: 3, _0:Arg1.value[0], _1:Arg1.value[1], _2:Arg1.value[2]} as any - : $$toRE13337556[Arg1]); - return typeof(result) === 'object' - ? result.TAG===0 - ? {tag:"B", value:result._0} - : result.TAG===1 - ? {tag:"C", value:[result._0, result._1]} - : result.TAG===2 - ? {tag:"D", value:result._0} - : {tag:"E", value:[result._0, result._1, result._2]} - : $$toJS13337556[result] -}; - -export const printVariantWithPayloads: (x:variantWithPayloads) => void = function (Arg1: any) { - const result = VariantsWithPayloadBS.printVariantWithPayloads(typeof(Arg1) === 'object' - ? Arg1.tag==="B" - ? {TAG: 0, _0:Arg1.value} as any - : Arg1.tag==="C" - ? {TAG: 1, _0:Arg1.value[0], _1:Arg1.value[1]} as any - : Arg1.tag==="D" - ? {TAG: 2, _0:Arg1.value} as any - : {TAG: 3, _0:Arg1.value[0], _1:Arg1.value[1], _2:Arg1.value[2]} as any - : $$toRE13337556[Arg1]); - return result -}; - -export const testVariant1Int: (x:variant1Int) => variant1Int = function (Arg1: any) { - const result = VariantsWithPayloadBS.testVariant1Int({TAG: 0, _0:Arg1.value} as any); - return {tag:"R", value:result._0} -}; - -export const testVariant1Object: (x:variant1Object) => variant1Object = function (Arg1: any) { - const result = VariantsWithPayloadBS.testVariant1Object({TAG: 0, _0:Arg1} as any); - return result._0 -}; diff --git a/examples/deadcode/src/VariantsWithPayload.res b/examples/deadcode/src/VariantsWithPayload.res deleted file mode 100644 index 4da94ed5..00000000 --- a/examples/deadcode/src/VariantsWithPayload.res +++ /dev/null @@ -1,100 +0,0 @@ -type payload = { - x: int, - y: option, -} - -type withPayload = [ - | #a - | @genType.as("bRenamed") #b - | @genType.as(true) #True - | @genType.as(20) #Twenty - | @genType.as(0.5) #Half - | #c(payload) -] - -@genType -let testWithPayload = (x: withPayload) => x - -@genType -let printVariantWithPayload = (x: withPayload) => - switch x { - | #a => Js.log("printVariantWithPayload: a") - | #b => Js.log("printVariantWithPayload: b") - | #True => Js.log("printVariantWithPayload: True") - | #Twenty => Js.log("printVariantWithPayload: Twenty") - | #Half => Js.log("printVariantWithPayload: Half") - | #c(payload) => Js.log4("printVariantWithPayload x:", payload.x, "y:", payload.y) - } - -@genType -type manyPayloads = [ - | @genType.as("oneRenamed") #one(int) - | @genType.as(2) #two(string, string) - | #three(payload) -] - -@genType -let testManyPayloads = (x: manyPayloads) => x - -@genType -let printManyPayloads = (x: manyPayloads) => - switch x { - | #one(n) => Js.log2("printManyPayloads one:", n) - | #two(s1, s2) => Js.log3("printManyPayloads two:", s1, s2) - | #three(payload) => Js.log4("printManyPayloads x:", payload.x, "y:", payload.y) - } - -@genType -type simpleVariant = - | A - | B - | C - -@genType -let testSimpleVariant = (x: simpleVariant) => x - -@genType -type variantWithPayloads = - | @genType.as("ARenamed") A - | B(int) - | C(int, int) - | D((int, int)) - | E(int, string, int) - -@genType -let testVariantWithPayloads = (x: variantWithPayloads) => x - -@genType -let printVariantWithPayloads = x => - switch x { - | A => Js.log2("printVariantWithPayloads", "A") - | B(x) => Js.log2("printVariantWithPayloads", "B(" ++ (string_of_int(x) ++ ")")) - | C(x, y) => - Js.log2( - "printVariantWithPayloads", - "C(" ++ (string_of_int(x) ++ (", " ++ (string_of_int(y) ++ ")"))), - ) - | D((x, y)) => - Js.log2( - "printVariantWithPayloads", - "D((" ++ (string_of_int(x) ++ (", " ++ (string_of_int(y) ++ "))"))), - ) - | E(x, s, y) => - Js.log2( - "printVariantWithPayloads", - "E(" ++ (string_of_int(x) ++ (", " ++ (s ++ (", " ++ (string_of_int(y) ++ ")"))))), - ) - } - -@genType -type variant1Int = R(int) - -@genType -let testVariant1Int = (x: variant1Int) => x - -@genType -type variant1Object = R(payload) - -@genType -let testVariant1Object = (x: variant1Object) => x - diff --git a/examples/deadcode/src/deadcode.txt b/examples/deadcode/src/deadcode.txt index 5914a878..c3c5bffa 100644 --- a/examples/deadcode/src/deadcode.txt +++ b/examples/deadcode/src/deadcode.txt @@ -1,4523 +1,126 @@ - Scanning AutoAnnotate.cmt Source:AutoAnnotate.res - addVariantCaseDeclaration R AutoAnnotate.res:1:15 path:+AutoAnnotate.variant - addRecordLabelDeclaration variant AutoAnnotate.res:4:15 path:+AutoAnnotate.record - addRecordLabelDeclaration r2 AutoAnnotate.res:6:11 path:+AutoAnnotate.r2 - addRecordLabelDeclaration r3 AutoAnnotate.res:8:11 path:+AutoAnnotate.r3 - addRecordLabelDeclaration r4 AutoAnnotate.res:10:11 path:+AutoAnnotate.r4 - addVariantCaseDeclaration R2 AutoAnnotate.res:14:2 path:+AutoAnnotate.annotatedVariant - addVariantCaseDeclaration R4 AutoAnnotate.res:15:2 path:+AutoAnnotate.annotatedVariant - Scanning BootloaderResource.cmt Source:BootloaderResource.res - Scanning BucklescriptAnnotations.cmt Source:BucklescriptAnnotations.res - addValueDeclaration +bar BucklescriptAnnotations.res:25:4 path:+BucklescriptAnnotations - addValueDeclaration +f BucklescriptAnnotations.res:26:6 path:+BucklescriptAnnotations - addValueReference BucklescriptAnnotations.res:26:6 --> BucklescriptAnnotations.res:25:11 - addValueReference BucklescriptAnnotations.res:25:4 --> BucklescriptAnnotations.res:26:6 - Scanning ComponentAsProp.cmt Source:ComponentAsProp.res - addValueDeclaration +make ComponentAsProp.res:6:4 path:+ComponentAsProp - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: ComponentAsProp.res:7:3 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: ComponentAsProp.res:8:5 - addValueReference ComponentAsProp.res:9:6 --> ComponentAsProp.res:6:12 - addValueReference ComponentAsProp.res:10:6 --> ComponentAsProp.res:6:20 - addValueReference ComponentAsProp.res:12:24 --> ComponentAsProp.res:12:13 - addValueReference ComponentAsProp.res:13:16 --> React.res:3:0 - addValueReference ComponentAsProp.res:11:14 --> ComponentAsProp.res:6:34 - addValueReference ComponentAsProp.res:8:5 --> ReactDOMRe.res:8:0 - addValueReference ComponentAsProp.res:7:3 --> ReactDOMRe.res:8:0 - Scanning CreateErrorHandler1.cmt Source:CreateErrorHandler1.res - addValueDeclaration +notification CreateErrorHandler1.res:3:6 path:+CreateErrorHandler1.Error1 - addValueReference CreateErrorHandler1.res:3:6 --> CreateErrorHandler1.res:3:21 - addValueReference CreateErrorHandler1.res:3:6 --> CreateErrorHandler1.res:3:21 - addValueReference CreateErrorHandler1.res:8:0 --> ErrorHandler.resi:7:2 - addValueReference ErrorHandler.resi:3:2 --> CreateErrorHandler1.res:3:6 - Scanning CreateErrorHandler2.cmt Source:CreateErrorHandler2.res - addValueDeclaration +notification CreateErrorHandler2.res:3:6 path:+CreateErrorHandler2.Error2 - addValueReference CreateErrorHandler2.res:3:6 --> CreateErrorHandler2.res:3:21 - addValueReference ErrorHandler.resi:3:2 --> CreateErrorHandler2.res:3:6 - Scanning DeadCodeImplementation.cmt Source:DeadCodeImplementation.res - addValueDeclaration +x DeadCodeImplementation.res:2:6 path:+DeadCodeImplementation.M - addValueReference DeadCodeInterface.res:2:2 --> DeadCodeImplementation.res:2:6 - Scanning DeadCodeInterface.cmt Source:DeadCodeInterface.res - Scanning DeadExn.cmt Source:DeadExn.res - addValueDeclaration +eToplevel DeadExn.res:8:4 path:+DeadExn - addValueDeclaration +eInside DeadExn.res:10:4 path:+DeadExn - addExceptionDeclaration Etoplevel DeadExn.res:1:0 path:+DeadExn - addExceptionDeclaration Einside DeadExn.res:4:2 path:+DeadExn.Inside - addExceptionDeclaration DeadE DeadExn.res:7:0 path:+DeadExn - addValueReference DeadExn.res:8:4 --> DeadExn.res:1:0 - addTypeReference DeadExn.res:8:16 --> DeadExn.res:1:0 - addValueReference DeadExn.res:10:4 --> DeadExn.res:4:2 - addTypeReference DeadExn.res:10:14 --> DeadExn.res:4:2 - addValueReference DeadExn.res:12:7 --> DeadExn.res:10:4 - Scanning DeadExn.cmti Source:DeadExn.resi - Scanning DeadMl.cmt Source:DeadMl.ml - addValueDeclaration +thisSpansSeveralLines DeadMl.ml:3:8 path:+DeadMl.QQ - addValueDeclaration +thisIsInInterface DeadMl.ml:9:2 path:+DeadMl.AA - addValueDeclaration +thisHasSemicolons DeadMl.ml:15:4 path:+DeadMl - addValueDeclaration +version DeadMl.ml:26:6 path:+DeadMl.Bs_version - addValueDeclaration +header DeadMl.ml:26:27 path:+DeadMl.Bs_version - addValueDeclaration +package_name DeadMl.ml:26:47 path:+DeadMl.Bs_version - addValueDeclaration +map_split_opt DeadMl.ml:45:8 path:+DeadMl - addValueDeclaration +inline_threshold DeadMl.ml:56:4 path:+DeadMl - addValueDeclaration +dead1 DeadMl.ml:59:6 path:+DeadMl.Scope - addValueDeclaration +deadInner1 DeadMl.ml:62:8 path:+DeadMl.Scope.Inner1 - addValueDeclaration +liveInner2 DeadMl.ml:66:8 path:+DeadMl.Scope.Inner1 - addValueDeclaration +dead2 DeadMl.ml:69:6 path:+DeadMl.Scope - addValueDeclaration +liveInner3 DeadMl.ml:74:8 path:+DeadMl.Scope.Inner2 - addValueDeclaration +live3 DeadMl.ml:77:6 path:+DeadMl.Scope - addValueDeclaration +dead4 DeadMl.ml:80:4 path:+DeadMl - addValueDeclaration +live5 DeadMl.ml:82:4 path:+DeadMl - addValueDeclaration +dead5 DeadMl.ml:85:4 path:+DeadMl - addValueDeclaration +live6 DeadMl.ml:87:4 path:+DeadMl - addValueDeclaration +dead7 DeadMl.ml:90:4 path:+DeadMl - addValueDeclaration +dead8 DeadMl.ml:94:2 path:+DeadMl.WithSignature - addValueDeclaration +live9 DeadMl.ml:96:2 path:+DeadMl.WithSignature - addValueDeclaration +dead10 DeadMl.ml:99:2 path:+DeadMl.WithSignature - addValueDeclaration +live11 DeadMl.ml:103:2 path:+DeadMl.WithSignature - addValueDeclaration +foo DeadMl.ml:112:21 path:+DeadMl - addValueDeclaration +bar DeadMl.ml:114:43 path:+DeadMl - addValueReference DeadMl.ml:3:8 --> DeadMl.ml:4:11 - addValueReference DeadMl.ml:3:8 --> DeadMl.ml:4:20 - addValueDeclaration +thisIsInInterface DeadMl.ml:12:6 path:+DeadMl.AA - addValueReference DeadMl.ml:12:6 --> DeadMl.ml:12:24 - addVariantCaseDeclaration DeadA DeadMl.ml:17:18 path:+DeadMl.thisIsDead - addVariantCaseDeclaration DeadB DeadMl.ml:17:26 path:+DeadMl.thisIsDead - addValueDeclaration +_ DeadMl.ml:21:2 path:+DeadMl - addValueDeclaration +_ DeadMl.ml:22:2 path:+DeadMl - addValueDeclaration +version DeadMl.ml:29:8 path:+DeadMl.Bs_version - addValueDeclaration +header DeadMl.ml:30:8 path:+DeadMl.Bs_version - addValueDeclaration +package_name DeadMl.ml:31:8 path:+DeadMl.Bs_version - addVariantCaseDeclaration Lfunction DeadMl.ml:35:2 path:+DeadMl.l - addRecordLabelDeclaration module_name DeadMl.ml:41:2 path:+DeadMl.module_info - addRecordLabelDeclaration case DeadMl.ml:42:2 path:+DeadMl.module_info - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:50:4 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:46:19 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:50:7 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:46:19 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:45:8 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:53:23 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:52:8 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:52:8 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:51:8 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:54:23 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:52:11 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:52:11 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:51:10 - addValueReference DeadMl.ml:45:8 --> DeadMl.ml:46:3 - addValueDeclaration +dead8 DeadMl.ml:106:6 path:+DeadMl.WithSignature - addValueDeclaration +live9 DeadMl.ml:107:6 path:+DeadMl.WithSignature - addValueDeclaration +dead10 DeadMl.ml:108:6 path:+DeadMl.WithSignature - addValueDeclaration +live11 DeadMl.ml:109:6 path:+DeadMl.WithSignature - addValueReference DeadMl.ml:112:21 --> DeadMl.ml:112:25 - addValueReference DeadMl.ml:114:43 --> DeadMl.ml:114:47 - addValueReference DeadMl.ml:9:2 --> DeadMl.ml:12:6 - addValueReference DeadMl.ml:26:6 --> DeadMl.ml:29:8 - addValueReference DeadMl.ml:26:27 --> DeadMl.ml:30:8 - addValueReference DeadMl.ml:26:47 --> DeadMl.ml:31:8 - addValueReference DeadMl.ml:94:2 --> DeadMl.ml:106:6 - addValueReference DeadMl.ml:96:2 --> DeadMl.ml:107:6 - addValueReference DeadMl.ml:99:2 --> DeadMl.ml:108:6 - addValueReference DeadMl.ml:103:2 --> DeadMl.ml:109:6 - Scanning DeadRT.cmt Source:DeadRT.res - addValueDeclaration +emitModuleAccessPath DeadRT.res:5:8 path:+DeadRT - addVariantCaseDeclaration Root DeadRT.res:2:2 path:+DeadRT.moduleAccessPath - addVariantCaseDeclaration Kaboom DeadRT.res:3:2 path:+DeadRT.moduleAccessPath - addValueReference DeadRT.res:5:8 --> DeadRT.res:7:9 - addValueReference DeadRT.res:5:8 --> DeadRT.res:5:31 - addTypeReference DeadRT.res:11:16 --> DeadRT.res:3:2 - Scanning DeadRT.cmti Source:DeadRT.resi - addVariantCaseDeclaration Root DeadRT.resi:2:2 path:DeadRT.moduleAccessPath - extendTypeDependencies DeadRT.res:2:2 --> DeadRT.resi:2:2 - extendTypeDependencies DeadRT.resi:2:2 --> DeadRT.res:2:2 - addVariantCaseDeclaration Kaboom DeadRT.resi:3:2 path:DeadRT.moduleAccessPath - extendTypeDependencies DeadRT.res:3:2 --> DeadRT.resi:3:2 - extendTypeDependencies DeadRT.resi:3:2 --> DeadRT.res:3:2 - addTypeReference DeadRT.res:3:2 --> DeadRT.resi:3:2 - addTypeReference DeadRT.resi:3:2 --> DeadRT.res:3:2 - addTypeReference DeadRT.res:2:2 --> DeadRT.resi:2:2 - addTypeReference DeadRT.resi:2:2 --> DeadRT.res:2:2 - Scanning DeadTest.cmt Source:DeadTest.res - addValueDeclaration +fortytwo DeadTest.res:2:4 path:+DeadTest - addValueDeclaration +fortyTwoButExported DeadTest.res:5:4 path:+DeadTest - addValueDeclaration +thisIsUsedOnce DeadTest.res:7:4 path:+DeadTest - addValueDeclaration +thisIsUsedTwice DeadTest.res:10:4 path:+DeadTest - addValueDeclaration +thisIsKeptAlive DeadTest.res:17:4 path:+DeadTest - addValueDeclaration +thisIsMarkedLive DeadTest.res:20:4 path:+DeadTest - addValueDeclaration +a DeadTest.res:36:2 path:+DeadTest.VariantUsedOnlyInImplementation - addValueDeclaration +x DeadTest.res:60:2 path:+DeadTest.MM - addValueDeclaration +y DeadTest.res:61:2 path:+DeadTest.MM - addValueDeclaration +unusedRec DeadTest.res:75:8 path:+DeadTest - addValueDeclaration +split_map DeadTest.res:77:8 path:+DeadTest - addValueDeclaration +rec1 DeadTest.res:82:8 path:+DeadTest - addValueDeclaration +rec2 DeadTest.res:83:4 path:+DeadTest - addValueDeclaration +recWithCallback DeadTest.res:85:8 path:+DeadTest - addValueDeclaration +foo DeadTest.res:90:8 path:+DeadTest - addValueDeclaration +bar DeadTest.res:94:4 path:+DeadTest - addValueDeclaration +withDefaultValue DeadTest.res:96:4 path:+DeadTest - addValueDeclaration +reasonResource DeadTest.res:108:40 path:+DeadTest.LazyDynamicallyLoadedComponent - addValueDeclaration +makeProps DeadTest.res:108:40 path:+DeadTest.LazyDynamicallyLoadedComponent - addValueDeclaration +make DeadTest.res:108:40 path:+DeadTest.LazyDynamicallyLoadedComponent - addValueDeclaration +reasonResource DeadTest.res:113:6 path:+DeadTest.LazyDynamicallyLoadedComponent2 - addValueDeclaration +makeProps DeadTest.res:116:6 path:+DeadTest.LazyDynamicallyLoadedComponent2 - addValueDeclaration +make DeadTest.res:117:6 path:+DeadTest.LazyDynamicallyLoadedComponent2 - addValueDeclaration +cmp DeadTest.res:127:4 path:+DeadTest - addValueDeclaration +cmp2 DeadTest.res:129:4 path:+DeadTest - addValueDeclaration +zzz DeadTest.res:139:4 path:+DeadTest - addValueDeclaration +second DeadTest.res:147:4 path:+DeadTest - addValueDeclaration +minute DeadTest.res:148:4 path:+DeadTest - addValueDeclaration +deadRef DeadTest.res:150:4 path:+DeadTest - addValueDeclaration +makeSwitch DeadTest.res:152:4 path:+DeadTest - addValueDeclaration +make DeadTest.res:155:4 path:+DeadTest - addValueDeclaration +theSideEffectIsLogging DeadTest.res:159:4 path:+DeadTest - addValueDeclaration +stringLengthNoSideEffects DeadTest.res:161:4 path:+DeadTest - addValueDeclaration +globallyLive1 DeadTest.res:164:6 path:+DeadTest.GloobLive - addValueDeclaration +globallyLive2 DeadTest.res:165:6 path:+DeadTest.GloobLive - addValueDeclaration +globallyLive3 DeadTest.res:166:6 path:+DeadTest.GloobLive - addValueReference DeadTest.res:1:15 --> ImmutableArray.resi:9:0 - addValueReference DeadTest.res:8:7 --> DeadTest.res:7:4 - addValueReference DeadTest.res:11:7 --> DeadTest.res:10:4 - addValueReference DeadTest.res:12:7 --> DeadTest.res:10:4 - addValueReference DeadTest.res:20:4 --> DeadTest.res:17:4 - addValueDeclaration +thisSignatureItemIsDead DeadTest.res:31:6 path:+DeadTest.M - addVariantCaseDeclaration A DeadTest.res:35:11 path:+DeadTest.VariantUsedOnlyInImplementation.t - addVariantCaseDeclaration A DeadTest.res:38:11 path:+DeadTest.VariantUsedOnlyInImplementation.t - extendTypeDependencies DeadTest.res:38:11 --> DeadTest.res:35:11 - extendTypeDependencies DeadTest.res:35:11 --> DeadTest.res:38:11 - addValueDeclaration +a DeadTest.res:39:6 path:+DeadTest.VariantUsedOnlyInImplementation - addTypeReference DeadTest.res:39:10 --> DeadTest.res:38:11 - addValueReference DeadTest.res:42:17 --> DeadTest.res:36:2 - addValueReference DeadTest.res:42:14 --> DeadTest.res:42:9 - addValueDeclaration +_ DeadTest.res:44:0 path:+DeadTest - addTypeReference DeadTest.res:44:8 --> DeadTypeTest.resi:8:2 - addValueDeclaration +_ DeadTest.res:45:0 path:+DeadTest - addTypeReference DeadTest.res:45:8 --> DeadTypeTest.resi:9:2 - addRecordLabelDeclaration xxx DeadTest.res:48:2 path:+DeadTest.record - addRecordLabelDeclaration yyy DeadTest.res:49:2 path:+DeadTest.record - addValueDeclaration +_ DeadTest.res:52:0 path:+DeadTest - addTypeReference DeadTest.res:52:13 --> DeadTest.res:48:2 - addValueReference DeadTest.res:52:13 --> DeadTest.res:52:8 - addValueDeclaration +_ DeadTest.res:53:0 path:+DeadTest - addValueReference DeadTest.res:53:19 --> DeadTest.res:53:10 - addTypeReference DeadTest.res:53:9 --> DeadTest.res:49:2 - addValueDeclaration +_ DeadTest.res:56:2 path:+DeadTest.UnderscoreInside - addValueDeclaration +y DeadTest.res:63:6 path:+DeadTest.MM - addValueDeclaration +x DeadTest.res:64:6 path:+DeadTest.MM - addValueReference DeadTest.res:64:6 --> DeadTest.res:63:6 - addValueDeclaration +valueOnlyInImplementation DeadTest.res:65:6 path:+DeadTest.MM - addValueReference DeadTest.res:69:9 --> DeadTest.res:60:2 - addValueReference DeadTest.res:73:16 --> DeadValueTest.resi:1:0 - addValueReference DeadTest.res:75:8 --> DeadTest.res:75:8 - addValueReference DeadTest.res:77:8 --> DeadTest.res:77:20 - addValueReference DeadTest.res:77:8 --> DeadTest.res:77:8 - addValueReference DeadTest.res:82:8 --> DeadTest.res:83:4 - addValueReference DeadTest.res:83:4 --> DeadTest.res:82:8 - addValueDeclaration +cb DeadTest.res:86:6 path:+DeadTest - addValueReference DeadTest.res:86:6 --> DeadTest.res:85:8 - addValueReference DeadTest.res:85:8 --> DeadTest.res:86:6 - addValueDeclaration +cb DeadTest.res:91:6 path:+DeadTest - addValueReference DeadTest.res:91:6 --> DeadTest.res:94:4 - addValueReference DeadTest.res:90:8 --> DeadTest.res:91:6 - addValueReference DeadTest.res:94:4 --> DeadTest.res:90:8 - addValueReference DeadTest.res:96:4 --> DeadTest.res:96:42 - addValueReference DeadTest.res:96:4 --> DeadTest.res:96:24 - addValueReference DeadTest.res:96:4 --> DeadTest.res:96:45 - addTypeReference DeadTest.res:106:16 --> DeadRT.resi:2:2 - addValueReference DeadTest.res:108:40 --> JSResource.res:3:0 - addValueReference DeadTest.res:108:40 --> DynamicallyLoadedComponent.res:2:4 - addValueReference DeadTest.res:108:40 --> DeadTest.res:108:40 - addValueReference DeadTest.res:108:40 --> BootloaderResource.res:3:0 - addValueReference DeadTest.res:108:40 --> DeadTest.res:108:40 - addValueReference DeadTest.res:108:40 --> React.res:18:0 - addValueReference DeadTest.res:113:6 --> JSResource.res:3:0 - addValueReference DeadTest.res:117:6 --> DynamicallyLoadedComponent.res:2:4 - addValueReference DeadTest.res:117:6 --> DeadTest.res:113:6 - addValueReference DeadTest.res:117:6 --> BootloaderResource.res:3:0 - addValueReference DeadTest.res:117:6 --> DeadTest.res:117:13 - addValueReference DeadTest.res:117:6 --> React.res:18:0 - addValueReference DeadTest.res:127:4 --> DeadTest.res:108:40 - DeadOptionalArgs.addReferences LazyDynamicallyLoadedComponent.makeProps called with optional argNames: argNamesMaybe: DeadTest.res:127:11 - addValueReference DeadTest.res:127:4 --> DeadTest.res:108:40 - addValueReference DeadTest.res:127:4 --> React.res:18:0 - addValueReference DeadTest.res:129:4 --> DeadTest.res:117:6 - DeadOptionalArgs.addReferences LazyDynamicallyLoadedComponent2.makeProps called with optional argNames: argNamesMaybe: DeadTest.res:129:18 - addValueReference DeadTest.res:129:4 --> DeadTest.res:116:6 - addValueReference DeadTest.res:129:4 --> React.res:18:0 - addValueReference DeadTest.res:131:16 --> DeadTest.res:127:4 - addValueDeclaration +a1 DeadTest.res:140:6 path:+DeadTest - addValueDeclaration +a2 DeadTest.res:141:6 path:+DeadTest - addValueDeclaration +a3 DeadTest.res:142:6 path:+DeadTest - addValueReference DeadTest.res:145:17 --> DynamicallyLoadedComponent.res:2:4 - addValueReference DeadTest.res:145:17 --> React.res:18:0 - addValueReference DeadTest.res:148:4 --> DeadTest.res:147:4 - addValueReference DeadTest.res:152:4 --> ExportWithRename.res:2:4 - addValueReference DeadTest.res:155:32 --> DeadTest.res:155:12 - addValueReference DeadTest.res:155:19 --> React.res:7:0 - addValueReference DeadTest.res:157:16 --> DeadTest.res:155:4 - addVariantCaseDeclaration A DeadTest.res:170:11 path:+DeadTest.WithInclude.t - addVariantCaseDeclaration A DeadTest.res:173:13 path:+DeadTest.WithInclude.T.t - addVariantCaseDeclaration A DeadTest.res:173:13 path:+DeadTest.WithInclude.t - extendTypeDependencies DeadTest.res:173:13 --> DeadTest.res:170:11 - extendTypeDependencies DeadTest.res:170:11 --> DeadTest.res:173:13 - addTypeReference DeadTest.res:178:7 --> DeadTest.res:170:11 - addRecordLabelDeclaration a DeadTest.res:187:11 path:+DeadTest.rc - addValueReference ExportWithRename.res:2:4 --> DynamicallyLoadedComponent.res:2:4 - addValueReference DynamicallyLoadedComponent.res:2:4 --> ExportWithRename.res:2:4 - addValueReference DeadTest.res:36:2 --> DeadTest.res:39:6 - addValueReference DeadTest.res:60:2 --> DeadTest.res:64:6 - addValueReference DeadTest.res:61:2 --> DeadTest.res:63:6 - addValueReference DeadTest.res:101:2 --> DeadTest.res:103:2 - addTypeReference DeadTest.res:173:13 --> DeadTest.res:170:11 - addTypeReference DeadTest.res:170:11 --> DeadTest.res:173:13 - addTypeReference DeadTest.res:38:11 --> DeadTest.res:35:11 - addTypeReference DeadTest.res:35:11 --> DeadTest.res:38:11 - Scanning DeadTestBlacklist.cmt Source:DeadTestBlacklist.res - addValueDeclaration +x DeadTestBlacklist.res:1:4 path:+DeadTestBlacklist - Scanning DeadTestWithInterface.cmt Source:DeadTestWithInterface.res - addValueDeclaration +x DeadTestWithInterface.res:2:2 path:+DeadTestWithInterface.Ext_buffer - addValueDeclaration +x DeadTestWithInterface.res:4:6 path:+DeadTestWithInterface.Ext_buffer - addValueReference DeadTestWithInterface.res:2:2 --> DeadTestWithInterface.res:4:6 - Interface 0 - Scanning DeadTypeTest.cmt Source:DeadTypeTest.res - addValueDeclaration +a DeadTypeTest.res:4:4 path:+DeadTypeTest - addVariantCaseDeclaration A DeadTypeTest.res:2:2 path:+DeadTypeTest.t - addVariantCaseDeclaration B DeadTypeTest.res:3:2 path:+DeadTypeTest.t - addTypeReference DeadTypeTest.res:4:8 --> DeadTypeTest.res:2:2 - addVariantCaseDeclaration OnlyInImplementation DeadTypeTest.res:7:2 path:+DeadTypeTest.deadType - addVariantCaseDeclaration OnlyInInterface DeadTypeTest.res:8:2 path:+DeadTypeTest.deadType - addVariantCaseDeclaration InBoth DeadTypeTest.res:9:2 path:+DeadTypeTest.deadType - addVariantCaseDeclaration InNeither DeadTypeTest.res:10:2 path:+DeadTypeTest.deadType - addValueDeclaration +_ DeadTypeTest.res:12:0 path:+DeadTypeTest - addTypeReference DeadTypeTest.res:12:8 --> DeadTypeTest.res:7:2 - addValueDeclaration +_ DeadTypeTest.res:13:0 path:+DeadTypeTest - addTypeReference DeadTypeTest.res:13:8 --> DeadTypeTest.res:9:2 - addRecordLabelDeclaration x DeadTypeTest.res:16:15 path:+DeadTypeTest.record - addRecordLabelDeclaration y DeadTypeTest.res:16:23 path:+DeadTypeTest.record - addRecordLabelDeclaration z DeadTypeTest.res:16:34 path:+DeadTypeTest.record - addValueReference DeadTypeTest.resi:4:0 --> DeadTypeTest.res:4:4 - Scanning DeadTypeTest.cmti Source:DeadTypeTest.resi - addVariantCaseDeclaration A DeadTypeTest.resi:2:2 path:DeadTypeTest.t - extendTypeDependencies DeadTypeTest.res:2:2 --> DeadTypeTest.resi:2:2 - extendTypeDependencies DeadTypeTest.resi:2:2 --> DeadTypeTest.res:2:2 - addVariantCaseDeclaration B DeadTypeTest.resi:3:2 path:DeadTypeTest.t - extendTypeDependencies DeadTypeTest.res:3:2 --> DeadTypeTest.resi:3:2 - extendTypeDependencies DeadTypeTest.resi:3:2 --> DeadTypeTest.res:3:2 - addValueDeclaration +a DeadTypeTest.resi:4:0 path:DeadTypeTest - addVariantCaseDeclaration OnlyInImplementation DeadTypeTest.resi:7:2 path:DeadTypeTest.deadType - extendTypeDependencies DeadTypeTest.res:7:2 --> DeadTypeTest.resi:7:2 - extendTypeDependencies DeadTypeTest.resi:7:2 --> DeadTypeTest.res:7:2 - addVariantCaseDeclaration OnlyInInterface DeadTypeTest.resi:8:2 path:DeadTypeTest.deadType - extendTypeDependencies DeadTypeTest.res:8:2 --> DeadTypeTest.resi:8:2 - extendTypeDependencies DeadTypeTest.resi:8:2 --> DeadTypeTest.res:8:2 - addVariantCaseDeclaration InBoth DeadTypeTest.resi:9:2 path:DeadTypeTest.deadType - extendTypeDependencies DeadTypeTest.res:9:2 --> DeadTypeTest.resi:9:2 - extendTypeDependencies DeadTypeTest.resi:9:2 --> DeadTypeTest.res:9:2 - addVariantCaseDeclaration InNeither DeadTypeTest.resi:10:2 path:DeadTypeTest.deadType - extendTypeDependencies DeadTypeTest.res:10:2 --> DeadTypeTest.resi:10:2 - extendTypeDependencies DeadTypeTest.resi:10:2 --> DeadTypeTest.res:10:2 - addTypeReference DeadTypeTest.res:10:2 --> DeadTypeTest.resi:10:2 - addTypeReference DeadTypeTest.resi:10:2 --> DeadTypeTest.res:10:2 - addTypeReference DeadTypeTest.res:9:2 --> DeadTypeTest.resi:9:2 - addTypeReference DeadTypeTest.resi:9:2 --> DeadTypeTest.res:9:2 - addTypeReference DeadTypeTest.res:8:2 --> DeadTypeTest.resi:8:2 - addTypeReference DeadTypeTest.resi:8:2 --> DeadTypeTest.res:8:2 - addTypeReference DeadTypeTest.res:7:2 --> DeadTypeTest.resi:7:2 - addTypeReference DeadTypeTest.resi:7:2 --> DeadTypeTest.res:7:2 - addTypeReference DeadTypeTest.res:3:2 --> DeadTypeTest.resi:3:2 - addTypeReference DeadTypeTest.resi:3:2 --> DeadTypeTest.res:3:2 - addTypeReference DeadTypeTest.res:2:2 --> DeadTypeTest.resi:2:2 - addTypeReference DeadTypeTest.resi:2:2 --> DeadTypeTest.res:2:2 - Scanning DeadValueTest.cmt Source:DeadValueTest.res - addValueDeclaration +valueAlive DeadValueTest.res:1:4 path:+DeadValueTest - addValueDeclaration +valueDead DeadValueTest.res:2:4 path:+DeadValueTest - addValueDeclaration +valueOnlyInImplementation DeadValueTest.res:4:4 path:+DeadValueTest - addValueDeclaration +subList DeadValueTest.res:6:8 path:+DeadValueTest - addValueDeclaration +tail DeadValueTest.res:10:8 path:+DeadValueTest - addValueReference DeadValueTest.res:10:8 --> DeadValueTest.res:6:19 - addValueReference DeadValueTest.res:10:8 --> DeadValueTest.res:6:22 - addValueReference DeadValueTest.res:10:8 --> DeadValueTest.res:9:15 - addValueReference DeadValueTest.res:10:8 --> DeadValueTest.res:6:8 - addValueReference DeadValueTest.res:10:8 --> DeadValueTest.res:6:22 - addValueReference DeadValueTest.res:6:8 --> DeadValueTest.res:9:9 - addValueReference DeadValueTest.res:6:8 --> DeadValueTest.res:10:8 - addValueReference DeadValueTest.res:6:8 --> DeadValueTest.res:10:8 - addValueReference DeadValueTest.res:6:8 --> DeadValueTest.res:6:19 - addValueReference DeadValueTest.res:6:8 --> DeadValueTest.res:6:25 - addValueReference DeadValueTest.resi:1:0 --> DeadValueTest.res:1:4 - addValueReference DeadValueTest.resi:2:0 --> DeadValueTest.res:2:4 - Scanning DeadValueTest.cmti Source:DeadValueTest.resi - addValueDeclaration +valueAlive DeadValueTest.resi:1:0 path:DeadValueTest - addValueDeclaration +valueDead DeadValueTest.resi:2:0 path:DeadValueTest - Scanning Docstrings.cmt Source:Docstrings.res - addValueDeclaration +flat Docstrings.res:2:4 path:+Docstrings - addValueDeclaration +signMessage Docstrings.res:12:4 path:+Docstrings - addValueDeclaration +one Docstrings.res:15:4 path:+Docstrings - addValueDeclaration +two Docstrings.res:18:4 path:+Docstrings - addValueDeclaration +tree Docstrings.res:21:4 path:+Docstrings - addValueDeclaration +oneU Docstrings.res:24:4 path:+Docstrings - addValueDeclaration +twoU Docstrings.res:27:4 path:+Docstrings - addValueDeclaration +treeU Docstrings.res:30:4 path:+Docstrings - addValueDeclaration +useParam Docstrings.res:33:4 path:+Docstrings - addValueDeclaration +useParamU Docstrings.res:36:4 path:+Docstrings - addValueDeclaration +unnamed1 Docstrings.res:39:4 path:+Docstrings - addValueDeclaration +unnamed1U Docstrings.res:42:4 path:+Docstrings - addValueDeclaration +unnamed2 Docstrings.res:45:4 path:+Docstrings - addValueDeclaration +unnamed2U Docstrings.res:48:4 path:+Docstrings - addValueDeclaration +grouped Docstrings.res:51:4 path:+Docstrings - addValueDeclaration +unitArgWithoutConversion Docstrings.res:54:4 path:+Docstrings - addValueDeclaration +unitArgWithoutConversionU Docstrings.res:57:4 path:+Docstrings - addValueDeclaration +unitArgWithConversion Docstrings.res:64:4 path:+Docstrings - addValueDeclaration +unitArgWithConversionU Docstrings.res:67:4 path:+Docstrings - addValueReference Docstrings.res:12:4 --> Docstrings.res:12:21 - addValueReference Docstrings.res:12:4 --> Docstrings.res:12:30 - addValueReference Docstrings.res:15:4 --> Docstrings.res:15:10 - addValueReference Docstrings.res:18:4 --> Docstrings.res:18:11 - addValueReference Docstrings.res:18:4 --> Docstrings.res:18:14 - addValueReference Docstrings.res:21:4 --> Docstrings.res:21:12 - addValueReference Docstrings.res:21:4 --> Docstrings.res:21:15 - addValueReference Docstrings.res:21:4 --> Docstrings.res:21:18 - addValueReference Docstrings.res:24:4 --> Docstrings.res:24:14 - addValueReference Docstrings.res:27:4 --> Docstrings.res:27:14 - addValueReference Docstrings.res:27:4 --> Docstrings.res:27:17 - addValueReference Docstrings.res:30:4 --> Docstrings.res:30:15 - addValueReference Docstrings.res:30:4 --> Docstrings.res:30:18 - addValueReference Docstrings.res:30:4 --> Docstrings.res:30:21 - addValueReference Docstrings.res:33:4 --> Docstrings.res:33:15 - addValueReference Docstrings.res:36:4 --> Docstrings.res:36:19 - addValueReference Docstrings.res:51:4 --> Docstrings.res:51:15 - addValueReference Docstrings.res:51:4 --> Docstrings.res:51:19 - addValueReference Docstrings.res:51:4 --> Docstrings.res:51:23 - addValueReference Docstrings.res:51:4 --> Docstrings.res:51:26 - addValueReference Docstrings.res:51:4 --> Docstrings.res:51:29 - addValueReference Docstrings.res:51:4 --> Docstrings.res:51:32 - addVariantCaseDeclaration A Docstrings.res:60:2 path:+Docstrings.t - addVariantCaseDeclaration B Docstrings.res:61:2 path:+Docstrings.t - addTypeReference Docstrings.res:64:34 --> Docstrings.res:60:2 - addTypeReference Docstrings.res:67:39 --> Docstrings.res:60:2 - Scanning DynamicallyLoadedComponent.cmt Source:DynamicallyLoadedComponent.res - addValueDeclaration +make DynamicallyLoadedComponent.res:2:4 path:+DynamicallyLoadedComponent - addValueReference DynamicallyLoadedComponent.res:2:32 --> DynamicallyLoadedComponent.res:2:12 - addValueReference DynamicallyLoadedComponent.res:2:19 --> React.res:7:0 - Scanning EmptyArray.cmt Source:EmptyArray.res - addValueDeclaration +make EmptyArray.res:5:6 path:+EmptyArray.Z - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: EmptyArray.res:6:5 - addValueReference EmptyArray.res:6:5 --> ReactDOMRe.res:8:0 - addValueReference EmptyArray.res:10:9 --> EmptyArray.res:5:6 - addValueReference EmptyArray.res:10:9 --> React.res:18:0 - Scanning ErrorHandler.cmt Source:ErrorHandler.res - addValueDeclaration +notify ErrorHandler.res:7:6 path:+ErrorHandler.Make - addValueDeclaration +x ErrorHandler.res:12:4 path:+ErrorHandler - addValueReference ErrorHandler.res:7:6 --> ErrorHandler.res:7:15 - addValueReference ErrorHandler.res:7:6 --> ErrorHandler.res:3:2 - addValueReference ErrorHandler.resi:3:2 --> ErrorHandler.res:3:2 - addValueReference ErrorHandler.res:3:2 --> ErrorHandler.resi:3:2 - addValueReference ErrorHandler.resi:7:2 --> ErrorHandler.res:7:6 - addValueReference ErrorHandler.resi:10:0 --> ErrorHandler.res:12:4 - Scanning ErrorHandler.cmti Source:ErrorHandler.resi - addValueDeclaration +notify ErrorHandler.resi:7:2 path:ErrorHandler.Make - addValueDeclaration +x ErrorHandler.resi:10:0 path:ErrorHandler - Scanning EverythingLiveHere.cmt Source:EverythingLiveHere.res - addValueDeclaration +x EverythingLiveHere.res:1:4 path:+EverythingLiveHere - addValueDeclaration +y EverythingLiveHere.res:3:4 path:+EverythingLiveHere - addValueDeclaration +z EverythingLiveHere.res:5:4 path:+EverythingLiveHere - Scanning FC.cmt Source:FC.res - addValueDeclaration +foo FC.res:6:4 path:+FC - addValueReference FC.res:7:13 --> FC.res:6:11 - addValueReference FC.res:6:4 --> FC.res:2:2 - addValueReference FC.res:6:4 --> FC.res:7:6 - addValueReference FC.res:11:7 --> FC.res:6:4 - Scanning FirstClassModules.cmt Source:FirstClassModules.res - addValueDeclaration +y FirstClassModules.res:23:6 path:+FirstClassModules.M - addValueDeclaration +k FirstClassModules.res:29:8 path:+FirstClassModules.M.InnerModule2 - addValueDeclaration +k3 FirstClassModules.res:33:8 path:+FirstClassModules.M.InnerModule3 - addValueDeclaration +u FirstClassModules.res:40:8 path:+FirstClassModules.M.Z - addValueDeclaration +x FirstClassModules.res:44:6 path:+FirstClassModules.M - addValueDeclaration +firstClassModule FirstClassModules.res:51:4 path:+FirstClassModules - addValueDeclaration +testConvert FirstClassModules.res:54:4 path:+FirstClassModules - addValueDeclaration +someFunctorAsFunction FirstClassModules.res:65:4 path:+FirstClassModules - addValueReference FirstClassModules.res:33:8 --> FirstClassModules.res:33:13 - addValueReference FirstClassModules.res:54:4 --> FirstClassModules.res:54:19 - addValueDeclaration +ww FirstClassModules.res:61:6 path:+FirstClassModules.SomeFunctor - addValueReference FirstClassModules.res:61:6 --> FirstClassModules.res:20:2 - addValueReference FirstClassModules.res:65:4 --> FirstClassModules.res:65:29 - addValueReference FirstClassModules.res:2:2 --> FirstClassModules.res:44:6 - addValueReference FirstClassModules.res:4:2 --> FirstClassModules.res:43:2 - addValueReference FirstClassModules.res:10:4 --> FirstClassModules.res:29:8 - addValueReference FirstClassModules.res:14:4 --> FirstClassModules.res:33:8 - addValueReference FirstClassModules.res:17:4 --> FirstClassModules.res:37:4 - addValueReference FirstClassModules.res:37:4 --> FirstClassModules.res:17:4 - addValueReference FirstClassModules.res:37:4 --> FirstClassModules.res:40:8 - addValueReference FirstClassModules.res:20:2 --> FirstClassModules.res:23:6 - addValueReference FirstClassModules.res:57:2 --> FirstClassModules.res:61:6 - Scanning FirstClassModulesInterface.cmt Source:FirstClassModulesInterface.res - addValueDeclaration +r FirstClassModulesInterface.res:6:4 path:+FirstClassModulesInterface - addRecordLabelDeclaration x FirstClassModulesInterface.res:2:2 path:+FirstClassModulesInterface.record - addRecordLabelDeclaration y FirstClassModulesInterface.res:3:2 path:+FirstClassModulesInterface.record - addValueReference FirstClassModulesInterface.resi:7:0 --> FirstClassModulesInterface.res:6:4 - addValueReference FirstClassModulesInterface.resi:11:2 --> FirstClassModulesInterface.res:9:2 - addValueReference FirstClassModulesInterface.res:9:2 --> FirstClassModulesInterface.resi:11:2 - Scanning FirstClassModulesInterface.cmti Source:FirstClassModulesInterface.resi - addRecordLabelDeclaration x FirstClassModulesInterface.resi:3:2 path:FirstClassModulesInterface.record - extendTypeDependencies FirstClassModulesInterface.res:2:2 --> FirstClassModulesInterface.resi:3:2 - extendTypeDependencies FirstClassModulesInterface.resi:3:2 --> FirstClassModulesInterface.res:2:2 - addRecordLabelDeclaration y FirstClassModulesInterface.resi:4:2 path:FirstClassModulesInterface.record - extendTypeDependencies FirstClassModulesInterface.res:3:2 --> FirstClassModulesInterface.resi:4:2 - extendTypeDependencies FirstClassModulesInterface.resi:4:2 --> FirstClassModulesInterface.res:3:2 - addValueDeclaration +r FirstClassModulesInterface.resi:7:0 path:FirstClassModulesInterface - addTypeReference FirstClassModulesInterface.res:3:2 --> FirstClassModulesInterface.resi:4:2 - addTypeReference FirstClassModulesInterface.resi:4:2 --> FirstClassModulesInterface.res:3:2 - addTypeReference FirstClassModulesInterface.res:2:2 --> FirstClassModulesInterface.resi:3:2 - addTypeReference FirstClassModulesInterface.resi:3:2 --> FirstClassModulesInterface.res:2:2 - Scanning Hooks.cmt Source:Hooks.res - addValueDeclaration +make Hooks.res:4:4 path:+Hooks - addValueDeclaration +default Hooks.res:25:4 path:+Hooks - addValueDeclaration +anotherComponent Hooks.res:28:4 path:+Hooks - addValueDeclaration +make Hooks.res:35:6 path:+Hooks.Inner - addValueDeclaration +anotherComponent Hooks.res:38:6 path:+Hooks.Inner - addValueDeclaration +make Hooks.res:42:8 path:+Hooks.Inner.Inner2 - addValueDeclaration +anotherComponent Hooks.res:45:8 path:+Hooks.Inner.Inner2 - addValueDeclaration +make Hooks.res:52:6 path:+Hooks.NoProps - addValueDeclaration +functionWithRenamedArgs Hooks.res:58:4 path:+Hooks - addValueDeclaration +componentWithRenamedArgs Hooks.res:64:4 path:+Hooks - addValueDeclaration +makeWithRef Hooks.res:70:4 path:+Hooks - addValueDeclaration +testForwardRef Hooks.res:80:4 path:+Hooks - addValueDeclaration +input Hooks.res:85:4 path:+Hooks - addValueDeclaration +polymorphicComponent Hooks.res:100:4 path:+Hooks - addValueDeclaration +functionReturningReactElement Hooks.res:103:4 path:+Hooks - addValueDeclaration +make Hooks.res:107:6 path:+Hooks.RenderPropRequiresConversion - addValueDeclaration +aComponentWithChildren Hooks.res:114:4 path:+Hooks - addRecordLabelDeclaration name Hooks.res:1:16 path:+Hooks.vehicle - addValueReference Hooks.res:5:26 --> React.res:167:0 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:7:3 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:8:5 - addTypeReference Hooks.res:10:29 --> Hooks.res:1:16 - addValueReference Hooks.res:10:29 --> Hooks.res:4:12 - addValueReference Hooks.res:10:76 --> Hooks.res:5:7 - addValueReference Hooks.res:9:7 --> React.res:7:0 - addValueReference Hooks.res:8:5 --> ReactDOMRe.res:8:0 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames:props argNamesMaybe: Hooks.res:13:5 - addValueReference Hooks.res:13:40 --> Hooks.res:5:7 - addValueReference Hooks.res:13:26 --> Hooks.res:5:14 - addValueReference Hooks.res:13:54 --> React.res:7:0 - addValueReference Hooks.res:13:5 --> ReactDOMRe.res:8:0 - addValueReference Hooks.res:14:5 --> ImportHooks.res:13:0 - DeadOptionalArgs.addReferences ImportHooks.makeProps called with optional argNames: argNamesMaybe: Hooks.res:14:5 - addValueReference Hooks.res:14:5 --> React.res:3:0 - addValueReference Hooks.res:14:63 --> React.res:7:0 - addValueReference Hooks.res:14:5 --> ImportHooks.res:13:0 - addValueReference Hooks.res:15:7 --> React.res:7:0 - addValueReference Hooks.res:15:32 --> React.res:7:0 - addValueReference Hooks.res:14:5 --> React.res:24:0 - addValueReference Hooks.res:17:5 --> ImportHookDefault.res:6:0 - DeadOptionalArgs.addReferences ImportHookDefault.makeProps called with optional argNames: argNamesMaybe: Hooks.res:17:5 - addValueReference Hooks.res:17:5 --> React.res:3:0 - addValueReference Hooks.res:18:61 --> React.res:7:0 - addValueReference Hooks.res:17:5 --> ImportHookDefault.res:6:0 - addValueReference Hooks.res:19:7 --> React.res:7:0 - addValueReference Hooks.res:19:32 --> React.res:7:0 - addValueReference Hooks.res:17:5 --> React.res:24:0 - addValueReference Hooks.res:7:3 --> ReactDOMRe.res:8:0 - addValueReference Hooks.res:25:4 --> Hooks.res:4:4 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:30:3 - addTypeReference Hooks.res:30:41 --> Hooks.res:1:16 - addValueReference Hooks.res:30:41 --> Hooks.res:28:24 - addValueReference Hooks.res:30:9 --> React.res:7:0 - addValueReference Hooks.res:30:3 --> ReactDOMRe.res:8:0 - addValueReference Hooks.res:29:2 --> Hooks.res:28:34 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:35:28 - addTypeReference Hooks.res:35:66 --> Hooks.res:1:16 - addValueReference Hooks.res:35:66 --> Hooks.res:35:14 - addValueReference Hooks.res:35:34 --> React.res:7:0 - addValueReference Hooks.res:35:28 --> ReactDOMRe.res:8:0 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:38:40 - addTypeReference Hooks.res:38:78 --> Hooks.res:1:16 - addValueReference Hooks.res:38:78 --> Hooks.res:38:26 - addValueReference Hooks.res:38:46 --> React.res:7:0 - addValueReference Hooks.res:38:40 --> ReactDOMRe.res:8:0 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:42:30 - addTypeReference Hooks.res:42:68 --> Hooks.res:1:16 - addValueReference Hooks.res:42:68 --> Hooks.res:42:16 - addValueReference Hooks.res:42:36 --> React.res:7:0 - addValueReference Hooks.res:42:30 --> ReactDOMRe.res:8:0 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:46:7 - addTypeReference Hooks.res:46:45 --> Hooks.res:1:16 - addValueReference Hooks.res:46:45 --> Hooks.res:45:28 - addValueReference Hooks.res:46:13 --> React.res:7:0 - addValueReference Hooks.res:46:7 --> ReactDOMRe.res:8:0 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:52:20 - addValueReference Hooks.res:52:25 --> React.res:3:0 - addValueReference Hooks.res:52:20 --> ReactDOMRe.res:8:0 - addTypeReference Hooks.res:60:2 --> Hooks.res:1:16 - addValueReference Hooks.res:58:4 --> Hooks.res:58:31 - addTypeReference Hooks.res:60:14 --> Hooks.res:1:16 - addValueReference Hooks.res:58:4 --> Hooks.res:58:37 - addValueReference Hooks.res:58:4 --> Hooks.res:58:31 - addValueReference Hooks.res:58:4 --> Hooks.res:58:45 - addTypeReference Hooks.res:66:15 --> Hooks.res:1:16 - addValueReference Hooks.res:66:15 --> Hooks.res:64:32 - addTypeReference Hooks.res:66:27 --> Hooks.res:1:16 - addValueReference Hooks.res:66:27 --> Hooks.res:64:38 - addValueReference Hooks.res:66:2 --> React.res:7:0 - addValueReference Hooks.res:65:6 --> Hooks.res:64:32 - addValueReference Hooks.res:65:2 --> Hooks.res:64:46 - addValueDeclaration +_ Hooks.res:71:2 path:+Hooks - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames:props argNamesMaybe: Hooks.res:74:20 - addValueReference Hooks.res:74:52 --> Hooks.res:74:11 - addValueReference Hooks.res:74:32 --> ReactDOM.res:47:2 - addTypeReference Hooks.res:74:73 --> Hooks.res:1:16 - addValueReference Hooks.res:74:73 --> Hooks.res:70:19 - addValueReference Hooks.res:74:60 --> React.res:7:0 - addValueReference Hooks.res:74:20 --> ReactDOMRe.res:8:0 - addValueReference Hooks.res:75:14 --> React.res:3:0 - addValueReference Hooks.res:73:11 --> Hooks.res:72:2 - addValueReference Hooks.res:80:4 --> Hooks.res:70:4 - addValueReference Hooks.res:80:4 --> React.res:90:0 - addRecordLabelDeclaration x Hooks.res:82:10 path:+Hooks.r - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames:props argNamesMaybe: Hooks.res:85:47 - addValueReference Hooks.res:85:66 --> Hooks.res:85:38 - addTypeReference Hooks.res:85:87 --> Hooks.res:82:10 - addValueReference Hooks.res:85:87 --> Hooks.res:85:30 - addValueReference Hooks.res:85:74 --> React.res:7:0 - addValueReference Hooks.res:85:47 --> ReactDOMRe.res:8:0 - addValueReference Hooks.res:85:4 --> React.res:90:0 - addTypeReference Hooks.res:100:58 --> Hooks.res:1:16 - addValueReference Hooks.res:100:58 --> Hooks.res:100:35 - addValueReference Hooks.res:100:45 --> React.res:7:0 - addValueReference Hooks.res:103:60 --> Hooks.res:103:37 - addValueReference Hooks.res:103:47 --> React.res:7:0 - addValueDeclaration +car Hooks.res:108:8 path:+Hooks.RenderPropRequiresConversion - addValueReference Hooks.res:109:30 --> Hooks.res:108:8 - addValueReference Hooks.res:109:18 --> Hooks.res:109:18 - addValueReference Hooks.res:109:4 --> Hooks.res:107:14 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:115:3 - addTypeReference Hooks.res:115:41 --> Hooks.res:1:16 - addValueReference Hooks.res:115:41 --> Hooks.res:114:30 - addValueReference Hooks.res:115:9 --> React.res:7:0 - DeadOptionalArgs.addReferences ReactDOMRe.createDOMElementVariadic called with optional argNames: argNamesMaybe: Hooks.res:115:57 - addValueReference Hooks.res:115:62 --> Hooks.res:114:40 - addValueReference Hooks.res:115:57 --> ReactDOMRe.res:8:0 - addValueReference Hooks.res:115:3 --> ReactDOMRe.res:8:0 - Scanning IgnoreInterface.cmt Source:IgnoreInterface.res - Scanning IgnoreInterface.cmti Source:IgnoreInterface.resi - Scanning ImmutableArray.cmt Source:ImmutableArray.res - addValueDeclaration +fromArray ImmutableArray.res:14:6 path:+ImmutableArray.Array - addValueDeclaration +toArray ImmutableArray.res:16:6 path:+ImmutableArray.Array - addValueDeclaration +length ImmutableArray.res:20:6 path:+ImmutableArray.Array - addValueDeclaration +size ImmutableArray.res:22:6 path:+ImmutableArray.Array - addValueDeclaration +get ImmutableArray.res:24:6 path:+ImmutableArray.Array - addValueDeclaration +getExn ImmutableArray.res:26:6 path:+ImmutableArray.Array - addValueDeclaration +getUnsafe ImmutableArray.res:28:6 path:+ImmutableArray.Array - addValueDeclaration +getUndefined ImmutableArray.res:30:6 path:+ImmutableArray.Array - addValueDeclaration +shuffle ImmutableArray.res:32:6 path:+ImmutableArray.Array - addValueDeclaration +reverse ImmutableArray.res:34:6 path:+ImmutableArray.Array - addValueDeclaration +makeUninitialized ImmutableArray.res:36:6 path:+ImmutableArray.Array - addValueDeclaration +makeUninitializedUnsafe ImmutableArray.res:38:6 path:+ImmutableArray.Array - addValueDeclaration +make ImmutableArray.res:40:6 path:+ImmutableArray.Array - addValueDeclaration +range ImmutableArray.res:42:6 path:+ImmutableArray.Array - addValueDeclaration +rangeBy ImmutableArray.res:44:6 path:+ImmutableArray.Array - addValueDeclaration +makeByU ImmutableArray.res:46:6 path:+ImmutableArray.Array - addValueDeclaration +makeBy ImmutableArray.res:47:6 path:+ImmutableArray.Array - addValueDeclaration +makeByAndShuffleU ImmutableArray.res:49:6 path:+ImmutableArray.Array - addValueDeclaration +makeByAndShuffle ImmutableArray.res:50:6 path:+ImmutableArray.Array - addValueDeclaration +zip ImmutableArray.res:52:6 path:+ImmutableArray.Array - addValueDeclaration +zipByU ImmutableArray.res:54:6 path:+ImmutableArray.Array - addValueDeclaration +zipBy ImmutableArray.res:55:6 path:+ImmutableArray.Array - addValueDeclaration +unzip ImmutableArray.res:57:6 path:+ImmutableArray.Array - addValueDeclaration +concat ImmutableArray.res:59:6 path:+ImmutableArray.Array - addValueDeclaration +concatMany ImmutableArray.res:61:6 path:+ImmutableArray.Array - addValueDeclaration +slice ImmutableArray.res:63:6 path:+ImmutableArray.Array - addValueDeclaration +sliceToEnd ImmutableArray.res:65:6 path:+ImmutableArray.Array - addValueDeclaration +copy ImmutableArray.res:67:6 path:+ImmutableArray.Array - addValueDeclaration +forEachU ImmutableArray.res:69:6 path:+ImmutableArray.Array - addValueDeclaration +forEach ImmutableArray.res:70:6 path:+ImmutableArray.Array - addValueDeclaration +mapU ImmutableArray.res:72:6 path:+ImmutableArray.Array - addValueDeclaration +map ImmutableArray.res:73:6 path:+ImmutableArray.Array - addValueDeclaration +keepWithIndexU ImmutableArray.res:75:6 path:+ImmutableArray.Array - addValueDeclaration +keepWithIndex ImmutableArray.res:76:6 path:+ImmutableArray.Array - addValueDeclaration +keepMapU ImmutableArray.res:78:6 path:+ImmutableArray.Array - addValueDeclaration +keepMap ImmutableArray.res:79:6 path:+ImmutableArray.Array - addValueDeclaration +forEachWithIndexU ImmutableArray.res:81:6 path:+ImmutableArray.Array - addValueDeclaration +forEachWithIndex ImmutableArray.res:82:6 path:+ImmutableArray.Array - addValueDeclaration +mapWithIndexU ImmutableArray.res:84:6 path:+ImmutableArray.Array - addValueDeclaration +mapWithIndex ImmutableArray.res:85:6 path:+ImmutableArray.Array - addValueDeclaration +partitionU ImmutableArray.res:87:6 path:+ImmutableArray.Array - addValueDeclaration +partition ImmutableArray.res:88:6 path:+ImmutableArray.Array - addValueDeclaration +reduceU ImmutableArray.res:90:6 path:+ImmutableArray.Array - addValueDeclaration +reduce ImmutableArray.res:91:6 path:+ImmutableArray.Array - addValueDeclaration +reduceReverseU ImmutableArray.res:93:6 path:+ImmutableArray.Array - addValueDeclaration +reduceReverse ImmutableArray.res:94:6 path:+ImmutableArray.Array - addValueDeclaration +reduceReverse2U ImmutableArray.res:96:6 path:+ImmutableArray.Array - addValueDeclaration +reduceReverse2 ImmutableArray.res:97:6 path:+ImmutableArray.Array - addValueDeclaration +someU ImmutableArray.res:99:6 path:+ImmutableArray.Array - addValueDeclaration +some ImmutableArray.res:100:6 path:+ImmutableArray.Array - addValueDeclaration +everyU ImmutableArray.res:102:6 path:+ImmutableArray.Array - addValueDeclaration +every ImmutableArray.res:103:6 path:+ImmutableArray.Array - addValueDeclaration +every2U ImmutableArray.res:105:6 path:+ImmutableArray.Array - addValueDeclaration +every2 ImmutableArray.res:106:6 path:+ImmutableArray.Array - addValueDeclaration +some2U ImmutableArray.res:108:6 path:+ImmutableArray.Array - addValueDeclaration +some2 ImmutableArray.res:109:6 path:+ImmutableArray.Array - addValueDeclaration +cmpU ImmutableArray.res:111:6 path:+ImmutableArray.Array - addValueDeclaration +cmp ImmutableArray.res:112:6 path:+ImmutableArray.Array - addValueDeclaration +eqU ImmutableArray.res:114:6 path:+ImmutableArray.Array - addValueDeclaration +eq ImmutableArray.res:115:6 path:+ImmutableArray.Array - addValueDeclaration +fromArray ImmutableArray.res:14:6 path:+ImmutableArray - addValueDeclaration +toArray ImmutableArray.res:16:6 path:+ImmutableArray - addValueDeclaration +length ImmutableArray.res:20:6 path:+ImmutableArray - addValueDeclaration +size ImmutableArray.res:22:6 path:+ImmutableArray - addValueDeclaration +get ImmutableArray.res:24:6 path:+ImmutableArray - addValueDeclaration +getExn ImmutableArray.res:26:6 path:+ImmutableArray - addValueDeclaration +getUnsafe ImmutableArray.res:28:6 path:+ImmutableArray - addValueDeclaration +getUndefined ImmutableArray.res:30:6 path:+ImmutableArray - addValueDeclaration +shuffle ImmutableArray.res:32:6 path:+ImmutableArray - addValueDeclaration +reverse ImmutableArray.res:34:6 path:+ImmutableArray - addValueDeclaration +makeUninitialized ImmutableArray.res:36:6 path:+ImmutableArray - addValueDeclaration +makeUninitializedUnsafe ImmutableArray.res:38:6 path:+ImmutableArray - addValueDeclaration +make ImmutableArray.res:40:6 path:+ImmutableArray - addValueDeclaration +range ImmutableArray.res:42:6 path:+ImmutableArray - addValueDeclaration +rangeBy ImmutableArray.res:44:6 path:+ImmutableArray - addValueDeclaration +makeByU ImmutableArray.res:46:6 path:+ImmutableArray - addValueDeclaration +makeBy ImmutableArray.res:47:6 path:+ImmutableArray - addValueDeclaration +makeByAndShuffleU ImmutableArray.res:49:6 path:+ImmutableArray - addValueDeclaration +makeByAndShuffle ImmutableArray.res:50:6 path:+ImmutableArray - addValueDeclaration +zip ImmutableArray.res:52:6 path:+ImmutableArray - addValueDeclaration +zipByU ImmutableArray.res:54:6 path:+ImmutableArray - addValueDeclaration +zipBy ImmutableArray.res:55:6 path:+ImmutableArray - addValueDeclaration +unzip ImmutableArray.res:57:6 path:+ImmutableArray - addValueDeclaration +concat ImmutableArray.res:59:6 path:+ImmutableArray - addValueDeclaration +concatMany ImmutableArray.res:61:6 path:+ImmutableArray - addValueDeclaration +slice ImmutableArray.res:63:6 path:+ImmutableArray - addValueDeclaration +sliceToEnd ImmutableArray.res:65:6 path:+ImmutableArray - addValueDeclaration +copy ImmutableArray.res:67:6 path:+ImmutableArray - addValueDeclaration +forEachU ImmutableArray.res:69:6 path:+ImmutableArray - addValueDeclaration +forEach ImmutableArray.res:70:6 path:+ImmutableArray - addValueDeclaration +mapU ImmutableArray.res:72:6 path:+ImmutableArray - addValueDeclaration +map ImmutableArray.res:73:6 path:+ImmutableArray - addValueDeclaration +keepWithIndexU ImmutableArray.res:75:6 path:+ImmutableArray - addValueDeclaration +keepWithIndex ImmutableArray.res:76:6 path:+ImmutableArray - addValueDeclaration +keepMapU ImmutableArray.res:78:6 path:+ImmutableArray - addValueDeclaration +keepMap ImmutableArray.res:79:6 path:+ImmutableArray - addValueDeclaration +forEachWithIndexU ImmutableArray.res:81:6 path:+ImmutableArray - addValueDeclaration +forEachWithIndex ImmutableArray.res:82:6 path:+ImmutableArray - addValueDeclaration +mapWithIndexU ImmutableArray.res:84:6 path:+ImmutableArray - addValueDeclaration +mapWithIndex ImmutableArray.res:85:6 path:+ImmutableArray - addValueDeclaration +partitionU ImmutableArray.res:87:6 path:+ImmutableArray - addValueDeclaration +partition ImmutableArray.res:88:6 path:+ImmutableArray - addValueDeclaration +reduceU ImmutableArray.res:90:6 path:+ImmutableArray - addValueDeclaration +reduce ImmutableArray.res:91:6 path:+ImmutableArray - addValueDeclaration +reduceReverseU ImmutableArray.res:93:6 path:+ImmutableArray - addValueDeclaration +reduceReverse ImmutableArray.res:94:6 path:+ImmutableArray - addValueDeclaration +reduceReverse2U ImmutableArray.res:96:6 path:+ImmutableArray - addValueDeclaration +reduceReverse2 ImmutableArray.res:97:6 path:+ImmutableArray - addValueDeclaration +someU ImmutableArray.res:99:6 path:+ImmutableArray - addValueDeclaration +some ImmutableArray.res:100:6 path:+ImmutableArray - addValueDeclaration +everyU ImmutableArray.res:102:6 path:+ImmutableArray - addValueDeclaration +every ImmutableArray.res:103:6 path:+ImmutableArray - addValueDeclaration +every2U ImmutableArray.res:105:6 path:+ImmutableArray - addValueDeclaration +every2 ImmutableArray.res:106:6 path:+ImmutableArray - addValueDeclaration +some2U ImmutableArray.res:108:6 path:+ImmutableArray - addValueDeclaration +some2 ImmutableArray.res:109:6 path:+ImmutableArray - addValueDeclaration +cmpU ImmutableArray.res:111:6 path:+ImmutableArray - addValueDeclaration +cmp ImmutableArray.res:112:6 path:+ImmutableArray - addValueDeclaration +eqU ImmutableArray.res:114:6 path:+ImmutableArray - addValueDeclaration +eq ImmutableArray.res:115:6 path:+ImmutableArray - addValueReference ImmutableArray.res:14:6 --> ImmutableArray.res:14:18 - addValueReference ImmutableArray.res:14:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:16:6 --> ImmutableArray.res:16:16 - addValueReference ImmutableArray.res:16:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:20:6 --> ImmutableArray.res:20:15 - addValueReference ImmutableArray.res:20:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:22:6 --> ImmutableArray.res:22:13 - addValueReference ImmutableArray.res:22:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:24:6 --> ImmutableArray.res:24:13 - addValueReference ImmutableArray.res:24:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:24:6 --> ImmutableArray.res:24:16 - addValueReference ImmutableArray.res:26:6 --> ImmutableArray.res:26:16 - addValueReference ImmutableArray.res:26:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:26:6 --> ImmutableArray.res:26:19 - addValueReference ImmutableArray.res:28:6 --> ImmutableArray.res:28:19 - addValueReference ImmutableArray.res:28:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:28:6 --> ImmutableArray.res:28:22 - addValueReference ImmutableArray.res:30:6 --> ImmutableArray.res:30:22 - addValueReference ImmutableArray.res:30:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:30:6 --> ImmutableArray.res:30:25 - addValueReference ImmutableArray.res:32:6 --> ImmutableArray.res:32:16 - addValueReference ImmutableArray.res:32:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:32:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:34:6 --> ImmutableArray.res:34:16 - addValueReference ImmutableArray.res:34:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:34:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:36:6 --> ImmutableArray.res:36:26 - addValueReference ImmutableArray.res:36:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:38:6 --> ImmutableArray.res:38:32 - addValueReference ImmutableArray.res:38:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:40:6 --> ImmutableArray.res:40:14 - addValueReference ImmutableArray.res:40:6 --> ImmutableArray.res:40:17 - addValueReference ImmutableArray.res:40:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:42:6 --> ImmutableArray.res:42:15 - addValueReference ImmutableArray.res:42:6 --> ImmutableArray.res:42:18 - addValueReference ImmutableArray.res:42:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:44:6 --> ImmutableArray.res:44:17 - addValueReference ImmutableArray.res:44:6 --> ImmutableArray.res:44:20 - addValueReference ImmutableArray.res:44:6 --> ImmutableArray.res:44:23 - addValueReference ImmutableArray.res:44:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:46:6 --> ImmutableArray.res:46:17 - addValueReference ImmutableArray.res:46:6 --> ImmutableArray.res:46:20 - addValueReference ImmutableArray.res:46:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:47:6 --> ImmutableArray.res:47:16 - addValueReference ImmutableArray.res:47:6 --> ImmutableArray.res:47:19 - addValueReference ImmutableArray.res:47:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:49:6 --> ImmutableArray.res:49:27 - addValueReference ImmutableArray.res:49:6 --> ImmutableArray.res:49:30 - addValueReference ImmutableArray.res:49:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:50:6 --> ImmutableArray.res:50:26 - addValueReference ImmutableArray.res:50:6 --> ImmutableArray.res:50:29 - addValueReference ImmutableArray.res:50:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:52:6 --> ImmutableArray.res:52:13 - addValueReference ImmutableArray.res:52:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:52:6 --> ImmutableArray.res:52:17 - addValueReference ImmutableArray.res:52:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:52:6 --> ImmutableArray.res:9:2 - addValueReference ImmutableArray.res:54:6 --> ImmutableArray.res:54:16 - addValueReference ImmutableArray.res:54:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:54:6 --> ImmutableArray.res:54:20 - addValueReference ImmutableArray.res:54:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:54:6 --> ImmutableArray.res:54:24 - addValueReference ImmutableArray.res:54:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:55:6 --> ImmutableArray.res:55:15 - addValueReference ImmutableArray.res:55:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:55:6 --> ImmutableArray.res:55:19 - addValueReference ImmutableArray.res:55:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:55:6 --> ImmutableArray.res:55:23 - addValueReference ImmutableArray.res:55:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:57:6 --> ImmutableArray.res:57:14 - addValueReference ImmutableArray.res:57:6 --> ImmutableArray.res:6:2 - addValueReference ImmutableArray.res:57:6 --> ImmutableArray.res:10:2 - addValueReference ImmutableArray.res:59:6 --> ImmutableArray.res:59:16 - addValueReference ImmutableArray.res:59:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:59:6 --> ImmutableArray.res:59:20 - addValueReference ImmutableArray.res:59:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:59:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:61:6 --> ImmutableArray.res:61:20 - addValueReference ImmutableArray.res:61:6 --> ImmutableArray.res:7:2 - addValueReference ImmutableArray.res:61:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:63:6 --> ImmutableArray.res:63:15 - addValueReference ImmutableArray.res:63:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:63:6 --> ImmutableArray.res:63:18 - addValueReference ImmutableArray.res:63:6 --> ImmutableArray.res:63:27 - addValueReference ImmutableArray.res:63:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:65:6 --> ImmutableArray.res:65:20 - addValueReference ImmutableArray.res:65:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:65:6 --> ImmutableArray.res:65:23 - addValueReference ImmutableArray.res:65:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:67:6 --> ImmutableArray.res:67:13 - addValueReference ImmutableArray.res:67:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:67:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:69:6 --> ImmutableArray.res:69:18 - addValueReference ImmutableArray.res:69:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:69:6 --> ImmutableArray.res:69:21 - addValueReference ImmutableArray.res:70:6 --> ImmutableArray.res:70:17 - addValueReference ImmutableArray.res:70:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:70:6 --> ImmutableArray.res:70:20 - addValueReference ImmutableArray.res:72:6 --> ImmutableArray.res:72:14 - addValueReference ImmutableArray.res:72:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:72:6 --> ImmutableArray.res:72:17 - addValueReference ImmutableArray.res:72:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:73:6 --> ImmutableArray.res:73:13 - addValueReference ImmutableArray.res:73:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:73:6 --> ImmutableArray.res:73:16 - addValueReference ImmutableArray.res:73:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:75:6 --> ImmutableArray.res:75:24 - addValueReference ImmutableArray.res:75:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:75:6 --> ImmutableArray.res:75:27 - addValueReference ImmutableArray.res:75:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:76:6 --> ImmutableArray.res:76:23 - addValueReference ImmutableArray.res:76:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:76:6 --> ImmutableArray.res:76:26 - addValueReference ImmutableArray.res:76:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:78:6 --> ImmutableArray.res:78:18 - addValueReference ImmutableArray.res:78:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:78:6 --> ImmutableArray.res:78:21 - addValueReference ImmutableArray.res:78:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:79:6 --> ImmutableArray.res:79:17 - addValueReference ImmutableArray.res:79:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:79:6 --> ImmutableArray.res:79:20 - addValueReference ImmutableArray.res:79:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:81:6 --> ImmutableArray.res:81:27 - addValueReference ImmutableArray.res:81:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:81:6 --> ImmutableArray.res:81:30 - addValueReference ImmutableArray.res:82:6 --> ImmutableArray.res:82:26 - addValueReference ImmutableArray.res:82:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:82:6 --> ImmutableArray.res:82:29 - addValueReference ImmutableArray.res:84:6 --> ImmutableArray.res:84:23 - addValueReference ImmutableArray.res:84:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:84:6 --> ImmutableArray.res:84:26 - addValueReference ImmutableArray.res:84:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:85:6 --> ImmutableArray.res:85:22 - addValueReference ImmutableArray.res:85:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:85:6 --> ImmutableArray.res:85:25 - addValueReference ImmutableArray.res:85:6 --> ImmutableArray.res:8:2 - addValueReference ImmutableArray.res:87:6 --> ImmutableArray.res:87:20 - addValueReference ImmutableArray.res:87:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:87:6 --> ImmutableArray.res:87:23 - addValueReference ImmutableArray.res:87:6 --> ImmutableArray.res:10:2 - addValueReference ImmutableArray.res:88:6 --> ImmutableArray.res:88:19 - addValueReference ImmutableArray.res:88:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:88:6 --> ImmutableArray.res:88:22 - addValueReference ImmutableArray.res:88:6 --> ImmutableArray.res:10:2 - addValueReference ImmutableArray.res:90:6 --> ImmutableArray.res:90:17 - addValueReference ImmutableArray.res:90:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:90:6 --> ImmutableArray.res:90:20 - addValueReference ImmutableArray.res:90:6 --> ImmutableArray.res:90:23 - addValueReference ImmutableArray.res:91:6 --> ImmutableArray.res:91:16 - addValueReference ImmutableArray.res:91:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:91:6 --> ImmutableArray.res:91:19 - addValueReference ImmutableArray.res:91:6 --> ImmutableArray.res:91:22 - addValueReference ImmutableArray.res:93:6 --> ImmutableArray.res:93:24 - addValueReference ImmutableArray.res:93:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:93:6 --> ImmutableArray.res:93:27 - addValueReference ImmutableArray.res:93:6 --> ImmutableArray.res:93:30 - addValueReference ImmutableArray.res:94:6 --> ImmutableArray.res:94:23 - addValueReference ImmutableArray.res:94:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:94:6 --> ImmutableArray.res:94:26 - addValueReference ImmutableArray.res:94:6 --> ImmutableArray.res:94:29 - addValueReference ImmutableArray.res:96:6 --> ImmutableArray.res:96:25 - addValueReference ImmutableArray.res:96:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:96:6 --> ImmutableArray.res:96:29 - addValueReference ImmutableArray.res:96:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:96:6 --> ImmutableArray.res:96:33 - addValueReference ImmutableArray.res:96:6 --> ImmutableArray.res:96:36 - addValueReference ImmutableArray.res:97:6 --> ImmutableArray.res:97:24 - addValueReference ImmutableArray.res:97:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:97:6 --> ImmutableArray.res:97:28 - addValueReference ImmutableArray.res:97:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:97:6 --> ImmutableArray.res:97:32 - addValueReference ImmutableArray.res:97:6 --> ImmutableArray.res:97:35 - addValueReference ImmutableArray.res:99:6 --> ImmutableArray.res:99:15 - addValueReference ImmutableArray.res:99:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:99:6 --> ImmutableArray.res:99:18 - addValueReference ImmutableArray.res:100:6 --> ImmutableArray.res:100:14 - addValueReference ImmutableArray.res:100:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:100:6 --> ImmutableArray.res:100:17 - addValueReference ImmutableArray.res:102:6 --> ImmutableArray.res:102:16 - addValueReference ImmutableArray.res:102:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:102:6 --> ImmutableArray.res:102:19 - addValueReference ImmutableArray.res:103:6 --> ImmutableArray.res:103:15 - addValueReference ImmutableArray.res:103:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:103:6 --> ImmutableArray.res:103:18 - addValueReference ImmutableArray.res:105:6 --> ImmutableArray.res:105:17 - addValueReference ImmutableArray.res:105:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:105:6 --> ImmutableArray.res:105:21 - addValueReference ImmutableArray.res:105:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:105:6 --> ImmutableArray.res:105:25 - addValueReference ImmutableArray.res:106:6 --> ImmutableArray.res:106:16 - addValueReference ImmutableArray.res:106:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:106:6 --> ImmutableArray.res:106:20 - addValueReference ImmutableArray.res:106:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:106:6 --> ImmutableArray.res:106:24 - addValueReference ImmutableArray.res:108:6 --> ImmutableArray.res:108:16 - addValueReference ImmutableArray.res:108:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:108:6 --> ImmutableArray.res:108:20 - addValueReference ImmutableArray.res:108:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:108:6 --> ImmutableArray.res:108:24 - addValueReference ImmutableArray.res:109:6 --> ImmutableArray.res:109:15 - addValueReference ImmutableArray.res:109:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:109:6 --> ImmutableArray.res:109:19 - addValueReference ImmutableArray.res:109:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:109:6 --> ImmutableArray.res:109:23 - addValueReference ImmutableArray.res:111:6 --> ImmutableArray.res:111:14 - addValueReference ImmutableArray.res:111:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:111:6 --> ImmutableArray.res:111:18 - addValueReference ImmutableArray.res:111:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:111:6 --> ImmutableArray.res:111:22 - addValueReference ImmutableArray.res:112:6 --> ImmutableArray.res:112:13 - addValueReference ImmutableArray.res:112:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:112:6 --> ImmutableArray.res:112:17 - addValueReference ImmutableArray.res:112:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:112:6 --> ImmutableArray.res:112:21 - addValueReference ImmutableArray.res:114:6 --> ImmutableArray.res:114:13 - addValueReference ImmutableArray.res:114:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:114:6 --> ImmutableArray.res:114:17 - addValueReference ImmutableArray.res:114:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:114:6 --> ImmutableArray.res:114:21 - addValueReference ImmutableArray.res:115:6 --> ImmutableArray.res:115:12 - addValueReference ImmutableArray.res:115:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:115:6 --> ImmutableArray.res:115:16 - addValueReference ImmutableArray.res:115:6 --> ImmutableArray.res:5:2 - addValueReference ImmutableArray.res:115:6 --> ImmutableArray.res:115:20 - addValueReference ImmutableArray.resi:6:2 --> ImmutableArray.res:24:6 - addValueReference ImmutableArray.resi:9:0 --> ImmutableArray.res:14:6 - addValueReference ImmutableArray.resi:12:0 --> ImmutableArray.res:16:6 - addValueReference ImmutableArray.resi:14:0 --> ImmutableArray.res:20:6 - addValueReference ImmutableArray.resi:17:0 --> ImmutableArray.res:22:6 - addValueReference ImmutableArray.resi:19:0 --> ImmutableArray.res:24:6 - addValueReference ImmutableArray.resi:21:0 --> ImmutableArray.res:26:6 - addValueReference ImmutableArray.resi:23:0 --> ImmutableArray.res:28:6 - addValueReference ImmutableArray.resi:25:0 --> ImmutableArray.res:30:6 - addValueReference ImmutableArray.resi:27:0 --> ImmutableArray.res:32:6 - addValueReference ImmutableArray.resi:29:0 --> ImmutableArray.res:34:6 - addValueReference ImmutableArray.resi:31:0 --> ImmutableArray.res:36:6 - addValueReference ImmutableArray.resi:33:0 --> ImmutableArray.res:38:6 - addValueReference ImmutableArray.resi:35:0 --> ImmutableArray.res:40:6 - addValueReference ImmutableArray.resi:37:0 --> ImmutableArray.res:42:6 - addValueReference ImmutableArray.resi:39:0 --> ImmutableArray.res:44:6 - addValueReference ImmutableArray.resi:41:0 --> ImmutableArray.res:46:6 - addValueReference ImmutableArray.resi:42:0 --> ImmutableArray.res:47:6 - addValueReference ImmutableArray.resi:44:0 --> ImmutableArray.res:49:6 - addValueReference ImmutableArray.resi:45:0 --> ImmutableArray.res:50:6 - addValueReference ImmutableArray.resi:47:0 --> ImmutableArray.res:52:6 - addValueReference ImmutableArray.resi:49:0 --> ImmutableArray.res:54:6 - addValueReference ImmutableArray.resi:50:0 --> ImmutableArray.res:55:6 - addValueReference ImmutableArray.resi:52:0 --> ImmutableArray.res:57:6 - addValueReference ImmutableArray.resi:54:0 --> ImmutableArray.res:59:6 - addValueReference ImmutableArray.resi:56:0 --> ImmutableArray.res:61:6 - addValueReference ImmutableArray.resi:58:0 --> ImmutableArray.res:63:6 - addValueReference ImmutableArray.resi:60:0 --> ImmutableArray.res:65:6 - addValueReference ImmutableArray.resi:62:0 --> ImmutableArray.res:67:6 - addValueReference ImmutableArray.resi:64:0 --> ImmutableArray.res:69:6 - addValueReference ImmutableArray.resi:65:0 --> ImmutableArray.res:70:6 - addValueReference ImmutableArray.resi:67:0 --> ImmutableArray.res:72:6 - addValueReference ImmutableArray.resi:68:0 --> ImmutableArray.res:73:6 - addValueReference ImmutableArray.resi:70:0 --> ImmutableArray.res:75:6 - addValueReference ImmutableArray.resi:71:0 --> ImmutableArray.res:76:6 - addValueReference ImmutableArray.resi:73:0 --> ImmutableArray.res:78:6 - addValueReference ImmutableArray.resi:74:0 --> ImmutableArray.res:79:6 - addValueReference ImmutableArray.resi:76:0 --> ImmutableArray.res:81:6 - addValueReference ImmutableArray.resi:77:0 --> ImmutableArray.res:82:6 - addValueReference ImmutableArray.resi:79:0 --> ImmutableArray.res:84:6 - addValueReference ImmutableArray.resi:80:0 --> ImmutableArray.res:85:6 - addValueReference ImmutableArray.resi:82:0 --> ImmutableArray.res:87:6 - addValueReference ImmutableArray.resi:83:0 --> ImmutableArray.res:88:6 - addValueReference ImmutableArray.resi:85:0 --> ImmutableArray.res:90:6 - addValueReference ImmutableArray.resi:86:0 --> ImmutableArray.res:91:6 - addValueReference ImmutableArray.resi:88:0 --> ImmutableArray.res:93:6 - addValueReference ImmutableArray.resi:89:0 --> ImmutableArray.res:94:6 - addValueReference ImmutableArray.resi:91:0 --> ImmutableArray.res:96:6 - addValueReference ImmutableArray.resi:92:0 --> ImmutableArray.res:97:6 - addValueReference ImmutableArray.resi:94:0 --> ImmutableArray.res:99:6 - addValueReference ImmutableArray.resi:95:0 --> ImmutableArray.res:100:6 - addValueReference ImmutableArray.resi:97:0 --> ImmutableArray.res:102:6 - addValueReference ImmutableArray.resi:98:0 --> ImmutableArray.res:103:6 - addValueReference ImmutableArray.resi:100:0 --> ImmutableArray.res:105:6 - addValueReference ImmutableArray.resi:101:0 --> ImmutableArray.res:106:6 - addValueReference ImmutableArray.resi:103:0 --> ImmutableArray.res:108:6 - addValueReference ImmutableArray.resi:104:0 --> ImmutableArray.res:109:6 - addValueReference ImmutableArray.resi:106:0 --> ImmutableArray.res:111:6 - addValueReference ImmutableArray.resi:107:0 --> ImmutableArray.res:112:6 - addValueReference ImmutableArray.resi:109:0 --> ImmutableArray.res:114:6 - addValueReference ImmutableArray.resi:110:0 --> ImmutableArray.res:115:6 - Scanning ImmutableArray.cmti Source:ImmutableArray.resi - addValueDeclaration +get ImmutableArray.resi:6:2 path:ImmutableArray.Array - addValueDeclaration +fromArray ImmutableArray.resi:9:0 path:ImmutableArray - addValueDeclaration +toArray ImmutableArray.resi:12:0 path:ImmutableArray - addValueDeclaration +length ImmutableArray.resi:14:0 path:ImmutableArray - addValueDeclaration +size ImmutableArray.resi:17:0 path:ImmutableArray - addValueDeclaration +get ImmutableArray.resi:19:0 path:ImmutableArray - addValueDeclaration +getExn ImmutableArray.resi:21:0 path:ImmutableArray - addValueDeclaration +getUnsafe ImmutableArray.resi:23:0 path:ImmutableArray - addValueDeclaration +getUndefined ImmutableArray.resi:25:0 path:ImmutableArray - addValueDeclaration +shuffle ImmutableArray.resi:27:0 path:ImmutableArray - addValueDeclaration +reverse ImmutableArray.resi:29:0 path:ImmutableArray - addValueDeclaration +makeUninitialized ImmutableArray.resi:31:0 path:ImmutableArray - addValueDeclaration +makeUninitializedUnsafe ImmutableArray.resi:33:0 path:ImmutableArray - addValueDeclaration +make ImmutableArray.resi:35:0 path:ImmutableArray - addValueDeclaration +range ImmutableArray.resi:37:0 path:ImmutableArray - addValueDeclaration +rangeBy ImmutableArray.resi:39:0 path:ImmutableArray - addValueDeclaration +makeByU ImmutableArray.resi:41:0 path:ImmutableArray - addValueDeclaration +makeBy ImmutableArray.resi:42:0 path:ImmutableArray - addValueDeclaration +makeByAndShuffleU ImmutableArray.resi:44:0 path:ImmutableArray - addValueDeclaration +makeByAndShuffle ImmutableArray.resi:45:0 path:ImmutableArray - addValueDeclaration +zip ImmutableArray.resi:47:0 path:ImmutableArray - addValueDeclaration +zipByU ImmutableArray.resi:49:0 path:ImmutableArray - addValueDeclaration +zipBy ImmutableArray.resi:50:0 path:ImmutableArray - addValueDeclaration +unzip ImmutableArray.resi:52:0 path:ImmutableArray - addValueDeclaration +concat ImmutableArray.resi:54:0 path:ImmutableArray - addValueDeclaration +concatMany ImmutableArray.resi:56:0 path:ImmutableArray - addValueDeclaration +slice ImmutableArray.resi:58:0 path:ImmutableArray - addValueDeclaration +sliceToEnd ImmutableArray.resi:60:0 path:ImmutableArray - addValueDeclaration +copy ImmutableArray.resi:62:0 path:ImmutableArray - addValueDeclaration +forEachU ImmutableArray.resi:64:0 path:ImmutableArray - addValueDeclaration +forEach ImmutableArray.resi:65:0 path:ImmutableArray - addValueDeclaration +mapU ImmutableArray.resi:67:0 path:ImmutableArray - addValueDeclaration +map ImmutableArray.resi:68:0 path:ImmutableArray - addValueDeclaration +keepWithIndexU ImmutableArray.resi:70:0 path:ImmutableArray - addValueDeclaration +keepWithIndex ImmutableArray.resi:71:0 path:ImmutableArray - addValueDeclaration +keepMapU ImmutableArray.resi:73:0 path:ImmutableArray - addValueDeclaration +keepMap ImmutableArray.resi:74:0 path:ImmutableArray - addValueDeclaration +forEachWithIndexU ImmutableArray.resi:76:0 path:ImmutableArray - addValueDeclaration +forEachWithIndex ImmutableArray.resi:77:0 path:ImmutableArray - addValueDeclaration +mapWithIndexU ImmutableArray.resi:79:0 path:ImmutableArray - addValueDeclaration +mapWithIndex ImmutableArray.resi:80:0 path:ImmutableArray - addValueDeclaration +partitionU ImmutableArray.resi:82:0 path:ImmutableArray - addValueDeclaration +partition ImmutableArray.resi:83:0 path:ImmutableArray - addValueDeclaration +reduceU ImmutableArray.resi:85:0 path:ImmutableArray - addValueDeclaration +reduce ImmutableArray.resi:86:0 path:ImmutableArray - addValueDeclaration +reduceReverseU ImmutableArray.resi:88:0 path:ImmutableArray - addValueDeclaration +reduceReverse ImmutableArray.resi:89:0 path:ImmutableArray - addValueDeclaration +reduceReverse2U ImmutableArray.resi:91:0 path:ImmutableArray - addValueDeclaration +reduceReverse2 ImmutableArray.resi:92:0 path:ImmutableArray - addValueDeclaration +someU ImmutableArray.resi:94:0 path:ImmutableArray - addValueDeclaration +some ImmutableArray.resi:95:0 path:ImmutableArray - addValueDeclaration +everyU ImmutableArray.resi:97:0 path:ImmutableArray - addValueDeclaration +every ImmutableArray.resi:98:0 path:ImmutableArray - addValueDeclaration +every2U ImmutableArray.resi:100:0 path:ImmutableArray - addValueDeclaration +every2 ImmutableArray.resi:101:0 path:ImmutableArray - addValueDeclaration +some2U ImmutableArray.resi:103:0 path:ImmutableArray - addValueDeclaration +some2 ImmutableArray.resi:104:0 path:ImmutableArray - addValueDeclaration +cmpU ImmutableArray.resi:106:0 path:ImmutableArray - addValueDeclaration +cmp ImmutableArray.resi:107:0 path:ImmutableArray - addValueDeclaration +eqU ImmutableArray.resi:109:0 path:ImmutableArray - addValueDeclaration +eq ImmutableArray.resi:110:0 path:ImmutableArray - Scanning ImportHookDefault.cmt Source:ImportHookDefault.res - addValueDeclaration +make ImportHookDefault.res:6:0 path:+ImportHookDefault - addValueDeclaration +make2 ImportHookDefault.res:13:0 path:+ImportHookDefault - addRecordLabelDeclaration name ImportHookDefault.res:2:2 path:+ImportHookDefault.person - addRecordLabelDeclaration age ImportHookDefault.res:3:2 path:+ImportHookDefault.person - Scanning ImportHooks.cmt Source:ImportHooks.res - addValueDeclaration +make ImportHooks.res:13:0 path:+ImportHooks - addValueDeclaration +foo ImportHooks.res:20:0 path:+ImportHooks - addRecordLabelDeclaration name ImportHooks.res:3:2 path:+ImportHooks.person - addRecordLabelDeclaration age ImportHooks.res:4:2 path:+ImportHooks.person - Scanning ImportIndex.cmt Source:ImportIndex.res - addValueDeclaration +make ImportIndex.res:2:0 path:+ImportIndex - Scanning ImportJsValue.cmt Source:ImportJsValue.res - addValueDeclaration +round ImportJsValue.res:1:0 path:+ImportJsValue - addValueDeclaration +area ImportJsValue.res:15:0 path:+ImportJsValue - addValueDeclaration +returnMixedArray ImportJsValue.res:23:0 path:+ImportJsValue - addValueDeclaration +roundedNumber ImportJsValue.res:27:4 path:+ImportJsValue - addValueDeclaration +areaValue ImportJsValue.res:30:4 path:+ImportJsValue - addValueDeclaration +getAbs ImportJsValue.res:40:6 path:+ImportJsValue.AbsoluteValue - addValueDeclaration +useGetProp ImportJsValue.res:47:4 path:+ImportJsValue - addValueDeclaration +useGetAbs ImportJsValue.res:50:4 path:+ImportJsValue - addValueDeclaration +useColor ImportJsValue.res:58:0 path:+ImportJsValue - addValueDeclaration +higherOrder ImportJsValue.res:60:0 path:+ImportJsValue - addValueDeclaration +returnedFromHigherOrder ImportJsValue.res:64:4 path:+ImportJsValue - addValueDeclaration +convertVariant ImportJsValue.res:70:0 path:+ImportJsValue - addValueDeclaration +polymorphic ImportJsValue.res:73:0 path:+ImportJsValue - addValueDeclaration +default ImportJsValue.res:75:0 path:+ImportJsValue - addRecordLabelDeclaration x ImportJsValue.res:11:2 path:+ImportJsValue.point - addRecordLabelDeclaration y ImportJsValue.res:12:2 path:+ImportJsValue.point - addValueReference ImportJsValue.res:27:4 --> ImportJsValue.res:1:0 - addValueReference ImportJsValue.res:30:4 --> ImportJsValue.res:15:0 - addValueDeclaration +getAbs ImportJsValue.res:41:8 path:+ImportJsValue.AbsoluteValue - addValueReference ImportJsValue.res:41:8 --> ImportJsValue.res:40:16 - addValueReference ImportJsValue.res:40:6 --> ImportJsValue.res:41:8 - addValueReference ImportJsValue.res:47:4 --> ImportJsValue.res:47:18 - addValueReference ImportJsValue.res:47:4 --> ImportJsValue.res:37:2 - addValueReference ImportJsValue.res:50:4 --> ImportJsValue.res:50:17 - addValueReference ImportJsValue.res:50:4 --> ImportJsValue.res:40:6 - addValueReference ImportJsValue.res:64:4 --> ImportJsValue.res:60:0 - addVariantCaseDeclaration I ImportJsValue.res:67:2 path:+ImportJsValue.variant - addVariantCaseDeclaration S ImportJsValue.res:68:2 path:+ImportJsValue.variant - Scanning ImportMyBanner.cmt Source:ImportMyBanner.res - addValueDeclaration +make ImportMyBanner.res:7:0 path:+ImportMyBanner - addValueDeclaration +make ImportMyBanner.res:12:4 path:+ImportMyBanner - addRecordLabelDeclaration text ImportMyBanner.res:5:16 path:+ImportMyBanner.message - addValueReference ImportMyBanner.res:12:4 --> ImportMyBanner.res:7:0 - Scanning JSResource.cmt Source:JSResource.res - Scanning LetPrivate.cmt Source:LetPrivate.res - addValueDeclaration +y LetPrivate.res:7:4 path:+LetPrivate - addValueDeclaration +x LetPrivate.res:3:6 path:+LetPrivate.local_1 - addValueReference LetPrivate.res:7:4 --> LetPrivate.res:3:6 - Scanning ModuleAliases.cmt Source:ModuleAliases.res - addValueDeclaration +testNested ModuleAliases.res:22:4 path:+ModuleAliases - addValueDeclaration +testInner ModuleAliases.res:25:4 path:+ModuleAliases - addValueDeclaration +testInner2 ModuleAliases.res:28:4 path:+ModuleAliases - addRecordLabelDeclaration inner ModuleAliases.res:3:19 path:+ModuleAliases.Outer.Inner.innerT - addRecordLabelDeclaration nested ModuleAliases.res:11:16 path:+ModuleAliases.Outer2.Inner2.InnerNested.t - addValueReference ModuleAliases.res:22:4 --> ModuleAliases.res:22:18 - addValueReference ModuleAliases.res:25:4 --> ModuleAliases.res:25:17 - addValueReference ModuleAliases.res:28:4 --> ModuleAliases.res:28:18 - Scanning ModuleAliases2.cmt Source:ModuleAliases2.res - addValueDeclaration +q ModuleAliases2.res:21:4 path:+ModuleAliases2 - addRecordLabelDeclaration x ModuleAliases2.res:3:2 path:+ModuleAliases2.record - addRecordLabelDeclaration y ModuleAliases2.res:4:2 path:+ModuleAliases2.record - addRecordLabelDeclaration outer ModuleAliases2.res:9:16 path:+ModuleAliases2.Outer.outer - addRecordLabelDeclaration inner ModuleAliases2.res:13:18 path:+ModuleAliases2.Outer.Inner.inner - Scanning ModuleExceptionBug.cmt Source:ModuleExceptionBug.res - addValueDeclaration +customDouble ModuleExceptionBug.res:2:6 path:+ModuleExceptionBug.Dep - addValueDeclaration +ddjdj ModuleExceptionBug.res:7:4 path:+ModuleExceptionBug - addValueReference ModuleExceptionBug.res:2:6 --> ModuleExceptionBug.res:2:21 - addExceptionDeclaration MyOtherException ModuleExceptionBug.res:5:0 path:+ModuleExceptionBug - addValueReference ModuleExceptionBug.res:8:7 --> ModuleExceptionBug.res:7:4 - Scanning NestedModules.cmt Source:NestedModules.res - addValueDeclaration +notNested NestedModules.res:2:4 path:+NestedModules - addValueDeclaration +theAnswer NestedModules.res:6:6 path:+NestedModules.Universe - addValueDeclaration +notExported NestedModules.res:8:6 path:+NestedModules.Universe - addValueDeclaration +x NestedModules.res:14:8 path:+NestedModules.Universe.Nested2 - addValueDeclaration +nested2Value NestedModules.res:17:8 path:+NestedModules.Universe.Nested2 - addValueDeclaration +y NestedModules.res:19:8 path:+NestedModules.Universe.Nested2 - addValueDeclaration +x NestedModules.res:25:10 path:+NestedModules.Universe.Nested2.Nested3 - addValueDeclaration +y NestedModules.res:26:10 path:+NestedModules.Universe.Nested2.Nested3 - addValueDeclaration +z NestedModules.res:27:10 path:+NestedModules.Universe.Nested2.Nested3 - addValueDeclaration +w NestedModules.res:28:10 path:+NestedModules.Universe.Nested2.Nested3 - addValueDeclaration +nested3Value NestedModules.res:34:10 path:+NestedModules.Universe.Nested2.Nested3 - addValueDeclaration +nested3Function NestedModules.res:37:10 path:+NestedModules.Universe.Nested2.Nested3 - addValueDeclaration +nested2Function NestedModules.res:41:8 path:+NestedModules.Universe.Nested2 - addValueDeclaration +someString NestedModules.res:50:6 path:+NestedModules.Universe - addValueReference NestedModules.res:37:10 --> NestedModules.res:37:29 - addValueReference NestedModules.res:41:8 --> NestedModules.res:41:27 - addVariantCaseDeclaration A NestedModules.res:46:4 path:+NestedModules.Universe.variant - addVariantCaseDeclaration B NestedModules.res:47:4 path:+NestedModules.Universe.variant - Scanning NestedModulesInSignature.cmt Source:NestedModulesInSignature.res - addValueDeclaration +theAnswer NestedModulesInSignature.res:2:6 path:+NestedModulesInSignature.Universe - addValueReference NestedModulesInSignature.resi:2:2 --> NestedModulesInSignature.res:2:6 - Scanning NestedModulesInSignature.cmti Source:NestedModulesInSignature.resi - addValueDeclaration +theAnswer NestedModulesInSignature.resi:2:2 path:NestedModulesInSignature.Universe - Scanning Newsyntax.cmt Source:Newsyntax.res - addValueDeclaration +x Newsyntax.res:1:4 path:+Newsyntax - addValueDeclaration +y Newsyntax.res:3:4 path:+Newsyntax - addRecordLabelDeclaration xxx Newsyntax.res:6:2 path:+Newsyntax.record - addRecordLabelDeclaration yyy Newsyntax.res:7:2 path:+Newsyntax.record - addVariantCaseDeclaration A Newsyntax.res:10:15 path:+Newsyntax.variant - addVariantCaseDeclaration B Newsyntax.res:10:17 path:+Newsyntax.variant - addVariantCaseDeclaration C Newsyntax.res:10:25 path:+Newsyntax.variant - addRecordLabelDeclaration xx Newsyntax.res:12:16 path:+Newsyntax.record2 - addRecordLabelDeclaration yy Newsyntax.res:12:23 path:+Newsyntax.record2 - Scanning Newton.cmt Source:Newton.res - addValueDeclaration +- Newton.res:1:4 path:+Newton - addValueDeclaration ++ Newton.res:2:4 path:+Newton - addValueDeclaration +* Newton.res:3:4 path:+Newton - addValueDeclaration +/ Newton.res:4:4 path:+Newton - addValueDeclaration +newton Newton.res:6:4 path:+Newton - addValueDeclaration +f Newton.res:25:4 path:+Newton - addValueDeclaration +fPrimed Newton.res:27:4 path:+Newton - addValueDeclaration +result Newton.res:29:4 path:+Newton - addValueDeclaration +current Newton.res:7:6 path:+Newton - addValueReference Newton.res:7:6 --> Newton.res:6:28 - addValueDeclaration +iterateMore Newton.res:8:6 path:+Newton - addValueDeclaration +delta Newton.res:9:8 path:+Newton - addValueReference Newton.res:9:8 --> Newton.res:8:21 - addValueReference Newton.res:9:8 --> Newton.res:8:31 - addValueReference Newton.res:9:8 --> Newton.res:1:4 - addValueReference Newton.res:9:8 --> Newton.res:8:31 - addValueReference Newton.res:9:8 --> Newton.res:8:21 - addValueReference Newton.res:9:8 --> Newton.res:1:4 - addValueReference Newton.res:9:8 --> Newton.res:8:31 - addValueReference Newton.res:9:8 --> Newton.res:8:21 - addValueReference Newton.res:8:6 --> Newton.res:9:8 - addValueReference Newton.res:8:6 --> Newton.res:6:38 - addValueReference Newton.res:8:6 --> Newton.res:7:6 - addValueReference Newton.res:8:6 --> Newton.res:8:31 - addValueDeclaration +loop Newton.res:14:10 path:+Newton - addValueDeclaration +previous Newton.res:15:8 path:+Newton - addValueReference Newton.res:15:8 --> Newton.res:7:6 - addValueDeclaration +next Newton.res:16:8 path:+Newton - addValueReference Newton.res:16:8 --> Newton.res:15:8 - addValueReference Newton.res:16:8 --> Newton.res:15:8 - addValueReference Newton.res:16:8 --> Newton.res:6:14 - addValueReference Newton.res:16:8 --> Newton.res:15:8 - addValueReference Newton.res:16:8 --> Newton.res:6:18 - addValueReference Newton.res:16:8 --> Newton.res:4:4 - addValueReference Newton.res:16:8 --> Newton.res:1:4 - addValueReference Newton.res:14:10 --> Newton.res:7:6 - addValueReference Newton.res:14:10 --> Newton.res:14:10 - addValueReference Newton.res:14:10 --> Newton.res:15:8 - addValueReference Newton.res:14:10 --> Newton.res:16:8 - addValueReference Newton.res:14:10 --> Newton.res:8:6 - addValueReference Newton.res:6:4 --> Newton.res:14:10 - addValueReference Newton.res:25:4 --> Newton.res:25:8 - addValueReference Newton.res:25:4 --> Newton.res:25:8 - addValueReference Newton.res:25:4 --> Newton.res:3:4 - addValueReference Newton.res:25:4 --> Newton.res:25:8 - addValueReference Newton.res:25:4 --> Newton.res:3:4 - addValueReference Newton.res:25:4 --> Newton.res:25:8 - addValueReference Newton.res:25:4 --> Newton.res:3:4 - addValueReference Newton.res:25:4 --> Newton.res:25:8 - addValueReference Newton.res:25:4 --> Newton.res:3:4 - addValueReference Newton.res:25:4 --> Newton.res:1:4 - addValueReference Newton.res:25:4 --> Newton.res:25:8 - addValueReference Newton.res:25:4 --> Newton.res:3:4 - addValueReference Newton.res:25:4 --> Newton.res:1:4 - addValueReference Newton.res:25:4 --> Newton.res:2:4 - addValueReference Newton.res:27:4 --> Newton.res:27:14 - addValueReference Newton.res:27:4 --> Newton.res:3:4 - addValueReference Newton.res:27:4 --> Newton.res:27:14 - addValueReference Newton.res:27:4 --> Newton.res:3:4 - addValueReference Newton.res:27:4 --> Newton.res:27:14 - addValueReference Newton.res:27:4 --> Newton.res:3:4 - addValueReference Newton.res:27:4 --> Newton.res:1:4 - addValueReference Newton.res:27:4 --> Newton.res:1:4 - addValueReference Newton.res:29:4 --> Newton.res:25:4 - addValueReference Newton.res:29:4 --> Newton.res:27:4 - addValueReference Newton.res:29:4 --> Newton.res:6:4 - addValueReference Newton.res:31:8 --> Newton.res:29:4 - addValueReference Newton.res:31:18 --> Newton.res:29:4 - addValueReference Newton.res:31:16 --> Newton.res:25:4 - Scanning Opaque.cmt Source:Opaque.res - addValueDeclaration +noConversion Opaque.res:5:4 path:+Opaque - addValueDeclaration +testConvertNestedRecordFromOtherFile Opaque.res:11:4 path:+Opaque - addVariantCaseDeclaration A Opaque.res:2:25 path:+Opaque.opaqueFromRecords - addValueReference Opaque.res:5:4 --> Opaque.res:5:20 - addValueReference Opaque.res:11:4 --> Opaque.res:11:44 - Scanning OptArg.cmt Source:OptArg.res - addValueDeclaration +foo OptArg.res:1:4 path:+OptArg - addValueDeclaration +bar OptArg.res:3:4 path:+OptArg - addValueDeclaration +threeArgs OptArg.res:9:4 path:+OptArg - addValueDeclaration +twoArgs OptArg.res:14:4 path:+OptArg - addValueDeclaration +oneArg OptArg.res:18:4 path:+OptArg - addValueDeclaration +wrapOneArg OptArg.res:20:4 path:+OptArg - addValueDeclaration +fourArgs OptArg.res:24:4 path:+OptArg - addValueDeclaration +wrapfourArgs OptArg.res:26:4 path:+OptArg - addValueReference OptArg.res:1:4 --> OptArg.res:1:14 - addValueReference OptArg.res:1:4 --> OptArg.res:1:20 - addValueReference OptArg.res:1:4 --> OptArg.res:1:26 - addValueReference OptArg.res:1:4 --> OptArg.res:1:11 - addValueReference OptArg.res:1:4 --> OptArg.res:1:17 - addValueReference OptArg.res:1:4 --> OptArg.res:1:23 - addValueReference OptArg.res:1:4 --> OptArg.res:1:29 - addValueReference OptArg.res:3:4 --> OptArg.res:3:17 - addValueReference OptArg.res:3:4 --> OptArg.res:3:27 - DeadOptionalArgs.addReferences foo called with optional argNames:x argNamesMaybe: OptArg.res:5:7 - addValueReference OptArg.res:5:7 --> OptArg.res:1:4 - DeadOptionalArgs.addReferences bar called with optional argNames: argNamesMaybe: OptArg.res:7:7 - addValueReference OptArg.res:7:7 --> OptArg.res:3:4 - addValueReference OptArg.res:9:4 --> OptArg.res:9:20 - addValueReference OptArg.res:9:4 --> OptArg.res:9:26 - addValueReference OptArg.res:9:4 --> OptArg.res:9:32 - addValueReference OptArg.res:9:4 --> OptArg.res:9:17 - addValueReference OptArg.res:9:4 --> OptArg.res:9:23 - addValueReference OptArg.res:9:4 --> OptArg.res:9:29 - addValueReference OptArg.res:9:4 --> OptArg.res:9:35 - DeadOptionalArgs.addReferences threeArgs called with optional argNames:c, a argNamesMaybe: OptArg.res:11:7 - addValueReference OptArg.res:11:7 --> OptArg.res:9:4 - DeadOptionalArgs.addReferences threeArgs called with optional argNames:a argNamesMaybe: OptArg.res:12:7 - addValueReference OptArg.res:12:7 --> OptArg.res:9:4 - addValueReference OptArg.res:14:4 --> OptArg.res:14:18 - addValueReference OptArg.res:14:4 --> OptArg.res:14:24 - addValueReference OptArg.res:14:4 --> OptArg.res:14:15 - addValueReference OptArg.res:14:4 --> OptArg.res:14:21 - addValueReference OptArg.res:14:4 --> OptArg.res:14:27 - DeadOptionalArgs.addReferences twoArgs called with optional argNames: argNamesMaybe: OptArg.res:16:12 - addValueReference OptArg.res:16:12 --> OptArg.res:14:4 - addValueReference OptArg.res:18:4 --> OptArg.res:18:17 - addValueReference OptArg.res:18:4 --> OptArg.res:18:14 - addValueReference OptArg.res:18:4 --> OptArg.res:18:24 - DeadOptionalArgs.addReferences oneArg called with optional argNames:a argNamesMaybe:a OptArg.res:20:30 - addValueReference OptArg.res:20:4 --> OptArg.res:20:18 - addValueReference OptArg.res:20:4 --> OptArg.res:20:24 - addValueReference OptArg.res:20:4 --> OptArg.res:18:4 - DeadOptionalArgs.addReferences wrapOneArg called with optional argNames:a argNamesMaybe: OptArg.res:22:7 - addValueReference OptArg.res:22:7 --> OptArg.res:20:4 - addValueReference OptArg.res:24:4 --> OptArg.res:24:19 - addValueReference OptArg.res:24:4 --> OptArg.res:24:25 - addValueReference OptArg.res:24:4 --> OptArg.res:24:31 - addValueReference OptArg.res:24:4 --> OptArg.res:24:37 - addValueReference OptArg.res:24:4 --> OptArg.res:24:16 - addValueReference OptArg.res:24:4 --> OptArg.res:24:22 - addValueReference OptArg.res:24:4 --> OptArg.res:24:28 - addValueReference OptArg.res:24:4 --> OptArg.res:24:34 - addValueReference OptArg.res:24:4 --> OptArg.res:24:40 - DeadOptionalArgs.addReferences fourArgs called with optional argNames:c, b, a argNamesMaybe:c, b, a OptArg.res:26:44 - addValueReference OptArg.res:26:4 --> OptArg.res:26:20 - addValueReference OptArg.res:26:4 --> OptArg.res:26:26 - addValueReference OptArg.res:26:4 --> OptArg.res:26:32 - addValueReference OptArg.res:26:4 --> OptArg.res:26:38 - addValueReference OptArg.res:26:4 --> OptArg.res:24:4 - DeadOptionalArgs.addReferences wrapfourArgs called with optional argNames:c, a argNamesMaybe: OptArg.res:28:7 - addValueReference OptArg.res:28:7 --> OptArg.res:26:4 - DeadOptionalArgs.addReferences wrapfourArgs called with optional argNames:c, b argNamesMaybe: OptArg.res:29:7 - addValueReference OptArg.res:29:7 --> OptArg.res:26:4 - addValueReference OptArg.resi:1:0 --> OptArg.res:1:4 - OptionalArgs.addFunctionReference OptArg.resi:1:0 OptArg.res:1:4 - addValueReference OptArg.resi:2:0 --> OptArg.res:3:4 - OptionalArgs.addFunctionReference OptArg.resi:2:0 OptArg.res:3:4 - Scanning OptArg.cmti Source:OptArg.resi - addValueDeclaration +foo OptArg.resi:1:0 path:OptArg - addValueDeclaration +bar OptArg.resi:2:0 path:OptArg - Scanning Records.cmt Source:Records.res - addValueDeclaration +origin Records.res:11:4 path:+Records - addValueDeclaration +computeArea Records.res:14:4 path:+Records - addValueDeclaration +coord2d Records.res:20:4 path:+Records - addValueDeclaration +getOpt Records.res:36:4 path:+Records - addValueDeclaration +findAddress Records.res:39:4 path:+Records - addValueDeclaration +someBusiness Records.res:43:4 path:+Records - addValueDeclaration +findAllAddresses Records.res:46:4 path:+Records - addValueDeclaration +getPayload Records.res:65:4 path:+Records - addValueDeclaration +getPayloadRecord Records.res:74:4 path:+Records - addValueDeclaration +recordValue Records.res:77:4 path:+Records - addValueDeclaration +payloadValue Records.res:80:4 path:+Records - addValueDeclaration +getPayloadRecordPlusOne Records.res:83:4 path:+Records - addValueDeclaration +findAddress2 Records.res:96:4 path:+Records - addValueDeclaration +someBusiness2 Records.res:100:4 path:+Records - addValueDeclaration +computeArea3 Records.res:107:4 path:+Records - addValueDeclaration +computeArea4 Records.res:111:4 path:+Records - addValueDeclaration +testMyRec Records.res:127:4 path:+Records - addValueDeclaration +testMyRec2 Records.res:130:4 path:+Records - addValueDeclaration +testMyObj Records.res:133:4 path:+Records - addValueDeclaration +testMyObj2 Records.res:136:4 path:+Records - addValueDeclaration +testMyRecBsAs Records.res:145:4 path:+Records - addValueDeclaration +testMyRecBsAs2 Records.res:148:4 path:+Records - addRecordLabelDeclaration x Records.res:5:2 path:+Records.coord - addRecordLabelDeclaration y Records.res:6:2 path:+Records.coord - addRecordLabelDeclaration z Records.res:7:2 path:+Records.coord - addValueReference Records.res:14:4 --> Records.res:14:20 - addValueReference Records.res:14:4 --> Records.res:14:23 - addValueReference Records.res:14:4 --> Records.res:14:26 - addValueReference Records.res:14:4 --> Records.res:16:31 - addTypeReference Records.res:14:19 --> Records.res:5:2 - addTypeReference Records.res:14:19 --> Records.res:6:2 - addTypeReference Records.res:14:19 --> Records.res:7:2 - addValueReference Records.res:20:4 --> Records.res:20:15 - addValueReference Records.res:20:4 --> Records.res:20:18 - addRecordLabelDeclaration name Records.res:24:2 path:+Records.person - addRecordLabelDeclaration age Records.res:25:2 path:+Records.person - addRecordLabelDeclaration address Records.res:26:2 path:+Records.person - addRecordLabelDeclaration name Records.res:31:2 path:+Records.business - addRecordLabelDeclaration owner Records.res:32:2 path:+Records.business - addRecordLabelDeclaration address Records.res:33:2 path:+Records.business - addValueReference Records.res:36:4 --> Records.res:36:14 - addValueReference Records.res:36:4 --> Records.res:36:19 - addValueReference Records.res:36:4 --> Records.res:36:28 - addTypeReference Records.res:40:2 --> Records.res:33:2 - addValueReference Records.res:39:4 --> Records.res:39:19 - addValueReference Records.res:39:4 --> Records.res:40:35 - addValueReference Records.res:39:4 --> Records.res:36:4 - addValueReference Records.res:46:4 --> Records.res:46:24 - addTypeReference Records.res:50:6 --> Records.res:33:2 - addValueReference Records.res:46:4 --> Records.res:48:14 - addValueReference Records.res:46:4 --> Records.res:50:39 - addValueReference Records.res:46:4 --> Records.res:36:4 - addTypeReference Records.res:51:6 --> Records.res:32:2 - addValueReference Records.res:46:4 --> Records.res:48:14 - addTypeReference Records.res:51:42 --> Records.res:26:2 - addValueReference Records.res:46:4 --> Records.res:51:37 - addValueReference Records.res:46:4 --> Records.res:51:68 - addValueReference Records.res:46:4 --> Records.res:36:4 - addValueReference Records.res:46:4 --> Records.res:36:4 - addRecordLabelDeclaration num Records.res:60:2 path:+Records.payload - addRecordLabelDeclaration payload Records.res:61:2 path:+Records.payload - addValueReference Records.res:65:4 --> Records.res:65:19 - addTypeReference Records.res:65:18 --> Records.res:61:2 - addRecordLabelDeclaration v Records.res:69:2 path:+Records.record - addRecordLabelDeclaration w Records.res:70:2 path:+Records.record - addValueReference Records.res:74:4 --> Records.res:74:25 - addTypeReference Records.res:74:24 --> Records.res:61:2 - addValueReference Records.res:80:4 --> Records.res:77:4 - addTypeReference Records.res:85:5 --> Records.res:69:2 - addValueReference Records.res:83:4 --> Records.res:83:32 - addValueReference Records.res:83:4 --> Records.res:83:32 - addTypeReference Records.res:83:31 --> Records.res:61:2 - addRecordLabelDeclaration name Records.res:90:2 path:+Records.business2 - addRecordLabelDeclaration owner Records.res:91:2 path:+Records.business2 - addRecordLabelDeclaration address2 Records.res:92:2 path:+Records.business2 - addTypeReference Records.res:97:2 --> Records.res:92:2 - addValueReference Records.res:96:4 --> Records.res:96:20 - addValueReference Records.res:96:4 --> Records.res:97:58 - addValueReference Records.res:96:4 --> Records.res:36:4 - addValueReference Records.res:107:4 --> Records.res:107:20 - addValueReference Records.res:107:4 --> Records.res:107:20 - addValueReference Records.res:107:4 --> Records.res:107:20 - addValueReference Records.res:107:4 --> Records.res:108:75 - addValueReference Records.res:111:4 --> Records.res:111:20 - addValueReference Records.res:111:4 --> Records.res:111:20 - addValueReference Records.res:111:4 --> Records.res:111:20 - addValueReference Records.res:111:4 --> Records.res:112:53 - addRecordLabelDeclaration type_ Records.res:119:2 path:+Records.myRec - addTypeReference Records.res:127:30 --> Records.res:119:2 - addValueReference Records.res:127:4 --> Records.res:127:17 - addValueReference Records.res:130:4 --> Records.res:130:18 - addValueReference Records.res:133:4 --> Records.res:133:17 - addValueReference Records.res:136:4 --> Records.res:136:18 - addRecordLabelDeclaration type_ Records.res:140:2 path:+Records.myRecBsAs - addTypeReference Records.res:145:38 --> Records.res:140:2 - addValueReference Records.res:145:4 --> Records.res:145:21 - addValueReference Records.res:148:4 --> Records.res:148:22 - Scanning References.cmt Source:References.res - addValueDeclaration +create References.res:4:4 path:+References - addValueDeclaration +access References.res:7:4 path:+References - addValueDeclaration +update References.res:10:4 path:+References - addValueDeclaration +get References.res:17:2 path:+References.R - addValueDeclaration +make References.res:18:2 path:+References.R - addValueDeclaration +set References.res:19:2 path:+References.R - addValueDeclaration +get References.res:31:4 path:+References - addValueDeclaration +make References.res:34:4 path:+References - addValueDeclaration +set References.res:37:4 path:+References - addValueDeclaration +destroysRefIdentity References.res:43:4 path:+References - addValueDeclaration +preserveRefIdentity References.res:47:4 path:+References - addValueReference References.res:4:4 --> References.res:4:14 - addValueReference References.res:7:4 --> References.res:7:13 - addValueReference References.res:10:4 --> References.res:10:13 - addValueReference References.res:10:4 --> References.res:10:13 - addValueDeclaration +get References.res:22:6 path:+References.R - addValueReference References.res:22:6 --> References.res:22:12 - addValueDeclaration +make References.res:23:6 path:+References.R - addValueDeclaration +set References.res:24:6 path:+References.R - addValueReference References.res:24:6 --> References.res:24:16 - addValueReference References.res:24:6 --> References.res:24:13 - addValueReference References.res:31:4 --> References.res:17:2 - addValueReference References.res:34:4 --> References.res:18:2 - addValueReference References.res:37:4 --> References.res:19:2 - addRecordLabelDeclaration x References.res:39:27 path:+References.requiresConversion - addValueReference References.res:43:4 --> References.res:43:27 - addValueReference References.res:47:4 --> References.res:47:27 - addValueReference References.res:17:2 --> References.res:22:6 - addValueReference References.res:18:2 --> References.res:23:6 - addValueReference References.res:19:2 --> References.res:24:6 - Scanning RepeatedLabel.cmt Source:RepeatedLabel.res - addValueDeclaration +userData RepeatedLabel.res:12:4 path:+RepeatedLabel - addRecordLabelDeclaration a RepeatedLabel.res:2:2 path:+RepeatedLabel.userData - addRecordLabelDeclaration b RepeatedLabel.res:3:2 path:+RepeatedLabel.userData - addRecordLabelDeclaration a RepeatedLabel.res:7:2 path:+RepeatedLabel.tabState - addRecordLabelDeclaration b RepeatedLabel.res:8:2 path:+RepeatedLabel.tabState - addRecordLabelDeclaration f RepeatedLabel.res:9:2 path:+RepeatedLabel.tabState - addValueReference RepeatedLabel.res:12:4 --> RepeatedLabel.res:12:17 - addValueReference RepeatedLabel.res:12:4 --> RepeatedLabel.res:12:20 - addTypeReference RepeatedLabel.res:12:16 --> RepeatedLabel.res:7:2 - addTypeReference RepeatedLabel.res:12:16 --> RepeatedLabel.res:8:2 - addValueReference RepeatedLabel.res:14:7 --> RepeatedLabel.res:12:4 - Scanning RequireCond.cmt Source:RequireCond.res - Scanning Shadow.cmt Source:Shadow.res - addValueDeclaration +test Shadow.res:2:4 path:+Shadow - addValueDeclaration +test Shadow.res:5:4 path:+Shadow - addValueDeclaration +test Shadow.res:11:6 path:+Shadow.M - addValueDeclaration +test Shadow.res:9:6 path:+Shadow.M - Scanning TestDeadExn.cmt Source:TestDeadExn.res - Scanning TestEmitInnerModules.cmt Source:TestEmitInnerModules.res - addValueDeclaration +x TestEmitInnerModules.res:3:6 path:+TestEmitInnerModules.Inner - addValueDeclaration +y TestEmitInnerModules.res:5:6 path:+TestEmitInnerModules.Inner - addValueDeclaration +y TestEmitInnerModules.res:12:10 path:+TestEmitInnerModules.Outer.Medium.Inner - Scanning TestFirstClassModules.cmt Source:TestFirstClassModules.res - addValueDeclaration +convert TestFirstClassModules.res:2:4 path:+TestFirstClassModules - addValueDeclaration +convertInterface TestFirstClassModules.res:5:4 path:+TestFirstClassModules - addValueDeclaration +convertRecord TestFirstClassModules.res:8:4 path:+TestFirstClassModules - addValueDeclaration +convertFirstClassModuleWithTypeEquations TestFirstClassModules.res:27:4 path:+TestFirstClassModules - addValueReference TestFirstClassModules.res:2:4 --> TestFirstClassModules.res:2:15 - addValueReference TestFirstClassModules.res:5:4 --> TestFirstClassModules.res:5:24 - addValueReference TestFirstClassModules.res:8:4 --> TestFirstClassModules.res:8:21 - addValueReference TestFirstClassModules.res:27:4 --> TestFirstClassModules.res:29:2 - Scanning TestImmutableArray.cmt Source:TestImmutableArray.res - addValueDeclaration +testImmutableArrayGet TestImmutableArray.res:2:4 path:+TestImmutableArray - addValueDeclaration +testBeltArrayGet TestImmutableArray.res:12:4 path:+TestImmutableArray - addValueDeclaration +testBeltArraySet TestImmutableArray.res:17:4 path:+TestImmutableArray - addValueReference TestImmutableArray.res:2:4 --> TestImmutableArray.res:2:28 - addValueReference TestImmutableArray.res:2:4 --> ImmutableArray.resi:6:2 - addValueReference TestImmutableArray.res:12:4 --> TestImmutableArray.res:12:23 - addValueReference TestImmutableArray.res:17:4 --> TestImmutableArray.res:17:23 - Scanning TestImport.cmt Source:TestImport.res - addValueDeclaration +innerStuffContents TestImport.res:1:0 path:+TestImport - addValueDeclaration +innerStuffContentsAsEmptyObject TestImport.res:7:0 path:+TestImport - addValueDeclaration +innerStuffContents TestImport.res:13:4 path:+TestImport - addValueDeclaration +valueStartingWithUpperCaseLetter TestImport.res:15:0 path:+TestImport - addValueDeclaration +defaultValue TestImport.res:18:0 path:+TestImport - addValueDeclaration +make TestImport.res:24:0 path:+TestImport - addValueDeclaration +make TestImport.res:27:4 path:+TestImport - addValueDeclaration +defaultValue2 TestImport.res:29:0 path:+TestImport - addValueReference TestImport.res:13:4 --> TestImport.res:1:0 - addRecordLabelDeclaration text TestImport.res:22:16 path:+TestImport.message - addValueReference TestImport.res:27:4 --> TestImport.res:24:0 - Scanning TestModuleAliases.cmt Source:TestModuleAliases.res - addValueDeclaration +testInner1 TestModuleAliases.res:32:4 path:+TestModuleAliases - addValueDeclaration +testInner1Expanded TestModuleAliases.res:35:4 path:+TestModuleAliases - addValueDeclaration +testInner2 TestModuleAliases.res:38:4 path:+TestModuleAliases - addValueDeclaration +testInner2Expanded TestModuleAliases.res:41:4 path:+TestModuleAliases - addValueReference TestModuleAliases.res:32:4 --> TestModuleAliases.res:32:18 - addValueReference TestModuleAliases.res:35:4 --> TestModuleAliases.res:35:26 - addValueReference TestModuleAliases.res:38:4 --> TestModuleAliases.res:38:18 - addValueReference TestModuleAliases.res:41:4 --> TestModuleAliases.res:41:26 - Scanning TestOptArg.cmt Source:TestOptArg.res - addValueDeclaration +foo TestOptArg.res:3:4 path:+TestOptArg - addValueDeclaration +bar TestOptArg.res:5:4 path:+TestOptArg - addValueDeclaration +notSuppressesOptArgs TestOptArg.res:9:4 path:+TestOptArg - addValueDeclaration +liveSuppressesOptArgs TestOptArg.res:14:4 path:+TestOptArg - DeadOptionalArgs.addReferences OptArg.bar called with optional argNames:z argNamesMaybe: TestOptArg.res:1:7 - addValueReference TestOptArg.res:1:7 --> OptArg.resi:2:0 - addValueReference TestOptArg.res:3:4 --> TestOptArg.res:3:14 - addValueReference TestOptArg.res:3:4 --> TestOptArg.res:3:11 - addValueReference TestOptArg.res:3:4 --> TestOptArg.res:3:17 - DeadOptionalArgs.addReferences foo called with optional argNames:x argNamesMaybe: TestOptArg.res:5:16 - addValueReference TestOptArg.res:5:4 --> TestOptArg.res:3:4 - addValueReference TestOptArg.res:7:7 --> TestOptArg.res:5:4 - addValueReference TestOptArg.res:9:4 --> TestOptArg.res:9:31 - addValueReference TestOptArg.res:9:4 --> TestOptArg.res:9:37 - addValueReference TestOptArg.res:9:4 --> TestOptArg.res:9:43 - addValueReference TestOptArg.res:9:4 --> TestOptArg.res:9:28 - addValueReference TestOptArg.res:9:4 --> TestOptArg.res:9:34 - addValueReference TestOptArg.res:9:4 --> TestOptArg.res:9:40 - addValueReference TestOptArg.res:9:4 --> TestOptArg.res:9:46 - DeadOptionalArgs.addReferences notSuppressesOptArgs called with optional argNames: argNamesMaybe: TestOptArg.res:11:8 - addValueReference TestOptArg.res:11:8 --> TestOptArg.res:9:4 - addValueReference TestOptArg.res:14:4 --> TestOptArg.res:14:32 - addValueReference TestOptArg.res:14:4 --> TestOptArg.res:14:38 - addValueReference TestOptArg.res:14:4 --> TestOptArg.res:14:44 - addValueReference TestOptArg.res:14:4 --> TestOptArg.res:14:29 - addValueReference TestOptArg.res:14:4 --> TestOptArg.res:14:35 - addValueReference TestOptArg.res:14:4 --> TestOptArg.res:14:41 - addValueReference TestOptArg.res:14:4 --> TestOptArg.res:14:47 - DeadOptionalArgs.addReferences liveSuppressesOptArgs called with optional argNames:x argNamesMaybe: TestOptArg.res:16:8 - addValueReference TestOptArg.res:16:8 --> TestOptArg.res:14:4 - Scanning TestPromise.cmt Source:TestPromise.res - addValueDeclaration +convert TestPromise.res:14:4 path:+TestPromise - addRecordLabelDeclaration x TestPromise.res:6:2 path:+TestPromise.fromPayload - addRecordLabelDeclaration s TestPromise.res:7:2 path:+TestPromise.fromPayload - addRecordLabelDeclaration result TestPromise.res:11:18 path:+TestPromise.toPayload - addValueReference TestPromise.res:14:4 --> TestPromise.res:14:33 - addTypeReference TestPromise.res:14:32 --> TestPromise.res:7:2 - Scanning ToSuppress.cmt Source:ToSuppress.res - addValueDeclaration +toSuppress ToSuppress.res:1:4 path:+ToSuppress - Scanning TransitiveType1.cmt Source:TransitiveType1.res - addValueDeclaration +convert TransitiveType1.res:2:4 path:+TransitiveType1 - addValueDeclaration +convertAlias TransitiveType1.res:5:4 path:+TransitiveType1 - addValueReference TransitiveType1.res:2:4 --> TransitiveType1.res:2:15 - addValueReference TransitiveType1.res:5:4 --> TransitiveType1.res:5:20 - Scanning TransitiveType2.cmt Source:TransitiveType2.res - addValueDeclaration +convertT2 TransitiveType2.res:7:4 path:+TransitiveType2 - addValueReference TransitiveType2.res:7:4 --> TransitiveType2.res:7:17 - Scanning TransitiveType3.cmt Source:TransitiveType3.res - addValueDeclaration +convertT3 TransitiveType3.res:8:4 path:+TransitiveType3 - addRecordLabelDeclaration i TransitiveType3.res:3:2 path:+TransitiveType3.t3 - addRecordLabelDeclaration s TransitiveType3.res:4:2 path:+TransitiveType3.t3 - addValueReference TransitiveType3.res:8:4 --> TransitiveType3.res:8:17 - Scanning Tuples.cmt Source:Tuples.res - addValueDeclaration +testTuple Tuples.res:4:4 path:+Tuples - addValueDeclaration +origin Tuples.res:10:4 path:+Tuples - addValueDeclaration +computeArea Tuples.res:13:4 path:+Tuples - addValueDeclaration +computeAreaWithIdent Tuples.res:19:4 path:+Tuples - addValueDeclaration +computeAreaNoConverters Tuples.res:25:4 path:+Tuples - addValueDeclaration +coord2d Tuples.res:28:4 path:+Tuples - addValueDeclaration +getFirstName Tuples.res:43:4 path:+Tuples - addValueDeclaration +marry Tuples.res:46:4 path:+Tuples - addValueDeclaration +changeSecondAge Tuples.res:49:4 path:+Tuples - addValueReference Tuples.res:4:4 --> Tuples.res:4:18 - addValueReference Tuples.res:4:4 --> Tuples.res:4:21 - addValueReference Tuples.res:13:4 --> Tuples.res:13:20 - addValueReference Tuples.res:13:4 --> Tuples.res:13:23 - addValueReference Tuples.res:13:4 --> Tuples.res:13:26 - addValueReference Tuples.res:13:4 --> Tuples.res:15:31 - addValueReference Tuples.res:19:4 --> Tuples.res:19:29 - addValueReference Tuples.res:19:4 --> Tuples.res:19:32 - addValueReference Tuples.res:19:4 --> Tuples.res:19:35 - addValueReference Tuples.res:19:4 --> Tuples.res:21:31 - addValueReference Tuples.res:25:4 --> Tuples.res:25:32 - addValueReference Tuples.res:25:4 --> Tuples.res:25:40 - addValueReference Tuples.res:28:4 --> Tuples.res:28:15 - addValueReference Tuples.res:28:4 --> Tuples.res:28:18 - addRecordLabelDeclaration name Tuples.res:35:2 path:+Tuples.person - addRecordLabelDeclaration age Tuples.res:36:2 path:+Tuples.person - addTypeReference Tuples.res:43:49 --> Tuples.res:35:2 - addValueReference Tuples.res:43:4 --> Tuples.res:43:21 - addValueReference Tuples.res:46:4 --> Tuples.res:46:13 - addValueReference Tuples.res:46:4 --> Tuples.res:46:20 - addValueReference Tuples.res:49:4 --> Tuples.res:49:24 - addTypeReference Tuples.res:49:84 --> Tuples.res:36:2 - addValueReference Tuples.res:49:4 --> Tuples.res:49:31 - addValueReference Tuples.res:49:4 --> Tuples.res:49:31 - Scanning TypeParams1.cmt Source:TypeParams1.res - addValueDeclaration +exportSomething TypeParams1.res:4:4 path:+TypeParams1 - Scanning TypeParams2.cmt Source:TypeParams2.res - addValueDeclaration +exportSomething TypeParams2.res:10:4 path:+TypeParams2 - addRecordLabelDeclaration id TypeParams2.res:2:13 path:+TypeParams2.item - Scanning TypeParams3.cmt Source:TypeParams3.res - addValueDeclaration +test TypeParams3.res:2:4 path:+TypeParams3 - addValueDeclaration +test2 TypeParams3.res:5:4 path:+TypeParams3 - addValueReference TypeParams3.res:2:4 --> TypeParams3.res:2:12 - addValueReference TypeParams3.res:5:4 --> TypeParams3.res:5:13 - Scanning Types.cmt Source:Types.res - addValueDeclaration +someIntList Types.res:5:4 path:+Types - addValueDeclaration +map Types.res:8:4 path:+Types - addValueDeclaration +swap Types.res:23:8 path:+Types - addValueDeclaration +selfRecursiveConverter Types.res:42:4 path:+Types - addValueDeclaration +mutuallyRecursiveConverter Types.res:49:4 path:+Types - addValueDeclaration +testFunctionOnOptionsAsArgument Types.res:52:4 path:+Types - addValueDeclaration +stringT Types.res:60:4 path:+Types - addValueDeclaration +jsStringT Types.res:63:4 path:+Types - addValueDeclaration +jsString2T Types.res:66:4 path:+Types - addValueDeclaration +jsonStringify Types.res:78:4 path:+Types - addValueDeclaration +testConvertNull Types.res:92:4 path:+Types - addValueDeclaration +testMarshalFields Types.res:112:4 path:+Types - addValueDeclaration +setMatch Types.res:128:4 path:+Types - addValueDeclaration +testInstantiateTypeParameter Types.res:138:4 path:+Types - addValueDeclaration +currentTime Types.res:147:4 path:+Types - addValueDeclaration +i64Const Types.res:156:4 path:+Types - addValueDeclaration +optFunction Types.res:159:4 path:+Types - addVariantCaseDeclaration A Types.res:12:2 path:+Types.typeWithVars - addVariantCaseDeclaration B Types.res:13:2 path:+Types.typeWithVars - addValueReference Types.res:23:8 --> Types.res:23:16 - addValueReference Types.res:23:8 --> Types.res:23:16 - addValueReference Types.res:23:8 --> Types.res:23:8 - addValueReference Types.res:23:8 --> Types.res:23:16 - addValueReference Types.res:23:8 --> Types.res:23:8 - addValueReference Types.res:23:8 --> Types.res:24:2 - addRecordLabelDeclaration self Types.res:31:26 path:+Types.selfRecursive - addRecordLabelDeclaration b Types.res:34:31 path:+Types.mutuallyRecursiveA - addRecordLabelDeclaration a Types.res:35:26 path:+Types.mutuallyRecursiveB - addValueReference Types.res:42:4 --> Types.res:42:31 - addTypeReference Types.res:42:30 --> Types.res:31:26 - addValueReference Types.res:49:4 --> Types.res:49:35 - addTypeReference Types.res:49:34 --> Types.res:34:31 - addValueReference Types.res:52:4 --> Types.res:52:39 - addValueReference Types.res:52:4 --> Types.res:52:54 - addVariantCaseDeclaration A Types.res:56:2 path:+Types.opaqueVariant - addVariantCaseDeclaration B Types.res:57:2 path:+Types.opaqueVariant - addRecordLabelDeclaration i Types.res:87:2 path:+Types.record - addRecordLabelDeclaration s Types.res:88:2 path:+Types.record - addValueReference Types.res:92:4 --> Types.res:92:23 - addValueReference Types.res:112:4 --> Types.res:112:39 - addValueReference Types.res:128:4 --> Types.res:128:16 - addRecordLabelDeclaration id Types.res:133:19 path:+Types.someRecord - addValueReference Types.res:138:4 --> Types.res:138:36 - addValueDeclaration +x Types.res:166:6 path:+Types.ObjectId - Scanning Unboxed.cmt Source:Unboxed.res - addValueDeclaration +testV1 Unboxed.res:8:4 path:+Unboxed - addValueDeclaration +r2Test Unboxed.res:17:4 path:+Unboxed - addVariantCaseDeclaration A Unboxed.res:2:10 path:+Unboxed.v1 - addVariantCaseDeclaration A Unboxed.res:5:10 path:+Unboxed.v2 - addValueReference Unboxed.res:8:4 --> Unboxed.res:8:14 - addRecordLabelDeclaration x Unboxed.res:11:11 path:+Unboxed.r1 - addVariantCaseDeclaration B Unboxed.res:14:10 path:+Unboxed.r2 - addValueReference Unboxed.res:17:4 --> Unboxed.res:17:14 - Scanning Uncurried.cmt Source:Uncurried.res - addValueDeclaration +uncurried0 Uncurried.res:14:4 path:+Uncurried - addValueDeclaration +uncurried1 Uncurried.res:17:4 path:+Uncurried - addValueDeclaration +uncurried2 Uncurried.res:20:4 path:+Uncurried - addValueDeclaration +uncurried3 Uncurried.res:23:4 path:+Uncurried - addValueDeclaration +curried3 Uncurried.res:26:4 path:+Uncurried - addValueDeclaration +callback Uncurried.res:29:4 path:+Uncurried - addValueDeclaration +callback2 Uncurried.res:35:4 path:+Uncurried - addValueDeclaration +callback2U Uncurried.res:38:4 path:+Uncurried - addValueDeclaration +sumU Uncurried.res:41:4 path:+Uncurried - addValueDeclaration +sumU2 Uncurried.res:44:4 path:+Uncurried - addValueDeclaration +sumCurried Uncurried.res:47:4 path:+Uncurried - addValueDeclaration +sumLblCurried Uncurried.res:53:4 path:+Uncurried - addValueReference Uncurried.res:17:4 --> Uncurried.res:17:20 - addValueReference Uncurried.res:20:4 --> Uncurried.res:20:20 - addValueReference Uncurried.res:20:4 --> Uncurried.res:20:23 - addValueReference Uncurried.res:23:4 --> Uncurried.res:23:20 - addValueReference Uncurried.res:23:4 --> Uncurried.res:23:23 - addValueReference Uncurried.res:23:4 --> Uncurried.res:23:26 - addValueReference Uncurried.res:26:4 --> Uncurried.res:26:16 - addValueReference Uncurried.res:26:4 --> Uncurried.res:26:19 - addValueReference Uncurried.res:26:4 --> Uncurried.res:26:22 - addValueReference Uncurried.res:29:4 --> Uncurried.res:29:15 - addRecordLabelDeclaration login Uncurried.res:31:13 path:+Uncurried.auth - addRecordLabelDeclaration loginU Uncurried.res:32:14 path:+Uncurried.authU - addTypeReference Uncurried.res:35:24 --> Uncurried.res:31:13 - addValueReference Uncurried.res:35:4 --> Uncurried.res:35:16 - addTypeReference Uncurried.res:38:25 --> Uncurried.res:32:14 - addValueReference Uncurried.res:38:4 --> Uncurried.res:38:17 - addValueReference Uncurried.res:41:4 --> Uncurried.res:41:17 - addValueReference Uncurried.res:41:4 --> Uncurried.res:41:14 - addValueReference Uncurried.res:41:4 --> Uncurried.res:41:17 - addValueReference Uncurried.res:44:4 --> Uncurried.res:44:20 - addValueReference Uncurried.res:44:4 --> Uncurried.res:44:15 - addValueReference Uncurried.res:44:4 --> Uncurried.res:44:20 - addValueReference Uncurried.res:47:4 --> Uncurried.res:49:2 - addValueReference Uncurried.res:47:4 --> Uncurried.res:47:17 - addValueReference Uncurried.res:47:4 --> Uncurried.res:49:2 - addValueReference Uncurried.res:47:4 --> Uncurried.res:47:17 - addValueReference Uncurried.res:53:4 --> Uncurried.res:55:3 - addValueReference Uncurried.res:53:4 --> Uncurried.res:53:32 - addValueReference Uncurried.res:53:4 --> Uncurried.res:55:3 - addValueReference Uncurried.res:53:4 --> Uncurried.res:53:21 - addValueReference Uncurried.res:53:4 --> Uncurried.res:53:32 - Scanning Unison.cmt Source:Unison.res - addValueDeclaration +group Unison.res:17:4 path:+Unison - addValueDeclaration +fits Unison.res:19:8 path:+Unison - addValueDeclaration +toString Unison.res:26:8 path:+Unison - addVariantCaseDeclaration IfNeed Unison.res:4:2 path:+Unison.break - addVariantCaseDeclaration Never Unison.res:5:2 path:+Unison.break - addVariantCaseDeclaration Always Unison.res:6:2 path:+Unison.break - addRecordLabelDeclaration break Unison.res:9:2 path:+Unison.t - addRecordLabelDeclaration doc Unison.res:10:2 path:+Unison.t - addVariantCaseDeclaration Empty Unison.res:14:2 path:+Unison.stack - addVariantCaseDeclaration Cons Unison.res:15:2 path:+Unison.stack - addValueReference Unison.res:17:4 --> Unison.res:17:20 - addTypeReference Unison.res:17:20 --> Unison.res:4:2 - addValueReference Unison.res:17:4 --> Unison.res:17:13 - addValueReference Unison.res:17:4 --> Unison.res:17:28 - addValueReference Unison.res:19:8 --> Unison.res:19:16 - addValueReference Unison.res:19:8 --> Unison.res:19:16 - addValueReference Unison.res:19:8 --> Unison.res:23:10 - addValueReference Unison.res:19:8 --> Unison.res:23:16 - addValueReference Unison.res:19:8 --> Unison.res:19:8 - addTypeReference Unison.res:23:9 --> Unison.res:10:2 - addValueReference Unison.res:19:8 --> Unison.res:19:19 - addValueReference Unison.res:26:8 --> Unison.res:26:20 - addValueReference Unison.res:26:8 --> Unison.res:28:23 - addValueReference Unison.res:26:8 --> Unison.res:19:8 - addValueReference Unison.res:26:8 --> Unison.res:28:23 - addValueReference Unison.res:26:8 --> Unison.res:26:20 - addValueReference Unison.res:26:8 --> Unison.res:26:8 - addValueReference Unison.res:26:8 --> Unison.res:28:17 - addValueReference Unison.res:26:8 --> Unison.res:28:23 - addValueReference Unison.res:26:8 --> Unison.res:26:20 - addValueReference Unison.res:26:8 --> Unison.res:26:8 - addValueReference Unison.res:26:8 --> Unison.res:28:17 - addValueReference Unison.res:26:8 --> Unison.res:28:23 - addValueReference Unison.res:26:8 --> Unison.res:26:20 - addValueReference Unison.res:26:8 --> Unison.res:26:8 - addValueReference Unison.res:26:8 --> Unison.res:28:10 - addTypeReference Unison.res:28:9 --> Unison.res:9:2 - addTypeReference Unison.res:28:9 --> Unison.res:10:2 - addValueReference Unison.res:26:8 --> Unison.res:26:28 - addTypeReference Unison.res:37:20 --> Unison.res:14:2 - addValueReference Unison.res:37:0 --> Unison.res:26:8 - addTypeReference Unison.res:38:20 --> Unison.res:15:2 - DeadOptionalArgs.addReferences group called with optional argNames:break argNamesMaybe: Unison.res:38:25 - addTypeReference Unison.res:38:38 --> Unison.res:5:2 - addValueReference Unison.res:38:25 --> Unison.res:17:4 - addTypeReference Unison.res:38:53 --> Unison.res:14:2 - addValueReference Unison.res:38:0 --> Unison.res:26:8 - addTypeReference Unison.res:39:20 --> Unison.res:15:2 - DeadOptionalArgs.addReferences group called with optional argNames:break argNamesMaybe: Unison.res:39:25 - addTypeReference Unison.res:39:38 --> Unison.res:6:2 - addValueReference Unison.res:39:25 --> Unison.res:17:4 - addTypeReference Unison.res:39:52 --> Unison.res:14:2 - addValueReference Unison.res:39:0 --> Unison.res:26:8 - Scanning UseImportJsValue.cmt Source:UseImportJsValue.res - addValueDeclaration +useGetProp UseImportJsValue.res:2:4 path:+UseImportJsValue - addValueDeclaration +useTypeImportedInOtherModule UseImportJsValue.res:5:4 path:+UseImportJsValue - addValueReference UseImportJsValue.res:2:4 --> UseImportJsValue.res:2:18 - addValueReference UseImportJsValue.res:2:4 --> ImportJsValue.res:37:2 - addValueReference UseImportJsValue.res:5:4 --> UseImportJsValue.res:5:36 - Scanning Variants.cmt Source:Variants.res - addValueDeclaration +isWeekend Variants.res:13:4 path:+Variants - addValueDeclaration +monday Variants.res:21:4 path:+Variants - addValueDeclaration +saturday Variants.res:23:4 path:+Variants - addValueDeclaration +sunday Variants.res:25:4 path:+Variants - addValueDeclaration +onlySunday Variants.res:28:4 path:+Variants - addValueDeclaration +swap Variants.res:31:4 path:+Variants - addValueDeclaration +testConvert Variants.res:45:4 path:+Variants - addValueDeclaration +fortytwoOK Variants.res:48:4 path:+Variants - addValueDeclaration +fortytwoBAD Variants.res:52:4 path:+Variants - addValueDeclaration +testConvert2 Variants.res:64:4 path:+Variants - addValueDeclaration +testConvert3 Variants.res:76:4 path:+Variants - addValueDeclaration +testConvert2to3 Variants.res:80:4 path:+Variants - addValueDeclaration +id1 Variants.res:89:4 path:+Variants - addValueDeclaration +id2 Variants.res:92:4 path:+Variants - addValueDeclaration +polyWithOpt Variants.res:98:4 path:+Variants - addValueDeclaration +restResult1 Variants.res:112:4 path:+Variants - addValueDeclaration +restResult2 Variants.res:115:4 path:+Variants - addValueDeclaration +restResult3 Variants.res:118:4 path:+Variants - addValueReference Variants.res:13:4 --> Variants.res:13:17 - addValueReference Variants.res:31:4 --> Variants.res:31:11 - addValueReference Variants.res:45:4 --> Variants.res:45:19 - addValueReference Variants.res:64:4 --> Variants.res:64:20 - addValueReference Variants.res:76:4 --> Variants.res:76:20 - addValueReference Variants.res:80:4 --> Variants.res:80:23 - addValueReference Variants.res:89:4 --> Variants.res:89:11 - addValueReference Variants.res:92:4 --> Variants.res:92:11 - addVariantCaseDeclaration Type Variants.res:95:13 path:+Variants.type_ - addValueReference Variants.res:98:4 --> Variants.res:98:18 - addValueReference Variants.res:98:4 --> Variants.res:98:18 - addValueReference Variants.res:98:4 --> Variants.res:98:18 - addVariantCaseDeclaration Ok Variants.res:102:2 path:+Variants.result1 - addVariantCaseDeclaration Error Variants.res:103:2 path:+Variants.result1 - addValueReference Variants.res:112:4 --> Variants.res:112:19 - addValueReference Variants.res:115:4 --> Variants.res:115:19 - addValueReference Variants.res:118:4 --> Variants.res:118:19 - Scanning VariantsWithPayload.cmt Source:VariantsWithPayload.res - addValueDeclaration +testWithPayload VariantsWithPayload.res:16:4 path:+VariantsWithPayload - addValueDeclaration +printVariantWithPayload VariantsWithPayload.res:19:4 path:+VariantsWithPayload - addValueDeclaration +testManyPayloads VariantsWithPayload.res:37:4 path:+VariantsWithPayload - addValueDeclaration +printManyPayloads VariantsWithPayload.res:40:4 path:+VariantsWithPayload - addValueDeclaration +testSimpleVariant VariantsWithPayload.res:54:4 path:+VariantsWithPayload - addValueDeclaration +testVariantWithPayloads VariantsWithPayload.res:65:4 path:+VariantsWithPayload - addValueDeclaration +printVariantWithPayloads VariantsWithPayload.res:68:4 path:+VariantsWithPayload - addValueDeclaration +testVariant1Int VariantsWithPayload.res:93:4 path:+VariantsWithPayload - addValueDeclaration +testVariant1Object VariantsWithPayload.res:99:4 path:+VariantsWithPayload - addRecordLabelDeclaration x VariantsWithPayload.res:2:2 path:+VariantsWithPayload.payload - addRecordLabelDeclaration y VariantsWithPayload.res:3:2 path:+VariantsWithPayload.payload - addValueReference VariantsWithPayload.res:16:4 --> VariantsWithPayload.res:16:23 - addTypeReference VariantsWithPayload.res:26:57 --> VariantsWithPayload.res:2:2 - addValueReference VariantsWithPayload.res:19:4 --> VariantsWithPayload.res:26:7 - addTypeReference VariantsWithPayload.res:26:74 --> VariantsWithPayload.res:3:2 - addValueReference VariantsWithPayload.res:19:4 --> VariantsWithPayload.res:26:7 - addValueReference VariantsWithPayload.res:19:4 --> VariantsWithPayload.res:19:31 - addValueReference VariantsWithPayload.res:37:4 --> VariantsWithPayload.res:37:24 - addValueReference VariantsWithPayload.res:40:4 --> VariantsWithPayload.res:42:9 - addValueReference VariantsWithPayload.res:40:4 --> VariantsWithPayload.res:43:9 - addValueReference VariantsWithPayload.res:40:4 --> VariantsWithPayload.res:43:13 - addTypeReference VariantsWithPayload.res:44:55 --> VariantsWithPayload.res:2:2 - addValueReference VariantsWithPayload.res:40:4 --> VariantsWithPayload.res:44:11 - addTypeReference VariantsWithPayload.res:44:72 --> VariantsWithPayload.res:3:2 - addValueReference VariantsWithPayload.res:40:4 --> VariantsWithPayload.res:44:11 - addValueReference VariantsWithPayload.res:40:4 --> VariantsWithPayload.res:40:25 - addVariantCaseDeclaration A VariantsWithPayload.res:49:2 path:+VariantsWithPayload.simpleVariant - addVariantCaseDeclaration B VariantsWithPayload.res:50:2 path:+VariantsWithPayload.simpleVariant - addVariantCaseDeclaration C VariantsWithPayload.res:51:2 path:+VariantsWithPayload.simpleVariant - addValueReference VariantsWithPayload.res:54:4 --> VariantsWithPayload.res:54:25 - addVariantCaseDeclaration A VariantsWithPayload.res:58:2 path:+VariantsWithPayload.variantWithPayloads - addVariantCaseDeclaration B VariantsWithPayload.res:59:2 path:+VariantsWithPayload.variantWithPayloads - addVariantCaseDeclaration C VariantsWithPayload.res:60:2 path:+VariantsWithPayload.variantWithPayloads - addVariantCaseDeclaration D VariantsWithPayload.res:61:2 path:+VariantsWithPayload.variantWithPayloads - addVariantCaseDeclaration E VariantsWithPayload.res:62:2 path:+VariantsWithPayload.variantWithPayloads - addValueReference VariantsWithPayload.res:65:4 --> VariantsWithPayload.res:65:31 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:71:6 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:72:6 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:72:9 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:77:7 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:77:10 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:82:6 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:82:9 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:82:12 - addValueReference VariantsWithPayload.res:68:4 --> VariantsWithPayload.res:68:31 - addVariantCaseDeclaration R VariantsWithPayload.res:90:19 path:+VariantsWithPayload.variant1Int - addValueReference VariantsWithPayload.res:93:4 --> VariantsWithPayload.res:93:23 - addVariantCaseDeclaration R VariantsWithPayload.res:96:22 path:+VariantsWithPayload.variant1Object - addValueReference VariantsWithPayload.res:99:4 --> VariantsWithPayload.res:99:26 - addValueReference TestDeadExn.res:1:7 --> DeadExn.res:1:0 - -File References - - AutoAnnotate.res -->> - BootloaderResource.res -->> - BucklescriptAnnotations.res -->> - ComponentAsProp.res -->> React.res, ReactDOMRe.res - CreateErrorHandler1.res -->> ErrorHandler.resi - CreateErrorHandler2.res -->> - DeadCodeImplementation.res -->> - DeadCodeInterface.res -->> - DeadExn.res -->> - DeadExn.resi -->> - DeadMl.ml -->> - DeadRT.res -->> - DeadRT.resi -->> - DeadTest.res -->> React.res, BootloaderResource.res, DeadValueTest.resi, DynamicallyLoadedComponent.res, ImmutableArray.resi, JSResource.res, ExportWithRename.res - DeadTestBlacklist.res -->> - DeadTestWithInterface.res -->> - DeadTypeTest.res -->> - DeadTypeTest.resi -->> DeadTypeTest.res - DeadValueTest.res -->> - DeadValueTest.resi -->> DeadValueTest.res - Docstrings.res -->> - DynamicallyLoadedComponent.res -->> React.res - EmptyArray.res -->> React.res, ReactDOMRe.res - ErrorHandler.res -->> - ErrorHandler.resi -->> ErrorHandler.res - EverythingLiveHere.res -->> - FC.res -->> - FirstClassModules.res -->> - FirstClassModulesInterface.res -->> - FirstClassModulesInterface.resi -->> FirstClassModulesInterface.res - Hooks.res -->> React.res, ReactDOM.res, ReactDOMRe.res, ImportHookDefault.res, ImportHooks.res - IgnoreInterface.res -->> - IgnoreInterface.resi -->> - ImmutableArray.res -->> - ImmutableArray.resi -->> ImmutableArray.res - ImportHookDefault.res -->> - ImportHooks.res -->> - ImportIndex.res -->> - ImportJsValue.res -->> - ImportMyBanner.res -->> - JSResource.res -->> - LetPrivate.res -->> - ModuleAliases.res -->> - ModuleAliases2.res -->> - ModuleExceptionBug.res -->> - NestedModules.res -->> - NestedModulesInSignature.res -->> - NestedModulesInSignature.resi -->> NestedModulesInSignature.res - Newsyntax.res -->> - Newton.res -->> - Opaque.res -->> - OptArg.res -->> - OptArg.resi -->> OptArg.res - Records.res -->> - References.res -->> - RepeatedLabel.res -->> - RequireCond.res -->> - Shadow.res -->> - TestDeadExn.res -->> DeadExn.res - TestEmitInnerModules.res -->> - TestFirstClassModules.res -->> - TestImmutableArray.res -->> ImmutableArray.resi - TestImport.res -->> - TestModuleAliases.res -->> - TestOptArg.res -->> OptArg.resi - TestPromise.res -->> - ToSuppress.res -->> - TransitiveType1.res -->> - TransitiveType2.res -->> - TransitiveType3.res -->> - Tuples.res -->> - TypeParams1.res -->> - TypeParams2.res -->> - TypeParams3.res -->> - Types.res -->> - Unboxed.res -->> - Uncurried.res -->> - Unison.res -->> - UseImportJsValue.res -->> ImportJsValue.res - Variants.res -->> - VariantsWithPayload.res -->> - Dead VariantCase +AutoAnnotate.annotatedVariant.R4: 0 references () [0] - Dead VariantCase +AutoAnnotate.annotatedVariant.R2: 0 references () [0] - Dead RecordLabel +AutoAnnotate.r4.r4: 0 references () [0] - Dead RecordLabel +AutoAnnotate.r3.r3: 0 references () [0] - Dead RecordLabel +AutoAnnotate.r2.r2: 0 references () [0] - Dead RecordLabel +AutoAnnotate.record.variant: 0 references () [0] - Dead VariantCase +AutoAnnotate.variant.R: 0 references () [0] - Dead Value +BucklescriptAnnotations.+bar: 0 references () [1] - Dead Value +BucklescriptAnnotations.+f: 0 references () [0] - Live Value +ComponentAsProp.+make: 0 references () [0] - Live Value +CreateErrorHandler1.Error1.+notification: 1 references (ErrorHandler.resi:3:2) [0] - Live Value +CreateErrorHandler2.Error2.+notification: 1 references (ErrorHandler.resi:3:2) [0] - Live Value +DeadCodeImplementation.M.+x: 1 references (DeadCodeInterface.res:2:2) [0] - Live Value +DeadMl.+bar: 0 references () [0] - Live Value +DeadMl.+foo: 0 references () [0] - Live Value +DeadMl.WithSignature.+live11: 0 references () [1] - Live Value +DeadMl.WithSignature.+live11: 1 references (DeadMl.ml:103:2) [0] - Dead Value +DeadMl.WithSignature.+dead10: 0 references () [1] - Dead Value +DeadMl.WithSignature.+dead10: 0 references () [0] - Live Value +DeadMl.WithSignature.+live9: 0 references () [1] - Live Value +DeadMl.WithSignature.+live9: 1 references (DeadMl.ml:96:2) [0] - Dead Value +DeadMl.WithSignature.+dead8: 0 references () [1] - Dead Value +DeadMl.WithSignature.+dead8: 0 references () [0] - Dead Value +DeadMl.+dead7: 0 references () [0] - Live Value +DeadMl.+live6: 0 references () [0] - Dead Value +DeadMl.+dead5: 0 references () [0] - Live Value +DeadMl.+live5: 0 references () [0] - Dead Value +DeadMl.+dead4: 0 references () [0] - Live Value +DeadMl.Scope.+live3: 0 references () [0] - Live Value +DeadMl.Scope.Inner2.+liveInner3: 0 references () [0] - Dead Value +DeadMl.Scope.+dead2: 0 references () [0] - Live Value +DeadMl.Scope.Inner1.+liveInner2: 0 references () [0] - Dead Value +DeadMl.Scope.Inner1.+deadInner1: 0 references () [0] - Dead Value +DeadMl.Scope.+dead1: 0 references () [0] - Dead Value +DeadMl.+inline_threshold: 0 references () [0] - Dead Value +DeadMl.+map_split_opt: 0 references () [0] - Dead RecordLabel +DeadMl.module_info.case: 0 references () [0] - Dead RecordLabel +DeadMl.module_info.module_name: 0 references () [0] - Dead VariantCase +DeadMl.l.Lfunction: 0 references () [0] - Dead Value +DeadMl.Bs_version.+package_name: 0 references () [1] - Dead Value +DeadMl.Bs_version.+package_name: 0 references () [0] - Dead Value +DeadMl.Bs_version.+header: 0 references () [1] - Dead Value +DeadMl.Bs_version.+header: 0 references () [0] - Dead Value +DeadMl.Bs_version.+version: 0 references () [1] - Dead Value +DeadMl.Bs_version.+version: 0 references () [0] - Dead Value +DeadMl.+_: 0 references () [0] - Dead Value +DeadMl.+_: 0 references () [0] - Dead VariantCase +DeadMl.thisIsDead.DeadB: 0 references () [0] - Dead VariantCase +DeadMl.thisIsDead.DeadA: 0 references () [0] - Dead Value +DeadMl.+thisHasSemicolons: 0 references () [0] - Dead Value +DeadMl.AA.+thisIsInInterface: 0 references () [1] - Dead Value +DeadMl.AA.+thisIsInInterface: 0 references () [0] - Dead Value +DeadMl.QQ.+thisSpansSeveralLines: 0 references () [0] - Dead Value +DeadRT.+emitModuleAccessPath: 0 references () [0] - Live VariantCase +DeadRT.moduleAccessPath.Kaboom: 1 references (DeadRT.res:11:16) [0] - Live VariantCase DeadRT.moduleAccessPath.Root: 1 references (DeadTest.res:106:16) [1] - Live VariantCase +DeadRT.moduleAccessPath.Root: 1 references (DeadRT.resi:2:2) [0] - Live VariantCase DeadRT.moduleAccessPath.Kaboom: 1 references (DeadRT.res:3:2) [0] - Dead RecordLabel +DeadTest.rc.a: 0 references () [0] - Live VariantCase +DeadTest.WithInclude.t.A: 1 references (DeadTest.res:178:7) [1] - Live VariantCase +DeadTest.WithInclude.t.A: 1 references (DeadTest.res:170:11) [0] - Live Value +DeadTest.GloobLive.+globallyLive3: 0 references () [0] - Live Value +DeadTest.GloobLive.+globallyLive2: 0 references () [0] - Live Value +DeadTest.GloobLive.+globallyLive1: 0 references () [0] - Dead Value +DeadTest.+stringLengthNoSideEffects: 0 references () [0] - Dead Value +DeadTest.+theSideEffectIsLogging: 0 references () [0] - Live Value +DeadTest.+make: 1 references (DeadTest.res:157:16) [0] - Dead Value +DeadTest.+makeSwitch: 0 references () [0] - Dead Value +DeadTest.+deadRef: 0 references () [0] - Dead Value +DeadTest.+minute: 0 references () [0] - Dead Value +DeadTest.+second: 0 references () [0] - Dead Value +DeadTest.+a3: 0 references () [0] - Dead Value +DeadTest.+a2: 0 references () [0] - Dead Value +DeadTest.+a1: 0 references () [0] - Dead Value +DeadTest.+zzz: 0 references () [0] - Dead Value +DeadTest.+cmp2: 0 references () [0] - Live Value +DeadTest.+cmp: 1 references (DeadTest.res:131:16) [0] - Dead Value +DeadTest.LazyDynamicallyLoadedComponent2.+make: 0 references () [0] - Dead Value +DeadTest.LazyDynamicallyLoadedComponent2.+makeProps: 0 references () [0] - Dead Value +DeadTest.LazyDynamicallyLoadedComponent2.+reasonResource: 0 references () [0] - Live Value +DeadTest.LazyDynamicallyLoadedComponent.+make: 1 references (DeadTest.res:127:4) [0] - Dead Value +DeadTest.+withDefaultValue: 0 references () [0] - Dead Value +DeadTest.+bar: 0 references () [0] - Dead Value +DeadTest.+foo: 0 references () [1] - Dead Value +DeadTest.+cb: 0 references () [0] - Dead Value +DeadTest.+cb: 0 references () [0] - Dead Value +DeadTest.+recWithCallback: 0 references () [0] - Dead Value +DeadTest.+rec2: 0 references () [0] - Dead Value +DeadTest.+rec1: 0 references () [0] - Dead Value +DeadTest.+split_map: 0 references () [0] - Dead Value +DeadTest.+unusedRec: 0 references () [0] - Dead Value +DeadTest.MM.+valueOnlyInImplementation: 0 references () [0] - Live Value +DeadTest.MM.+x: 1 references (DeadTest.res:69:9) [1] - Live Value +DeadTest.MM.+x: 1 references (DeadTest.res:60:2) [0] - Dead Value +DeadTest.MM.+y: 0 references () [1] - Live Value +DeadTest.MM.+y: 1 references (DeadTest.res:64:6) [0] - Dead Value +DeadTest.UnderscoreInside.+_: 0 references () [0] - Dead Value +DeadTest.+_: 0 references () [0] - Dead Value +DeadTest.+_: 0 references () [0] - Live RecordLabel +DeadTest.record.yyy: 1 references (DeadTest.res:53:9) [0] - Live RecordLabel +DeadTest.record.xxx: 1 references (DeadTest.res:52:13) [0] - Dead Value +DeadTest.+_: 0 references () [0] - Dead Value +DeadTest.+_: 0 references () [0] - Live Value +DeadTest.VariantUsedOnlyInImplementation.+a: 1 references (DeadTest.res:42:17) [1] - Live Value +DeadTest.VariantUsedOnlyInImplementation.+a: 1 references (DeadTest.res:36:2) [0] - Live VariantCase +DeadTest.VariantUsedOnlyInImplementation.t.A: 1 references (DeadTest.res:39:10) [0] - Live VariantCase +DeadTest.VariantUsedOnlyInImplementation.t.A: 1 references (DeadTest.res:38:11) [0] - Dead Value +DeadTest.M.+thisSignatureItemIsDead: 0 references () [0] - Live Value +DeadTest.+thisIsMarkedLive: 0 references () [0] - Live Value +DeadTest.+thisIsKeptAlive: 1 references (DeadTest.res:20:4) [0] - Live Value +DeadTest.+thisIsUsedTwice: 2 references (DeadTest.res:11:7, DeadTest.res:12:7) [0] - Live Value +DeadTest.+thisIsUsedOnce: 1 references (DeadTest.res:8:7) [0] - Live Value +DeadTest.+fortyTwoButExported: 0 references () [0] - Dead Value +DeadTest.+fortytwo: 0 references () [0] - Dead Value +DeadTestBlacklist.+x: 0 references () [0] - Dead Value +DeadTestWithInterface.Ext_buffer.+x: 0 references () [1] - Dead Value +DeadTestWithInterface.Ext_buffer.+x: 0 references () [0] - Dead VariantCase DeadTypeTest.deadType.InNeither: 0 references () [0] - Live VariantCase +DeadTypeTest.deadType.InBoth: 1 references (DeadTypeTest.res:13:8) [1] - Live VariantCase DeadTypeTest.deadType.InBoth: 2 references (DeadTest.res:45:8, DeadTypeTest.res:9:2) [0] - Live VariantCase DeadTypeTest.deadType.OnlyInInterface: 1 references (DeadTest.res:44:8) [0] - Live VariantCase +DeadTypeTest.deadType.OnlyInImplementation: 1 references (DeadTypeTest.res:12:8) [1] - Live VariantCase DeadTypeTest.deadType.OnlyInImplementation: 1 references (DeadTypeTest.res:7:2) [0] - Dead Value DeadTypeTest.+a: 0 references () [0] - Dead VariantCase DeadTypeTest.t.B: 0 references () [0] - Live VariantCase +DeadTypeTest.t.A: 1 references (DeadTypeTest.res:4:8) [1] - Live VariantCase DeadTypeTest.t.A: 1 references (DeadTypeTest.res:2:2) [0] - Live Value +Docstrings.+unitArgWithConversionU: 0 references () [0] - Live Value +Docstrings.+unitArgWithConversion: 0 references () [0] - Dead VariantCase +Docstrings.t.B: 0 references () [0] - Live VariantCase +Docstrings.t.A: 2 references (Docstrings.res:64:34, Docstrings.res:67:39) [0] - Live Value +Docstrings.+unitArgWithoutConversionU: 0 references () [0] - Live Value +Docstrings.+unitArgWithoutConversion: 0 references () [0] - Live Value +Docstrings.+grouped: 0 references () [0] - Live Value +Docstrings.+unnamed2U: 0 references () [0] - Live Value +Docstrings.+unnamed2: 0 references () [0] - Live Value +Docstrings.+unnamed1U: 0 references () [0] - Live Value +Docstrings.+unnamed1: 0 references () [0] - Live Value +Docstrings.+useParamU: 0 references () [0] - Live Value +Docstrings.+useParam: 0 references () [0] - Live Value +Docstrings.+treeU: 0 references () [0] - Live Value +Docstrings.+twoU: 0 references () [0] - Live Value +Docstrings.+oneU: 0 references () [0] - Live Value +Docstrings.+tree: 0 references () [0] - Live Value +Docstrings.+two: 0 references () [0] - Live Value +Docstrings.+one: 0 references () [0] - Live Value +Docstrings.+signMessage: 0 references () [0] - Live Value +Docstrings.+flat: 0 references () [0] - Live Value +EmptyArray.Z.+make: 1 references (EmptyArray.res:10:9) [0] - Dead Value +EverythingLiveHere.+z: 0 references () [0] - Dead Value +EverythingLiveHere.+y: 0 references () [0] - Dead Value +EverythingLiveHere.+x: 0 references () [0] - Live Value +FC.+foo: 1 references (FC.res:11:7) [0] - Live Value +FirstClassModules.+someFunctorAsFunction: 0 references () [0] - Live Value +FirstClassModules.SomeFunctor.+ww: 1 references (FirstClassModules.res:57:2) [0] - Live Value +FirstClassModules.+testConvert: 0 references () [0] - Live Value +FirstClassModules.+firstClassModule: 0 references () [0] - Live Value +FirstClassModules.M.+x: 1 references (FirstClassModules.res:2:2) [0] - Live Value +FirstClassModules.M.Z.+u: 1 references (FirstClassModules.res:37:4) [0] - Live Value +FirstClassModules.M.InnerModule3.+k3: 1 references (FirstClassModules.res:14:4) [0] - Live Value +FirstClassModules.M.InnerModule2.+k: 1 references (FirstClassModules.res:10:4) [0] - Live Value +FirstClassModules.M.+y: 1 references (FirstClassModules.res:20:2) [0] - Dead Value FirstClassModulesInterface.+r: 0 references () [0] - Dead RecordLabel FirstClassModulesInterface.record.y: 0 references () [0] - Dead RecordLabel FirstClassModulesInterface.record.x: 0 references () [0] - Live Value +Hooks.+aComponentWithChildren: 0 references () [0] - Live Value +Hooks.RenderPropRequiresConversion.+car: 1 references (Hooks.res:109:30) [0] - Live Value +Hooks.RenderPropRequiresConversion.+make: 0 references () [0] - Live Value +Hooks.+functionReturningReactElement: 0 references () [0] - Live Value +Hooks.+polymorphicComponent: 0 references () [0] - Live Value +Hooks.+input: 0 references () [0] - Live RecordLabel +Hooks.r.x: 1 references (Hooks.res:85:87) [0] - Live Value +Hooks.+testForwardRef: 0 references () [0] - Dead Value +Hooks.+_: 0 references () [0] - Live Value +Hooks.+makeWithRef: 1 references (Hooks.res:80:4) [0] - Live Value +Hooks.+componentWithRenamedArgs: 0 references () [0] - Live Value +Hooks.+functionWithRenamedArgs: 0 references () [0] - Live Value +Hooks.NoProps.+make: 0 references () [0] - Live Value +Hooks.Inner.Inner2.+anotherComponent: 0 references () [0] - Live Value +Hooks.Inner.Inner2.+make: 0 references () [0] - Live Value +Hooks.Inner.+anotherComponent: 0 references () [0] - Live Value +Hooks.Inner.+make: 0 references () [0] - Live Value +Hooks.+anotherComponent: 0 references () [0] - Live Value +Hooks.+default: 0 references () [0] - Live Value +Hooks.+make: 1 references (Hooks.res:25:4) [0] - Live RecordLabel +Hooks.vehicle.name: 13 references (Hooks.res:10:29, Hooks.res:30:41, Hooks.res:35:66, Hooks.res:38:78, Hooks.res:42:68, Hooks.res:46:45, Hooks.res:60:2, Hooks.res:60:14, Hooks.res:66:15, Hooks.res:66:27, Hooks.res:74:73, Hooks.res:100:58, Hooks.res:115:41) [0] - Live Value +ImportIndex.+make: 0 references () [0] - Dead Value +ImportMyBanner.+make: 0 references () [0] - Live Value +ImportMyBanner.+make: 0 references () [0] - Dead RecordLabel +ImportMyBanner.message.text: 0 references () [0] - Live Value +LetPrivate.+y: 0 references () [0] - Live Value +LetPrivate.local_1.+x: 1 references (LetPrivate.res:7:4) [0] - Live Value +ModuleAliases.+testInner2: 0 references () [0] - Live Value +ModuleAliases.+testInner: 0 references () [0] - Live Value +ModuleAliases.+testNested: 0 references () [0] - Dead RecordLabel +ModuleAliases.Outer2.Inner2.InnerNested.t.nested: 0 references () [0] - Dead RecordLabel +ModuleAliases.Outer.Inner.innerT.inner: 0 references () [0] - Dead Value +ModuleAliases2.+q: 0 references () [0] - Dead RecordLabel +ModuleAliases2.Outer.Inner.inner.inner: 0 references () [0] - Dead RecordLabel +ModuleAliases2.Outer.outer.outer: 0 references () [0] - Dead RecordLabel +ModuleAliases2.record.y: 0 references () [0] - Dead RecordLabel +ModuleAliases2.record.x: 0 references () [0] - Live Value +ModuleExceptionBug.+ddjdj: 1 references (ModuleExceptionBug.res:8:7) [0] - Dead Exception +ModuleExceptionBug.MyOtherException: 0 references () [0] - Dead Value +ModuleExceptionBug.Dep.+customDouble: 0 references () [0] - Live Value +NestedModules.Universe.+someString: 0 references () [0] - Dead VariantCase +NestedModules.Universe.variant.B: 0 references () [0] - Dead VariantCase +NestedModules.Universe.variant.A: 0 references () [0] - Live Value +NestedModules.Universe.Nested2.+nested2Function: 0 references () [0] - Live Value +NestedModules.Universe.Nested2.Nested3.+nested3Function: 0 references () [0] - Live Value +NestedModules.Universe.Nested2.Nested3.+nested3Value: 0 references () [0] - Dead Value +NestedModules.Universe.Nested2.Nested3.+w: 0 references () [0] - Dead Value +NestedModules.Universe.Nested2.Nested3.+z: 0 references () [0] - Dead Value +NestedModules.Universe.Nested2.Nested3.+y: 0 references () [0] - Dead Value +NestedModules.Universe.Nested2.Nested3.+x: 0 references () [0] - Dead Value +NestedModules.Universe.Nested2.+y: 0 references () [0] - Live Value +NestedModules.Universe.Nested2.+nested2Value: 0 references () [0] - Dead Value +NestedModules.Universe.Nested2.+x: 0 references () [0] - Dead Value +NestedModules.Universe.+notExported: 0 references () [0] - Live Value +NestedModules.Universe.+theAnswer: 0 references () [0] - Live Value +NestedModules.+notNested: 0 references () [0] - Live Value NestedModulesInSignature.Universe.+theAnswer: 0 references () [0] - Dead RecordLabel +Newsyntax.record2.yy: 0 references () [0] - Dead RecordLabel +Newsyntax.record2.xx: 0 references () [0] - Dead VariantCase +Newsyntax.variant.C: 0 references () [0] - Dead VariantCase +Newsyntax.variant.B: 0 references () [0] - Dead VariantCase +Newsyntax.variant.A: 0 references () [0] - Dead RecordLabel +Newsyntax.record.yyy: 0 references () [0] - Dead RecordLabel +Newsyntax.record.xxx: 0 references () [0] - Dead Value +Newsyntax.+y: 0 references () [0] - Dead Value +Newsyntax.+x: 0 references () [0] - Live Value +Newton.+result: 2 references (Newton.res:31:8, Newton.res:31:18) [0] - Live Value +Newton.+fPrimed: 1 references (Newton.res:29:4) [0] - Live Value +Newton.+f: 2 references (Newton.res:29:4, Newton.res:31:16) [0] - Live Value +Newton.+newton: 1 references (Newton.res:29:4) [2] - Live Value +Newton.+loop: 1 references (Newton.res:6:4) [1] - Live Value +Newton.+next: 1 references (Newton.res:14:10) [0] - Live Value +Newton.+previous: 2 references (Newton.res:14:10, Newton.res:16:8) [0] - Live Value +Newton.+iterateMore: 1 references (Newton.res:14:10) [1] - Live Value +Newton.+delta: 1 references (Newton.res:8:6) [0] - Live Value +Newton.+current: 3 references (Newton.res:8:6, Newton.res:14:10, Newton.res:15:8) [0] - Live Value +Newton.+/: 1 references (Newton.res:16:8) [0] - Live Value +Newton.+*: 2 references (Newton.res:25:4, Newton.res:27:4) [0] - Live Value +Newton.++: 1 references (Newton.res:25:4) [0] - Live Value +Newton.+-: 4 references (Newton.res:9:8, Newton.res:16:8, Newton.res:25:4, Newton.res:27:4) [0] - Live Value +Opaque.+testConvertNestedRecordFromOtherFile: 0 references () [0] - Live Value +Opaque.+noConversion: 0 references () [0] - Dead VariantCase +Opaque.opaqueFromRecords.A: 0 references () [0] - Live Value +Records.+testMyRecBsAs2: 0 references () [0] - Live Value +Records.+testMyRecBsAs: 0 references () [0] - Live RecordLabel +Records.myRecBsAs.type_: 1 references (Records.res:145:38) [0] - Live Value +Records.+testMyObj2: 0 references () [0] - Live Value +Records.+testMyObj: 0 references () [0] - Live Value +Records.+testMyRec2: 0 references () [0] - Live Value +Records.+testMyRec: 0 references () [0] - Live RecordLabel +Records.myRec.type_: 1 references (Records.res:127:30) [0] - Live Value +Records.+computeArea4: 0 references () [0] - Live Value +Records.+computeArea3: 0 references () [0] - Live Value +Records.+someBusiness2: 0 references () [0] - Live Value +Records.+findAddress2: 0 references () [0] - Live RecordLabel +Records.business2.address2: 1 references (Records.res:97:2) [0] - Dead RecordLabel +Records.business2.owner: 0 references () [0] - Dead RecordLabel +Records.business2.name: 0 references () [0] - Live Value +Records.+getPayloadRecordPlusOne: 0 references () [0] - Live Value +Records.+payloadValue: 0 references () [0] - Live Value +Records.+recordValue: 1 references (Records.res:80:4) [0] - Live Value +Records.+getPayloadRecord: 0 references () [0] - Dead RecordLabel +Records.record.w: 0 references () [0] - Live RecordLabel +Records.record.v: 1 references (Records.res:85:5) [0] - Live Value +Records.+getPayload: 0 references () [0] - Live RecordLabel +Records.payload.payload: 3 references (Records.res:65:18, Records.res:74:24, Records.res:83:31) [0] - Dead RecordLabel +Records.payload.num: 0 references () [0] - Live Value +Records.+findAllAddresses: 0 references () [0] - Live Value +Records.+someBusiness: 0 references () [0] - Live Value +Records.+findAddress: 0 references () [0] - Live Value +Records.+getOpt: 3 references (Records.res:39:4, Records.res:46:4, Records.res:96:4) [0] - Live RecordLabel +Records.business.address: 2 references (Records.res:40:2, Records.res:50:6) [0] - Live RecordLabel +Records.business.owner: 1 references (Records.res:51:6) [0] - Dead RecordLabel +Records.business.name: 0 references () [0] - Live RecordLabel +Records.person.address: 1 references (Records.res:51:42) [0] - Dead RecordLabel +Records.person.age: 0 references () [0] - Dead RecordLabel +Records.person.name: 0 references () [0] - Live Value +Records.+coord2d: 0 references () [0] - Live Value +Records.+computeArea: 0 references () [0] - Live Value +Records.+origin: 0 references () [0] - Live RecordLabel +Records.coord.z: 1 references (Records.res:14:19) [0] - Live RecordLabel +Records.coord.y: 1 references (Records.res:14:19) [0] - Live RecordLabel +Records.coord.x: 1 references (Records.res:14:19) [0] - Live Value +References.+preserveRefIdentity: 0 references () [0] - Live Value +References.+destroysRefIdentity: 0 references () [0] - Dead RecordLabel +References.requiresConversion.x: 0 references () [0] - Live Value +References.+set: 0 references () [0] - Live Value +References.+make: 0 references () [0] - Live Value +References.+get: 0 references () [0] - Live Value +References.R.+set: 1 references (References.res:37:4) [1] - Live Value +References.R.+set: 1 references (References.res:19:2) [0] - Live Value +References.R.+make: 1 references (References.res:34:4) [1] - Live Value +References.R.+make: 1 references (References.res:18:2) [0] - Live Value +References.R.+get: 1 references (References.res:31:4) [1] - Live Value +References.R.+get: 1 references (References.res:17:2) [0] - Live Value +References.+update: 0 references () [0] - Live Value +References.+access: 0 references () [0] - Live Value +References.+create: 0 references () [0] - Live Value +RepeatedLabel.+userData: 1 references (RepeatedLabel.res:14:7) [0] - Dead RecordLabel +RepeatedLabel.tabState.f: 0 references () [0] - Live RecordLabel +RepeatedLabel.tabState.b: 1 references (RepeatedLabel.res:12:16) [0] - Live RecordLabel +RepeatedLabel.tabState.a: 1 references (RepeatedLabel.res:12:16) [0] - Dead RecordLabel +RepeatedLabel.userData.b: 0 references () [0] - Dead RecordLabel +RepeatedLabel.userData.a: 0 references () [0] - Dead Value +Shadow.M.+test: 0 references () [0] - Live Value +Shadow.M.+test: 0 references () [0] - Live Value +Shadow.+test: 0 references () [0] - Live Value +Shadow.+test: 0 references () [0] - Live Value +TestEmitInnerModules.Outer.Medium.Inner.+y: 0 references () [0] - Live Value +TestEmitInnerModules.Inner.+y: 0 references () [0] - Live Value +TestEmitInnerModules.Inner.+x: 0 references () [0] - Live Value +TestFirstClassModules.+convertFirstClassModuleWithTypeEquations: 0 references () [0] - Live Value +TestFirstClassModules.+convertRecord: 0 references () [0] - Live Value +TestFirstClassModules.+convertInterface: 0 references () [0] - Live Value +TestFirstClassModules.+convert: 0 references () [0] - Dead Value +TestImmutableArray.+testBeltArraySet: 0 references () [0] - Dead Value +TestImmutableArray.+testBeltArrayGet: 0 references () [0] - Live Value +TestImmutableArray.+testImmutableArrayGet: 0 references () [0] - Live Value +TestImport.+defaultValue2: 0 references () [0] - Dead Value +TestImport.+make: 0 references () [0] - Live Value +TestImport.+make: 0 references () [0] - Dead RecordLabel +TestImport.message.text: 0 references () [0] - Live Value +TestImport.+defaultValue: 0 references () [0] - Live Value +TestImport.+valueStartingWithUpperCaseLetter: 0 references () [0] - Dead Value +TestImport.+innerStuffContents: 0 references () [0] - Live Value +TestImport.+innerStuffContentsAsEmptyObject: 0 references () [0] - Live Value +TestImport.+innerStuffContents: 0 references () [0] - Live Value +TestModuleAliases.+testInner2Expanded: 0 references () [0] - Live Value +TestModuleAliases.+testInner2: 0 references () [0] - Live Value +TestModuleAliases.+testInner1Expanded: 0 references () [0] - Live Value +TestModuleAliases.+testInner1: 0 references () [0] - Live Value +TestOptArg.+liveSuppressesOptArgs: 1 references (TestOptArg.res:16:8) [0] - - Warning Unused Argument - File "TestOptArg.res", line 9, characters 0-65 - optional argument x of function +notSuppressesOptArgs is never used - - Warning Unused Argument - File "TestOptArg.res", line 9, characters 0-65 - optional argument y of function +notSuppressesOptArgs is never used - - Warning Unused Argument - File "TestOptArg.res", line 9, characters 0-65 - optional argument z of function +notSuppressesOptArgs is never used - Live Value +TestOptArg.+notSuppressesOptArgs: 1 references (TestOptArg.res:11:8) [0] - Live Value +TestOptArg.+bar: 1 references (TestOptArg.res:7:7) [0] - - Warning Redundant Optional Argument - File "TestOptArg.res", line 3, characters 0-28 - optional argument x of function +foo is always supplied (1 calls) - Live Value +TestOptArg.+foo: 1 references (TestOptArg.res:5:4) [0] - Live Value +TestPromise.+convert: 0 references () [0] - Dead RecordLabel +TestPromise.toPayload.result: 0 references () [0] - Live RecordLabel +TestPromise.fromPayload.s: 1 references (TestPromise.res:14:32) [0] - Dead RecordLabel +TestPromise.fromPayload.x: 0 references () [0] - Dead Value +ToSuppress.+toSuppress: 0 references () [0] - Live Value +TransitiveType1.+convertAlias: 0 references () [0] - Live Value +TransitiveType1.+convert: 0 references () [0] - Dead Value +TransitiveType2.+convertT2: 0 references () [0] - Live Value +TransitiveType3.+convertT3: 0 references () [0] - Dead RecordLabel +TransitiveType3.t3.s: 0 references () [0] - Dead RecordLabel +TransitiveType3.t3.i: 0 references () [0] - Live Value +Tuples.+changeSecondAge: 0 references () [0] - Live Value +Tuples.+marry: 0 references () [0] - Live Value +Tuples.+getFirstName: 0 references () [0] - Live RecordLabel +Tuples.person.age: 1 references (Tuples.res:49:84) [0] - Live RecordLabel +Tuples.person.name: 1 references (Tuples.res:43:49) [0] - Live Value +Tuples.+coord2d: 0 references () [0] - Live Value +Tuples.+computeAreaNoConverters: 0 references () [0] - Live Value +Tuples.+computeAreaWithIdent: 0 references () [0] - Live Value +Tuples.+computeArea: 0 references () [0] - Live Value +Tuples.+origin: 0 references () [0] - Live Value +Tuples.+testTuple: 0 references () [0] - Dead Value +TypeParams1.+exportSomething: 0 references () [0] - Dead Value +TypeParams2.+exportSomething: 0 references () [0] - Dead RecordLabel +TypeParams2.item.id: 0 references () [0] - Live Value +TypeParams3.+test2: 0 references () [0] - Live Value +TypeParams3.+test: 0 references () [0] - Dead Value +Types.ObjectId.+x: 0 references () [0] - Live Value +Types.+optFunction: 0 references () [0] - Live Value +Types.+i64Const: 0 references () [0] - Live Value +Types.+currentTime: 0 references () [0] - Live Value +Types.+testInstantiateTypeParameter: 0 references () [0] - Dead RecordLabel +Types.someRecord.id: 0 references () [0] - Live Value +Types.+setMatch: 0 references () [0] - Live Value +Types.+testMarshalFields: 0 references () [0] - Live Value +Types.+testConvertNull: 0 references () [0] - Dead RecordLabel +Types.record.s: 0 references () [0] - Dead RecordLabel +Types.record.i: 0 references () [0] - Live Value +Types.+jsonStringify: 0 references () [0] - Live Value +Types.+jsString2T: 0 references () [0] - Live Value +Types.+jsStringT: 0 references () [0] - Live Value +Types.+stringT: 0 references () [0] - Dead VariantCase +Types.opaqueVariant.B: 0 references () [0] - Dead VariantCase +Types.opaqueVariant.A: 0 references () [0] - Live Value +Types.+testFunctionOnOptionsAsArgument: 0 references () [0] - Live Value +Types.+mutuallyRecursiveConverter: 0 references () [0] - Live Value +Types.+selfRecursiveConverter: 0 references () [0] - Dead RecordLabel +Types.mutuallyRecursiveB.a: 0 references () [0] - Live RecordLabel +Types.mutuallyRecursiveA.b: 1 references (Types.res:49:34) [0] - Live RecordLabel +Types.selfRecursive.self: 1 references (Types.res:42:30) [0] - Live Value +Types.+swap: 0 references () [0] - Dead VariantCase +Types.typeWithVars.B: 0 references () [0] - Dead VariantCase +Types.typeWithVars.A: 0 references () [0] - Live Value +Types.+map: 0 references () [0] - Live Value +Types.+someIntList: 0 references () [0] - Live Value +Unboxed.+r2Test: 0 references () [0] - Dead VariantCase +Unboxed.r2.B: 0 references () [0] - Dead RecordLabel +Unboxed.r1.x: 0 references () [0] - Live Value +Unboxed.+testV1: 0 references () [0] - Dead VariantCase +Unboxed.v2.A: 0 references () [0] - Dead VariantCase +Unboxed.v1.A: 0 references () [0] - Live Value +Uncurried.+sumLblCurried: 0 references () [0] - Live Value +Uncurried.+sumCurried: 0 references () [0] - Live Value +Uncurried.+sumU2: 0 references () [0] - Live Value +Uncurried.+sumU: 0 references () [0] - Live Value +Uncurried.+callback2U: 0 references () [0] - Live Value +Uncurried.+callback2: 0 references () [0] - Live RecordLabel +Uncurried.authU.loginU: 1 references (Uncurried.res:38:25) [0] - Live RecordLabel +Uncurried.auth.login: 1 references (Uncurried.res:35:24) [0] - Live Value +Uncurried.+callback: 0 references () [0] - Live Value +Uncurried.+curried3: 0 references () [0] - Live Value +Uncurried.+uncurried3: 0 references () [0] - Live Value +Uncurried.+uncurried2: 0 references () [0] - Live Value +Uncurried.+uncurried1: 0 references () [0] - Live Value +Uncurried.+uncurried0: 0 references () [0] - Live Value +Unison.+toString: 3 references (Unison.res:37:0, Unison.res:38:0, Unison.res:39:0) [0] - Live Value +Unison.+fits: 1 references (Unison.res:26:8) [0] - - Warning Redundant Optional Argument - File "Unison.res", line 17, characters 0-60 - optional argument break of function +group is always supplied (2 calls) - Live Value +Unison.+group: 2 references (Unison.res:38:25, Unison.res:39:25) [0] - Live VariantCase +Unison.stack.Cons: 2 references (Unison.res:38:20, Unison.res:39:20) [0] - Live VariantCase +Unison.stack.Empty: 3 references (Unison.res:37:20, Unison.res:38:53, Unison.res:39:52) [0] - Live RecordLabel +Unison.t.doc: 2 references (Unison.res:23:9, Unison.res:28:9) [0] - Live RecordLabel +Unison.t.break: 1 references (Unison.res:28:9) [0] - Live VariantCase +Unison.break.Always: 1 references (Unison.res:39:38) [0] - Live VariantCase +Unison.break.Never: 1 references (Unison.res:38:38) [0] - Live VariantCase +Unison.break.IfNeed: 1 references (Unison.res:17:20) [0] - Live Value +UseImportJsValue.+useTypeImportedInOtherModule: 0 references () [0] - Live Value +UseImportJsValue.+useGetProp: 0 references () [0] - Live Value +Variants.+restResult3: 0 references () [0] - Live Value +Variants.+restResult2: 0 references () [0] - Live Value +Variants.+restResult1: 0 references () [0] - Dead VariantCase +Variants.result1.Error: 0 references () [0] - Dead VariantCase +Variants.result1.Ok: 0 references () [0] - Live Value +Variants.+polyWithOpt: 0 references () [0] - Dead VariantCase +Variants.type_.Type: 0 references () [0] - Live Value +Variants.+id2: 0 references () [0] - Live Value +Variants.+id1: 0 references () [0] - Live Value +Variants.+testConvert2to3: 0 references () [0] - Live Value +Variants.+testConvert3: 0 references () [0] - Live Value +Variants.+testConvert2: 0 references () [0] - Live Value +Variants.+fortytwoBAD: 0 references () [0] - Live Value +Variants.+fortytwoOK: 0 references () [0] - Live Value +Variants.+testConvert: 0 references () [0] - Live Value +Variants.+swap: 0 references () [0] - Live Value +Variants.+onlySunday: 0 references () [0] - Live Value +Variants.+sunday: 0 references () [0] - Live Value +Variants.+saturday: 0 references () [0] - Live Value +Variants.+monday: 0 references () [0] - Live Value +Variants.+isWeekend: 0 references () [0] - Live Value +VariantsWithPayload.+testVariant1Object: 0 references () [0] - Dead VariantCase +VariantsWithPayload.variant1Object.R: 0 references () [0] - Live Value +VariantsWithPayload.+testVariant1Int: 0 references () [0] - Dead VariantCase +VariantsWithPayload.variant1Int.R: 0 references () [0] - Live Value +VariantsWithPayload.+printVariantWithPayloads: 0 references () [0] - Live Value +VariantsWithPayload.+testVariantWithPayloads: 0 references () [0] - Dead VariantCase +VariantsWithPayload.variantWithPayloads.E: 0 references () [0] - Dead VariantCase +VariantsWithPayload.variantWithPayloads.D: 0 references () [0] - Dead VariantCase +VariantsWithPayload.variantWithPayloads.C: 0 references () [0] - Dead VariantCase +VariantsWithPayload.variantWithPayloads.B: 0 references () [0] - Dead VariantCase +VariantsWithPayload.variantWithPayloads.A: 0 references () [0] - Live Value +VariantsWithPayload.+testSimpleVariant: 0 references () [0] - Dead VariantCase +VariantsWithPayload.simpleVariant.C: 0 references () [0] - Dead VariantCase +VariantsWithPayload.simpleVariant.B: 0 references () [0] - Dead VariantCase +VariantsWithPayload.simpleVariant.A: 0 references () [0] - Live Value +VariantsWithPayload.+printManyPayloads: 0 references () [0] - Live Value +VariantsWithPayload.+testManyPayloads: 0 references () [0] - Live Value +VariantsWithPayload.+printVariantWithPayload: 0 references () [0] - Live Value +VariantsWithPayload.+testWithPayload: 0 references () [0] - Live RecordLabel +VariantsWithPayload.payload.y: 2 references (VariantsWithPayload.res:26:74, VariantsWithPayload.res:44:72) [0] - Live RecordLabel +VariantsWithPayload.payload.x: 2 references (VariantsWithPayload.res:26:57, VariantsWithPayload.res:44:55) [0] - Live Value +DeadExn.+eInside: 1 references (DeadExn.res:12:7) [0] - Dead Value +DeadExn.+eToplevel: 0 references () [0] - Dead Exception +DeadExn.DeadE: 0 references () [0] - Live Exception +DeadExn.Inside.Einside: 1 references (DeadExn.res:10:14) [0] - Live Exception +DeadExn.Etoplevel: 1 references (DeadExn.res:8:16) [0] - Live RecordLabel +DeadTypeTest.record.z: 0 references () [0] - Live RecordLabel +DeadTypeTest.record.y: 0 references () [0] - Live RecordLabel +DeadTypeTest.record.x: 0 references () [0] - Dead Value +DeadTypeTest.+_: 0 references () [0] - Dead Value +DeadTypeTest.+_: 0 references () [0] - Dead VariantCase +DeadTypeTest.deadType.InNeither: 0 references () [0] - Live VariantCase +DeadTypeTest.deadType.OnlyInInterface: 1 references (DeadTypeTest.resi:8:2) [0] - Dead Value +DeadTypeTest.+a: 0 references () [0] - Dead VariantCase +DeadTypeTest.t.B: 0 references () [0] - Dead Value DeadValueTest.+valueDead: 0 references () [0] - Live Value DeadValueTest.+valueAlive: 1 references (DeadTest.res:73:16) [0] - Live Value +DynamicallyLoadedComponent.+make: 3 references (DeadTest.res:108:40, DeadTest.res:145:17, ExportWithRename.res:2:4) [0] - Dead Value ErrorHandler.+x: 0 references () [0] - Live Value ErrorHandler.Make.+notify: 1 references (CreateErrorHandler1.res:8:0) [0] - Dead Value +FirstClassModulesInterface.+r: 0 references () [0] - Dead RecordLabel +FirstClassModulesInterface.record.y: 0 references () [0] - Dead RecordLabel +FirstClassModulesInterface.record.x: 0 references () [0] - Dead Value ImmutableArray.+eq: 0 references () [0] - Dead Value ImmutableArray.+eqU: 0 references () [0] - Dead Value ImmutableArray.+cmp: 0 references () [0] - Dead Value ImmutableArray.+cmpU: 0 references () [0] - Dead Value ImmutableArray.+some2: 0 references () [0] - Dead Value ImmutableArray.+some2U: 0 references () [0] - Dead Value ImmutableArray.+every2: 0 references () [0] - Dead Value ImmutableArray.+every2U: 0 references () [0] - Dead Value ImmutableArray.+every: 0 references () [0] - Dead Value ImmutableArray.+everyU: 0 references () [0] - Dead Value ImmutableArray.+some: 0 references () [0] - Dead Value ImmutableArray.+someU: 0 references () [0] - Dead Value ImmutableArray.+reduceReverse2: 0 references () [0] - Dead Value ImmutableArray.+reduceReverse2U: 0 references () [0] - Dead Value ImmutableArray.+reduceReverse: 0 references () [0] - Dead Value ImmutableArray.+reduceReverseU: 0 references () [0] - Dead Value ImmutableArray.+reduce: 0 references () [0] - Dead Value ImmutableArray.+reduceU: 0 references () [0] - Dead Value ImmutableArray.+partition: 0 references () [0] - Dead Value ImmutableArray.+partitionU: 0 references () [0] - Dead Value ImmutableArray.+mapWithIndex: 0 references () [0] - Dead Value ImmutableArray.+mapWithIndexU: 0 references () [0] - Dead Value ImmutableArray.+forEachWithIndex: 0 references () [0] - Dead Value ImmutableArray.+forEachWithIndexU: 0 references () [0] - Dead Value ImmutableArray.+keepMap: 0 references () [0] - Dead Value ImmutableArray.+keepMapU: 0 references () [0] - Dead Value ImmutableArray.+keepWithIndex: 0 references () [0] - Dead Value ImmutableArray.+keepWithIndexU: 0 references () [0] - Dead Value ImmutableArray.+map: 0 references () [0] - Dead Value ImmutableArray.+mapU: 0 references () [0] - Dead Value ImmutableArray.+forEach: 0 references () [0] - Dead Value ImmutableArray.+forEachU: 0 references () [0] - Dead Value ImmutableArray.+copy: 0 references () [0] - Dead Value ImmutableArray.+sliceToEnd: 0 references () [0] - Dead Value ImmutableArray.+slice: 0 references () [0] - Dead Value ImmutableArray.+concatMany: 0 references () [0] - Dead Value ImmutableArray.+concat: 0 references () [0] - Dead Value ImmutableArray.+unzip: 0 references () [0] - Dead Value ImmutableArray.+zipBy: 0 references () [0] - Dead Value ImmutableArray.+zipByU: 0 references () [0] - Dead Value ImmutableArray.+zip: 0 references () [0] - Dead Value ImmutableArray.+makeByAndShuffle: 0 references () [0] - Dead Value ImmutableArray.+makeByAndShuffleU: 0 references () [0] - Dead Value ImmutableArray.+makeBy: 0 references () [0] - Dead Value ImmutableArray.+makeByU: 0 references () [0] - Dead Value ImmutableArray.+rangeBy: 0 references () [0] - Dead Value ImmutableArray.+range: 0 references () [0] - Dead Value ImmutableArray.+make: 0 references () [0] - Dead Value ImmutableArray.+makeUninitializedUnsafe: 0 references () [0] - Dead Value ImmutableArray.+makeUninitialized: 0 references () [0] - Dead Value ImmutableArray.+reverse: 0 references () [0] - Dead Value ImmutableArray.+shuffle: 0 references () [0] - Dead Value ImmutableArray.+getUndefined: 0 references () [0] - Dead Value ImmutableArray.+getUnsafe: 0 references () [0] - Dead Value ImmutableArray.+getExn: 0 references () [0] - Dead Value ImmutableArray.+get: 0 references () [0] - Dead Value ImmutableArray.+size: 0 references () [0] - Dead Value ImmutableArray.+length: 0 references () [0] - Dead Value ImmutableArray.+toArray: 0 references () [0] - Live Value ImmutableArray.+fromArray: 1 references (DeadTest.res:1:15) [0] - Live Value ImmutableArray.Array.+get: 1 references (TestImmutableArray.res:2:4) [0] - Live Value +ImportHookDefault.+make2: 0 references () [0] - Live Value +ImportHookDefault.+make: 1 references (Hooks.res:17:5) [0] - Dead RecordLabel +ImportHookDefault.person.age: 0 references () [0] - Dead RecordLabel +ImportHookDefault.person.name: 0 references () [0] - Live Value +ImportHooks.+foo: 0 references () [0] - Live Value +ImportHooks.+make: 1 references (Hooks.res:14:5) [0] - Dead RecordLabel +ImportHooks.person.age: 0 references () [0] - Dead RecordLabel +ImportHooks.person.name: 0 references () [0] - Live Value +ImportJsValue.+default: 0 references () [0] - Live Value +ImportJsValue.+polymorphic: 0 references () [0] - Live Value +ImportJsValue.+convertVariant: 0 references () [0] - Dead VariantCase +ImportJsValue.variant.S: 0 references () [0] - Dead VariantCase +ImportJsValue.variant.I: 0 references () [0] - Live Value +ImportJsValue.+returnedFromHigherOrder: 0 references () [0] - Live Value +ImportJsValue.+higherOrder: 1 references (ImportJsValue.res:64:4) [0] - Live Value +ImportJsValue.+useColor: 0 references () [0] - Live Value +ImportJsValue.+useGetAbs: 0 references () [0] - Live Value +ImportJsValue.+useGetProp: 0 references () [0] - Live Value +ImportJsValue.AbsoluteValue.+getAbs: 1 references (ImportJsValue.res:50:4) [1] - Live Value +ImportJsValue.AbsoluteValue.+getAbs: 1 references (ImportJsValue.res:40:6) [0] - Live Value +ImportJsValue.+areaValue: 0 references () [0] - Live Value +ImportJsValue.+roundedNumber: 0 references () [0] - Live Value +ImportJsValue.+returnMixedArray: 0 references () [0] - Live Value +ImportJsValue.+area: 1 references (ImportJsValue.res:30:4) [0] - Dead RecordLabel +ImportJsValue.point.y: 0 references () [0] - Dead RecordLabel +ImportJsValue.point.x: 0 references () [0] - Live Value +ImportJsValue.+round: 1 references (ImportJsValue.res:27:4) [0] - Live Value +NestedModulesInSignature.Universe.+theAnswer: 1 references (NestedModulesInSignature.resi:2:2) [0] - - Warning Unused Argument - File "OptArg.resi", line 2, characters 0-50 - optional argument x of function +bar is never used - Live Value OptArg.+bar: 1 references (TestOptArg.res:1:7) [0] - Dead Value OptArg.+foo: 0 references () [0] - Dead Value +DeadValueTest.+tail: 0 references () [0] - Dead Value +DeadValueTest.+subList: 0 references () [0] - Dead Value +DeadValueTest.+valueOnlyInImplementation: 0 references () [0] - Dead Value +DeadValueTest.+valueDead: 0 references () [0] - Live Value +DeadValueTest.+valueAlive: 1 references (DeadValueTest.resi:1:0) [0] - Dead Value +ErrorHandler.+x: 0 references () [0] - Live Value +ErrorHandler.Make.+notify: 1 references (ErrorHandler.resi:7:2) [0] - Dead Value +ImmutableArray.+eq: 0 references () [0] - Dead Value +ImmutableArray.+eqU: 0 references () [0] - Dead Value +ImmutableArray.+cmp: 0 references () [0] - Dead Value +ImmutableArray.+cmpU: 0 references () [0] - Dead Value +ImmutableArray.+some2: 0 references () [0] - Dead Value +ImmutableArray.+some2U: 0 references () [0] - Dead Value +ImmutableArray.+every2: 0 references () [0] - Dead Value +ImmutableArray.+every2U: 0 references () [0] - Dead Value +ImmutableArray.+every: 0 references () [0] - Dead Value +ImmutableArray.+everyU: 0 references () [0] - Dead Value +ImmutableArray.+some: 0 references () [0] - Dead Value +ImmutableArray.+someU: 0 references () [0] - Dead Value +ImmutableArray.+reduceReverse2: 0 references () [0] - Dead Value +ImmutableArray.+reduceReverse2U: 0 references () [0] - Dead Value +ImmutableArray.+reduceReverse: 0 references () [0] - Dead Value +ImmutableArray.+reduceReverseU: 0 references () [0] - Dead Value +ImmutableArray.+reduce: 0 references () [0] - Dead Value +ImmutableArray.+reduceU: 0 references () [0] - Dead Value +ImmutableArray.+partition: 0 references () [0] - Dead Value +ImmutableArray.+partitionU: 0 references () [0] - Dead Value +ImmutableArray.+mapWithIndex: 0 references () [0] - Dead Value +ImmutableArray.+mapWithIndexU: 0 references () [0] - Dead Value +ImmutableArray.+forEachWithIndex: 0 references () [0] - Dead Value +ImmutableArray.+forEachWithIndexU: 0 references () [0] - Dead Value +ImmutableArray.+keepMap: 0 references () [0] - Dead Value +ImmutableArray.+keepMapU: 0 references () [0] - Dead Value +ImmutableArray.+keepWithIndex: 0 references () [0] - Dead Value +ImmutableArray.+keepWithIndexU: 0 references () [0] - Dead Value +ImmutableArray.+map: 0 references () [0] - Dead Value +ImmutableArray.+mapU: 0 references () [0] - Dead Value +ImmutableArray.+forEach: 0 references () [0] - Dead Value +ImmutableArray.+forEachU: 0 references () [0] - Dead Value +ImmutableArray.+copy: 0 references () [0] - Dead Value +ImmutableArray.+sliceToEnd: 0 references () [0] - Dead Value +ImmutableArray.+slice: 0 references () [0] - Dead Value +ImmutableArray.+concatMany: 0 references () [0] - Dead Value +ImmutableArray.+concat: 0 references () [0] - Dead Value +ImmutableArray.+unzip: 0 references () [0] - Dead Value +ImmutableArray.+zipBy: 0 references () [0] - Dead Value +ImmutableArray.+zipByU: 0 references () [0] - Dead Value +ImmutableArray.+zip: 0 references () [0] - Dead Value +ImmutableArray.+makeByAndShuffle: 0 references () [0] - Dead Value +ImmutableArray.+makeByAndShuffleU: 0 references () [0] - Dead Value +ImmutableArray.+makeBy: 0 references () [0] - Dead Value +ImmutableArray.+makeByU: 0 references () [0] - Dead Value +ImmutableArray.+rangeBy: 0 references () [0] - Dead Value +ImmutableArray.+range: 0 references () [0] - Dead Value +ImmutableArray.+make: 0 references () [0] - Dead Value +ImmutableArray.+makeUninitializedUnsafe: 0 references () [0] - Dead Value +ImmutableArray.+makeUninitialized: 0 references () [0] - Dead Value +ImmutableArray.+reverse: 0 references () [0] - Dead Value +ImmutableArray.+shuffle: 0 references () [0] - Dead Value +ImmutableArray.+getUndefined: 0 references () [0] - Dead Value +ImmutableArray.+getUnsafe: 0 references () [0] - Dead Value +ImmutableArray.+getExn: 0 references () [0] - Live Value +ImmutableArray.+get: 1 references (ImmutableArray.resi:6:2) [0] - Dead Value +ImmutableArray.+size: 0 references () [0] - Dead Value +ImmutableArray.+length: 0 references () [0] - Dead Value +ImmutableArray.+toArray: 0 references () [0] - Live Value +ImmutableArray.+fromArray: 1 references (ImmutableArray.resi:9:0) [0] - - Warning Redundant Optional Argument - File "OptArg.res", line 26, characters 0-70 - optional argument c of function +wrapfourArgs is always supplied (2 calls) - Live Value +OptArg.+wrapfourArgs: 2 references (OptArg.res:28:7, OptArg.res:29:7) [0] Warning Unused Argument - File "OptArg.res", line 24, characters 0-63 - optional argument d of function +fourArgs is never used - Live Value +OptArg.+fourArgs: 1 references (OptArg.res:26:4) [0] + File "OptionalArgs.ml", line 1, characters 0-86 + optional argument unused of function +live_optional is never used Warning Redundant Optional Argument - File "OptArg.res", line 20, characters 0-51 - optional argument a of function +wrapOneArg is always supplied (1 calls) - Live Value +OptArg.+wrapOneArg: 1 references (OptArg.res:22:7) [0] - Live Value +OptArg.+oneArg: 1 references (OptArg.res:20:4) [0] - - Warning Unused Argument - File "OptArg.res", line 14, characters 0-42 - optional argument a of function +twoArgs is never used - - Warning Unused Argument - File "OptArg.res", line 14, characters 0-42 - optional argument b of function +twoArgs is never used - Live Value +OptArg.+twoArgs: 1 references (OptArg.res:16:12) [0] - - Warning Unused Argument - File "OptArg.res", line 9, characters 0-54 - optional argument b of function +threeArgs is never used - - Warning Redundant Optional Argument - File "OptArg.res", line 9, characters 0-54 - optional argument a of function +threeArgs is always supplied (2 calls) - Live Value +OptArg.+threeArgs: 2 references (OptArg.res:11:7, OptArg.res:12:7) [0] - - Warning Unused Argument - File "OptArg.res", line 3, characters 0-38 - optional argument x of function +bar is never used - Live Value +OptArg.+bar: 2 references (OptArg.res:7:7, OptArg.resi:2:0) [0] - - Warning Unused Argument - File "OptArg.res", line 1, characters 0-48 - optional argument y of function +foo is never used - - Warning Unused Argument - File "OptArg.res", line 1, characters 0-48 - optional argument z of function +foo is never used - Live Value +OptArg.+foo: 1 references (OptArg.res:5:7) [0] - - Warning Dead Module - File "AutoAnnotate.res", line 0, characters 0-0 - +AutoAnnotate is a dead module as all its items are dead. - - Warning Dead Type - File "AutoAnnotate.res", line 1, characters 15-21 - variant.R is a variant case which is never constructed - <-- line 1 - type variant = | @dead("variant.R") R(int) - - Warning Dead Type - File "AutoAnnotate.res", line 4, characters 15-31 - record.variant is a record label never used to read a value - <-- line 4 - type record = {@dead("record.variant") variant: variant} - - Warning Dead Type - File "AutoAnnotate.res", line 6, characters 11-18 - r2.r2 is a record label never used to read a value - <-- line 6 - type r2 = {@dead("r2.r2") r2: int} - - Warning Dead Type - File "AutoAnnotate.res", line 8, characters 11-18 - r3.r3 is a record label never used to read a value - <-- line 8 - type r3 = {@dead("r3.r3") r3: int} - - Warning Dead Type - File "AutoAnnotate.res", line 10, characters 11-18 - r4.r4 is a record label never used to read a value - <-- line 10 - type r4 = {@dead("r4.r4") r4: int} - - Warning Dead Type - File "AutoAnnotate.res", line 14, characters 2-14 - annotatedVariant.R2 is a variant case which is never constructed - <-- line 14 - | @dead("annotatedVariant.R2") R2(r2, r3) - - Warning Dead Type - File "AutoAnnotate.res", line 15, characters 4-10 - annotatedVariant.R4 is a variant case which is never constructed - <-- line 15 - | @dead("annotatedVariant.R4") R4(r4) - - Warning Dead Module - File "BucklescriptAnnotations.res", line 0, characters 0-0 - +BucklescriptAnnotations is a dead module as all its items are dead. - - Warning Dead Value - File "BucklescriptAnnotations.res", line 25, characters 0-70 - +bar is never used - <-- line 25 - @dead("+bar") let bar = (x: someMethods) => { - - Warning Dead Exception - File "DeadExn.res", line 7, characters 0-15 - DeadE is never raised or passed as value - <-- line 7 - @dead("DeadE") exception DeadE + File "OptionalArgs.ml", line 1, characters 0-86 + optional argument used of function +live_optional is always supplied (1 calls) Warning Dead Value - File "DeadExn.res", line 8, characters 0-25 - +eToplevel is never used - <-- line 8 - @dead("+eToplevel") let eToplevel = Etoplevel - - Warning Dead Module - File "DeadMl.ml", line 1, characters 0-120 - +DeadMl.QQ is a dead module as all its items are dead. + File "Annotations.ml", line 5, characters 0-33 + +stale_dead_annotation is never used + <-- line 5 + let stale_dead_annotation () = () [@@dead "+stale_dead_annotation"] Warning Dead Value - File "DeadMl.ml", line 3, characters 4-93 - QQ.+thisSpansSeveralLines is never used + File "Deadcode.ml", line 3, characters 0-18 + +unused is never used <-- line 3 - x + y : int -> int -> int) [@@dead "QQ.+thisSpansSeveralLines"] - - Warning Dead Module - File "DeadMl.ml", line 8, characters 0-103 - +DeadMl.AA is a dead module as all its items are dead. + let unused () = () [@@dead "+unused"] Warning Dead Value - File "DeadMl.ml", line 9, characters 2-40 - AA.+thisIsInInterface is never used + File "Exceptions.ml", line 9, characters 0-24 + +leaks is never used <-- line 9 - int -> int [@@dead "AA.+thisIsInInterface"] - - Warning Dead Value - File "DeadMl.ml", line 12, characters 2-29 - AA.+thisIsInInterface is never used - <-- line 12 - let thisIsInInterface x = x [@@dead "AA.+thisIsInInterface"] - - Warning Dead Value - File "DeadMl.ml", line 15, characters 0-25 - +thisHasSemicolons is never used - <-- line 15 - let thisHasSemicolons = 3 [@@dead "+thisHasSemicolons"] ;; - - Warning Dead Type - File "DeadMl.ml", line 17, characters 18-25 - thisIsDead.DeadA is a variant case which is never constructed - <-- line 17 - type thisIsDead = | DeadA [@dead "thisIsDead.DeadA"] | DeadB - - Warning Dead Type - File "DeadMl.ml", line 17, characters 26-33 - thisIsDead.DeadB is a variant case which is never constructed - <-- line 17 - type thisIsDead = | DeadA [@dead "thisIsDead.DeadA"] | DeadB [@dead "thisIsDead.DeadB"] - - Warning Dead Module - File "DeadMl.ml", line 25, characters 0-256 - +DeadMl.Bs_version is a dead module as all its items are dead. - - Warning Dead Value - File "DeadMl.ml", line 26, characters 6-26 - Bs_version.+version is never used - <-- line 26 - sig val version : string [@@dead "Bs_version.+version"] val header : string val package_name : string end - - Warning Dead Value - File "DeadMl.ml", line 26, characters 27-46 - Bs_version.+header is never used - <-- line 26 - sig val version : string [@@dead "Bs_version.+version"] val header : string [@@dead "Bs_version.+header"] val package_name : string end - - Warning Dead Value - File "DeadMl.ml", line 26, characters 47-72 - Bs_version.+package_name is never used - <-- line 26 - sig val version : string [@@dead "Bs_version.+version"] val header : string [@@dead "Bs_version.+header"] val package_name : string [@@dead "Bs_version.+package_name"] end - - Warning Dead Value - File "DeadMl.ml", line 29, characters 4-31 - Bs_version.+version is never used - <-- line 29 - let version = "7.2.0-dev.4" [@@dead "Bs_version.+version"] - - Warning Dead Value - File "DeadMl.ml", line 30, characters 4-70 - Bs_version.+header is never used - <-- line 30 - let header = "// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE" [@@dead "Bs_version.+header"] - - Warning Dead Value - File "DeadMl.ml", line 31, characters 4-36 - Bs_version.+package_name is never used - <-- line 31 - let package_name = "bs-platform" [@@dead "Bs_version.+package_name"] - - Warning Dead Type - File "DeadMl.ml", line 35, characters 2-137 - l.Lfunction is a variant case which is never constructed - <-- line 35 - } [@dead "l.Lfunction"] - - Warning Dead Type - File "DeadMl.ml", line 41, characters 2-22 - module_info.module_name is a record label never used to read a value - <-- line 41 - module_name: string; [@dead "module_info.module_name"] - - Warning Dead Type - File "DeadMl.ml", line 42, characters 2-12 - module_info.case is a record label never used to read a value - <-- line 42 - case: bool [@dead "module_info.case"] - - Warning Dead Value - File "DeadMl.ml", line 45, characters 0-305 - +map_split_opt is never used - <-- line 45 - (match d with Some d -> d::ds | None -> ds) [@@dead "+map_split_opt"] - - Warning Dead Value - File "DeadMl.ml", line 56, characters 0-40 - +inline_threshold is never used - <-- line 56 - let inline_threshold = Some (10. /. 8.); [@@dead "+inline_threshold"] - - Warning Dead Value - File "DeadMl.ml", line 59, characters 2-15 - Scope.+dead1 is never used - <-- line 59 - let dead1 = 1 [@@dead "Scope.+dead1"] - - Warning Dead Value - File "DeadMl.ml", line 62, characters 4-22 - Scope.Inner1.+deadInner1 is never used - <-- line 62 - let deadInner1 = 0 [@@dead "Scope.Inner1.+deadInner1"] - - Warning Dead Value - File "DeadMl.ml", line 69, characters 2-15 - Scope.+dead2 is never used - <-- line 69 - let dead2 = 2 [@@dead "Scope.+dead2"] - - Warning Dead Value - File "DeadMl.ml", line 80, characters 0-13 - +dead4 is never used - <-- line 80 - let dead4 = 4 [@@dead "+dead4"] - - Warning Dead Value - File "DeadMl.ml", line 85, characters 0-13 - +dead5 is never used - <-- line 85 - let dead5 = 5 [@@dead "+dead5"] - - Warning Dead Value - File "DeadMl.ml", line 90, characters 0-37 - +dead7 is never used - <-- line 90 - [@@ocaml.warning "-30"] [@@dead "+dead7"] - - Warning Dead Value - File "DeadMl.ml", line 94, characters 2-16 - WithSignature.+dead8 is never used - <-- line 94 - val dead8: int [@@dead "WithSignature.+dead8"] - - Warning Dead Value - File "DeadMl.ml", line 99, characters 2-17 - WithSignature.+dead10 is never used - <-- line 99 - val dead10: int [@@dead "WithSignature.+dead10"] - - Warning Dead Value - File "DeadMl.ml", line 106, characters 2-15 - WithSignature.+dead8 is never used - <-- line 106 - let dead8 = 8 [@@dead "WithSignature.+dead8"] - - Warning Dead Value - File "DeadMl.ml", line 108, characters 2-17 - WithSignature.+dead10 is never used - <-- line 108 - let dead10 = 10 [@@dead "WithSignature.+dead10"] - - Warning Dead Value - File "DeadRT.res", line 5, characters 0-116 - +emitModuleAccessPath is never used - <-- line 5 - @dead("+emitModuleAccessPath") let rec emitModuleAccessPath = moduleAccessPath => + let leaks () = raises () [@@dead "+leaks"] Warning Dead Value - File "DeadTest.res", line 2, characters 0-17 - +fortytwo is never used - <-- line 2 - @dead("+fortytwo") let fortytwo = 42 + File "Externals.ml", line 3, characters 0-57 + +dead_external is never used + <-- line 3 + external dead_external : string -> int = "%string_length" [@@dead "+dead_external"] Warning Dead Module - File "DeadTest.res", line 27, characters 7-97 - +DeadTest.M is a dead module as all its items are dead. - - Warning Dead Value - File "DeadTest.res", line 31, characters 2-34 - M.+thisSignatureItemIsDead is never used - <-- line 31 - @dead("M.+thisSignatureItemIsDead") let thisSignatureItemIsDead = 34 - - Warning Dead Value - File "DeadTest.res", line 61, characters 2-12 - MM.+y is never used - <-- line 61 - @dead("MM.+y") let y: int - - Warning Dead Value - File "DeadTest.res", line 65, characters 2-35 - MM.+valueOnlyInImplementation is never used - <-- line 65 - @dead("MM.+valueOnlyInImplementation") let valueOnlyInImplementation = 7 - - Warning Dead Value - File "DeadTest.res", line 75, characters 0-37 - +unusedRec is never used - <-- line 75 - @dead("+unusedRec") let rec unusedRec = () => unusedRec() - - Warning Dead Value - File "DeadTest.res", line 77, characters 0-60 - +split_map is never used - <-- line 77 - @dead("+split_map") let rec split_map = l => { - - Warning Dead Value - File "DeadTest.res", line 82, characters 0-27 - +rec1 is never used - <-- line 82 - @dead("+rec1") let rec rec1 = () => rec2() - - Warning Dead Value - File "DeadTest.res", line 83, characters 0-23 - +rec2 is never used - <-- line 83 - @dead("+rec2") and rec2 = () => rec1() - - Warning Dead Value - File "DeadTest.res", line 85, characters 0-77 - +recWithCallback is never used - <-- line 85 - @dead("+recWithCallback") let rec recWithCallback = () => { + File "FirstClassModules.ml", line 9, characters 0-48 + +FirstClassModules.DeadRunner is a dead module as all its items are dead. Warning Dead Value - File "DeadTest.res", line 90, characters 0-53 - +foo is never used - <-- line 90 - @dead("+foo") let rec foo = () => { + File "FirstClassModules.ml", line 10, characters 2-17 + DeadRunner.+run is never used + <-- line 10 + let run () = () [@@dead "DeadRunner.+run"] Warning Dead Value - File "DeadTest.res", line 94, characters 0-21 - +bar is never used - <-- line 94 - @dead("+bar") and bar = () => foo() + File "Includes.ml", line 4, characters 2-29 + +included_unused is never used + <-- line 4 + let included_unused () = () [@@dead "+included_unused"] Warning Dead Value - File "DeadTest.res", line 96, characters 0-71 - +withDefaultValue is never used - <-- line 96 - @dead("+withDefaultValue") let withDefaultValue = (~paramWithDefault=3, y) => paramWithDefault + y + File "ModuleAliases.ml", line 4, characters 2-36 + Source.+unused_even_with_alias is never used + <-- line 4 + let unused_even_with_alias () = () [@@dead "Source.+unused_even_with_alias"] Warning Dead Module - File "DeadTest.res", line 112, characters 7-413 - +DeadTest.LazyDynamicallyLoadedComponent2 is a dead module as all its items are dead. - - Warning Dead Value With Side Effects - File "DeadTest.res", line 113, characters 2-142 - LazyDynamicallyLoadedComponent2.+reasonResource is never used and could have side effects - - Warning Dead Value - File "DeadTest.res", line 116, characters 2-54 - LazyDynamicallyLoadedComponent2.+makeProps is never used - <-- line 116 - @dead("LazyDynamicallyLoadedComponent2.+makeProps") let makeProps = DynamicallyLoadedComponent.makeProps - - Warning Dead Value - File "DeadTest.res", line 117, characters 2-170 - LazyDynamicallyLoadedComponent2.+make is never used - <-- line 117 - @dead("LazyDynamicallyLoadedComponent2.+make") let make = props => - - Warning Dead Value - File "DeadTest.res", line 129, characters 0-62 - +cmp2 is never used - <-- line 129 - @dead("+cmp2") let cmp2 = () => - - Warning Dead Value - File "DeadTest.res", line 139, characters 0-52 - +zzz is never used - <-- line 139 - @dead("+zzz") let zzz = { + File "Modules.ml", line 7, characters 0-79 + +Modules.DeadNested is a dead module as all its items are dead. Warning Dead Value - File "DeadTest.res", line 147, characters 0-15 - +second is never used - <-- line 147 - @dead("+second") let second = 1L + File "Modules.ml", line 8, characters 2-20 + DeadNested.+helper is never used + <-- line 8 + let helper () = () [@@dead "DeadNested.+helper"] Warning Dead Value - File "DeadTest.res", line 148, characters 0-35 - +minute is never used - <-- line 148 - @dead("+minute") let minute = Int64.mul(60L, second) + File "Modules.ml", line 10, characters 2-26 + DeadNested.+value is never used + <-- line 10 + let value () = helper () [@@dead "DeadNested.+value"] Warning Dead Value - File "DeadTest.res", line 150, characters 0-21 - +deadRef is never used - <-- line 150 - @dead("+deadRef") let deadRef = ref(12) + File "Modules.ml", line 16, characters 2-20 + PartlyLive.+unused is never used + <-- line 16 + let unused () = () [@@dead "PartlyLive.+unused"] Warning Dead Value - File "DeadTest.res", line 152, characters 0-37 - +makeSwitch is never used - <-- line 152 - @dead("+makeSwitch") let makeSwitch = ComponentSwitch.make - - Warning Dead Value With Side Effects - File "DeadTest.res", line 159, characters 0-40 - +theSideEffectIsLogging is never used and could have side effects + File "OptionalArgs.ml", line 6, characters 0-88 + +dead_optional is never used + <-- line 6 + | None -> () [@@dead "+dead_optional"] Warning Dead Value - File "DeadTest.res", line 161, characters 0-54 - +stringLengthNoSideEffects is never used - <-- line 161 - @dead("+stringLengthNoSideEffects") let stringLengthNoSideEffects = String.length("sdkdl") + File "TransitiveTypes.ml", line 11, characters 0-52 + +dead_value is never used + <-- line 11 + let dead_value = UnusedWrapper (UnusedLeaf "unused") [@@dead "+dead_value"] Warning Dead Type - File "DeadTest.res", line 187, characters 11-16 - rc.a is a record label never used to read a value - <-- line 187 - type rc = {@dead("rc.a") a:int} - - Warning Dead Module - File "DeadTestBlacklist.res", line 0, characters 0-0 - +DeadTestBlacklist is a dead module as all its items are dead. - - Warning Dead Value - File "DeadTestBlacklist.res", line 1, characters 0-10 - +x is never used + File "Types.ml", line 1, characters 21-29 + live_record.id is a record label never used to read a value <-- line 1 - @dead("+x") let x = 34 - - Warning Dead Module - File "DeadTestWithInterface.res", line 1, characters 7-54 - +DeadTestWithInterface.Ext_buffer is a dead module as all its items are dead. - - Warning Dead Value - File "DeadTestWithInterface.res", line 2, characters 2-12 - Ext_buffer.+x is never used - <-- line 2 - @dead("Ext_buffer.+x") let x: int - - Warning Dead Value - File "DeadTestWithInterface.res", line 4, characters 2-12 - Ext_buffer.+x is never used - <-- line 4 - @dead("Ext_buffer.+x") let x = 42 - - Warning Dead Type - File "DeadTypeTest.res", line 3, characters 4-5 - t.B is a variant case which is never constructed - <-- line 3 - | @dead("t.B") B - - Warning Dead Value - File "DeadTypeTest.res", line 4, characters 0-9 - +a is never used - <-- line 4 - @dead("+a") let a = A + type live_record = { id : int [@dead "live_record.id"] } Warning Dead Type - File "DeadTypeTest.res", line 10, characters 4-13 - deadType.InNeither is a variant case which is never constructed - <-- line 10 - | @dead("deadType.InNeither") InNeither - - Warning Dead Type - File "DeadTypeTest.resi", line 3, characters 4-5 - t.B is a variant case which is never constructed - <-- line 3 - | @dead("t.B") B - - Warning Dead Value - File "DeadTypeTest.resi", line 4, characters 0-8 - +a is never used + File "Types.ml", line 4, characters 2-9 + live_variant.LiveA is a variant case which is never constructed <-- line 4 - @dead("+a") let a: t + | LiveA [@dead "live_variant.LiveA"] Warning Dead Type - File "DeadTypeTest.resi", line 10, characters 4-13 - deadType.InNeither is a variant case which is never constructed - <-- line 10 - | @dead("deadType.InNeither") InNeither - - Warning Dead Value - File "DeadValueTest.res", line 2, characters 0-17 - +valueDead is never used - <-- line 2 - @dead("+valueDead") let valueDead = 2 - - Warning Dead Value - File "DeadValueTest.res", line 4, characters 0-33 - +valueOnlyInImplementation is never used - <-- line 4 - @dead("+valueOnlyInImplementation") let valueOnlyInImplementation = 3 - - Warning Dead Value - File "DeadValueTest.res", line 6, characters 0-260 - +subList is never used - <-- line 6 - @dead("+subList") let rec subList = (b, e, l) => - - Warning Dead Value - File "DeadValueTest.resi", line 2, characters 0-18 - +valueDead is never used - <-- line 2 - @dead("+valueDead") let valueDead: int + File "Types.ml", line 9, characters 21-34 + dead_record.dead_id is a record label never used to read a value + <-- line 9 + type dead_record = { dead_id : int [@dead "dead_record.dead_id"] } Warning Dead Type - File "Docstrings.res", line 61, characters 4-5 - t.B is a variant case which is never constructed - <-- line 61 - | @dead("t.B") B - - Warning Dead Module - File "ErrorHandler.res", line 0, characters 0-0 - +ErrorHandler is a dead module as all its items are dead. - - Warning Dead Value - File "ErrorHandler.res", line 12, characters 0-10 - +x is never used + File "Types.ml", line 12, characters 2-9 + dead_variant.DeadA is a variant case which is never constructed <-- line 12 - @dead("+x") let x = 42 - - Warning Dead Module - File "ErrorHandler.resi", line 0, characters 0-0 - ErrorHandler is a dead module as all its items are dead. - - Warning Dead Value - File "ErrorHandler.resi", line 10, characters 0-10 - +x is never used - <-- line 10 - @dead("+x") let x: int - - Warning Dead Module - File "EverythingLiveHere.res", line 0, characters 0-0 - +EverythingLiveHere is a dead module as all its items are dead. - - Warning Dead Value - File "EverythingLiveHere.res", line 1, characters 0-9 - +x is never used - <-- line 1 - @dead("+x") let x = 1 - - Warning Dead Value - File "EverythingLiveHere.res", line 3, characters 0-9 - +y is never used - <-- line 3 - @dead("+y") let y = 3 - - Warning Dead Value - File "EverythingLiveHere.res", line 5, characters 0-9 - +z is never used - <-- line 5 - @dead("+z") let z = 4 - - Warning Dead Module - File "FirstClassModulesInterface.res", line 0, characters 0-0 - +FirstClassModulesInterface is a dead module as all its items are dead. - - Warning Dead Type - File "FirstClassModulesInterface.res", line 2, characters 2-8 - record.x is a record label never used to read a value - <-- line 2 - @dead("record.x") x: int, - - Warning Dead Type - File "FirstClassModulesInterface.res", line 3, characters 2-11 - record.y is a record label never used to read a value - <-- line 3 - @dead("record.y") y: string, + | DeadA [@dead "dead_variant.DeadA"] Warning Dead Value - File "FirstClassModulesInterface.res", line 6, characters 0-26 - +r is never used - <-- line 6 - @dead("+r") let r = {x: 3, y: "hello"} - - Warning Dead Module - File "FirstClassModulesInterface.resi", line 0, characters 0-0 - FirstClassModulesInterface is a dead module as all its items are dead. - - Warning Dead Type - File "FirstClassModulesInterface.resi", line 3, characters 2-8 - record.x is a record label never used to read a value - <-- line 3 - @dead("record.x") x: int, + File "Types.ml", line 17, characters 0-41 + +make_dead is never used + <-- line 17 + let make_dead id = DeadB { dead_id = id } [@@dead "+make_dead"] Warning Dead Type - File "FirstClassModulesInterface.resi", line 4, characters 2-11 - record.y is a record label never used to read a value + File "Types.mli", line 4, characters 2-9 + live_variant.LiveA is a variant case which is never constructed <-- line 4 - @dead("record.y") y: string, - - Warning Dead Value - File "FirstClassModulesInterface.resi", line 7, characters 0-13 - +r is never used - <-- line 7 - @dead("+r") let r: record - - Warning Dead Value - File "ImmutableArray.res", line 16, characters 2-41 - +toArray is never used - <-- line 16 - @dead("+toArray") let toArray = a => Array.copy(a->fromT) - - Warning Dead Value - File "ImmutableArray.res", line 20, characters 2-42 - +length is never used - <-- line 20 - @dead("+length") let length = a => Array.length(a->fromT) - - Warning Dead Value - File "ImmutableArray.res", line 22, characters 2-38 - +size is never used - <-- line 22 - @dead("+size") let size = a => Array.size(a->fromT) - - Warning Dead Value - File "ImmutableArray.res", line 26, characters 2-50 - +getExn is never used - <-- line 26 - @dead("+getExn") let getExn = (a, x) => Array.getExn(a->fromT, x) - - Warning Dead Value - File "ImmutableArray.res", line 28, characters 2-56 - +getUnsafe is never used - <-- line 28 - @dead("+getUnsafe") let getUnsafe = (a, x) => Array.getUnsafe(a->fromT, x) - - Warning Dead Value - File "ImmutableArray.res", line 30, characters 2-62 - +getUndefined is never used - <-- line 30 - @dead("+getUndefined") let getUndefined = (a, x) => Array.getUndefined(a->fromT, x) - - Warning Dead Value - File "ImmutableArray.res", line 32, characters 2-49 - +shuffle is never used - <-- line 32 - @dead("+shuffle") let shuffle = x => Array.shuffle(x->fromT)->toT - - Warning Dead Value - File "ImmutableArray.res", line 34, characters 2-49 - +reverse is never used - <-- line 34 - @dead("+reverse") let reverse = x => Array.reverse(x->fromT)->toT - - Warning Dead Value - File "ImmutableArray.res", line 36, characters 2-62 - +makeUninitialized is never used - <-- line 36 - @dead("+makeUninitialized") let makeUninitialized = x => Array.makeUninitialized(x)->toT - - Warning Dead Value - File "ImmutableArray.res", line 38, characters 2-74 - +makeUninitializedUnsafe is never used - <-- line 38 - @dead("+makeUninitializedUnsafe") let makeUninitializedUnsafe = x => Array.makeUninitializedUnsafe(x)->toT - - Warning Dead Value - File "ImmutableArray.res", line 40, characters 2-44 - +make is never used - <-- line 40 - @dead("+make") let make = (x, y) => Array.make(x, y)->toT - - Warning Dead Value - File "ImmutableArray.res", line 42, characters 2-46 - +range is never used - <-- line 42 - @dead("+range") let range = (x, y) => Array.range(x, y)->toT - - Warning Dead Value - File "ImmutableArray.res", line 44, characters 2-64 - +rangeBy is never used - <-- line 44 - @dead("+rangeBy") let rangeBy = (x, y, ~step) => Array.rangeBy(x, y, ~step)->toT - - Warning Dead Value - File "ImmutableArray.res", line 46, characters 2-50 - +makeByU is never used - <-- line 46 - @dead("+makeByU") let makeByU = (c, f) => Array.makeByU(c, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 47, characters 2-48 - +makeBy is never used - <-- line 47 - @dead("+makeBy") let makeBy = (c, f) => Array.makeBy(c, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 49, characters 2-70 - +makeByAndShuffleU is never used - <-- line 49 - @dead("+makeByAndShuffleU") let makeByAndShuffleU = (c, f) => Array.makeByAndShuffleU(c, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 50, characters 2-68 - +makeByAndShuffle is never used - <-- line 50 - @dead("+makeByAndShuffle") let makeByAndShuffle = (c, f) => Array.makeByAndShuffle(c, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 52, characters 2-61 - +zip is never used - <-- line 52 - @dead("+zip") let zip = (a1, a2) => Array.zip(fromT(a1), fromT(a2))->toTp - - Warning Dead Value - File "ImmutableArray.res", line 54, characters 2-72 - +zipByU is never used - <-- line 54 - @dead("+zipByU") let zipByU = (a1, a2, f) => Array.zipByU(fromT(a1), fromT(a2), f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 55, characters 2-70 - +zipBy is never used - <-- line 55 - @dead("+zipBy") let zipBy = (a1, a2, f) => Array.zipBy(fromT(a1), fromT(a2), f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 57, characters 2-47 - +unzip is never used - <-- line 57 - @dead("+unzip") let unzip = a => Array.unzip(a->fromTp)->toT2 - - Warning Dead Value - File "ImmutableArray.res", line 59, characters 2-66 - +concat is never used - <-- line 59 - @dead("+concat") let concat = (a1, a2) => Array.concat(a1->fromT, a2->fromT)->toT - - Warning Dead Value - File "ImmutableArray.res", line 61, characters 2-67 - +concatMany is never used - <-- line 61 - @dead("+concatMany") let concatMany = (a: t>) => Array.concatMany(a->fromTT)->toT - - Warning Dead Value - File "ImmutableArray.res", line 63, characters 2-77 - +slice is never used - <-- line 63 - @dead("+slice") let slice = (a, ~offset, ~len) => Array.slice(a->fromT, ~offset, ~len)->toT - - Warning Dead Value - File "ImmutableArray.res", line 65, characters 2-63 - +sliceToEnd is never used - <-- line 65 - @dead("+sliceToEnd") let sliceToEnd = (a, b) => Array.sliceToEnd(a->fromT, b)->toT - - Warning Dead Value - File "ImmutableArray.res", line 67, characters 2-43 - +copy is never used - <-- line 67 - @dead("+copy") let copy = a => Array.copy(a->fromT)->toT - - Warning Dead Value - File "ImmutableArray.res", line 69, characters 2-54 - +forEachU is never used - <-- line 69 - @dead("+forEachU") let forEachU = (a, f) => Array.forEachU(a->fromT, f) - - Warning Dead Value - File "ImmutableArray.res", line 70, characters 2-52 - +forEach is never used - <-- line 70 - @dead("+forEach") let forEach = (a, f) => Array.forEach(a->fromT, f) - - Warning Dead Value - File "ImmutableArray.res", line 72, characters 2-51 - +mapU is never used - <-- line 72 - @dead("+mapU") let mapU = (a, f) => Array.mapU(a->fromT, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 73, characters 2-49 - +map is never used - <-- line 73 - @dead("+map") let map = (a, f) => Array.map(a->fromT, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 75, characters 2-71 - +keepWithIndexU is never used - <-- line 75 - @dead("+keepWithIndexU") let keepWithIndexU = (a, f) => Array.keepWithIndexU(a->fromT, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 76, characters 2-69 - +keepWithIndex is never used - <-- line 76 - @dead("+keepWithIndex") let keepWithIndex = (a, f) => Array.keepWithIndex(a->fromT, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 78, characters 2-59 - +keepMapU is never used - <-- line 78 - @dead("+keepMapU") let keepMapU = (a, f) => Array.keepMapU(a->fromT, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 79, characters 2-57 - +keepMap is never used - <-- line 79 - @dead("+keepMap") let keepMap = (a, f) => Array.keepMap(a->fromT, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 81, characters 2-72 - +forEachWithIndexU is never used - <-- line 81 - @dead("+forEachWithIndexU") let forEachWithIndexU = (a, f) => Array.forEachWithIndexU(a->fromT, f) - - Warning Dead Value - File "ImmutableArray.res", line 82, characters 2-70 - +forEachWithIndex is never used - <-- line 82 - @dead("+forEachWithIndex") let forEachWithIndex = (a, f) => Array.forEachWithIndex(a->fromT, f) - - Warning Dead Value - File "ImmutableArray.res", line 84, characters 2-69 - +mapWithIndexU is never used - <-- line 84 - @dead("+mapWithIndexU") let mapWithIndexU = (a, f) => Array.mapWithIndexU(a->fromT, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 85, characters 2-67 - +mapWithIndex is never used - <-- line 85 - @dead("+mapWithIndex") let mapWithIndex = (a, f) => Array.mapWithIndex(a->fromT, f)->toT - - Warning Dead Value - File "ImmutableArray.res", line 87, characters 2-64 - +partitionU is never used - <-- line 87 - @dead("+partitionU") let partitionU = (a, f) => Array.partitionU(a->fromT, f)->toT2 - - Warning Dead Value - File "ImmutableArray.res", line 88, characters 2-62 - +partition is never used - <-- line 88 - @dead("+partition") let partition = (a, f) => Array.partition(a->fromT, f)->toT2 - - Warning Dead Value - File "ImmutableArray.res", line 90, characters 2-58 - +reduceU is never used - <-- line 90 - @dead("+reduceU") let reduceU = (a, b, f) => Array.reduceU(a->fromT, b, f) - - Warning Dead Value - File "ImmutableArray.res", line 91, characters 2-56 - +reduce is never used - <-- line 91 - @dead("+reduce") let reduce = (a, b, f) => Array.reduce(a->fromT, b, f) - - Warning Dead Value - File "ImmutableArray.res", line 93, characters 2-72 - +reduceReverseU is never used - <-- line 93 - @dead("+reduceReverseU") let reduceReverseU = (a, b, f) => Array.reduceReverseU(a->fromT, b, f) - - Warning Dead Value - File "ImmutableArray.res", line 94, characters 2-70 - +reduceReverse is never used - <-- line 94 - @dead("+reduceReverse") let reduceReverse = (a, b, f) => Array.reduceReverse(a->fromT, b, f) - - Warning Dead Value - File "ImmutableArray.res", line 96, characters 2-91 - +reduceReverse2U is never used - <-- line 96 - @dead("+reduceReverse2U") let reduceReverse2U = (a1, a2, c, f) => Array.reduceReverse2U(fromT(a1), fromT(a2), c, f) - - Warning Dead Value - File "ImmutableArray.res", line 97, characters 2-89 - +reduceReverse2 is never used - <-- line 97 - @dead("+reduceReverse2") let reduceReverse2 = (a1, a2, c, f) => Array.reduceReverse2(fromT(a1), fromT(a2), c, f) - - Warning Dead Value - File "ImmutableArray.res", line 99, characters 2-48 - +someU is never used - <-- line 99 - @dead("+someU") let someU = (a, f) => Array.someU(a->fromT, f) - - Warning Dead Value - File "ImmutableArray.res", line 100, characters 2-46 - +some is never used - <-- line 100 - @dead("+some") let some = (a, f) => Array.some(a->fromT, f) - - Warning Dead Value - File "ImmutableArray.res", line 102, characters 2-50 - +everyU is never used - <-- line 102 - @dead("+everyU") let everyU = (a, f) => Array.everyU(a->fromT, f) - - Warning Dead Value - File "ImmutableArray.res", line 103, characters 2-48 - +every is never used - <-- line 103 - @dead("+every") let every = (a, f) => Array.every(a->fromT, f) - - Warning Dead Value - File "ImmutableArray.res", line 105, characters 2-69 - +every2U is never used - <-- line 105 - @dead("+every2U") let every2U = (a1, a2, f) => Array.every2U(fromT(a1), fromT(a2), f) - - Warning Dead Value - File "ImmutableArray.res", line 106, characters 2-67 - +every2 is never used - <-- line 106 - @dead("+every2") let every2 = (a1, a2, f) => Array.every2(fromT(a1), fromT(a2), f) - - Warning Dead Value - File "ImmutableArray.res", line 108, characters 2-67 - +some2U is never used - <-- line 108 - @dead("+some2U") let some2U = (a1, a2, f) => Array.some2U(fromT(a1), fromT(a2), f) - - Warning Dead Value - File "ImmutableArray.res", line 109, characters 2-65 - +some2 is never used - <-- line 109 - @dead("+some2") let some2 = (a1, a2, f) => Array.some2(fromT(a1), fromT(a2), f) - - Warning Dead Value - File "ImmutableArray.res", line 111, characters 2-63 - +cmpU is never used - <-- line 111 - @dead("+cmpU") let cmpU = (a1, a2, f) => Array.cmpU(fromT(a1), fromT(a2), f) - - Warning Dead Value - File "ImmutableArray.res", line 112, characters 2-61 - +cmp is never used - <-- line 112 - @dead("+cmp") let cmp = (a1, a2, f) => Array.cmp(fromT(a1), fromT(a2), f) - - Warning Dead Value - File "ImmutableArray.res", line 114, characters 2-61 - +eqU is never used - <-- line 114 - @dead("+eqU") let eqU = (a1, a2, f) => Array.eqU(fromT(a1), fromT(a2), f) - - Warning Dead Value - File "ImmutableArray.res", line 115, characters 2-59 - +eq is never used - <-- line 115 - @dead("+eq") let eq = (a1, a2, f) => Array.eq(fromT(a1), fromT(a2), f) - - Warning Dead Value - File "ImmutableArray.resi", line 12, characters 0-31 - +toArray is never used - <-- line 12 - @dead("+toArray") let toArray: t<'a> => array<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 14, characters 0-107 - +length is never used - <-- line 14 - @dead("+length") @ocaml.doc(" Subset of the Belt.Array oprerations that do not mutate the array. ") - - Warning Dead Value - File "ImmutableArray.resi", line 17, characters 0-22 - +size is never used - <-- line 17 - @dead("+size") let size: t<'a> => int - - Warning Dead Value - File "ImmutableArray.resi", line 19, characters 0-35 - +get is never used - <-- line 19 - @dead("+get") let get: (t<'a>, int) => option<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 21, characters 0-30 - +getExn is never used - <-- line 21 - @dead("+getExn") let getExn: (t<'a>, int) => 'a - - Warning Dead Value - File "ImmutableArray.resi", line 23, characters 0-33 - +getUnsafe is never used - <-- line 23 - @dead("+getUnsafe") let getUnsafe: (t<'a>, int) => 'a - - Warning Dead Value - File "ImmutableArray.resi", line 25, characters 0-50 - +getUndefined is never used - <-- line 25 - @dead("+getUndefined") let getUndefined: (t<'a>, int) => Js.undefined<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 27, characters 0-27 - +shuffle is never used - <-- line 27 - @dead("+shuffle") let shuffle: t<'a> => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 29, characters 0-27 - +reverse is never used - <-- line 29 - @dead("+reverse") let reverse: t<'a> => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 31, characters 0-49 - +makeUninitialized is never used - <-- line 31 - @dead("+makeUninitialized") let makeUninitialized: int => t> - - Warning Dead Value - File "ImmutableArray.resi", line 33, characters 0-41 - +makeUninitializedUnsafe is never used - <-- line 33 - @dead("+makeUninitializedUnsafe") let makeUninitializedUnsafe: int => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 35, characters 0-28 - +make is never used - <-- line 35 - @dead("+make") let make: (int, 'a) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 37, characters 0-31 - +range is never used - <-- line 37 - @dead("+range") let range: (int, int) => t - - Warning Dead Value - File "ImmutableArray.resi", line 39, characters 0-45 - +rangeBy is never used - <-- line 39 - @dead("+rangeBy") let rangeBy: (int, int, ~step: int) => t - - Warning Dead Value - File "ImmutableArray.resi", line 41, characters 0-42 - +makeByU is never used - <-- line 41 - @dead("+makeByU") let makeByU: (int, (. int) => 'a) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 42, characters 0-37 - +makeBy is never used - <-- line 42 - @dead("+makeBy") let makeBy: (int, int => 'a) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 44, characters 0-52 - +makeByAndShuffleU is never used - <-- line 44 - @dead("+makeByAndShuffleU") let makeByAndShuffleU: (int, (. int) => 'a) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 45, characters 0-47 - +makeByAndShuffle is never used - <-- line 45 - @dead("+makeByAndShuffle") let makeByAndShuffle: (int, int => 'a) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 47, characters 0-38 - +zip is never used - <-- line 47 - @dead("+zip") let zip: (t<'a>, t<'b>) => t<('a, 'b)> - - Warning Dead Value - File "ImmutableArray.resi", line 49, characters 0-53 - +zipByU is never used - <-- line 49 - @dead("+zipByU") let zipByU: (t<'a>, t<'b>, (. 'a, 'b) => 'c) => t<'c> - - Warning Dead Value - File "ImmutableArray.resi", line 50, characters 0-50 - +zipBy is never used - <-- line 50 - @dead("+zipBy") let zipBy: (t<'a>, t<'b>, ('a, 'b) => 'c) => t<'c> - - Warning Dead Value - File "ImmutableArray.resi", line 52, characters 0-40 - +unzip is never used - <-- line 52 - @dead("+unzip") let unzip: t<('a, 'a)> => (t<'a>, t<'a>) - - Warning Dead Value - File "ImmutableArray.resi", line 54, characters 0-35 - +concat is never used - <-- line 54 - @dead("+concat") let concat: (t<'a>, t<'a>) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 56, characters 0-33 - +concatMany is never used - <-- line 56 - @dead("+concatMany") let concatMany: t> => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 58, characters 0-52 - +slice is never used - <-- line 58 - @dead("+slice") let slice: (t<'a>, ~offset: int, ~len: int) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 60, characters 0-37 - +sliceToEnd is never used - <-- line 60 - @dead("+sliceToEnd") let sliceToEnd: (t<'a>, int) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 62, characters 0-24 - +copy is never used - <-- line 62 - @dead("+copy") let copy: t<'a> => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 64, characters 0-45 - +forEachU is never used - <-- line 64 - @dead("+forEachU") let forEachU: (t<'a>, (. 'a) => unit) => unit - - Warning Dead Value - File "ImmutableArray.resi", line 65, characters 0-40 - +forEach is never used - <-- line 65 - @dead("+forEach") let forEach: (t<'a>, 'a => unit) => unit - - Warning Dead Value - File "ImmutableArray.resi", line 67, characters 0-40 - +mapU is never used - <-- line 67 - @dead("+mapU") let mapU: (t<'a>, (. 'a) => 'b) => t<'b> - - Warning Dead Value - File "ImmutableArray.resi", line 68, characters 0-35 - +map is never used - <-- line 68 - @dead("+map") let map: (t<'a>, 'a => 'b) => t<'b> - - Warning Dead Value - File "ImmutableArray.resi", line 70, characters 0-57 - +keepWithIndexU is never used - <-- line 70 - @dead("+keepWithIndexU") let keepWithIndexU: (t<'a>, (. 'a, int) => bool) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 71, characters 0-54 - +keepWithIndex is never used - <-- line 71 - @dead("+keepWithIndex") let keepWithIndex: (t<'a>, ('a, int) => bool) => t<'a> - - Warning Dead Value - File "ImmutableArray.resi", line 73, characters 0-52 - +keepMapU is never used - <-- line 73 - @dead("+keepMapU") let keepMapU: (t<'a>, (. 'a) => option<'b>) => t<'b> - - Warning Dead Value - File "ImmutableArray.resi", line 74, characters 0-47 - +keepMap is never used - <-- line 74 - @dead("+keepMap") let keepMap: (t<'a>, 'a => option<'b>) => t<'b> - - Warning Dead Value - File "ImmutableArray.resi", line 76, characters 0-59 - +forEachWithIndexU is never used - <-- line 76 - @dead("+forEachWithIndexU") let forEachWithIndexU: (t<'a>, (. int, 'a) => unit) => unit - - Warning Dead Value - File "ImmutableArray.resi", line 77, characters 0-56 - +forEachWithIndex is never used - <-- line 77 - @dead("+forEachWithIndex") let forEachWithIndex: (t<'a>, (int, 'a) => unit) => unit - - Warning Dead Value - File "ImmutableArray.resi", line 79, characters 0-54 - +mapWithIndexU is never used - <-- line 79 - @dead("+mapWithIndexU") let mapWithIndexU: (t<'a>, (. int, 'a) => 'b) => t<'b> - - Warning Dead Value - File "ImmutableArray.resi", line 80, characters 0-51 - +mapWithIndex is never used - <-- line 80 - @dead("+mapWithIndex") let mapWithIndex: (t<'a>, (int, 'a) => 'b) => t<'b> - - Warning Dead Value - File "ImmutableArray.resi", line 82, characters 0-57 - +partitionU is never used - <-- line 82 - @dead("+partitionU") let partitionU: (t<'a>, (. 'a) => bool) => (t<'a>, t<'a>) - - Warning Dead Value - File "ImmutableArray.resi", line 83, characters 0-52 - +partition is never used - <-- line 83 - @dead("+partition") let partition: (t<'a>, 'a => bool) => (t<'a>, t<'a>) - - Warning Dead Value - File "ImmutableArray.resi", line 85, characters 0-48 - +reduceU is never used - <-- line 85 - @dead("+reduceU") let reduceU: (t<'a>, 'b, (. 'b, 'a) => 'b) => 'b - - Warning Dead Value - File "ImmutableArray.resi", line 86, characters 0-45 - +reduce is never used - <-- line 86 - @dead("+reduce") let reduce: (t<'a>, 'b, ('b, 'a) => 'b) => 'b - - Warning Dead Value - File "ImmutableArray.resi", line 88, characters 0-55 - +reduceReverseU is never used - <-- line 88 - @dead("+reduceReverseU") let reduceReverseU: (t<'a>, 'b, (. 'b, 'a) => 'b) => 'b - - Warning Dead Value - File "ImmutableArray.resi", line 89, characters 0-52 - +reduceReverse is never used - <-- line 89 - @dead("+reduceReverse") let reduceReverse: (t<'a>, 'b, ('b, 'a) => 'b) => 'b - - Warning Dead Value - File "ImmutableArray.resi", line 91, characters 0-67 - +reduceReverse2U is never used - <-- line 91 - @dead("+reduceReverse2U") let reduceReverse2U: (t<'a>, t<'b>, 'c, (. 'c, 'a, 'b) => 'c) => 'c - - Warning Dead Value - File "ImmutableArray.resi", line 92, characters 0-64 - +reduceReverse2 is never used - <-- line 92 - @dead("+reduceReverse2") let reduceReverse2: (t<'a>, t<'b>, 'c, ('c, 'a, 'b) => 'c) => 'c - - Warning Dead Value - File "ImmutableArray.resi", line 94, characters 0-42 - +someU is never used - <-- line 94 - @dead("+someU") let someU: (t<'a>, (. 'a) => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 95, characters 0-37 - +some is never used - <-- line 95 - @dead("+some") let some: (t<'a>, 'a => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 97, characters 0-43 - +everyU is never used - <-- line 97 - @dead("+everyU") let everyU: (t<'a>, (. 'a) => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 98, characters 0-38 - +every is never used - <-- line 98 - @dead("+every") let every: (t<'a>, 'a => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 100, characters 0-55 - +every2U is never used - <-- line 100 - @dead("+every2U") let every2U: (t<'a>, t<'b>, (. 'a, 'b) => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 101, characters 0-52 - +every2 is never used - <-- line 101 - @dead("+every2") let every2: (t<'a>, t<'b>, ('a, 'b) => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 103, characters 0-54 - +some2U is never used - <-- line 103 - @dead("+some2U") let some2U: (t<'a>, t<'b>, (. 'a, 'b) => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 104, characters 0-51 - +some2 is never used - <-- line 104 - @dead("+some2") let some2: (t<'a>, t<'b>, ('a, 'b) => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 106, characters 0-50 - +cmpU is never used - <-- line 106 - @dead("+cmpU") let cmpU: (t<'a>, t<'a>, (. 'a, 'a) => int) => int - - Warning Dead Value - File "ImmutableArray.resi", line 107, characters 0-47 - +cmp is never used - <-- line 107 - @dead("+cmp") let cmp: (t<'a>, t<'a>, ('a, 'a) => int) => int - - Warning Dead Value - File "ImmutableArray.resi", line 109, characters 0-51 - +eqU is never used - <-- line 109 - @dead("+eqU") let eqU: (t<'a>, t<'a>, (. 'a, 'a) => bool) => bool - - Warning Dead Value - File "ImmutableArray.resi", line 110, characters 0-48 - +eq is never used - <-- line 110 - @dead("+eq") let eq: (t<'a>, t<'a>, ('a, 'a) => bool) => bool - - Warning Dead Type - File "ImportHookDefault.res", line 2, characters 2-14 - person.name is a record label never used to read a value - <-- line 2 - @dead("person.name") name: string, - - Warning Dead Type - File "ImportHookDefault.res", line 3, characters 2-10 - person.age is a record label never used to read a value - <-- line 3 - @dead("person.age") age: int, - - Warning Dead Type - File "ImportHooks.res", line 3, characters 2-14 - person.name is a record label never used to read a value - <-- line 3 - @dead("person.name") name: string, - - Warning Dead Type - File "ImportHooks.res", line 4, characters 2-10 - person.age is a record label never used to read a value - <-- line 4 - @dead("person.age") age: int, - - Warning Dead Type - File "ImportJsValue.res", line 11, characters 2-8 - point.x is a record label never used to read a value - <-- line 11 - @dead("point.x") x: int, - - Warning Dead Type - File "ImportJsValue.res", line 12, characters 2-16 - point.y is a record label never used to read a value - <-- line 12 - @dead("point.y") y: option, - - Warning Dead Type - File "ImportJsValue.res", line 67, characters 2-10 - variant.I is a variant case which is never constructed - <-- line 67 - | @dead("variant.I") I(int) - - Warning Dead Type - File "ImportJsValue.res", line 68, characters 4-13 - variant.S is a variant case which is never constructed - <-- line 68 - | @dead("variant.S") S(string) - - Warning Dead Type - File "ImportMyBanner.res", line 5, characters 16-28 - message.text is a record label never used to read a value - <-- line 5 - type message = {@dead("message.text") text: string} - - Warning Dead Value - File "ImportMyBanner.res", line 12, characters 0-15 - +make is never used - <-- line 12 - @dead("+make") let make = make - - Warning Dead Module - File "ModuleAliases.res", line 2, characters 9-56 - +ModuleAliases.Outer.Inner is a dead module as all its items are dead. - - Warning Dead Type - File "ModuleAliases.res", line 3, characters 19-32 - Outer.Inner.innerT.inner is a record label never used to read a value - <-- line 3 - type innerT = {@dead("Outer.Inner.innerT.inner") inner: string} - - Warning Dead Module - File "ModuleAliases.res", line 10, characters 11-61 - +ModuleAliases.Outer2.Inner2.InnerNested is a dead module as all its items are dead. - - Warning Dead Type - File "ModuleAliases.res", line 11, characters 16-27 - Outer2.Inner2.InnerNested.t.nested is a record label never used to read a value - <-- line 11 - type t = {@dead("Outer2.Inner2.InnerNested.t.nested") nested: int} - - Warning Dead Module - File "ModuleAliases2.res", line 0, characters 0-0 - +ModuleAliases2 is a dead module as all its items are dead. - - Warning Dead Type - File "ModuleAliases2.res", line 3, characters 2-8 - record.x is a record label never used to read a value - <-- line 3 - @dead("record.x") x: int, - - Warning Dead Type - File "ModuleAliases2.res", line 4, characters 2-11 - record.y is a record label never used to read a value - <-- line 4 - @dead("record.y") y: string, - - Warning Dead Module - File "ModuleAliases2.res", line 7, characters 7-130 - +ModuleAliases2.Outer is a dead module as all its items are dead. - - Warning Dead Type - File "ModuleAliases2.res", line 9, characters 16-29 - Outer.outer.outer is a record label never used to read a value - <-- line 9 - type outer = {@dead("Outer.outer.outer") outer: string} - - Warning Dead Module - File "ModuleAliases2.res", line 11, characters 9-68 - +ModuleAliases2.Outer.Inner is a dead module as all its items are dead. - - Warning Dead Type - File "ModuleAliases2.res", line 13, characters 18-31 - Outer.Inner.inner.inner is a record label never used to read a value - <-- line 13 - type inner = {@dead("Outer.Inner.inner.inner") inner: string} - - Warning Dead Value - File "ModuleAliases2.res", line 21, characters 0-10 - +q is never used - <-- line 21 - @dead("+q") let q = 42 - - Warning Dead Module - File "ModuleExceptionBug.res", line 1, characters 7-52 - +ModuleExceptionBug.Dep is a dead module as all its items are dead. - - Warning Dead Value - File "ModuleExceptionBug.res", line 2, characters 2-35 - Dep.+customDouble is never used - <-- line 2 - @dead("Dep.+customDouble") let customDouble = foo => foo * 2 - - Warning Dead Exception - File "ModuleExceptionBug.res", line 5, characters 0-26 - MyOtherException is never raised or passed as value - <-- line 5 - @dead("MyOtherException") exception MyOtherException - - Warning Dead Value - File "NestedModules.res", line 8, characters 2-22 - Universe.+notExported is never used - <-- line 8 - @dead("Universe.+notExported") let notExported = 33 - - Warning Dead Value - File "NestedModules.res", line 14, characters 4-13 - Universe.Nested2.+x is never used - <-- line 14 - @dead("Universe.Nested2.+x") let x = 0 - - Warning Dead Value - File "NestedModules.res", line 19, characters 4-13 - Universe.Nested2.+y is never used - <-- line 19 - @dead("Universe.Nested2.+y") let y = 2 - - Warning Dead Value - File "NestedModules.res", line 25, characters 6-15 - Universe.Nested2.Nested3.+x is never used - <-- line 25 - @dead("Universe.Nested2.Nested3.+x") let x = 0 - - Warning Dead Value - File "NestedModules.res", line 26, characters 6-15 - Universe.Nested2.Nested3.+y is never used - <-- line 26 - @dead("Universe.Nested2.Nested3.+y") let y = 1 - - Warning Dead Value - File "NestedModules.res", line 27, characters 6-15 - Universe.Nested2.Nested3.+z is never used - <-- line 27 - @dead("Universe.Nested2.Nested3.+z") let z = 2 - - Warning Dead Value - File "NestedModules.res", line 28, characters 6-15 - Universe.Nested2.Nested3.+w is never used - <-- line 28 - @dead("Universe.Nested2.Nested3.+w") let w = 3 - - Warning Dead Type - File "NestedModules.res", line 46, characters 4-7 - Universe.variant.A is a variant case which is never constructed - <-- line 46 - | @dead("Universe.variant.A") A - - Warning Dead Type - File "NestedModules.res", line 47, characters 6-15 - Universe.variant.B is a variant case which is never constructed - <-- line 47 - | @dead("Universe.variant.B") B(string) - - Warning Dead Module - File "Newsyntax.res", line 0, characters 0-0 - +Newsyntax is a dead module as all its items are dead. - - Warning Dead Value - File "Newsyntax.res", line 1, characters 0-10 - +x is never used - <-- line 1 - @dead("+x") let x = 34 - - Warning Dead Value - File "Newsyntax.res", line 3, characters 0-10 - +y is never used - <-- line 3 - @dead("+y") let y = 11 - - Warning Dead Type - File "Newsyntax.res", line 6, characters 2-10 - record.xxx is a record label never used to read a value - <-- line 6 - @dead("record.xxx") xxx: int, - - Warning Dead Type - File "Newsyntax.res", line 7, characters 2-10 - record.yyy is a record label never used to read a value - <-- line 7 - @dead("record.yyy") yyy: int, - - Warning Dead Type - File "Newsyntax.res", line 10, characters 15-16 - variant.A is a variant case which is never constructed - <-- line 10 - type variant = | @dead("variant.A") A | B(int)|C - - Warning Dead Type - File "Newsyntax.res", line 10, characters 19-25 - variant.B is a variant case which is never constructed - <-- line 10 - type variant = | @dead("variant.A") A | @dead("variant.B") B(int)|C - - Warning Dead Type - File "Newsyntax.res", line 10, characters 25-27 - variant.C is a variant case which is never constructed - <-- line 10 - type variant = | @dead("variant.A") A | @dead("variant.B") B(int)|@dead("variant.C") C - - Warning Dead Type - File "Newsyntax.res", line 12, characters 16-22 - record2.xx is a record label never used to read a value - <-- line 12 - type record2 = {@dead("record2.xx") xx:int,yy:int} - - Warning Dead Type - File "Newsyntax.res", line 12, characters 23-29 - record2.yy is a record label never used to read a value - <-- line 12 - type record2 = {@dead("record2.xx") xx:int,@dead("record2.yy") yy:int} - - Warning Dead Type - File "Opaque.res", line 2, characters 25-41 - opaqueFromRecords.A is a variant case which is never constructed - <-- line 2 - type opaqueFromRecords = | @dead("opaqueFromRecords.A") A(Records.coord) - - Warning Dead Value - File "OptArg.resi", line 1, characters 0-54 - +foo is never used - <-- line 1 - @dead("+foo") let foo: (~x: int=?, ~y: int=?, ~z: int=?, int) => int - - Warning Dead Type - File "Records.res", line 24, characters 2-14 - person.name is a record label never used to read a value - <-- line 24 - @dead("person.name") name: string, - - Warning Dead Type - File "Records.res", line 25, characters 2-10 - person.age is a record label never used to read a value - <-- line 25 - @dead("person.age") age: int, - - Warning Dead Type - File "Records.res", line 31, characters 2-14 - business.name is a record label never used to read a value - <-- line 31 - @dead("business.name") name: string, - - Warning Dead Type - File "Records.res", line 60, characters 2-10 - payload.num is a record label never used to read a value - <-- line 60 - @dead("payload.num") num: int, - - Warning Dead Type - File "Records.res", line 70, characters 2-8 - record.w is a record label never used to read a value - <-- line 70 - @dead("record.w") w: int, - - Warning Dead Type - File "Records.res", line 90, characters 2-14 - business2.name is a record label never used to read a value - <-- line 90 - @dead("business2.name") name: string, - - Warning Dead Type - File "Records.res", line 91, characters 2-30 - business2.owner is a record label never used to read a value - <-- line 91 - @dead("business2.owner") owner: Js.Nullable.t, - - Warning Dead Type - File "References.res", line 39, characters 27-33 - requiresConversion.x is a record label never used to read a value - <-- line 39 - type requiresConversion = {@dead("requiresConversion.x") x: int} - - Warning Dead Type - File "RepeatedLabel.res", line 2, characters 2-9 - userData.a is a record label never used to read a value - <-- line 2 - @dead("userData.a") a: bool, - - Warning Dead Type - File "RepeatedLabel.res", line 3, characters 2-8 - userData.b is a record label never used to read a value - <-- line 3 - @dead("userData.b") b: int, - - Warning Dead Type - File "RepeatedLabel.res", line 9, characters 2-11 - tabState.f is a record label never used to read a value - <-- line 9 - @dead("tabState.f") f: string, - - Warning Dead Value - File "Shadow.res", line 11, characters 2-22 - M.+test is never used - <-- line 11 - @dead("M.+test") let test = () => "a" - - Warning Dead Value - File "TestImmutableArray.res", line 12, characters 0-54 - +testBeltArrayGet is never used - <-- line 12 - @dead("+testBeltArrayGet") let testBeltArrayGet = arr => { - - Warning Dead Value - File "TestImmutableArray.res", line 17, characters 0-58 - +testBeltArraySet is never used - <-- line 17 - @dead("+testBeltArraySet") let testBeltArraySet = arr => { - - Warning Dead Value - File "TestImport.res", line 13, characters 0-43 - +innerStuffContents is never used - <-- line 13 - @dead("+innerStuffContents") let innerStuffContents = innerStuffContents - - Warning Dead Type - File "TestImport.res", line 22, characters 16-28 - message.text is a record label never used to read a value - <-- line 22 - type message = {@dead("message.text") text: string} - - Warning Dead Value - File "TestImport.res", line 27, characters 0-15 - +make is never used - <-- line 27 - @dead("+make") let make = make - - Warning Dead Type - File "TestPromise.res", line 6, characters 2-8 - fromPayload.x is a record label never used to read a value - <-- line 6 - @dead("fromPayload.x") x: int, - - Warning Dead Type - File "TestPromise.res", line 11, characters 18-32 - toPayload.result is a record label never used to read a value - <-- line 11 - type toPayload = {@dead("toPayload.result") result: string} - - Warning Dead Module - File "TransitiveType2.res", line 0, characters 0-0 - +TransitiveType2 is a dead module as all its items are dead. - - Warning Dead Value - File "TransitiveType2.res", line 7, characters 0-28 - +convertT2 is never used - <-- line 7 - @dead("+convertT2") let convertT2 = (x: t2) => x - - Warning Dead Type - File "TransitiveType3.res", line 3, characters 2-8 - t3.i is a record label never used to read a value - <-- line 3 - @dead("t3.i") i: int, - - Warning Dead Type - File "TransitiveType3.res", line 4, characters 2-11 - t3.s is a record label never used to read a value - <-- line 4 - @dead("t3.s") s: string, - - Warning Dead Module - File "TypeParams1.res", line 0, characters 0-0 - +TypeParams1 is a dead module as all its items are dead. - - Warning Dead Value - File "TypeParams1.res", line 4, characters 0-24 - +exportSomething is never used - <-- line 4 - @dead("+exportSomething") let exportSomething = 10 - - Warning Dead Module - File "TypeParams2.res", line 0, characters 0-0 - +TypeParams2 is a dead module as all its items are dead. - - Warning Dead Type - File "TypeParams2.res", line 2, characters 13-20 - item.id is a record label never used to read a value - <-- line 2 - type item = {@dead("item.id") id: int} - - Warning Dead Value - File "TypeParams2.res", line 10, characters 0-24 - +exportSomething is never used - <-- line 10 - @dead("+exportSomething") let exportSomething = 10 - - Warning Dead Type - File "Types.res", line 12, characters 2-13 - typeWithVars.A is a variant case which is never constructed - <-- line 12 - | @dead("typeWithVars.A") A('x, 'y) - - Warning Dead Type - File "Types.res", line 13, characters 4-9 - typeWithVars.B is a variant case which is never constructed - <-- line 13 - | @dead("typeWithVars.B") B('z) - - Warning Dead Type - File "Types.res", line 35, characters 26-47 - mutuallyRecursiveB.a is a record label never used to read a value - <-- line 35 - and mutuallyRecursiveB = {@dead("mutuallyRecursiveB.a") a: mutuallyRecursiveA} - - Warning Dead Type - File "Types.res", line 56, characters 2-5 - opaqueVariant.A is a variant case which is never constructed - <-- line 56 - | @dead("opaqueVariant.A") A - - Warning Dead Type - File "Types.res", line 57, characters 4-5 - opaqueVariant.B is a variant case which is never constructed - <-- line 57 - | @dead("opaqueVariant.B") B - - Warning Dead Type - File "Types.res", line 87, characters 2-8 - record.i is a record label never used to read a value - <-- line 87 - @dead("record.i") i: int, - - Warning Dead Type - File "Types.res", line 88, characters 2-11 - record.s is a record label never used to read a value - <-- line 88 - @dead("record.s") s: string, - - Warning Dead Type - File "Types.res", line 133, characters 19-26 - someRecord.id is a record label never used to read a value - <-- line 133 - type someRecord = {@dead("someRecord.id") id: int} - - Warning Dead Module - File "Types.res", line 161, characters 7-79 - +Types.ObjectId is a dead module as all its items are dead. - - Warning Dead Value - File "Types.res", line 166, characters 2-11 - ObjectId.+x is never used - <-- line 166 - @dead("ObjectId.+x") let x = 1 - - Warning Dead Type - File "Unboxed.res", line 2, characters 10-16 - v1.A is a variant case which is never constructed - <-- line 2 - type v1 = | @dead("v1.A") A(int) - - Warning Dead Type - File "Unboxed.res", line 5, characters 10-16 - v2.A is a variant case which is never constructed - <-- line 5 - type v2 = | @dead("v2.A") A(int) - - Warning Dead Type - File "Unboxed.res", line 11, characters 11-17 - r1.x is a record label never used to read a value - <-- line 11 - type r1 = {@dead("r1.x") x: int} - - Warning Dead Type - File "Unboxed.res", line 14, characters 10-24 - r2.B is a variant case which is never constructed - <-- line 14 - type r2 = | @dead("r2.B") B({g: string}) - - Warning Dead Type - File "Variants.res", line 95, characters 13-39 - type_.Type is a variant case which is never constructed - <-- line 95 - type type_ = | @dead("type_.Type") @genType.as("type") Type - - Warning Dead Type - File "Variants.res", line 102, characters 2-10 - result1.Ok is a variant case which is never constructed - <-- line 102 - | @dead("result1.Ok") Ok('a) - - Warning Dead Type - File "Variants.res", line 103, characters 4-13 - result1.Error is a variant case which is never constructed - <-- line 103 - | @dead("result1.Error") Error('b) - - Warning Dead Type - File "VariantsWithPayload.res", line 49, characters 2-5 - simpleVariant.A is a variant case which is never constructed - <-- line 49 - | @dead("simpleVariant.A") A - - Warning Dead Type - File "VariantsWithPayload.res", line 50, characters 4-5 - simpleVariant.B is a variant case which is never constructed - <-- line 50 - | @dead("simpleVariant.B") B - - Warning Dead Type - File "VariantsWithPayload.res", line 51, characters 4-5 - simpleVariant.C is a variant case which is never constructed - <-- line 51 - | @dead("simpleVariant.C") C - - Warning Dead Type - File "VariantsWithPayload.res", line 58, characters 2-29 - variantWithPayloads.A is a variant case which is never constructed - <-- line 58 - | @dead("variantWithPayloads.A") @genType.as("ARenamed") A - - Warning Dead Type - File "VariantsWithPayload.res", line 59, characters 4-10 - variantWithPayloads.B is a variant case which is never constructed - <-- line 59 - | @dead("variantWithPayloads.B") B(int) - - Warning Dead Type - File "VariantsWithPayload.res", line 60, characters 4-15 - variantWithPayloads.C is a variant case which is never constructed - <-- line 60 - | @dead("variantWithPayloads.C") C(int, int) - - Warning Dead Type - File "VariantsWithPayload.res", line 61, characters 4-17 - variantWithPayloads.D is a variant case which is never constructed - <-- line 61 - | @dead("variantWithPayloads.D") D((int, int)) - - Warning Dead Type - File "VariantsWithPayload.res", line 62, characters 4-23 - variantWithPayloads.E is a variant case which is never constructed - <-- line 62 - | @dead("variantWithPayloads.E") E(int, string, int) - - Warning Dead Type - File "VariantsWithPayload.res", line 90, characters 19-25 - variant1Int.R is a variant case which is never constructed - <-- line 90 - type variant1Int = | @dead("variant1Int.R") R(int) - - Warning Dead Type - File "VariantsWithPayload.res", line 96, characters 22-32 - variant1Object.R is a variant case which is never constructed - <-- line 96 - type variant1Object = | @dead("variant1Object.R") R(payload) + | LiveA [@dead "live_variant.LiveA"] - Analysis reported 335 issues (Warning Dead Exception:2, Warning Dead Module:25, Warning Dead Type:89, Warning Dead Value:201, Warning Dead Value With Side Effects:2, Warning Redundant Optional Argument:5, Warning Unused Argument:11) + Analysis reported 22 issues (Warning Dead Module:2, Warning Dead Type:5, Warning Dead Value:13, Warning Redundant Optional Argument:1, Warning Unused Argument:1) diff --git a/examples/deadcode/src/dune b/examples/deadcode/src/dune new file mode 100644 index 00000000..b6b568be --- /dev/null +++ b/examples/deadcode/src/dune @@ -0,0 +1,16 @@ +(library + (name deadcode_fixture) + (modules + Annotations + Deadcode + Exceptions + Externals + FirstClassModules + Includes + Main + ModuleAliases + Modules + OptionalArgs + TransitiveTypes + Types) + (flags :standard -w -27-32-34-37-39 -bin-annot)) diff --git a/examples/deadcode/src/exception.txt b/examples/deadcode/src/exception.txt index 31e1fab9..d810dd55 100644 --- a/examples/deadcode/src/exception.txt +++ b/examples/deadcode/src/exception.txt @@ -1,126 +1,6 @@ Exception Analysis - File "Exn.res", line 1, characters 4-10 - raises might raise Not_found (Exn.res:1:19) and is not annotated with @raises(Not_found) - - Exception Analysis - File "Exn.res", line 19, characters 4-28 - callsRaiseWithAnnotation might raise Not_found (Exn.res:19:31) and is not annotated with @raises(Not_found) - - Exception Analysis - File "Exn.res", line 22, characters 4-42 - callsRaiseWithAnnotationAndIsAnnotated might raise Not_found (Exn.res:22:45) and is not annotated with @raises(Not_found) - - Exception Analysis - File "Exn.res", line 22, characters 4-42 - callsRaiseWithAnnotationAndIsAnnotated might raise Not_found (Exn.res:22:45) and is annotated with redundant @raises(A) - - Exception Analysis - File "Exn.res", line 24, characters 4-5 - z might raise Failure (Exn.res:24:8) and is not annotated with @raises(Failure) - - Exception Analysis - File "Exn.res", line 26, characters 4-19 - incompleteMatch might raise Match_failure (Exn.res:27:2) and is not annotated with @raises(Match_failure) - - Exception Analysis - File "Exn.res", line 34, characters 4-13 - twoRaises might raise [A (Exn.res:36:4), B (Exn.res:39:4)] and is not annotated with @raises([A, B]) - - Exception Analysis - File "Exn.res", line 43, characters 4-14 - sequencing might raise A (Exn.res:44:2) and is not annotated with @raises(A) - - Exception Analysis - File "Exn.res", line 50, characters 4-14 - wrongCatch might raise B (Exn.res:51:6) and is not annotated with @raises(B) - - Exception Analysis - File "Exn.res", line 56, characters 4-15 - wrongCatch2 might raise [C (Exn.res:57:24), Match_failure (Exn.res:57:2)] and is not annotated with @raises([C, Match_failure]) - - Exception Analysis - File "Exn.res", line 64, characters 4-19 - raise2Annotate3 might raise [A (Exn.res:66:4), B (Exn.res:69:4)] and is annotated with redundant @raises(C) - - Exception Analysis - File "Exn.res", line 75, characters 4-24 - parse_json_from_file might raise Error (Exn.res:80:4) and is not annotated with @raises(Error) - - Exception Analysis - File "Exn.res", line 87, characters 4-11 - reRaise might raise B (Exn.res:89:19) and is not annotated with @raises(B) - - Exception Analysis - File "Exn.res", line 98, characters 4-22 - raiseInInternalLet might raise A (Exn.res:99:14) and is not annotated with @raises(A) - - Exception Analysis - File "Exn.res", line 103, characters 4-16 - indirectCall might raise Not_found (Exn.res:103:31) and is not annotated with @raises(Not_found) - - Exception Analysis - File "Exn.res", line 151, characters 4-16 - severalCases might raise Failure (Exn.res:153:13 Exn.res:154:13 Exn.res:155:15) and is not annotated with @raises(Failure) - - Exception Analysis - File "Exn.res", line 162, characters 31-56 - String.uncapitalize_ascii does not raise and is annotated with redundant @doesNotRaise - - Exception Analysis - File "Exn.res", line 164, characters 31-63 - String.uncapitalize_ascii does not raise and is annotated with redundant @doesNotRaise - - Exception Analysis - File "Exn.res", line 166, characters 46-71 - String.uncapitalize_ascii does not raise and is annotated with redundant @doesNotRaise - - Exception Analysis - File "Exn.res", line 166, characters 46-79 - expression does not raise and is annotated with redundant @doesNotRaise - - Exception Analysis - File "Exn.res", line 172, characters 50-55 - expression does not raise and is annotated with redundant @doesNotRaise - - Exception Analysis - File "Exn.res", line 170, characters 24-56 - String.uncapitalize_ascii does not raise and is annotated with redundant @doesNotRaise - - Exception Analysis - File "Exn.res", line 179, characters 4-23 - redundantAnnotation raises nothing and is annotated with redundant @raises(Invalid_argument) - - Exception Analysis - File "Exn.res", line 181, characters 4-6 - _x might raise A (Exn.res:181:9) and is not annotated with @raises(A) - - Exception Analysis - File "Exn.res", line 183, characters 4-5 - _ might raise A (Exn.res:183:8) and is not annotated with @raises(A) - - Exception Analysis - File "Exn.res", line 185, characters 4-6 - () might raise A (Exn.res:185:9) and is not annotated with @raises(A) - - Exception Analysis - File "Exn.res", line 187, characters 0-16 - Toplevel expression might raise Not_found (Exn.res:187:0) and is not annotated with @raises(Not_found) - - Exception Analysis - File "Exn.res", line 189, characters 0-19 - Toplevel expression might raise exit (Exn.res:189:7) and is not annotated with @raises(exit) - - Exception Analysis - File "Exn.res", line 199, characters 44-46 - expression does not raise and is annotated with redundant @doesNotRaise - - Exception Analysis - File "Exn.res", line 199, characters 4-21 - onResultPipeWrong might raise Assert_failure (Exn.res:199:48) and is not annotated with @raises(Assert_failure) - - Exception Analysis - File "ExnA.res", line 1, characters 4-7 - bar might raise Not_found (ExnA.res:1:16) and is not annotated with @raises(Not_found) + File "Exceptions.ml", line 3, characters 4-10 + raises might raise A (Exceptions.ml:3:16) and is not annotated with @raises(A) - Analysis reported 31 issues (Exception Analysis:31) + Analysis reported 1 issues (Exception Analysis:1) diff --git a/examples/deadcode/src/exception/Arr.bs.js b/examples/deadcode/src/exception/Arr.bs.js deleted file mode 100644 index 1efc2cd3..00000000 --- a/examples/deadcode/src/exception/Arr.bs.js +++ /dev/null @@ -1,23 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Belt_Array from "rescript/lib/es6/belt_Array.js"; - -function ff(a) { - Belt_Array.get(a, 3); - return 11; -} - -var MM = { - ff: ff -}; - -var B; - -var $$Array; - -export { - B , - $$Array , - MM , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/Arr.res b/examples/deadcode/src/exception/Arr.res deleted file mode 100644 index c9f473c8..00000000 --- a/examples/deadcode/src/exception/Arr.res +++ /dev/null @@ -1,10 +0,0 @@ -module B = Belt -module Array = B.Array - -module MM = { - let ff = a => - switch a[3] { - | _ => 11 - } -} - diff --git a/examples/deadcode/src/exception/BeltTest.bs.js b/examples/deadcode/src/exception/BeltTest.bs.js deleted file mode 100644 index bf439715..00000000 --- a/examples/deadcode/src/exception/BeltTest.bs.js +++ /dev/null @@ -1,40 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Belt_Map from "rescript/lib/es6/belt_Map.js"; -import * as Belt_List from "rescript/lib/es6/belt_List.js"; -import * as Belt_MapInt from "rescript/lib/es6/belt_MapInt.js"; -import * as Belt_MapString from "rescript/lib/es6/belt_MapString.js"; - -var lstHead1 = Belt_List.headExn; - -var lstHead2 = Belt_List.headExn; - -var mapGetExn1 = Belt_MapInt.getExn; - -var mapGetExn2 = Belt_MapInt.getExn; - -var mapGetExn3 = Belt_MapInt.getExn; - -var mapGetExn4 = Belt_MapString.getExn; - -var mapGetExn5 = Belt_MapString.getExn; - -var mapGetExn6 = Belt_MapString.getExn; - -var mapGetExn7 = Belt_Map.getExn; - -var mapGetExn8 = Belt_Map.getExn; - -export { - lstHead1 , - lstHead2 , - mapGetExn1 , - mapGetExn2 , - mapGetExn3 , - mapGetExn4 , - mapGetExn5 , - mapGetExn6 , - mapGetExn7 , - mapGetExn8 , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/BeltTest.res b/examples/deadcode/src/exception/BeltTest.res deleted file mode 100644 index 4205f3e0..00000000 --- a/examples/deadcode/src/exception/BeltTest.res +++ /dev/null @@ -1,31 +0,0 @@ -open Belt.List - -@raises(Not_found) -let lstHead1 = l => l->Belt.List.headExn - -@raises(Not_found) -let lstHead2 = l => l->Belt_List.headExn - -@raises(Not_found) -let mapGetExn1 = (s, k) => s->Belt.Map.Int.getExn(k) - -@raises(Not_found) -let mapGetExn2 = (s, k) => s->Belt_Map.Int.getExn(k) - -@raises(Not_found) -let mapGetExn3 = (s, k) => s->Belt_MapInt.getExn(k) - -@raises(Not_found) -let mapGetExn4 = (s, k) => s->Belt.Map.String.getExn(k) - -@raises(Not_found) -let mapGetExn5 = (s, k) => s->Belt_Map.String.getExn(k) - -@raises(Not_found) -let mapGetExn6 = (s, k) => s->Belt_MapString.getExn(k) - -@raises(Not_found) -let mapGetExn7 = (s, k) => s->Belt.Map.getExn(k) - -@raises(Not_found) -let mapGetExn8 = (s, k) => s->Belt_Map.getExn(k) diff --git a/examples/deadcode/src/exception/BsJson.bs.js b/examples/deadcode/src/exception/BsJson.bs.js deleted file mode 100644 index 3140e167..00000000 --- a/examples/deadcode/src/exception/BsJson.bs.js +++ /dev/null @@ -1,13 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Json_decode from "@glennsl/bs-json/src/Json_decode.bs.js"; - -var testBsJson = Json_decode.string; - -var testBsJson2 = Json_decode.string; - -export { - testBsJson , - testBsJson2 , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/BsJson.res b/examples/deadcode/src/exception/BsJson.res deleted file mode 100644 index ad892c8e..00000000 --- a/examples/deadcode/src/exception/BsJson.res +++ /dev/null @@ -1,5 +0,0 @@ -@raise(DecodeError) -let testBsJson = x => Json_decode.string(x) - -@raise(DecodeError) -let testBsJson2 = x => Json.Decode.string(x) diff --git a/examples/deadcode/src/exception/Exn.bs.js b/examples/deadcode/src/exception/Exn.bs.js deleted file mode 100644 index a4aa1b07..00000000 --- a/examples/deadcode/src/exception/Exn.bs.js +++ /dev/null @@ -1,116 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Caml_js_exceptions from "rescript/lib/es6/caml_js_exceptions.js"; - -function raises(param) { - throw { - RE_EXN_ID: "Not_found", - Error: new Error() - }; -} - -var catches1; - -try { - catches1 = undefined; -} -catch (raw_exn){ - var exn = Caml_js_exceptions.internalToOCamlException(raw_exn); - if (exn.RE_EXN_ID === "Not_found") { - catches1 = undefined; - } else { - throw exn; - } -} - -var catches2; - -try { - catches2 = undefined; -} -catch (raw_exn$1){ - var exn$1 = Caml_js_exceptions.internalToOCamlException(raw_exn$1); - if (exn$1.RE_EXN_ID === "Not_found") { - catches2 = undefined; - } else { - throw exn$1; - } -} - -var raiseAndCatch; - -try { - throw { - RE_EXN_ID: "Not_found", - Error: new Error() - }; -} -catch (exn$2){ - raiseAndCatch = undefined; -} - -function raisesWithAnnotaion(param) { - throw { - RE_EXN_ID: "Not_found", - Error: new Error() - }; -} - -throw { - RE_EXN_ID: "Not_found", - Error: new Error() - }; - -export { - raises , - catches1 , - catches2 , - raiseAndCatch , - raisesWithAnnotaion , - callsRaiseWithAnnotation , - callsRaiseWithAnnotationAndIsAnnotated , - z , - incompleteMatch , - A , - B , - twoRaises , - sequencing , - wrongCatch , - C , - wrongCatch2 , - raise2Annotate3 , - $$Error , - parse_json_from_file , - reRaise , - switchWithCatchAll , - raiseInInternalLet , - indirectCall , - array , - id , - tryChar , - StringHash , - specializedHash , - genericHash , - raiseAtAt , - raisePipe , - raiseArrow , - bar , - foo , - stringMake1 , - stringMake2 , - stringMake3 , - severalCases , - genericRaiseIsNotSupported , - redundant , - redundant2 , - redundant3 , - redundant4 , - exits , - redundantAnnotation , - _x , - onFunction , - onResult , - onFunctionPipe , - onResultPipeWrong , -} -/* catches1 Not a pure module */ diff --git a/examples/deadcode/src/exception/Exn.res b/examples/deadcode/src/exception/Exn.res deleted file mode 100644 index f31a0d6f..00000000 --- a/examples/deadcode/src/exception/Exn.res +++ /dev/null @@ -1,199 +0,0 @@ -let raises = () => raise(Not_found) - -let catches1 = try () catch { -| Not_found => () -} - -let catches2 = switch () { -| _ => () -| exception Not_found => () -} - -let raiseAndCatch = try raise(Not_found) catch { -| _ => () -} - -@raises(Not_found) -let raisesWithAnnotaion = () => raise(Not_found) - -let callsRaiseWithAnnotation = raisesWithAnnotaion() - -@raises(A) -let callsRaiseWithAnnotationAndIsAnnotated = raisesWithAnnotaion() - -let z = List.hd(list{}) - -let incompleteMatch = l => - switch l { - | list{} => () - } - -exception A -exception B - -let twoRaises = (x, y) => { - if x { - raise(A) - } - if y { - raise(B) - } -} - -let sequencing = () => { - raise(A) - try raise(B) catch { - | _ => () - } -} - -let wrongCatch = () => - try raise(B) catch { - | A => () - } - -exception C -let wrongCatch2 = b => - switch b ? raise(B) : raise(C) { - | exception A => () - | exception B => () - | list{} => () - } - -@raises([A, B, C]) -let raise2Annotate3 = (x, y) => { - if x { - raise(A) - } - if y { - raise(B) - } -} - -exception Error(string, string, int) - -let parse_json_from_file = s => { - let in_chan = ignore(s) - switch 34 { - | exception Error(p1, p2, e) => - ignore(in_chan) - raise(Error(p1, p2, e)) - | v => - ignore(in_chan) - v - } -} - -let reRaise = () => - switch raise(A) { - | exception A => raise(B) - | _ => 11 - } - -let switchWithCatchAll = switch raise(A) { -| exception _ => 1 -| _ => 2 -} - -let raiseInInternalLet = b => { - let a = b ? raise(A) : 22 - a + 34 -} - -let indirectCall = () => () |> raisesWithAnnotaion - -@raises(Invalid_argument) -let array = a => a[2] - -let id = x => x - -let tryChar = v => { - try id(Char.chr(v)) |> ignore catch { - | _ => () - } - 42 -} - -module StringHash = Hashtbl.Make({ - include String - let hash = Hashtbl.hash -}) - -let specializedHash = tbl => StringHash.find(tbl, "abc") - -@raises(Not_found) -let genericHash = tbl => Hashtbl.find(tbl, "abc") - -@raises(Not_found) -let raiseAtAt = () => \"@@"(raise, Not_found) - -@raises(Not_found) -let raisePipe = Not_found |> raise - -@raises(Not_found) -let raiseArrow = Not_found->raise - -@raises(Js.Exn.Error) -let bar = () => Js.Json.parseExn("!!!") - -let foo = () => - try Js.Json.parseExn("!!!") catch { - | Js.Exn.Error(_) => Js.Json.null - } - -@raises(Invalid_argument) -let stringMake1 = String.make(12, ' ') - -let stringMake2 = (@doesNotRaise String.make)(12, ' ') - -let stringMake3 = @doesNotRaise String.make(12, ' ') - -let severalCases = cases => - switch cases { - | "one" => failwith("one") - | "two" => failwith("two") - | "three" => failwith("three") - | _ => () - } - -@raises(genericException) -let genericRaiseIsNotSupported = exn => raise(exn) - -let redundant = (@doesNotRaise String.uncapitalize_ascii)("abc") - -let redundant2 = @doesNotRaise String.uncapitalize_ascii("abc") - -let redundant3 = @doesNotRaise (@doesNotRaise String.uncapitalize_ascii)("abc") - -let redundant4 = () => { - let _ = String.uncapitalize_ascii("abc") - let _ = @doesNotRaise String.uncapitalize_ascii("abc") - let _ = String.uncapitalize_ascii("abc") - let _ = String.uncapitalize_ascii(@doesNotRaise "abc") -} - -@raises(exit) -let exits = () => exit(1) - -@raises(Invalid_argument) -let redundantAnnotation = () => () - -let _x = raise(A) - -let _ = raise(A) - -let () = raise(A) - -raise(Not_found) - -true ? exits() : () - -// Examples with pipe - -let onFunction = () => (@doesNotRaise Belt.Array.getExn)([], 0) - -let onResult = () => @doesNotRaise Belt.Array.getExn([], 0) - -let onFunctionPipe = () => []->(@doesNotRaise Belt.Array.getExn)(0) - -let onResultPipeWrong = () => @doesNotRaise []->Belt.Array.getExn(0) diff --git a/examples/deadcode/src/exception/ExnA.bs.js b/examples/deadcode/src/exception/ExnA.bs.js deleted file mode 100644 index 983ffaab..00000000 --- a/examples/deadcode/src/exception/ExnA.bs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as ExnB from "./ExnB.bs.js"; - -function bar(param) { - return ExnB.foo(undefined); -} - -export { - bar , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/ExnA.res b/examples/deadcode/src/exception/ExnA.res deleted file mode 100644 index 9cf43951..00000000 --- a/examples/deadcode/src/exception/ExnA.res +++ /dev/null @@ -1 +0,0 @@ -let bar = () => ExnB.foo() diff --git a/examples/deadcode/src/exception/ExnB.bs.js b/examples/deadcode/src/exception/ExnB.bs.js deleted file mode 100644 index c5582888..00000000 --- a/examples/deadcode/src/exception/ExnB.bs.js +++ /dev/null @@ -1,14 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function foo(param) { - throw { - RE_EXN_ID: "Not_found", - Error: new Error() - }; -} - -export { - foo , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/ExnB.res b/examples/deadcode/src/exception/ExnB.res deleted file mode 100644 index 2a50ef46..00000000 --- a/examples/deadcode/src/exception/ExnB.res +++ /dev/null @@ -1,2 +0,0 @@ -@raises(Not_found) -let foo = () => raise(Not_found) diff --git a/examples/deadcode/src/exception/ExportWithRename.bs.js b/examples/deadcode/src/exception/ExportWithRename.bs.js deleted file mode 100644 index 41537fe1..00000000 --- a/examples/deadcode/src/exception/ExportWithRename.bs.js +++ /dev/null @@ -1,13 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function ExportWithRename(Props) { - return Props.s; -} - -var make = ExportWithRename; - -export { - make , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/ExportWithRename.gen.tsx b/examples/deadcode/src/exception/ExportWithRename.gen.tsx deleted file mode 100644 index 7b741670..00000000 --- a/examples/deadcode/src/exception/ExportWithRename.gen.tsx +++ /dev/null @@ -1,14 +0,0 @@ -/* TypeScript file generated from ExportWithRename.res by genType. */ -/* eslint-disable import/first */ - - -import * as React from 'react'; - -// @ts-ignore: Implicit any on import -import * as ExportWithRenameBS__Es6Import from './ExportWithRename.bs'; -const ExportWithRenameBS: any = ExportWithRenameBS__Es6Import; - -// tslint:disable-next-line:interface-over-type-literal -export type Props = { readonly s: string }; - -export const ExportWithRename: React.ComponentType<{ readonly s: string }> = ExportWithRenameBS.make; diff --git a/examples/deadcode/src/exception/ExportWithRename.res b/examples/deadcode/src/exception/ExportWithRename.res deleted file mode 100644 index b8b4865b..00000000 --- a/examples/deadcode/src/exception/ExportWithRename.res +++ /dev/null @@ -1,2 +0,0 @@ -@genType("ExportWithRename") @react.component -let make = (~s) => React.string(s) diff --git a/examples/deadcode/src/exception/InnerModules.bs.js b/examples/deadcode/src/exception/InnerModules.bs.js deleted file mode 100644 index f719416e..00000000 --- a/examples/deadcode/src/exception/InnerModules.bs.js +++ /dev/null @@ -1,39 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Pervasives from "rescript/lib/es6/pervasives.js"; - -var wrapExitTop = Pervasives.exit; - -var wrapExitM1 = Pervasives.exit; - -var callLocally = Pervasives.exit; - -var callTop = Pervasives.exit; - -var wrapExitM2 = Pervasives.exit; - -var callM1 = Pervasives.exit; - -var callTop$1 = Pervasives.exit; - -var M2 = { - wrapExitM2: wrapExitM2, - callM1: callM1, - callTop: callTop$1 -}; - -var M1 = { - wrapExitM1: wrapExitM1, - callLocally: callLocally, - callTop: callTop, - M2: M2 -}; - -var callM1$1 = Pervasives.exit; - -export { - wrapExitTop , - M1 , - callM1$1 as callM1, -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/InnerModules.res b/examples/deadcode/src/exception/InnerModules.res deleted file mode 100644 index 7c7f9dc1..00000000 --- a/examples/deadcode/src/exception/InnerModules.res +++ /dev/null @@ -1,27 +0,0 @@ -@raises(exit) -let wrapExitTop = x => exit(x) - -module M1 = { - @raises(exit) - let wrapExitM1 = x => exit(x) - - @raises(exit) - let callLocally = x => wrapExitM1(x) - - @raises(exit) - let callTop = x => wrapExitTop(x) - - module M2 = { - @raises(exit) - let wrapExitM2 = x => exit(x) - - @raises(exit) - let callM1 = x => wrapExitM1(x) - - @raises(exit) - let callTop = x => wrapExitTop(x) - } -} - -@raises(exit) -let callM1 = x => M1.wrapExitM1(x) diff --git a/examples/deadcode/src/exception/TestInnerModules.bs.js b/examples/deadcode/src/exception/TestInnerModules.bs.js deleted file mode 100644 index 877119e8..00000000 --- a/examples/deadcode/src/exception/TestInnerModules.bs.js +++ /dev/null @@ -1,21 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Curry from "rescript/lib/es6/curry.js"; -import * as InnerModules from "./InnerModules.bs.js"; - -var testTop = InnerModules.wrapExitTop; - -function testM1(x) { - return InnerModules.M1.wrapExitM1(x); -} - -function testM2(x) { - return Curry._1(InnerModules.M1.M2.wrapExitM2, x); -} - -export { - testTop , - testM1 , - testM2 , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/TestInnerModules.res b/examples/deadcode/src/exception/TestInnerModules.res deleted file mode 100644 index 6b1e8851..00000000 --- a/examples/deadcode/src/exception/TestInnerModules.res +++ /dev/null @@ -1,8 +0,0 @@ -@raises(exit) -let testTop = x => InnerModules.wrapExitTop(x) - -@raises(exit) -let testM1 = x => InnerModules.M1.wrapExitM1(x) - -@raises(exit) -let testM2 = x => InnerModules.M1.M2.wrapExitM2(x) diff --git a/examples/deadcode/src/exception/TestYojson.bs.js b/examples/deadcode/src/exception/TestYojson.bs.js deleted file mode 100644 index 519172da..00000000 --- a/examples/deadcode/src/exception/TestYojson.bs.js +++ /dev/null @@ -1,45 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Curry from "rescript/lib/es6/curry.js"; -import * as Yojson from "./Yojson.bs.js"; -import * as Caml_obj from "rescript/lib/es6/caml_obj.js"; -import * as Caml_js_exceptions from "rescript/lib/es6/caml_js_exceptions.js"; - -function foo(x) { - return Yojson.Basic.from_string(x); -} - -function bar(str, json) { - try { - return Curry._2(Yojson.Basic.Util.member, str, json); - } - catch (raw_exn){ - var exn = Caml_js_exceptions.internalToOCamlException(raw_exn); - if (exn.RE_EXN_ID === Yojson.Basic.Util.Type_error) { - if (exn._1 === "a") { - if (Caml_obj.equal(exn._2, json)) { - return json; - } - throw exn; - } - throw exn; - } - throw exn; - } -} - -function toString(x) { - return Curry._1(Yojson.Basic.Util.to_string, x); -} - -function toInt(x) { - return Curry._1(Yojson.Basic.Util.to_int, x); -} - -export { - foo , - bar , - toString , - toInt , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/TestYojson.res b/examples/deadcode/src/exception/TestYojson.res deleted file mode 100644 index 4bb1e410..00000000 --- a/examples/deadcode/src/exception/TestYojson.res +++ /dev/null @@ -1,17 +0,0 @@ -@raises(Yojson.Json_error) -let foo = x => Yojson.Basic.from_string(x) - -let bar = (str, json) => - switch { - open Yojson.Basic.Util - json |> member(str) - } { - | j => j - | exception Yojson.Basic.Util.Type_error("a", d) when d == json => json - } - -@raises(Yojson.Basic.Util.Type_error) -let toString = x => Yojson.Basic.Util.to_string(x) - -@raises(Yojson.Basic.Util.Type_error) -let toInt = x => Yojson.Basic.Util.to_int(x) diff --git a/examples/deadcode/src/exception/Yojson.bs.js b/examples/deadcode/src/exception/Yojson.bs.js deleted file mode 100644 index 24fab2dc..00000000 --- a/examples/deadcode/src/exception/Yojson.bs.js +++ /dev/null @@ -1,50 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as Caml_exceptions from "rescript/lib/es6/caml_exceptions.js"; - -var Json_error = /* @__PURE__ */Caml_exceptions.create("Yojson.Json_error"); - -function from_string(param) { - throw { - RE_EXN_ID: Json_error, - _1: "Basic.from_string", - Error: new Error() - }; -} - -var Type_error = /* @__PURE__ */Caml_exceptions.create("Yojson.Basic.Util.Type_error"); - -function member(_s, j) { - throw { - RE_EXN_ID: Type_error, - _1: "Basic.Util.member", - _2: j, - Error: new Error() - }; -} - -function to_int(param) { - return 34; -} - -function to_string(param) { - return ""; -} - -var Util = { - Type_error: Type_error, - member: member, - to_int: to_int, - to_string: to_string -}; - -var Basic = { - from_string: from_string, - Util: Util -}; - -export { - Json_error , - Basic , -} -/* No side effect */ diff --git a/examples/deadcode/src/exception/Yojson.res b/examples/deadcode/src/exception/Yojson.res deleted file mode 100644 index 40758bda..00000000 --- a/examples/deadcode/src/exception/Yojson.res +++ /dev/null @@ -1,19 +0,0 @@ -exception Json_error(string) - -module Basic = { - type t - - @raises(Json_error) - let from_string: string => t = _ => raise(Json_error("Basic.from_string")) - - module Util = { - exception Type_error(string, t) - - @raises(Type_error) - let member: (string, t) => t = (_s, j) => raise(Type_error("Basic.Util.member", j)) - - let to_int: t => int = _ => 34 - - let to_string: t => string = _ => "" - } -} diff --git a/examples/deadcode/src/exportNestedValues.js b/examples/deadcode/src/exportNestedValues.js deleted file mode 100644 index 4c1f469e..00000000 --- a/examples/deadcode/src/exportNestedValues.js +++ /dev/null @@ -1,17 +0,0 @@ -/* @flow strict */ - -class InnerClass { - static InnerStuff = { - innerStuffContents: { x: 34 } - }; -} - -export class TopLevelClass { - static MiddleLevelElements = { - stuff: InnerClass - }; -} - -export const ValueStartingWithUpperCaseLetter = "ValueStartingWithUpperCaseLetter"; - -export default 42; \ No newline at end of file diff --git a/examples/deadcode/src/noalloc.txt b/examples/deadcode/src/noalloc.txt index 72049b35..b85541f0 100644 --- a/examples/deadcode/src/noalloc.txt +++ b/examples/deadcode/src/noalloc.txt @@ -1,90 +1 @@ - no-alloc binding for sumVec - no-alloc binding for rotation - no-alloc binding for mulVecVec - no-alloc binding for mulMatVec - no-alloc binding for scale - no-alloc binding for restMatrix - no-alloc binding for scale2 - no-alloc binding for restMatrix2 - no-alloc binding for x - no-alloc binding for foo - no-alloc binding for bar - no-alloc binding for pair - no-alloc binding for unpair - no-alloc binding for mixed - no-alloc binding for duplicate - no-alloc binding for local - no-alloc binding for quad - no-alloc binding for fl - no-alloc binding for unpair2 - no-alloc binding for id - no-alloc binding for id2 - - Noalloc - File "TestNoalloc.res", line 50, characters 32-33 - Function call to id: parameter 0 has kind * but the supplied argument has kind (*, *) - no-alloc binding for y - no-alloc binding for retGlobal - no-alloc binding for globalTuple - no-alloc binding for extractFromGlobalTuple - no-alloc binding for recordCreation - -Dump Memory -(memory $0 20) -(data (i32.const 12) "abcd\00") - -Dump Environment - -func bar (param 0) (local.get 0) (local.get 0) (call foo) (i32.const 1) (i32.add) - -func duplicate (param 0) (param 1) (local.get 0) (local.get 1) (local.get 0) (local.get 1) - -func extractFromGlobalTuple (local 0) (local 1) (local 2) (i32.const 1) (i32.const 2) (i32.const 3) (local.set 2) (local.set 1) (local.set 0) (local.get 0) - -global fl f64.const 2.0 - -func foo (param 0) (param 1) (local.get 0) (local.get 1) (i32.add) - -global globalTuple (i32.const 1, i32.const 2, i32.const 3) - -func id (param 0) (local.get 0) - -func id2 (param 0) (param 1) (local.get 0) (local.get 1) (call id) - -func local (param 0) (local 1) (i32.const 34) (local.set 1) (local.get 1) (local.get 0) (i32.add) - -func mixed (param 0) (param 1) (param 2) (param 3) (param 4) (param 5) (param 6) (param 7) (param 8) (param 9) (local.get 0) (local.get 1) (i32.add) (local.get 2) (i32.add) (local.get 3) (local.get 4) (i32.add) (local.get 5) (i32.add) (local.get 6) (i32.add) (local.get 7) (i32.add) (local.get 8) (i32.add) (local.get 9) (i32.add) - -func mulMatVec (param 0) (param 1) (param 2) (param 3) (param 4) (param 5) (param 6) (param 7) (param 8) (param 9) (param 10) (param 11) (local 12) (local 13) (local 14) (local 15) (local 16) (local 17) (local 18) (local 19) (local 20) (local 21) (local 22) (local 23) (local.get 0) (local.get 1) (local.get 2) (local.get 3) (local.get 4) (local.get 5) (local.get 6) (local.get 7) (local.get 8) (local.set 20) (local.set 19) (local.set 18) (local.set 17) (local.set 16) (local.set 15) (local.set 14) (local.set 13) (local.set 12) (local.get 12) (local.get 13) (local.get 14) (local.get 9) (local.get 10) (local.get 11) (call mulVecVec) (local.set 21) (local.get 15) (local.get 16) (local.get 17) (local.get 9) (local.get 10) (local.get 11) (call mulVecVec) (local.set 22) (local.get 18) (local.get 19) (local.get 20) (local.get 9) (local.get 10) (local.get 11) (call mulVecVec) (local.set 23) (local.get 21) (local.get 22) (local.get 23) - -func mulVecVec (param 0) (param 1) (param 2) (param 3) (param 4) (param 5) (local 6) (local 7) (local 8) (local 9) (local 10) (local 11) (local 12) (local 13) (local 14) (local.get 0) (local.get 1) (local.get 2) (local.set 8) (local.set 7) (local.set 6) (local.get 3) (local.get 4) (local.get 5) (local.set 11) (local.set 10) (local.set 9) (local.get 6) (local.get 9) (f64.mul) (local.set 12) (local.get 7) (local.get 10) (f64.mul) (local.set 13) (local.get 8) (local.get 11) (f64.mul) (local.set 14) (local.get 12) (local.get 13) (f64.add) (local.get 14) (f64.add) - -func pair (param 0) (param 1) (local.get 0) (local.get 1) - -func quad (param 0) (local 1) (local 2) (local.get 0) (local.get 0) (i32.const 1) (i32.add) (local.set 2) (local.set 1) (local.get 1) (local.get 2) (local.get 1) (local.get 2) - -func recordCreation (local 0) (i32.const 0) (i32.const 3) (i32.store offset=0) (i32.const 0) (i32.const 4) (i32.store offset=4) (i32.const 0) (i32.const 12) (i32.store offset=8) (i32.const 0) (local.set 0) (i32.const 0) (local.get 0) (i32.load offset=0) (i32.const 0) (local.get 0) (i32.load offset=8) - -func restMatrix (param 0) (param 1) (param 2) (f64.const 0.123) (call rotation) (f64.const 2.0) (call scale) (local.get 0) (local.get 1) (local.get 2) (call mulMatVec) (call mulMatVec) - -func restMatrix2 (param 0) (param 1) (param 2) (f64.const 0.123) (call rotation) (f64.const 2.0) (f64.const 1.0) (f64.const 1.0) (f64.const 1.0) (f64.const 2.0) (f64.const 1.0) (f64.const 1.0) (f64.const 1.0) (f64.const 2.0) (local.get 0) (local.get 1) (local.get 2) (call mulMatVec) (call mulMatVec) - -func retGlobal (i32.const 34) (i32.const 1) (i32.add) - -func rotation (param 0) (f64.const 0.0) (f64.const -1.0) (local.get 0) (f64.mul) (f64.const 0.0) (local.get 0) (f64.const 0.0) (f64.const 0.0) (f64.const 0.0) (f64.const 0.0) (local.get 0) - -func scale (param 0) (local.get 0) (f64.const 1.0) (f64.const 1.0) (f64.const 1.0) (local.get 0) (f64.const 1.0) (f64.const 1.0) (f64.const 1.0) (local.get 0) - -global scale2 ((f64.const 2.0, f64.const 1.0, f64.const 1.0), (f64.const 1.0, f64.const 2.0, f64.const 1.0), (f64.const 1.0, f64.const 1.0, f64.const 2.0)) - -func sumVec (param 0) (param 1) (param 2) (param 3) (local 4) (local 5) (local 6) (local 7) (local.get 0) (local.get 1) (local.get 2) (local.get 3) (local.set 7) (local.set 6) (local.set 5) (local.set 4) (local.get 4) (local.get 6) (i32.add) (local.get 5) (local.get 7) (i32.add) - -func unpair (param 0) (param 1) (local.get 0) (local.get 1) (i32.add) - -func unpair2 (param 0) (param 1) (local 2) (local 3) (local.get 0) (local.get 1) (local.set 3) (local.set 2) (local.get 2) (local.get 3) (i32.add) - -global x i32.const 34 - -global y i32.const 34 - - Analysis reported 1 issues (Noalloc:1) + Analysis reported 0 issues diff --git a/examples/deadcode/src/noalloc/Chess.bs.js b/examples/deadcode/src/noalloc/Chess.bs.js deleted file mode 100644 index 9fc7306e..00000000 --- a/examples/deadcode/src/noalloc/Chess.bs.js +++ /dev/null @@ -1,20 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -throw { - RE_EXN_ID: "Assert_failure", - _1: [ - "Chess.res", - 6, - 56 - ], - Error: new Error() - }; - -export { - computeScore , - findNextMoves , - makeMove , - chess , -} -/* computeScore Not a pure module */ diff --git a/examples/deadcode/src/noalloc/Chess.res b/examples/deadcode/src/noalloc/Chess.res deleted file mode 100644 index 2d15ee77..00000000 --- a/examples/deadcode/src/noalloc/Chess.res +++ /dev/null @@ -1,24 +0,0 @@ -type pos // positions -type board -type score -type move - -let computeScore: (~board: board, ~pos: pos) => score = assert false -let findNextMoves: (~board: board, ~pos: pos) => list = assert false -let makeMove: (move, ~board: board, ~pos: pos) => (board, pos) = assert false - -let rec chess = (~pos, ~board, ~n) => { - if n == 0 { - list{computeScore(~board, ~pos)} - } else { - let nextMoves = findNextMoves(~board, ~pos) - nextMoves - ->Belt.List.map(move => { - let (nextBoard, nextPos) = makeMove(move, ~board, ~pos) - - @local - chess(~board=nextBoard, ~pos=nextPos, ~n=n - 1) - }) - ->Belt.List.flatten - } -} diff --git a/examples/deadcode/src/noalloc/Matrix.bs.js b/examples/deadcode/src/noalloc/Matrix.bs.js deleted file mode 100644 index 1cac2200..00000000 --- a/examples/deadcode/src/noalloc/Matrix.bs.js +++ /dev/null @@ -1,107 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function sumVec(v) { - var match = v[1]; - var match$1 = v[0]; - return [ - match$1[0] + match[0] | 0, - match$1[1] + match[1] | 0 - ]; -} - -function rotation(a) { - return [ - [ - 0.0, - -1.0 * a, - 0.0 - ], - [ - a, - 0.0, - 0.0 - ], - [ - 0.0, - 0.0, - a - ] - ]; -} - -function mulVecVec(v1, v2) { - var x = v1[0] * v2[0]; - var y = v1[1] * v2[1]; - var z = v1[2] * v2[2]; - return x + y + z; -} - -function mulMatVec(m, v) { - var x = mulVecVec(m[0], v); - var y = mulVecVec(m[1], v); - var z = mulVecVec(m[2], v); - return [ - x, - y, - z - ]; -} - -function scale(s) { - return [ - [ - s, - 1.0, - 1.0 - ], - [ - 1.0, - s, - 1.0 - ], - [ - 1.0, - 1.0, - s - ] - ]; -} - -function restMatrix(v) { - return mulMatVec(rotation(0.123), mulMatVec(scale(2.0), v)); -} - -var scale2 = [ - [ - 2.0, - 1.0, - 1.0 - ], - [ - 1.0, - 2.0, - 1.0 - ], - [ - 1.0, - 1.0, - 2.0 - ] -]; - -function restMatrix2(v) { - return mulMatVec(rotation(0.123), mulMatVec(scale2, v)); -} - -export { - sumVec , - rotation , - mulVecVec , - mulMatVec , - scale , - restMatrix , - scale2 , - restMatrix2 , -} -/* No side effect */ diff --git a/examples/deadcode/src/noalloc/Matrix.res b/examples/deadcode/src/noalloc/Matrix.res deleted file mode 100644 index ada3fb88..00000000 --- a/examples/deadcode/src/noalloc/Matrix.res +++ /dev/null @@ -1,39 +0,0 @@ -@noalloc -let sumVec = v => { - let ((x1, x2), (y1, y2)) = v - (x1 + y1, x2 + y2) -} - -@noalloc -let rotation = a => ((0.0, -1.0 *. a, 0.0), (a, 0.0, 0.0), (0.0, 0.0, a)) - -@noalloc -let mulVecVec = (v1, v2) => { - let (x1, y1, z1) = v1 - let (x2, y2, z2) = v2 - let x = x1 *. x2 - let y = y1 *. y2 - let z = z1 *. z2 - x +. y +. z -} - -@noalloc -let mulMatVec = (m, v) => { - let (row1, row2, row3) = m - let x = mulVecVec(row1, v) - let y = mulVecVec(row2, v) - let z = mulVecVec(row3, v) - (x, y, z) -} - -@noalloc -let scale = s => ((s, 1.0, 1.0), (1.0, s, 1.0), (1.0, 1.0, s)) - -@noalloc -let restMatrix = v => mulMatVec(rotation(0.123), mulMatVec(scale(2.0), v)) - -@noalloc -let scale2 = ((2.0, 1.0, 1.0), (1.0, 2.0, 1.0), (1.0, 1.0, 2.0)) - -@noalloc -let restMatrix2 = v => mulMatVec(rotation(0.123), mulMatVec(scale2, v)) diff --git a/examples/deadcode/src/noalloc/TestNoalloc.bs.js b/examples/deadcode/src/noalloc/TestNoalloc.bs.js deleted file mode 100644 index 24d12eb8..00000000 --- a/examples/deadcode/src/noalloc/TestNoalloc.bs.js +++ /dev/null @@ -1,114 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - - -function foo(x, y) { - return x + y | 0; -} - -function bar(x) { - return (x + x | 0) + 1 | 0; -} - -function pair(x, y) { - return [ - x, - y - ]; -} - -function unpair(param) { - return param[0] + param[1] | 0; -} - -function mixed(param, param$1) { - var match = param$1[1]; - var match$1 = match[2]; - return [ - (param[0] + param[1] | 0) + param[2] | 0, - (((((param$1[0] + match[0] | 0) + match[1] | 0) + match$1[0] | 0) + match$1[1] | 0) + match$1[2] | 0) + param$1[2] | 0 - ]; -} - -function duplicate(x) { - return [ - x, - x - ]; -} - -function local(n) { - return 34 + n | 0; -} - -function quad(x) { - var a_1 = x + 1 | 0; - var a = [ - x, - a_1 - ]; - return [ - a, - a - ]; -} - -function unpair2(v) { - return v[0] + v[1] | 0; -} - -function id(x) { - return x; -} - -function id2(x) { - return x; -} - -function retGlobal(param) { - return 35; -} - -function extractFromGlobalTuple(param) { - return 1; -} - -function recordCreation(param) { - return [ - 3, - "abcd" - ]; -} - -var x = 34; - -var fl = 2; - -var y = 34; - -var globalTuple = [ - 1, - 2, - 3 -]; - -export { - x , - foo , - bar , - pair , - unpair , - mixed , - duplicate , - local , - quad , - fl , - unpair2 , - id , - id2 , - y , - retGlobal , - globalTuple , - extractFromGlobalTuple , - recordCreation , -} -/* No side effect */ diff --git a/examples/deadcode/src/noalloc/TestNoalloc.res b/examples/deadcode/src/noalloc/TestNoalloc.res deleted file mode 100644 index ca0875ec..00000000 --- a/examples/deadcode/src/noalloc/TestNoalloc.res +++ /dev/null @@ -1,73 +0,0 @@ -@noalloc -let x = 34 - -@noalloc -let foo = (x, y) => x + y - -@noalloc -let bar = x => foo(x, x) + 1 - -@noalloc -let pair = (x, y) => (x, y) - -@noalloc -let unpair = ((x, y)) => x + y - -@noalloc -let mixed = ((p0, p1, p2), (p3, (p4, p5, (p6, p7, p8)), p9)) => ( - p0 + p1 + p2, - p3 + p4 + p5 + p6 + p7 + p8 + p9, -) - -@noalloc -let duplicate = (x: (int, int)) => (x, x) - -@noalloc -let local = n => { - let a = 34 - a + n -} - -@noalloc -let quad = x => { - let a = (x, x + 1) - (a, a) -} - -@noalloc -let fl = 2. - -@noalloc -let unpair2 = v => { - let (x, y) = v - x + y -} - -@noalloc -let id = x => x - -@noalloc -let id2 = (x: (int, int)) => id(x) - -@noalloc -let y = x - -@noalloc -let retGlobal = () => y + 1 - -@noalloc -let globalTuple = (1, 2, 3) - -@noalloc -let extractFromGlobalTuple = () => { - let (x, _, _) = globalTuple - x -} - -type r = {x: int, y: int, name: string} - -@noalloc -let recordCreation = () => { - let r = {x: 3, y: 4, name: "abcd"} - (r.x, r.name) -} diff --git a/examples/termination/.gitignore b/examples/termination/.gitignore index d30f40ef..8717b355 100644 --- a/examples/termination/.gitignore +++ b/examples/termination/.gitignore @@ -8,6 +8,7 @@ # production /build +/_build # misc .DS_Store diff --git a/examples/termination/bsconfig.json b/examples/termination/bsconfig.json deleted file mode 100644 index 1312ef81..00000000 --- a/examples/termination/bsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "reanalyze": { - "analysis": ["termination"], - "suppress": [], - "unsuppress": [] - }, - "name": "arnold", - "bsc-flags": ["-bs-super-errors"], - "reason": { "react-jsx": 3 }, - "bs-dependencies": [], - "sources": [ - { - "dir": "src", - "subdirs": true - } - ], - "package-specs": { - "module": "es6", - "in-source": true - }, - "suffix": ".bs.js" -} diff --git a/examples/termination/dune-project b/examples/termination/dune-project new file mode 100644 index 00000000..929c696e --- /dev/null +++ b/examples/termination/dune-project @@ -0,0 +1 @@ +(lang dune 2.0) diff --git a/examples/termination/package-lock.json b/examples/termination/package-lock.json deleted file mode 100644 index ed83d978..00000000 --- a/examples/termination/package-lock.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "termination", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "termination", - "version": "0.1.0", - "dependencies": { - "reanalyze": "file:../.." - }, - "devDependencies": { - "gentype": "^4.4.0", - "rescript": "^9.1.4" - } - }, - "../..": { - "version": "2.21.0", - "license": "MIT", - "bin": { - "reanalyze.exe": "_build/install/default/bin/reanalyze.exe" - } - }, - "node_modules/gentype": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/gentype/-/gentype-4.4.0.tgz", - "integrity": "sha512-hLcKmMhD3DJzHffDqwYUkEZfdGSWJk6ehYmdzGHBs35mTJa2dhiAp31WqmhjkZIqKvD+A+gFEE+//QHG5dZfwg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "gentype": "gentype.exe" - } - }, - "node_modules/reanalyze": { - "resolved": "../..", - "link": true - }, - "node_modules/rescript": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/rescript/-/rescript-9.1.4.tgz", - "integrity": "sha512-aXANK4IqecJzdnDpJUsU6pxMViCR5ogAxzuqS0mOr8TloMnzAjJFu63fjD6LCkWrKAhlMkFFzQvVQYaAaVkFXw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "bsc": "bsc", - "bsrefmt": "bsrefmt", - "bstracing": "lib/bstracing", - "rescript": "rescript" - } - } - }, - "dependencies": { - "gentype": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/gentype/-/gentype-4.4.0.tgz", - "integrity": "sha512-hLcKmMhD3DJzHffDqwYUkEZfdGSWJk6ehYmdzGHBs35mTJa2dhiAp31WqmhjkZIqKvD+A+gFEE+//QHG5dZfwg==", - "dev": true - }, - "reanalyze": { - "version": "file:../.." - }, - "rescript": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/rescript/-/rescript-9.1.4.tgz", - "integrity": "sha512-aXANK4IqecJzdnDpJUsU6pxMViCR5ogAxzuqS0mOr8TloMnzAjJFu63fjD6LCkWrKAhlMkFFzQvVQYaAaVkFXw==", - "dev": true - } - } -} diff --git a/examples/termination/package.json b/examples/termination/package.json index dace3c32..4faacf55 100644 --- a/examples/termination/package.json +++ b/examples/termination/package.json @@ -3,16 +3,10 @@ "version": "0.1.0", "private": true, "scripts": { - "start": "rescript build -w", - "build": "rescript build", - "clean": "rescript clean -with-deps", - "analyze": "npx reanalyze.exe -config -ci -debug >src/termination.txt" + "build": "dune build --root .", + "clean": "dune clean --root .", + "analyze": "dune exec --root ../.. reanalyze.exe -- -ci -debug -native-build-target . -termination-cmt _build/default/src/.termination_fixture.objs/byte >src/termination.txt" }, - "devDependencies": { - "gentype": "^4.4.0", - "rescript": "^9.1.4" - }, - "dependencies": { - "reanalyze": "file:../.." - } + "devDependencies": {}, + "dependencies": {} } diff --git a/examples/termination/src/Termination.ml b/examples/termination/src/Termination.ml new file mode 100644 index 00000000..ff239d63 --- /dev/null +++ b/examples/termination/src/Termination.ml @@ -0,0 +1,73 @@ +let progress = + let counter = ref (Random.int 100) in + fun () -> + if !counter < 0 then assert false; + decr counter + +let progress2 = progress + +module Progress = struct + module Nested = struct + let f = progress + end +end + +let[@progress progress] rec just_return () = () + +let[@progress progress] rec always_loop () = always_loop () + +let[@progress progress] rec always_progress () = + progress (); + always_progress () + +let[@progress progress] rec always_progress_wrong_order () = + always_progress_wrong_order (); + progress () + +let[@progress progress] rec do_not_alias () = + let alias = do_not_alias in + alias () + +let[@progress (progress, progress2)] rec progress_on_both_branches x = + if x > 3 then progress () else progress2 (); + progress_on_both_branches x + +let[@progress progress] rec progress_on_one_branch x = + if x > 3 then progress (); + progress_on_one_branch x + +let[@progress progress] rec test_parametric_function x = + if x > 3 then progress (); + test_parametric_function2 x + +and test_parametric_function2 x = + call_parse_function x ~parse_function:test_parametric_function + +and call_parse_function x ~parse_function = parse_function x + +let[@progress Progress.Nested.f] rec test_cache_hit x = + if x > 0 then ( + do_nothing x; + do_nothing x; + Progress.Nested.f ()); + test_cache_hit x + +and do_nothing _ = () + +let[@progress progress] rec eval_order_is_not_left_to_right x = + let combine_two_units ((), ()) = () in + combine_two_units (progress (), eval_order_is_not_left_to_right x) + +let[@progress progress] rec eval_order_is_not_right_to_left x = + let combine_two_units ((), ()) = () in + combine_two_units (eval_order_is_not_right_to_left x, progress ()) + +let[@progress progress] rec first_argument_is_always_evaluated x = + let combine_two_units ((), ()) = () in + combine_two_units (progress (), ()); + first_argument_is_always_evaluated x + +let[@progress progress] rec second_argument_is_always_evaluated x = + let combine_two_units ((), ()) = () in + combine_two_units ((), progress ()); + second_argument_is_always_evaluated x diff --git a/examples/termination/src/TestCyberTruck.bs.js b/examples/termination/src/TestCyberTruck.bs.js deleted file mode 100644 index 9d5459a0..00000000 --- a/examples/termination/src/TestCyberTruck.bs.js +++ /dev/null @@ -1,627 +0,0 @@ -// Generated by ReScript, PLEASE EDIT WITH CARE - -import * as List from "rescript/lib/es6/list.js"; -import * as Curry from "rescript/lib/es6/curry.js"; -import * as Random from "rescript/lib/es6/random.js"; -import * as Caml_obj from "rescript/lib/es6/caml_obj.js"; -import * as Caml_option from "rescript/lib/es6/caml_option.js"; -import * as Caml_js_exceptions from "rescript/lib/es6/caml_js_exceptions.js"; - -var counter = { - contents: Random.$$int(100) -}; - -function progress(param) { - if (counter.contents < 0) { - throw { - RE_EXN_ID: "Assert_failure", - _1: [ - "TestCyberTruck.res", - 8, - 6 - ], - Error: new Error() - }; - } - counter.contents = counter.contents - 1 | 0; - -} - -var Nested = { - f: progress -}; - -var Progress = { - Nested: Nested -}; - -function justReturn(param) { - -} - -function alwaysLoop(_param) { - while(true) { - _param = undefined; - continue ; - }; -} - -function alwaysProgress(_param) { - while(true) { - progress(undefined); - _param = undefined; - continue ; - }; -} - -function alwaysProgressWrongOrder(param) { - alwaysProgressWrongOrder(undefined); - return progress(undefined); -} - -function doNotAlias(_param) { - while(true) { - _param = undefined; - continue ; - }; -} - -function progressOnBothBranches(x) { - while(true) { - progress(undefined); - continue ; - }; -} - -function progressOnOneBranch(x) { - while(true) { - if (x > 3) { - progress(undefined); - } - continue ; - }; -} - -function testParametricFunction(x) { - while(true) { - if (x > 3) { - progress(undefined); - } - continue ; - }; -} - -var testParametricFunction2 = testParametricFunction; - -function callParseFunction(x, parseFunction) { - return Curry._1(parseFunction, x); -} - -function testCacheHit(x) { - while(true) { - if (x > 0) { - progress(undefined); - } - continue ; - }; -} - -function doNothing(param) { - -} - -function evalOrderIsNotLeftToRight(x) { - evalOrderIsNotLeftToRight(x); - progress(undefined); - -} - -function evalOrderIsNotRightToLeft(x) { - progress(undefined); - evalOrderIsNotRightToLeft(x); - -} - -function butFirstArgumentIsAlwaysEvaluated(x) { - while(true) { - progress(undefined); - continue ; - }; -} - -function butSecondArgumentIsAlwaysEvaluated(x) { - while(true) { - progress(undefined); - continue ; - }; -} - -function tokenToString(token) { - if (typeof token !== "number") { - return String(token._0); - } - switch (token) { - case /* Asterisk */0 : - return "*"; - case /* Eof */1 : - return "Eof"; - case /* Lparen */2 : - return "("; - case /* Plus */3 : - return "+"; - case /* Rparen */4 : - return ")"; - - } -} - -function next(p) { - p.token = Random.bool(undefined) ? /* Eof */1 : /* Int */({ - _0: Random.$$int(1000) - }); - p.position = { - lnum: Random.$$int(1000), - cnum: Random.$$int(80) - }; - -} - -function err(p, s) { - p.errors = { - hd: s, - tl: p.errors - }; - -} - -function expect(p, token) { - if (Caml_obj.caml_equal(p.token, token)) { - return next(p); - } else { - return err(p, "expected token " + tokenToString(p.token)); - } -} - -var Parser = { - tokenToString: tokenToString, - next: next, - err: err, - expect: expect -}; - -var Expr = {}; - -function parseList(p, f) { - var loop = function (p) { - if (p.token === /* Asterisk */0) { - return /* [] */0; - } - var item = Curry._1(f, p); - var l = loop(p); - return { - hd: item, - tl: l - }; - }; - return loop(p); -} - -function $$parseInt(p) { - var n = p.token; - var res = typeof n === "number" ? (err(p, "integer expected"), -1) : n._0; - next(p); - return res; -} - -function parseExpression(xOpt, p) { - var match = p.token; - if (match !== 2) { - return { - TAG: /* Int */0, - _0: $$parseInt(p) - }; - } - next(p); - var e1 = parseExpression(undefined, p); - expect(p, /* Plus */3); - var e2 = parseExpression(undefined, p); - expect(p, /* Lparen */2); - return { - TAG: /* Plus */1, - _0: e1, - _1: e2 - }; -} - -function parseListInt(p) { - return parseList(p, $$parseInt); -} - -function parseListListInt(p) { - return parseList(p, parseListInt); -} - -function parseListExpression(p) { - return parseList(p, (function (eta) { - return parseExpression(undefined, eta); - })); -} - -function parseListExpression2(p) { - var partial_arg = 7; - return parseList(p, (function (param) { - return parseExpression(partial_arg, param); - })); -} - -function parseListIntTailRecursive(p) { - var _l = /* [] */0; - while(true) { - var l = _l; - if (p.token === /* Asterisk */0) { - return List.rev(l); - } - _l = { - hd: $$parseInt(p), - tl: l - }; - continue ; - }; -} - -function loopAfterProgress(_param) { - while(true) { - _param = undefined; - continue ; - }; -} - -function testLoopAfterProgress(param) { - progress(undefined); - return loopAfterProgress(undefined); -} - -function nothing(param) { - -} - -function div(text, onClick) { - throw { - RE_EXN_ID: "Assert_failure", - _1: [ - "TestCyberTruck.res", - 250, - 38 - ], - Error: new Error() - }; -} - -function initState(n) { - if (n === 0) { - return 42; - } - -} - -function increment(n) { - return n + 1 | 0; -} - -function incrementOnClick(setState, param) { - return Curry._1(setState, increment); -} - -function counter$1(state, setState) { - Curry._1(setState, initState); - return div(String(state), (function (param) { - return Curry._1(setState, increment); - })); -} - -function counterCompiled(state) { - var newState = initState(state); - if (newState !== undefined) { - counterCompiled(newState); - } - String(state); - -} - -function onClick1(state) { - return counterCompiled(state + 1 | 0); -} - -function countRenders(state, setState) { - Curry._1(setState, increment); - return div("I have been rendered " + (String(state) + " times"), nothing); -} - -function countRendersCompiled(state) { - var newState = state + 1 | 0; - countRendersCompiled(newState); - "I have been rendered " + (String(state) + " times"); - -} - -var UITermination = { - nothing: nothing, - div: div, - initState: initState, - increment: increment, - incrementOnClick: incrementOnClick, - counter: counter$1, - counterCompiled: counterCompiled, - onClick1: onClick1, - countRenders: countRenders, - countRendersCompiled: countRendersCompiled -}; - -function parseListO(p, f) { - var _nodes = /* [] */0; - while(true) { - var nodes = _nodes; - if (p.token === /* Asterisk */0) { - next(p); - return /* [] */0; - } - var item = Curry._1(f, p); - if (item === undefined) { - return List.rev(nodes); - } - _nodes = { - hd: Caml_option.valFromOption(item), - tl: nodes - }; - continue ; - }; -} - -function parseIntO(p) { - var n = p.token; - if (typeof n === "number") { - err(p, "integer expected"); - return ; - } else { - next(p); - return n._0; - } -} - -function alwaysReturnNone(p) { - while(true) { - var match = p.token; - if (typeof match === "number") { - return ; - } - next(p); - continue ; - }; -} - -function parseListIntO(p) { - return parseListO(p, parseIntO); -} - -var testAlwaysReturnNone = alwaysReturnNone; - -var parseIntOWrapper = parseIntO; - -function thisMakesNoProgress(p, y) { - if (y !== undefined) { - return ; - } else { - next(p); - return 10; - } -} - -var ParserWihtOptionals = { - parseListO: parseListO, - parseIntO: parseIntO, - parseListIntO: parseListIntO, - alwaysReturnNone: alwaysReturnNone, - testAlwaysReturnNone: testAlwaysReturnNone, - parseIntOWrapper: parseIntOWrapper, - thisMakesNoProgress: thisMakesNoProgress -}; - -function f(p) { - while(true) { - var i = p.token; - if (typeof i !== "number") { - return g(p) + i._0 | 0; - } - if (i === 1) { - return 0; - } - next(p); - continue ; - }; -} - -function gParam(p, g) { - var i = p.token; - if (typeof i === "number") { - return f(p); - } else { - return Curry._1(g, p) + i._0 | 0; - } -} - -function g(p) { - next(p); - return gParam(p, g); -} - -var Riddle = { - f: f, - gParam: gParam, - g: g -}; - -function f$1(p) { - while(true) { - next(p); - next(p); - continue ; - }; -} - -function g$1(p) { - while(true) { - next(p); - next(p); - continue ; - }; -} - -function kleene0(f, p) { - while(true) { - Curry._1(f, p); - continue ; - }; -} - -function union(f, g, p) { - var x = Curry._1(f, p); - if (x !== undefined) { - return Caml_option.valFromOption(x); - } else { - return Curry._1(g, p); - } -} - -function concat(f, g, p) { - var x = Curry._1(f, p); - if (x === undefined) { - return ; - } - var y = Curry._1(g, p); - if (y !== undefined) { - return x + y; - } - -} - -function kleene(f, p) { - var x = Curry._1(f, p); - if (x !== undefined) { - return { - hd: x, - tl: kleene(f, p) - }; - } else { - return /* [] */0; - } -} - -function one(p) { - var match = p.token; - if (typeof match === "number" || match._0 !== 1) { - return ; - } else { - next(p); - return "1"; - } -} - -function two(p) { - var match = p.token; - if (typeof match === "number" || match._0 !== 2) { - return ; - } else { - next(p); - return "2"; - } -} - -function oneTwo(p) { - return concat(one, two, p); -} - -function oneTwoStar(p) { - return kleene(oneTwo, p); -} - -var TerminationTypes = { - f: f$1, - g: g$1, - kleene0: kleene0, - union: union, - concat: concat, - kleene: kleene, - one: one, - two: two, - oneTwo: oneTwo, - oneTwoStar: oneTwoStar -}; - -function testTry(_param) { - while(true) { - try { - throw { - RE_EXN_ID: "Not_found", - Error: new Error() - }; - } - catch (raw_exn){ - var exn = Caml_js_exceptions.internalToOCamlException(raw_exn); - if (exn.RE_EXN_ID === "Not_found") { - progress(undefined); - _param = undefined; - continue ; - } - [ - undefined, - progress(undefined), - undefined - ]; - _param = undefined; - continue ; - } - }; -} - -var progress2 = progress; - -export { - progress , - progress2 , - Progress , - justReturn , - alwaysLoop , - alwaysProgress , - alwaysProgressWrongOrder , - doNotAlias , - progressOnBothBranches , - progressOnOneBranch , - testParametricFunction , - testParametricFunction2 , - callParseFunction , - testCacheHit , - doNothing , - evalOrderIsNotLeftToRight , - evalOrderIsNotRightToLeft , - butFirstArgumentIsAlwaysEvaluated , - butSecondArgumentIsAlwaysEvaluated , - Parser , - Expr , - parseList , - $$parseInt , - parseListInt , - parseListListInt , - parseExpression , - parseListExpression , - parseListExpression2 , - parseListIntTailRecursive , - testLoopAfterProgress , - loopAfterProgress , - UITermination , - ParserWihtOptionals , - Riddle , - TerminationTypes , - testTry , - -} -/* counter Not a pure module */ diff --git a/examples/termination/src/TestCyberTruck.res b/examples/termination/src/TestCyberTruck.res deleted file mode 100644 index 5c5fcbf8..00000000 --- a/examples/termination/src/TestCyberTruck.res +++ /dev/null @@ -1,449 +0,0 @@ -@@warning("-39-48-27") - -// A progress function will eventually terminate -let progress = { - let counter = ref(Random.int(100)) - () => { - if counter.contents < 0 { - assert false - } - counter := counter.contents - 1 - } -} - -// Another progress function -let progress2 = progress - -// A progress function can be taken from a module -module Progress = { - module Nested = { - let f = progress - } -} - -// Need to declare at least one progress function and one recursive definition -@progress(progress) -let rec justReturn = () => () - -@progress(progress) -let rec alwaysLoop = () => alwaysLoop() // infinite loop - -@progress(progress) -let rec alwaysProgress = () => { - // Terminates - progress() - alwaysProgress() -} - -@progress(progress) -let rec alwaysProgressWrongOrder = () => { - alwaysProgressWrongOrder() - progress() // Oops: this is too late -} - -@progress(progress) -let rec doNotAlias = () => { - // Must not alias recursive functions - let alias = doNotAlias - alias() -} - -@progress((progress, progress2)) -let rec // Terminates as each branch makes progress -progressOnBothBranches = x => { - if x > 3 { - progress() - } else { - progress2() - } - progressOnBothBranches(x) -} - -@progress(progress) -let rec // Loops as progress is only on one branch -progressOnOneBranch = x => { - if x > 3 { - progress() - } - progressOnOneBranch(x) -} - -@progress(progress) -let rec // callParseFunction is parametric: it takes a parse function and calls it -testParametricFunction = x => { - if x > 3 { - progress() - } - testParametricFunction2(x) -} -and testParametricFunction2 = x => callParseFunction(x, ~parseFunction=testParametricFunction) -and callParseFunction = (x, ~parseFunction) => parseFunction(x) // loops - -@progress(Progress.Nested.f) -let rec testCacheHit = x => { - if x > 0 { - doNothing(x) - doNothing(x) // this should hit the analysis cache - Progress.Nested.f() - } - testCacheHit(x) -} -and doNothing = _ => () - -@progress(progress) -let rec // Loops as can't rely on a specific evaluation order -evalOrderIsNotLeftToRight = x => { - let combineTwoUnits = ((), ()) => () - combineTwoUnits(progress(), evalOrderIsNotLeftToRight(x)) -} - -@progress(progress) -let rec // Loops as can't rely on a specific evaluation order -evalOrderIsNotRightToLeft = x => { - let combineTwoUnits = ((), ()) => () - combineTwoUnits(evalOrderIsNotRightToLeft(x), progress()) -} - -@progress(progress) -let rec // Terminates: all arguments are evaluated in some order -butFirstArgumentIsAlwaysEvaluated = x => { - let combineTwoUnits = ((), ()) => () - combineTwoUnits(progress(), ()) - butFirstArgumentIsAlwaysEvaluated(x) -} - -@progress(progress) -let rec // Terminates: all arguments are evaluated in some order -butSecondArgumentIsAlwaysEvaluated = x => { - let combineTwoUnits = ((), ()) => () - combineTwoUnits((), progress()) - butSecondArgumentIsAlwaysEvaluated(x) -} - -module Parser = { - type token = - | Asterisk - | Eof - | Lparen - | Int(int) - | Plus - | Rparen - - type position = { - lnum: int, - cnum: int, - } - - type t = { - mutable position: position, - mutable errors: list, - mutable token: token, - } - - let tokenToString = token => - switch token { - | Asterisk => "*" - | Eof => "Eof" - | Lparen => "(" - | Int(n) => string_of_int(n) - | Plus => "+" - | Rparen => ")" - } - - let next = p => { - p.token = Random.bool() ? Eof : Int(Random.int(1000)) - p.position = {lnum: Random.int(1000), cnum: Random.int(80)} - } - - let err = (p, s) => p.errors = list{s, ...p.errors} - - let expect = (p, token) => - if p.token == token { - next(p) - } else { - err(p, "expected token " ++ tokenToString(p.token)) - } -} - -module Expr = { - type rec t = - | Int(int) - | Plus(t, t) -} - -let parseList = (p: Parser.t, ~f) => { - let rec loop = (p: Parser.t) => - if p.token == Asterisk { - list{} - } else { - let item = f(p) - let l = loop(p) - list{item, ...l} - } - loop(p) -} - -let parseInt = (p: Parser.t) => { - let res = switch p.token { - | Int(n) => n - | _ => - Parser.err(p, "integer expected") - -1 - } - Parser.next(p) - res -} - -@progress(Parser.next) -let rec parseListInt = p => parseList(p, ~f=parseInt) - -@progress -and parseListListInt = p => parseList(p, ~f=parseListInt) - -@progress -and parseExpression = (~x=4, p: Parser.t) => - switch p.token { - | Lparen => - Parser.next(p) - let e1 = parseExpression(p) - Parser.expect(p, Plus) - let e2 = parseExpression(p) - Parser.expect(p, Lparen) - Expr.Plus(e1, e2) - | _ => Expr.Int(parseInt(p)) - } - -@progress -and parseListExpression = p => parseList(p, ~f=parseExpression) - -@progress -and parseListExpression2 = p => parseList(p, ~f=parseExpression(~x=7)) - -@progress -and parseListIntTailRecursive = p => { - let rec loop = (p: Parser.t, l) => - if p.token == Asterisk { - List.rev(l) - } else { - loop(p, list{parseInt(p), ...l}) - } - loop(p, list{}) -} - -@progress(progress) -let rec testLoopAfterProgress = () => { - progress() - loopAfterProgress() -} -and loopAfterProgress = () => loopAfterProgress() - -module UITermination = { - type state = int - type setState = (~f: state => option) => unit - - type onClick = unit => unit - type dom - - let nothing: onClick = () => () - - type div = (~text: string, ~onClick: onClick) => dom - let div: div = (~text, ~onClick) => assert false - - let initState = n => n == 0 ? Some(42) : None - let increment = n => Some(n + 1) - - let incrementOnClick = (~setState: setState): onClick => () => setState(~f=increment) - - let counter = (state: state, ~setState: setState) => { - setState(~f=initState) - div(~text=string_of_int(state), ~onClick=() => setState(~f=increment)) - } - - @progress(initState) - let rec counterCompiled = (state: state) => { - switch initState(state) { - | None => () - | Some(newState) => ignore(counterCompiled(newState)) - } - ignore(string_of_int(state)) - } - - and onClick1 = state => - switch increment(state) { - | None => () - | Some(newState) => counterCompiled(newState) - } - - let countRenders = (state: state, ~setState: setState) => { - setState(~f=increment) - div(~text="I have been rendered " ++ (string_of_int(state) ++ " times"), ~onClick=nothing) - } - - @progress(initState) - let rec countRendersCompiled = (state: state) => { - switch increment(state) { - | None => () - | Some(newState) => ignore(countRendersCompiled(newState)) - } - ignore("I have been rendered " ++ (string_of_int(state) ++ " times")) - } -} - -module ParserWihtOptionals = { - let parseListO = (p: Parser.t, ~f) => { - let rec loop = nodes => - if p.token == Asterisk { - Parser.next(p) - list{} - } else { - switch f(p) { - | None => List.rev(nodes) - | Some(item) => loop(list{item, ...nodes}) - } - } - loop(list{}) - } - - let parseIntO = (p: Parser.t) => - switch p.token { - | Int(n) => - Parser.next(p) - Some(n) - | _ => - Parser.err(p, "integer expected") - None - } - - @progress((Parser.next, Parser.next)) - let rec parseListIntO = p => parseListO(p, ~f=parseIntO) - - and alwaysReturnNone = (p: Parser.t) => - switch p.token { - | Int(_) => - Parser.next(p) - alwaysReturnNone(p) - | _ => None - } - - @progress - and testAlwaysReturnNone = p => alwaysReturnNone(p) - - @progress - and parseIntOWrapper = p => parseIntO(p) - - @progress - and thisMakesNoProgress = (p: Parser.t, y) => { - let x = None - switch y { - | Some(_) => x - | _ => - Parser.next(p) - Some(10) - } - } -} - -module Riddle = { - @progress(Parser.next) - let rec f = (p: Parser.t) => - switch p.token { - | Int(i) => g(p) + i - | Eof => 0 - | _ => - Parser.next(p) - f(p) - } - - and gParam = (p: Parser.t, ~g) => - switch p.token { - | Int(i) => g(p) + i - | _ => f(p) - } - - and g = p => { - Parser.next(p) - gParam(p, ~g) - } -} - -module TerminationTypes = { - // p ::= P | N (P progress, or N no progress) - // r ::= p | {Some:p, None:p} (result, in case of optional specify progress separately) - // t ::= _ | t1=>r[f1,... fn]t2 (when called, the function makes progress or not - // and calls f1,...,fn without making progeess first) - // Abbreviations: omit empty [], and rhs _ - - let rec f /* _=>P[g] */ = p => g(p) - and g /* _=>P */ = p => { - Parser.next(p) - f(p) - } - - let rec kleene0 /* (~f:_=>P, _) => P */ = (~f, p) => { - f(p) - kleene0(~f, p) - } - - let union /* (~f:_=>{Some:P, None:N}, ~g:_=>{Some:P, None:N}, _) => {Some:P, None:N} */ = ( - ~f, - ~g, - p, - ) => - switch f(p) { - | None => g(p) - | Some(x) => x - } - - let concat /* (~f:_=>{Some:P, None:N}, ~g:_=>{Some:P, None:N}, _) => {Some:P, None:N} */ = ( - ~f, - ~g, - p, - ) => - switch f(p) { - | None => None - | Some(x) => - switch g(p) { - | None => None - | Some(y) => Some(x ++ y) - } - } - - let rec kleene /* (~f:_=>{Some:P, None:N}, _) => N */ = (~f, p) => - switch f(p) { - | None => list{} - | Some(x) => list{x, ...kleene(~f, p)} - } - - and one /* _=>{Some:P, None:N} */ = (p: Parser.t) => - switch p.token { - | Int(1) => - Parser.next(p) - Some("1") - | _ => None - } - - and two /* _=>{Some:P, None:N} */ = (p: Parser.t) => - switch p.token { - | Int(2) => - Parser.next(p) - Some("2") - | _ => None - } - - and oneTwo /* _=>{Some:P, None:N} */ = p => concat(~f=one, ~g=two, p) - - @progress(Parser.next) - and oneTwoStar /* _=>N */ = p => kleene(~f=oneTwo, p) -} - -@progress(progress) -let rec testTry = () => { - try raise(Not_found) catch { - | Not_found => - let _ = #abc(progress()) - testTry() - | _ => - let _ = [(), progress(), ()] - testTry() - } -} diff --git a/examples/termination/src/dune b/examples/termination/src/dune new file mode 100644 index 00000000..60796920 --- /dev/null +++ b/examples/termination/src/dune @@ -0,0 +1,4 @@ +(library + (name termination_fixture) + (modules Termination) + (flags :standard -w -32-39 -bin-annot)) diff --git a/examples/termination/src/termination.txt b/examples/termination/src/termination.txt index 3d1b588b..61043547 100644 --- a/examples/termination/src/termination.txt +++ b/examples/termination/src/termination.txt @@ -1,613 +1,212 @@ - Scanning TestCyberTruck.cmt Source:TestCyberTruck.res + Scanning _build/default/src/.termination_fixture.objs/byte/termination_fixture__Termination.cmt Source:src/Termination.ml Function Table - 1 justReturn: _ + 1 just_return: _ - Termination Analysis for justReturn + Termination Analysis for just_return Termination Analysis - File "TestCyberTruck.res", line 26, characters 21-29 - justReturn returns NoProgress with trace _ + File "Termination.ml", line 15, characters 40-47 + just_return returns NoProgress with trace _ Function Table - 1 alwaysLoop: alwaysLoop + 1 always_loop: always_loop - Termination Analysis for alwaysLoop + Termination Analysis for always_loop Error Termination - File "TestCyberTruck.res", line 29, characters 27-39 - Possible infinite loop when calling alwaysLoop + File "Termination.ml", line 17, characters 45-59 + Possible infinite loop when calling always_loop CallStack: - 1 alwaysLoop (TestCyberTruck.res 29) + 1 always_loop (Termination.ml 17) Termination Analysis - File "TestCyberTruck.res", line 29, characters 21-39 - alwaysLoop returns NoProgress with trace alwaysLoop:NoProgress + File "Termination.ml", line 17, characters 40-59 + always_loop returns NoProgress with trace always_loop:NoProgress Function Table - 1 alwaysProgress: +progress; alwaysProgress + 1 always_progress: +progress; always_progress - Termination Analysis for alwaysProgress + Termination Analysis for always_progress Termination Analysis - File "TestCyberTruck.res", line 32, characters 25-82 - alwaysProgress returns Progress with trace progress:Progress; alwaysProgress:Progress + File "Termination.ml", line 19, characters 44-84 + always_progress returns Progress with trace progress:Progress; always_progress:Progress Function Table - 1 alwaysProgressWrongOrder: alwaysProgressWrongOrder; +progress + 1 always_progress_wrong_order: always_progress_wrong_order; +progress - Termination Analysis for alwaysProgressWrongOrder + Termination Analysis for always_progress_wrong_order Error Termination - File "TestCyberTruck.res", line 40, characters 2-28 - Possible infinite loop when calling alwaysProgressWrongOrder + File "Termination.ml", line 24, characters 2-32 + Possible infinite loop when calling always_progress_wrong_order CallStack: - 1 alwaysProgressWrongOrder (TestCyberTruck.res 39) + 1 always_progress_wrong_order (Termination.ml 23) Termination Analysis - File "TestCyberTruck.res", line 39, characters 35-112 - alwaysProgressWrongOrder returns Progress with trace alwaysProgressWrongOrder:NoProgress; progress:Progress + File "Termination.ml", line 23, characters 56-108 + always_progress_wrong_order returns Progress with trace always_progress_wrong_order:NoProgress; progress:Progress Error Hygiene - File "TestCyberTruck.res", line 47, characters 14-24 - doNotAlias can only be called directly, or passed as labeled argument + File "Termination.ml", line 28, characters 14-26 + do_not_alias can only be called directly, or passed as labeled argument Function Table - 1 doNotAlias: _ + 1 do_not_alias: _ - Termination Analysis for doNotAlias + Termination Analysis for do_not_alias Termination Analysis - File "TestCyberTruck.res", line 45, characters 21-105 - doNotAlias returns NoProgress with trace _ + File "Termination.ml", line 27, characters 41-86 + do_not_alias returns NoProgress with trace _ Function Table - 1 progressOnBothBranches: [+progress || +progress2]; progressOnBothBranches + 1 progress_on_both_branches: [+progress || +progress2]; progress_on_both_branches - Termination Analysis for progressOnBothBranches + Termination Analysis for progress_on_both_branches Termination Analysis - File "TestCyberTruck.res", line 53, characters 25-120 - progressOnBothBranches returns Progress with trace [progress:Progress || progress2:Progress]; progressOnBothBranches:Progress + File "Termination.ml", line 31, characters 67-147 + progress_on_both_branches returns Progress with trace [progress:Progress || progress2:Progress]; progress_on_both_branches:Progress Function Table - 1 progressOnOneBranch: [+progress || _]; progressOnOneBranch + 1 progress_on_one_branch: [+progress || _]; progress_on_one_branch - Termination Analysis for progressOnOneBranch + Termination Analysis for progress_on_one_branch Error Termination - File "TestCyberTruck.res", line 68, characters 2-24 - Possible infinite loop when calling progressOnOneBranch + File "Termination.ml", line 37, characters 2-26 + Possible infinite loop when calling progress_on_one_branch CallStack: - 1 progressOnOneBranch (TestCyberTruck.res 64) + 1 progress_on_one_branch (Termination.ml 35) Termination Analysis - File "TestCyberTruck.res", line 64, characters 22-87 - progressOnOneBranch returns NoProgress with trace [progress:Progress || _]; progressOnOneBranch:NoProgress + File "Termination.ml", line 35, characters 51-110 + progress_on_one_branch returns NoProgress with trace [progress:Progress || _]; progress_on_one_branch:NoProgress Termination Analysis - File "TestCyberTruck.res", line 79, characters 71-93 - callParseFunction is parametric ~parseFunction=testParametricFunction + File "Termination.ml", line 44, characters 40-64 + call_parse_function is parametric ~parse_function=test_parametric_function Function Table - 1 callParseFunction: parseFunction - 2 testParametricFunction: [+progress || _]; testParametricFunction2 - 3 testParametricFunction2: callParseFunction + 1 call_parse_function: parse_function + 2 test_parametric_function: [+progress || _]; test_parametric_function2 + 3 test_parametric_function2: call_parse_function - Termination Analysis for testParametricFunction + Termination Analysis for test_parametric_function Termination Analysis - File "TestCyberTruck.res", line 77, characters 2-28 - Cache miss for testParametricFunction2 + File "Termination.ml", line 41, characters 2-29 + Cache miss for test_parametric_function2 Termination Analysis - File "TestCyberTruck.res", line 79, characters 35-94 - Cache miss for callParseFunction + File "Termination.ml", line 44, characters 2-64 + Cache miss for call_parse_function Error Termination - File "TestCyberTruck.res", line 80, characters 47-63 - Possible infinite loop when calling parseFunction which is testParametricFunction + File "Termination.ml", line 46, characters 44-60 + Possible infinite loop when calling parse_function which is test_parametric_function CallStack: - 3 callParseFunction (TestCyberTruck.res 79) - 2 testParametricFunction2 (TestCyberTruck.res 77) - 1 testParametricFunction (TestCyberTruck.res 73) + 3 call_parse_function (Termination.ml 44) + 2 test_parametric_function2 (Termination.ml 41) + 1 test_parametric_function (Termination.ml 39) Termination Analysis - File "TestCyberTruck.res", line 79, characters 35-94 - callParseFunction returns NoProgress with trace testParametricFunction:NoProgress + File "Termination.ml", line 44, characters 2-64 + call_parse_function returns NoProgress with trace test_parametric_function:NoProgress Termination Analysis - File "TestCyberTruck.res", line 77, characters 2-28 - testParametricFunction2 returns NoProgress with trace callParseFunction:NoProgress + File "Termination.ml", line 41, characters 2-29 + test_parametric_function2 returns NoProgress with trace call_parse_function:NoProgress Termination Analysis - File "TestCyberTruck.res", line 73, characters 25-94 - testParametricFunction returns NoProgress with trace [progress:Progress || _]; testParametricFunction2:NoProgress + File "Termination.ml", line 39, characters 53-115 + test_parametric_function returns NoProgress with trace [progress:Progress || _]; test_parametric_function2:NoProgress Function Table - 1 doNothing: _ - 2 testCacheHit: [doNothing; doNothing; +Progress.Nested.f || _]; testCacheHit + 1 do_nothing: _ + 2 test_cache_hit: [do_nothing; do_nothing; +Progress.Nested.f || _]; test_cache_hit - Termination Analysis for testCacheHit + Termination Analysis for test_cache_hit Termination Analysis - File "TestCyberTruck.res", line 85, characters 4-16 - Cache miss for doNothing + File "Termination.ml", line 50, characters 4-16 + Cache miss for do_nothing Termination Analysis - File "TestCyberTruck.res", line 85, characters 4-16 - doNothing returns NoProgress with trace _ + File "Termination.ml", line 50, characters 4-16 + do_nothing returns NoProgress with trace _ Termination Analysis - File "TestCyberTruck.res", line 86, characters 4-16 - Cache hit for doNothing + File "Termination.ml", line 51, characters 4-16 + Cache hit for do_nothing Error Termination - File "TestCyberTruck.res", line 89, characters 2-17 - Possible infinite loop when calling testCacheHit + File "Termination.ml", line 53, characters 2-18 + Possible infinite loop when calling test_cache_hit CallStack: - 1 testCacheHit (TestCyberTruck.res 83) + 1 test_cache_hit (Termination.ml 48) Termination Analysis - File "TestCyberTruck.res", line 83, characters 23-162 - testCacheHit returns NoProgress with trace [doNothing:NoProgress; doNothing:NoProgress; Progress.Nested.f:Progress || _]; testCacheHit:NoProgress + File "Termination.ml", line 48, characters 52-155 + test_cache_hit returns NoProgress with trace [do_nothing:NoProgress; do_nothing:NoProgress; Progress.Nested.f:Progress || _]; test_cache_hit:NoProgress Function Table - 1 evalOrderIsNotLeftToRight: {+progress, evalOrderIsNotLeftToRight}; _ + 1 eval_order_is_not_left_to_right: {+progress, eval_order_is_not_left_to_right}; _ - Termination Analysis for evalOrderIsNotLeftToRight + Termination Analysis for eval_order_is_not_left_to_right Error Termination - File "TestCyberTruck.res", line 97, characters 30-58 - Possible infinite loop when calling evalOrderIsNotLeftToRight + File "Termination.ml", line 59, characters 34-67 + Possible infinite loop when calling eval_order_is_not_left_to_right CallStack: - 1 evalOrderIsNotLeftToRight (TestCyberTruck.res 95) + 1 eval_order_is_not_left_to_right (Termination.ml 57) Termination Analysis - File "TestCyberTruck.res", line 95, characters 28-135 - evalOrderIsNotLeftToRight returns Progress with trace progress:Progress; evalOrderIsNotLeftToRight:NoProgress + File "Termination.ml", line 57, characters 60-173 + eval_order_is_not_left_to_right returns Progress with trace progress:Progress; eval_order_is_not_left_to_right:NoProgress Function Table - 1 evalOrderIsNotRightToLeft: {evalOrderIsNotRightToLeft, +progress}; _ + 1 eval_order_is_not_right_to_left: {eval_order_is_not_right_to_left, +progress}; _ - Termination Analysis for evalOrderIsNotRightToLeft + Termination Analysis for eval_order_is_not_right_to_left Error Termination - File "TestCyberTruck.res", line 104, characters 18-46 - Possible infinite loop when calling evalOrderIsNotRightToLeft + File "Termination.ml", line 63, characters 21-54 + Possible infinite loop when calling eval_order_is_not_right_to_left CallStack: - 1 evalOrderIsNotRightToLeft (TestCyberTruck.res 102) + 1 eval_order_is_not_right_to_left (Termination.ml 61) Termination Analysis - File "TestCyberTruck.res", line 102, characters 28-135 - evalOrderIsNotRightToLeft returns Progress with trace evalOrderIsNotRightToLeft:NoProgress; progress:Progress + File "Termination.ml", line 61, characters 60-173 + eval_order_is_not_right_to_left returns Progress with trace eval_order_is_not_right_to_left:NoProgress; progress:Progress Function Table - 1 butFirstArgumentIsAlwaysEvaluated: +progress; butFirstArgumentIsAlwaysEvaluated + 1 first_argument_is_always_evaluated: +progress; first_argument_is_always_evaluated - Termination Analysis for butFirstArgumentIsAlwaysEvaluated + Termination Analysis for first_argument_is_always_evaluated Termination Analysis - File "TestCyberTruck.res", line 109, characters 36-156 - butFirstArgumentIsAlwaysEvaluated returns Progress with trace progress:Progress; butFirstArgumentIsAlwaysEvaluated:Progress + File "Termination.ml", line 65, characters 63-185 + first_argument_is_always_evaluated returns Progress with trace progress:Progress; first_argument_is_always_evaluated:Progress Function Table - 1 butSecondArgumentIsAlwaysEvaluated: +progress; butSecondArgumentIsAlwaysEvaluated + 1 second_argument_is_always_evaluated: +progress; second_argument_is_always_evaluated - Termination Analysis for butSecondArgumentIsAlwaysEvaluated + Termination Analysis for second_argument_is_always_evaluated Termination Analysis - File "TestCyberTruck.res", line 117, characters 37-158 - butSecondArgumentIsAlwaysEvaluated returns Progress with trace progress:Progress; butSecondArgumentIsAlwaysEvaluated:Progress - - Termination Analysis - File "TestCyberTruck.res", line 198, characters 44-52 - Extend Function Table with parseInt (TestCyberTruck.res 186) as it calls a progress function - - Termination Analysis - File "TestCyberTruck.res", line 174, characters 16-212 - Extend Function Table with parseList as parametric ~f=parseInt - - Termination Analysis - File "TestCyberTruck.res", line 224, characters 10-14 - Adding recursive definition parseListIntTailRecursive$loop - - Termination Analysis - File "TestCyberTruck.res", line 175, characters 10-14 - Adding recursive definition parseList$loop - - Function Table - 1 parseExpression: [_ || _]; [+Parser.next; parseExpression; parseExpression; _ || parseInt] - 2 parseInt: [_ || _]; +Parser.next; _ - 3 parseList: parseList$loop - 4 parseList$loop: [_ || f; parseList$loop; _] - 5 parseListExpression: parseList - 6 parseListExpression2: parseExpression; parseList - 7 parseListInt: parseList - 8 parseListIntTailRecursive: parseListIntTailRecursive$loop - 9 parseListIntTailRecursive$loop: [_ || parseInt; parseListIntTailRecursive$loop] - 10 parseListListInt: parseList - - Termination Analysis for parseListInt - - Termination Analysis - File "TestCyberTruck.res", line 198, characters 28-53 - Cache miss for parseList - - Termination Analysis - File "TestCyberTruck.res", line 183, characters 2-9 - Cache miss for parseList$loop - - Termination Analysis - File "TestCyberTruck.res", line 179, characters 17-21 - Cache miss for parseInt - - Termination Analysis - File "TestCyberTruck.res", line 179, characters 17-21 - parseInt returns Progress with trace [_ || _]; Parser.next:Progress - - Termination Analysis - File "TestCyberTruck.res", line 183, characters 2-9 - parseList$loop returns NoProgress with trace [_ || parseInt:Progress; parseList$loop:Progress] - - Termination Analysis - File "TestCyberTruck.res", line 198, characters 28-53 - parseList returns NoProgress with trace parseList$loop:NoProgress - - Termination Analysis - File "TestCyberTruck.res", line 198, characters 23-53 - parseListInt returns NoProgress with trace parseList:NoProgress - - Termination Analysis for parseListListInt - - Termination Analysis - File "TestCyberTruck.res", line 201, characters 28-57 - Cache miss for parseList - - Termination Analysis - File "TestCyberTruck.res", line 183, characters 2-9 - Cache miss for parseList$loop - - Termination Analysis - File "TestCyberTruck.res", line 179, characters 17-21 - Cache hit for parseListInt - - Error Termination - File "TestCyberTruck.res", line 180, characters 14-21 - Possible infinite loop when calling parseList$loop which is parseList$loop - CallStack: - 3 parseList$loop (TestCyberTruck.res 183) - 2 parseList (TestCyberTruck.res 201) - 1 parseListListInt (TestCyberTruck.res 201) - - Termination Analysis - File "TestCyberTruck.res", line 183, characters 2-9 - parseList$loop returns NoProgress with trace [_ || parseListInt:NoProgress; parseList$loop:NoProgress] - - Termination Analysis - File "TestCyberTruck.res", line 201, characters 28-57 - parseList returns NoProgress with trace parseList$loop:NoProgress - - Termination Analysis - File "TestCyberTruck.res", line 201, characters 23-57 - parseListListInt returns NoProgress with trace parseList:NoProgress - - Termination Analysis for parseExpression - - Termination Analysis - File "TestCyberTruck.res", line 213, characters 18-29 - Cache hit for parseInt - - Termination Analysis - File "TestCyberTruck.res", line 204, characters 22-273 - parseExpression returns Progress with trace [_ || _]; [Parser.next:Progress; parseExpression:Progress; parseExpression:Progress || parseInt:Progress] - - Termination Analysis for parseListExpression - - Termination Analysis - File "TestCyberTruck.res", line 217, characters 31-63 - Cache miss for parseList - - Termination Analysis - File "TestCyberTruck.res", line 183, characters 2-9 - Cache miss for parseList$loop - - Termination Analysis - File "TestCyberTruck.res", line 179, characters 17-21 - Cache hit for parseExpression - - Termination Analysis - File "TestCyberTruck.res", line 183, characters 2-9 - parseList$loop returns NoProgress with trace [_ || parseExpression:Progress; parseList$loop:Progress] - - Termination Analysis - File "TestCyberTruck.res", line 217, characters 31-63 - parseList returns NoProgress with trace parseList$loop:NoProgress - - Termination Analysis - File "TestCyberTruck.res", line 217, characters 26-63 - parseListExpression returns NoProgress with trace parseList:NoProgress - - Termination Analysis for parseListExpression2 - - Termination Analysis - File "TestCyberTruck.res", line 220, characters 48-69 - Cache hit for parseExpression - - Termination Analysis - File "TestCyberTruck.res", line 220, characters 32-70 - Cache hit for parseList - - Termination Analysis - File "TestCyberTruck.res", line 220, characters 27-70 - parseListExpression2 returns Progress with trace parseExpression:Progress; parseList:NoProgress - - Termination Analysis for parseListIntTailRecursive - - Termination Analysis - File "TestCyberTruck.res", line 230, characters 2-17 - Cache miss for parseListIntTailRecursive$loop - - Termination Analysis - File "TestCyberTruck.res", line 228, characters 19-30 - Cache hit for parseInt - - Termination Analysis - File "TestCyberTruck.res", line 230, characters 2-17 - parseListIntTailRecursive$loop returns NoProgress with trace [_ || parseInt:Progress; parseListIntTailRecursive$loop:Progress] - - Termination Analysis - File "TestCyberTruck.res", line 223, characters 32-200 - parseListIntTailRecursive returns NoProgress with trace parseListIntTailRecursive$loop:NoProgress - - Function Table - 1 loopAfterProgress: loopAfterProgress - 2 testLoopAfterProgress: +progress; loopAfterProgress - - Termination Analysis for testLoopAfterProgress - - Termination Analysis - File "TestCyberTruck.res", line 236, characters 2-21 - Cache miss for loopAfterProgress - - Error Termination - File "TestCyberTruck.res", line 238, characters 30-49 - Possible infinite loop when calling loopAfterProgress - CallStack: - 1 loopAfterProgress (TestCyberTruck.res 236) - - Termination Analysis - File "TestCyberTruck.res", line 236, characters 2-21 - loopAfterProgress returns NoProgress with trace loopAfterProgress:NoProgress - - Termination Analysis - File "TestCyberTruck.res", line 234, characters 32-76 - testLoopAfterProgress returns Progress with trace progress:Progress; loopAfterProgress:NoProgress - - Function Table - 1 counterCompiled: +initState; [_ || counterCompiled; _]; _ - 2 onClick1: [_ || counterCompiled] - - Termination Analysis for counterCompiled - - Termination Analysis - File "TestCyberTruck.res", line 263, characters 28-195 - counterCompiled returns Progress with trace initState:Progress; [_ || counterCompiled:Progress] - - Function Table - 1 countRendersCompiled: [_ || countRendersCompiled; _]; _ - - Termination Analysis for countRendersCompiled - - Error Termination - File "TestCyberTruck.res", line 286, characters 31-61 - Possible infinite loop when calling countRendersCompiled - CallStack: - 1 countRendersCompiled (TestCyberTruck.res 283) - - Termination Analysis - File "TestCyberTruck.res", line 283, characters 33-246 - countRendersCompiled returns NoProgress with trace [_ || countRendersCompiled:NoProgress] - - Termination Analysis - File "TestCyberTruck.res", line 318, characters 48-57 - Extend Function Table with parseIntO (TestCyberTruck.res 307) as it calls a progress function - - Termination Analysis - File "TestCyberTruck.res", line 318, characters 31-41 - Extend Function Table with parseListO (TestCyberTruck.res 293) as it calls a progress function - - Termination Analysis - File "TestCyberTruck.res", line 293, characters 19-299 - Extend Function Table with parseListO as parametric ~f=parseIntO - - Termination Analysis - File "TestCyberTruck.res", line 294, characters 12-16 - Adding recursive definition parseListO$loop - - Function Table - 1 alwaysReturnNone: [+Parser.next; alwaysReturnNone || None] - 2 parseIntO: [+Parser.next; Some || None] - 3 parseIntOWrapper: parseIntO - 4 parseListIntO: parseListO - 5 parseListO: parseListO$loop - 6 parseListO$loop: [+Parser.next; _ || switch f {some: parseListO$loop, none: _}] - 7 testAlwaysReturnNone: alwaysReturnNone - 8 thisMakesNoProgress: None; [_ || +Parser.next; Some] - - Termination Analysis for parseListIntO - - Termination Analysis - File "TestCyberTruck.res", line 318, characters 31-58 - Cache miss for parseListO - - Termination Analysis - File "TestCyberTruck.res", line 304, characters 4-16 - Cache miss for parseListO$loop - - Termination Analysis - File "TestCyberTruck.res", line 299, characters 15-19 - Cache miss for parseIntO - - Termination Analysis - File "TestCyberTruck.res", line 299, characters 15-19 - parseIntO returns {some: Progress, none: NoProgress} with trace [Parser.next:Progress; Some || None] - - Termination Analysis - File "TestCyberTruck.res", line 304, characters 4-16 - parseListO$loop returns NoProgress with trace [Parser.next:Progress || parseIntO:NoProgress; [parseListO$loop:Progress || _]] - - Termination Analysis - File "TestCyberTruck.res", line 318, characters 31-58 - parseListO returns NoProgress with trace parseListO$loop:NoProgress - - Termination Analysis - File "TestCyberTruck.res", line 318, characters 26-58 - parseListIntO returns NoProgress with trace parseListO:NoProgress - - Termination Analysis for testAlwaysReturnNone - - Termination Analysis - File "TestCyberTruck.res", line 329, characters 34-53 - Cache miss for alwaysReturnNone - - Termination Analysis - File "TestCyberTruck.res", line 329, characters 34-53 - alwaysReturnNone returns {none: NoProgress} with trace [Parser.next:Progress; alwaysReturnNone:Progress || None] - - Termination Analysis - File "TestCyberTruck.res", line 329, characters 29-53 - testAlwaysReturnNone returns {none: NoProgress} with trace alwaysReturnNone:NoProgress - - Termination Analysis for parseIntOWrapper - - Termination Analysis - File "TestCyberTruck.res", line 332, characters 30-42 - Cache hit for parseIntO - - Termination Analysis - File "TestCyberTruck.res", line 332, characters 25-42 - parseIntOWrapper returns {some: Progress, none: NoProgress} with trace parseIntO:NoProgress - - Termination Analysis for thisMakesNoProgress - - Termination Analysis - File "TestCyberTruck.res", line 335, characters 28-157 - thisMakesNoProgress returns NoProgress with trace None; [_ || Parser.next:Progress; Some] - - Termination Analysis - File "TestCyberTruck.res", line 365, characters 15-16 - gParam is parametric ~g=g - - Function Table - 1 f: [g; _ || _ || +Parser.next; f] - 2 g: +Parser.next; gParam - 3 gParam: [g; _ || f] - - Termination Analysis for f - - Termination Analysis - File "TestCyberTruck.res", line 350, characters 16-20 - Cache miss for g - - Termination Analysis - File "TestCyberTruck.res", line 365, characters 4-17 - Cache miss for gParam - - Termination Analysis - File "TestCyberTruck.res", line 365, characters 4-17 - gParam returns Progress with trace [g:Progress || f:Progress] - - Termination Analysis - File "TestCyberTruck.res", line 350, characters 16-20 - g returns Progress with trace Parser.next:Progress; gParam:Progress - - Termination Analysis - File "TestCyberTruck.res", line 348, characters 14-140 - f returns NoProgress with trace [g:Progress || _ || Parser.next:Progress; f:Progress] - - Termination Analysis - File "TestCyberTruck.res", line 436, characters 45-51 - kleene is parametric ~f=oneTwo - - Termination Analysis - File "TestCyberTruck.res", line 397, characters 93-265 - Extend Function Table with concat as parametric ~f=one - - Termination Analysis - File "TestCyberTruck.res", line 397, characters 93-265 - Extend Function Table with concat as parametric ~g=two - - Function Table - 1 concat: switch f {some: switch g {some: Some, none: None}, none: None} - 2 kleene: switch f {some: kleene, none: _} - 3 one: [+Parser.next; Some || None] - 4 oneTwo: concat - 5 oneTwoStar: kleene - 6 two: [+Parser.next; Some || None] - - Termination Analysis for oneTwoStar - - Termination Analysis - File "TestCyberTruck.res", line 436, characters 35-55 - Cache miss for kleene - - Termination Analysis - File "TestCyberTruck.res", line 412, characters 11-15 - Cache miss for oneTwo - - Termination Analysis - File "TestCyberTruck.res", line 433, characters 46-71 - Cache miss for concat - - Termination Analysis - File "TestCyberTruck.res", line 402, characters 11-15 - Cache miss for one - - Termination Analysis - File "TestCyberTruck.res", line 402, characters 11-15 - one returns {some: Progress, none: NoProgress} with trace [Parser.next:Progress; Some || None] - - Termination Analysis - File "TestCyberTruck.res", line 405, characters 13-17 - Cache miss for two - - Termination Analysis - File "TestCyberTruck.res", line 405, characters 13-17 - two returns {some: Progress, none: NoProgress} with trace [Parser.next:Progress; Some || None] - - Termination Analysis - File "TestCyberTruck.res", line 433, characters 46-71 - concat returns {some: Progress, none: NoProgress} with trace one:NoProgress; [two:NoProgress; [Some || None] || None] - - Termination Analysis - File "TestCyberTruck.res", line 412, characters 11-15 - oneTwo returns {some: Progress, none: NoProgress} with trace concat:NoProgress - - Termination Analysis - File "TestCyberTruck.res", line 436, characters 35-55 - kleene returns NoProgress with trace oneTwo:NoProgress; [kleene:Progress || _] - - Termination Analysis - File "TestCyberTruck.res", line 436, characters 30-55 - oneTwoStar returns NoProgress with trace kleene:NoProgress - - Function Table - 1 testTry: [+progress; testTry || +progress; testTry] - - Termination Analysis for testTry - - Termination Analysis - File "TestCyberTruck.res", line 440, characters 18-178 - testTry returns Progress with trace [progress:Progress; testTry:Progress || progress:Progress; testTry:Progress] + File "Termination.ml", line 70, characters 64-187 + second_argument_is_always_evaluated returns Progress with trace progress:Progress; second_argument_is_always_evaluated:Progress Termination Analysis Stats Files:1 - Recursive Blocks:21 - Functions:49 - Infinite Loops:10 + Recursive Blocks:13 + Functions:16 + Infinite Loops:7 Hygiene Errors:1 - Cache Hits:8/31 + Cache Hits:1/4 - Analysis reported 11 issues (Error Hygiene:1, Error Termination:10) + Analysis reported 8 issues (Error Hygiene:1, Error Termination:7) 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/scripts/run_integration_tests.js b/scripts/run_integration_tests.js index d9d82c0e..be21ee34 100644 --- a/scripts/run_integration_tests.js +++ b/scripts/run_integration_tests.js @@ -1,4 +1,3 @@ -const fs = require("fs"); const child_process = require("child_process"); const path = require("path"); const pjson = require("../package.json"); @@ -9,58 +8,12 @@ const exampleDirPaths = exampleDirNames.map((exampleName) => ); const isWindows = /^win/i.test(process.platform); - const reanalyzeFile = path.join(__dirname, "../_build/default/src/Reanalyze.exe"); -/* -Needed for wrapping the stdout pipe with a promise -*/ -function wrappedSpawn(command, args, options) { - return new Promise((resolve, reject) => { - const child = child_process.spawn(command, args, { - env: process.env, - ...options, - }); - - child.stdout.pipe(process.stdout); - child.stderr.pipe(process.stderr); - - child.on("exit", (code) => { - if (code == 0) { - resolve(code); - } else { - reject(code); - } - }); - - child.on("error", (err) => { - console.error(`${command} ${args.join(" ")} exited with ${err.code}`); - return reject(err.code); - }); - }); -} - -async function installExamples() { - const tasks = exampleDirPaths.map((cwd) => { - console.log(`${cwd}: npm install --no-save (takes a while)`); - - // The npm command is not an executable, but a cmd script on Windows - // Without the shell = true, Windows will not find the program and fail - // with ENOENT - const shell = isWindows ? true : false; - return wrappedSpawn("npm", ["install", "--no-save"], { - cwd, - shell, - }); - }); - - return Promise.all(tasks); -} - function cleanBuildExamples() { for (let i = 0; i < exampleDirPaths.length; i++) { const cwd = exampleDirPaths[i]; - console.log(`${cwd}: npm run clean && npm run build (takes a while)`); + console.log(`${cwd}: npm run clean && npm run build`); const shell = isWindows ? true : false; child_process.execFileSync("npm", ["run", "clean"], { @@ -109,7 +62,6 @@ function checkSetup() { console.log("Checking if --version outputs the right version"); let output; - /* Compare the --version output with the package.json version number (should match) */ try { output = child_process.execSync(`${reanalyzeFile} --version`, { shell: isWindows, @@ -121,7 +73,6 @@ function checkSetup() { ); } - // For Unix / Windows const stripNewlines = (str = "") => str.replace(/[\n\r]+/g, ""); if (output.indexOf(pjson.version) === -1) { @@ -134,18 +85,15 @@ function checkSetup() { } } -async function main() { +function main() { try { checkSetup(); - await installExamples(); cleanBuildExamples(); - - /* Git diffing is broken... we need a better way to test regressions */ checkDiff(); console.log("Test successful!"); } catch (e) { - console.error(`Test failed unexpectly: ${e.message}`); + console.error(`Test failed unexpectedly: ${e.message}`); console.error(e); process.exit(1); } diff --git a/src/Annotation.ml b/src/Annotation.ml index 3aae3663..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,24 +17,27 @@ 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 (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)}, _); _; } -> 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 @@ -76,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 0e1b9c85..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 @@ -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 @@ -1052,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 @@ -1194,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 @@ -1219,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 @@ -1235,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}}) -> @@ -1247,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 @@ -1272,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, []) @@ -1282,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 @@ -1355,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 ff9200ce..50c8f14b 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 @@ -174,7 +172,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 +184,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 +260,46 @@ 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 ~cmtFilePath (cmt_infos : Cmt_format.cmt_infos) = +#if OCAML_VERSION >= (5, 3, 0) + let module UidTbl = Shape.Uid.Tbl in + let uid_to_decl = UidTbl.create 1024 in + UidTbl.iter (UidTbl.replace uid_to_decl) cmt_infos.cmt_uid_to_decl; + let add_uid_to_decl_from_cmt path = + if Sys.file_exists path then + try + let cmt_infos = Cmt_format.read_cmt path in + UidTbl.iter (UidTbl.replace uid_to_decl) cmt_infos.cmt_uid_to_decl + with _ -> () + in + add_uid_to_decl_from_cmt + ((cmtFilePath |> Filename.remove_extension) ^ ".cmti"); + let loc_of_value_decl = function + | Typedtree.Value {val_loc; _} -> Some val_loc + | Typedtree.Value_binding {vb_pat = {pat_loc; _}; _} -> Some pat_loc + | _ -> None + in + let loc_of_uid uid = + match UidTbl.find_opt uid_to_decl uid with + | Some item_decl -> loc_of_value_decl item_decl + | None -> None + in + cmt_infos.cmt_declaration_dependencies + |> filter_map (fun (_, uid_def, uid_decl) -> + match (loc_of_uid uid_def, loc_of_uid uid_decl) with + | Some def_loc, Some decl_loc -> Some (def_loc, decl_loc) + | _ -> None) +#else + let _ = cmtFilePath in + cmt_infos.cmt_value_dependencies + |> List.map (fun (valueTo, valueFrom) -> + (valueTo.Types.val_loc, valueFrom.Types.val_loc)) +#endif diff --git a/src/DeadCode.ml b/src/DeadCode.ml index 93df36f2..ee77c7dc 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; @@ -25,8 +25,11 @@ 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 ~cmtFilePath 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/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..b937fa50 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 -> ()) | _ -> ()); @@ -390,25 +390,19 @@ let traverseStructure ~doTypes ~doExternals = (* Merge a location's references to another one's *) let processValueDependency - ( ({ - val_loc = - {loc_start = {pos_fname = fnTo} as posTo; loc_ghost = ghost1} as - locTo; - } : - CL.Types.value_description), - ({ - val_loc = - {loc_start = {pos_fname = fnFrom} as posFrom; loc_ghost = ghost2} as - locFrom; - } : - CL.Types.value_description) ) = + ( ({loc_start = {pos_fname = fnTo} as posTo; loc_ghost = ghost1} as + locTo : + Location.t), + ({loc_start = {pos_fname = fnFrom} as posFrom; loc_ghost = ghost2} as + locFrom : + Location.t) ) = 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 9889d243..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 @@ -351,10 +351,11 @@ 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) + |> List.map (fun case -> case.Typedtree.c_lhs.pat_desc) |> exceptionsOfPatterns in let oldEvents = !currentEvents in @@ -386,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 @@ -399,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 @@ -414,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 @@ -438,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 = @@ -476,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}}) @@ -485,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..b7bfce70 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_ -> @@ -39,6 +39,12 @@ let loadCmtFile cmtFilePath = let processCmtFiles ~cmtRoot = let ( +++ ) = Filename.concat in + let isCmtFile path = + Filename.check_suffix path ".cmt" || Filename.check_suffix path ".cmti" + in + let processCmtFilePaths cmtFilePaths = + cmtFilePaths |> List.iter loadCmtFile + in match cmtRoot with | Some root -> Cli.cmtCommand := true; @@ -48,15 +54,15 @@ let processCmtFiles ~cmtRoot = let base = Filename.basename dir in base = "node_modules" || base = "_esy" in - if (not skipDir) && Sys.file_exists absDir then - if Sys.is_directory absDir then - absDir |> Sys.readdir |> Array.iter (fun d -> walkSubDirs (dir +++ d)) - else if - Filename.check_suffix absDir ".cmt" - || Filename.check_suffix absDir ".cmti" - then absDir |> loadCmtFile + if skipDir || not (Sys.file_exists absDir) then [] + else if Sys.is_directory absDir then + absDir |> Sys.readdir |> Array.fold_left + (fun acc d -> acc @ walkSubDirs (dir +++ d)) + [] + else if isCmtFile absDir then [absDir] + else [] in - walkSubDirs "" + walkSubDirs "" |> processCmtFilePaths | None -> Lazy.force Paths.setReScriptProjectRoot; let lib_bs = runConfig.projectRoot +++ ("lib" +++ "bs") in @@ -71,16 +77,10 @@ let processCmtFiles ~cmtRoot = | files -> files | exception Sys_error _ -> [] in - let cmtFiles = - files - |> List.filter (fun x -> - Filename.check_suffix x ".cmt" - || Filename.check_suffix x ".cmti") - in + let cmtFiles = files |> List.filter isCmtFile in cmtFiles |> List.sort String.compare - |> List.iter (fun cmtFile -> - let cmtFilePath = Filename.concat libBsSourceDir cmtFile in - cmtFilePath |> loadCmtFile)) + |> List.map (Filename.concat libBsSourceDir) + |> processCmtFilePaths) let runAnalysis ~cmtRoot ~ppf = Log_.Color.setup (); diff --git a/src/SideEffects.ml b/src/SideEffects.ml index 947fc413..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} -> @@ -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 @@ -75,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))