From bcec5feca9bca2b4904bc572e7933465751588d1 Mon Sep 17 00:00:00 2001 From: Zesen Qian Date: Thu, 23 Feb 2023 11:12:13 +0000 Subject: [PATCH] Squashed 'ocaml/' changes from a09392d08f..c703f5f777 c703f5f777 Incorporate upstream comments into type-variable refactor (#121) 362ba2349f Constrain curry modes to increase along applications (#108) b1f0cf9f91 Simplify the extension handling (#114) 4fd53a1f6f Remove pat_mode from typedtree (#105) cf6fcbc129 Handle attributes on lambdas with locally abstract types (#120) 5fa80fe23f Don't track attributes inside attributes for warning 53 (#115) 8a69777a3c Handle unclosed `[: ... :]` patterns (via `Generic_array` machinery) (#117) b0737f46c4 Add promote-one Makefile target (#118) c6ad684608 Refactoring and fixes around module lookup (#107) b0a649516b Add documentation for global constructor arguments (#69) dd79aeca91 Print `nlocal` in the `-d(raw)lambda` output (#112) 8035026661 Fix `nlocal` in the generated Lambda for list comprehensions (#113) afbcdf0642 Immutable arrays (#47) bfe1490dfb fix several issues when removing exp_mode (#110) 8f46060dc5 Better error message for under-applied functions (#74) 27331d848d Consistently use Lmutvar or Lvar in comprehensions (#111) 01e965b549 Skip failing test for now 0131357265 Fix test case to use comprehensions_experimental 22a73684b7 Temporarily disable list comprehensions tests due to locals bug e08377d2d1 Make `comprehensions` into `comprehensions_experimental` for now (#109) 947cf892b5 List and array comprehensions (#46) bd9e051900 remove exp_mode from typedtree (#100) a9268d29b4 Fix misplaced attribute warning when using external parser (and some cleanup) (#101) 2b33f2465c Refactor toplevel local escape check (#104) ed2aec61c6 Comment functions exported from TyVarEnv. 87838ba0c2 Move new variable creation into TyVarEnv. a3f60ab586 Encapsulate functions that work with tyvars 43d83a6554 Prevent possibility of forgetting to re-widen 2f3dd34d3d Encapsulate context when narrowing type env't d78ff6de46 Make immediate64 things mode cross (#97) aa25ab9baf Fix version number (#94) d01ffa06ec Fix .depend file (#93) 942f2ab220 Bootstrap (#92) 05f7e383d2 Check Menhir version (#91) 1569b580b9 Move the CI jobs from 4.12 to 4.14. (#90) git-subtree-dir: ocaml git-subtree-split: c703f5f7772dd4252405b086be11c15a3c67f2ac --- .depend | 170 +- .depend.menhir | 35 +- .github/workflows/build.yml | 38 +- .github/workflows/menhir.yml | 15 + Makefile.common-jst | 10 +- asmcomp/cmm_helpers.ml | 4 +- boot/menhir/parser.ml | 14602 +++++++++------- boot/menhir/parser.mli | 2 + boot/ocamlc | Bin 3241811 -> 3275983 bytes boot/ocamllex | Bin 372098 -> 372170 bytes build-aux/ocaml_version.m4 | 4 +- compilerlibs/Makefile.compilerlibs | 9 +- configure | 32 +- driver/pparse.ml | 4 +- dune | 11 +- jane/doc/local-reference.md | 10 + lambda/lambda.ml | 29 +- lambda/lambda.mli | 14 +- lambda/matching.ml | 44 +- lambda/printlambda.ml | 15 +- lambda/transl_array_comprehension.ml | 853 + lambda/transl_array_comprehension.mli | 32 + lambda/transl_comprehension_utils.ml | 161 + lambda/transl_comprehension_utils.mli | 148 + lambda/transl_list_comprehension.ml | 306 + lambda/transl_list_comprehension.mli | 22 + lambda/translattribute.ml | 40 +- lambda/translclass.ml | 10 +- lambda/translcomprehension.ml | 555 - lambda/translcomprehension.mli | 17 - lambda/translcore.ml | 235 +- lambda/translcore.mli | 2 - lambda/translmod.ml | 17 +- lambda/translmode.ml | 11 + lambda/translmode.mli | 3 + lambda/translprim.ml | 21 +- lambda/translprim.mli | 4 +- middle_end/printclambda_primitives.ml | 12 +- ocamldoc/odoc_ast.ml | 18 +- otherlibs/dynlink/Makefile | 3 + otherlibs/dynlink/dune | 15 + parsing/ast_helper.mli | 4 - parsing/ast_invariants.ml | 22 + parsing/ast_iterator.ml | 62 +- parsing/ast_iterator.mli | 2 + parsing/ast_mapper.ml | 65 +- parsing/ast_mapper.mli | 2 + parsing/builtin_attributes.ml | 21 +- parsing/builtin_attributes.mli | 33 +- parsing/depend.ml | 6 + parsing/extensions.ml | 501 +- parsing/extensions.mli | 168 +- parsing/extensions_parsing.ml | 338 + parsing/extensions_parsing.mli | 182 + parsing/lexer.mll | 2 + parsing/parser.mly | 217 +- parsing/pprintast.ml | 74 +- stdlib/.depend | 30 +- stdlib/StdlibModules | 7 +- stdlib/array.ml | 9 + stdlib/array.mli | 17 + stdlib/arrayLabels.mli | 10 + stdlib/camlinternalComprehension.ml | 53 +- stdlib/camlinternalComprehension.mli | 50 +- stdlib/dune | 10 + stdlib/iarray.ml | 95 + stdlib/iarray.mli | 252 + stdlib/iarrayLabels.ml | 11 + stdlib/iarrayLabels.mli | 255 + stdlib/stdlib.ml | 6 + stdlib/stdlib.mli | 17 + .../tests/array-functions/test_iarray.ml | 272 + .../array-functions/test_iarray.reference | 1 + testsuite/tests/ast-invariants/test.ml | 15 +- .../backtrace/pr2195-locs.byte.reference | 2 +- .../tests/backtrace/pr2195.opt.reference | 4 +- .../basic-modules/anonymous.ocamlc.reference | 5 +- .../anonymous.ocamlopt.flambda.reference | 4 +- .../anonymous.ocamlopt.reference | 4 +- .../tests/basic/patmatch_for_multiple.ml | 314 +- testsuite/tests/basic/patmatch_split_no_or.ml | 10 +- .../array_comprehensions_pure.ml | 411 + .../array_comprehensions_side_effects.ml | 93 + ...rray_comprehensions_side_effects.reference | 348 + .../array_comprehensions_special.ml | 139 + .../tests/comprehensions/comprehensions.ml | 590 - .../comprehensions_from_quickcheck.ml | 11361 ++++++++++++ .../iarray_comprehensions_pure.ml | 477 + ...quire_immutable_arrays.compilers.reference | 4 + ...comprehensions_require_immutable_arrays.ml | 9 + .../iarray_comprehensions_side_effects.ml | 93 + ...rray_comprehensions_side_effects.reference | 348 + .../iarray_comprehensions_special.ml | 148 + .../list_comprehensions_pure.ml | 403 + .../list_comprehensions_side_effects.ml | 91 + ...list_comprehensions_side_effects.reference | 348 + .../quickcheck_lists_arrays_haskell_python.ml | 1251 ++ testsuite/tests/comprehensions/syntax.ml | 82 + .../tests/comprehensions/syntax.reference | 14 + ...test_locations.dlocations.ocamlc.reference | 26 +- ...t_locations.dno-locations.ocamlc.reference | 26 +- .../functors/functors.compilers.reference | 40 +- testsuite/tests/generalized-open/gpr1506.ml | 12 +- .../user_error1.compilers.reference | 5 + .../jst-modular-extensions/user_error1.ml | 29 + .../user_error2.compilers.reference | 6 + .../jst-modular-extensions/user_error2.ml | 28 + .../user_error3.compilers.reference | 5 + .../jst-modular-extensions/user_error3.ml | 29 + .../user_error4.compilers.reference | 4 + .../jst-modular-extensions/user_error4.ml | 30 + .../user_error5.compilers.reference | 4 + .../jst-modular-extensions/user_error5.ml | 31 + .../user_error6.compilers.reference | 6 + .../jst-modular-extensions/user_error6.ml | 32 + .../jst-modular-extensions/user_error7.ml | 26 + testsuite/tests/lib-array/test_iarray.ml | 527 + testsuite/tests/shapes/comp_units.ml | 2 +- testsuite/tests/shapes/functors.ml | 18 +- testsuite/tests/shapes/open_arg.ml | 2 +- testsuite/tests/shapes/recmodules.ml | 10 +- testsuite/tests/shapes/rotor_example.ml | 2 +- testsuite/tests/tmc/readable_output.ml | 29 +- .../array_spec.compilers.flat.reference | 65 +- .../comparison_table.compilers.reference | 326 +- .../module_coercion.compilers.flat.reference | 172 +- .../translprim/ref_spec.compilers.reference | 24 +- testsuite/tests/typing-local/crossing.ml | 2 +- testsuite/tests/typing-local/crossing_64.ml | 14 + testsuite/tests/typing-local/local.ml | 203 +- testsuite/tests/typing-sigsubst/sigsubst.ml | 6 +- testsuite/tests/warnings/marshall_for_w53.ml | 4 + .../tests/warnings/w53.compilers.reference | 60 +- testsuite/tests/warnings/w53.ml | 29 + .../w53_marshalled.compilers.reference | 640 + testsuite/tests/warnings/w53_marshalled.ml | 16 + testsuite/tests/warnings/w53_ppx.ml | 13 + .../warnings/w53_with_ppx.compilers.reference | 4 + testsuite/tests/warnings/w53_with_ppx.ml | 20 + tools/.depend | 2 + tools/Makefile | 4 +- tools/sync_stdlib_docs | 2 + toplevel/genprintval.ml | 43 +- toplevel/native/topeval.ml | 3 +- typing/cmt2annot.ml | 2 +- typing/env.ml | 54 +- typing/env.mli | 10 +- typing/includemod.ml | 8 +- typing/includemod_errorprinter.ml | 8 +- typing/mtype.ml | 53 +- typing/mtype.mli | 8 + typing/oprint.ml | 9 +- typing/outcometree.mli | 2 +- typing/parmatch.ml | 146 +- typing/patterns.ml | 37 +- typing/patterns.mli | 8 +- typing/predef.ml | 7 + typing/predef.mli | 3 + typing/printpat.ml | 12 +- typing/printtyped.ml | 135 +- typing/rec_check.ml | 120 +- typing/tast_iterator.ml | 50 +- typing/tast_mapper.ml | 100 +- typing/typeclass.ml | 47 +- typing/typecore.ml | 1380 +- typing/typecore.mli | 28 +- typing/typedecl.ml | 47 +- typing/typedtree.ml | 99 +- typing/typedtree.mli | 88 +- typing/typemod.ml | 141 +- typing/typeopt.ml | 5 +- typing/typetexp.ml | 467 +- typing/typetexp.mli | 51 +- typing/untypeast.ml | 115 +- utils/clflags.ml | 49 +- utils/clflags.mli | 16 +- 176 files changed, 32458 insertions(+), 10323 deletions(-) create mode 100644 .github/workflows/menhir.yml create mode 100644 lambda/transl_array_comprehension.ml create mode 100644 lambda/transl_array_comprehension.mli create mode 100644 lambda/transl_comprehension_utils.ml create mode 100644 lambda/transl_comprehension_utils.mli create mode 100644 lambda/transl_list_comprehension.ml create mode 100644 lambda/transl_list_comprehension.mli delete mode 100644 lambda/translcomprehension.ml delete mode 100644 lambda/translcomprehension.mli create mode 100644 lambda/translmode.ml create mode 100644 lambda/translmode.mli create mode 100644 parsing/extensions_parsing.ml create mode 100644 parsing/extensions_parsing.mli create mode 100644 stdlib/iarray.ml create mode 100644 stdlib/iarray.mli create mode 100644 stdlib/iarrayLabels.ml create mode 100644 stdlib/iarrayLabels.mli create mode 100644 testsuite/tests/array-functions/test_iarray.ml create mode 100644 testsuite/tests/array-functions/test_iarray.reference create mode 100644 testsuite/tests/comprehensions/array_comprehensions_pure.ml create mode 100644 testsuite/tests/comprehensions/array_comprehensions_side_effects.ml create mode 100644 testsuite/tests/comprehensions/array_comprehensions_side_effects.reference create mode 100644 testsuite/tests/comprehensions/array_comprehensions_special.ml delete mode 100644 testsuite/tests/comprehensions/comprehensions.ml create mode 100644 testsuite/tests/comprehensions/comprehensions_from_quickcheck.ml create mode 100644 testsuite/tests/comprehensions/iarray_comprehensions_pure.ml create mode 100644 testsuite/tests/comprehensions/iarray_comprehensions_require_immutable_arrays.compilers.reference create mode 100644 testsuite/tests/comprehensions/iarray_comprehensions_require_immutable_arrays.ml create mode 100644 testsuite/tests/comprehensions/iarray_comprehensions_side_effects.ml create mode 100644 testsuite/tests/comprehensions/iarray_comprehensions_side_effects.reference create mode 100644 testsuite/tests/comprehensions/iarray_comprehensions_special.ml create mode 100644 testsuite/tests/comprehensions/list_comprehensions_pure.ml create mode 100644 testsuite/tests/comprehensions/list_comprehensions_side_effects.ml create mode 100644 testsuite/tests/comprehensions/list_comprehensions_side_effects.reference create mode 100644 testsuite/tests/comprehensions/quickcheck_lists_arrays_haskell_python.ml create mode 100644 testsuite/tests/comprehensions/syntax.ml create mode 100644 testsuite/tests/comprehensions/syntax.reference create mode 100644 testsuite/tests/jst-modular-extensions/user_error1.compilers.reference create mode 100644 testsuite/tests/jst-modular-extensions/user_error1.ml create mode 100644 testsuite/tests/jst-modular-extensions/user_error2.compilers.reference create mode 100644 testsuite/tests/jst-modular-extensions/user_error2.ml create mode 100644 testsuite/tests/jst-modular-extensions/user_error3.compilers.reference create mode 100644 testsuite/tests/jst-modular-extensions/user_error3.ml create mode 100644 testsuite/tests/jst-modular-extensions/user_error4.compilers.reference create mode 100644 testsuite/tests/jst-modular-extensions/user_error4.ml create mode 100644 testsuite/tests/jst-modular-extensions/user_error5.compilers.reference create mode 100644 testsuite/tests/jst-modular-extensions/user_error5.ml create mode 100644 testsuite/tests/jst-modular-extensions/user_error6.compilers.reference create mode 100644 testsuite/tests/jst-modular-extensions/user_error6.ml create mode 100644 testsuite/tests/jst-modular-extensions/user_error7.ml create mode 100644 testsuite/tests/lib-array/test_iarray.ml create mode 100644 testsuite/tests/typing-local/crossing_64.ml create mode 100644 testsuite/tests/warnings/marshall_for_w53.ml create mode 100644 testsuite/tests/warnings/w53_marshalled.compilers.reference create mode 100644 testsuite/tests/warnings/w53_marshalled.ml create mode 100644 testsuite/tests/warnings/w53_ppx.ml create mode 100644 testsuite/tests/warnings/w53_with_ppx.compilers.reference create mode 100644 testsuite/tests/warnings/w53_with_ppx.ml diff --git a/.depend b/.depend index 9736dee75fd2..f8c4f15c3149 100644 --- a/.depend +++ b/.depend @@ -265,6 +265,7 @@ parsing/ast_invariants.cmo : \ parsing/syntaxerr.cmi \ parsing/parsetree.cmi \ parsing/longident.cmi \ + parsing/extensions.cmi \ parsing/builtin_attributes.cmi \ parsing/asttypes.cmi \ parsing/ast_iterator.cmi \ @@ -273,6 +274,7 @@ parsing/ast_invariants.cmx : \ parsing/syntaxerr.cmx \ parsing/parsetree.cmi \ parsing/longident.cmx \ + parsing/extensions.cmx \ parsing/builtin_attributes.cmx \ parsing/asttypes.cmi \ parsing/ast_iterator.cmx \ @@ -282,23 +284,26 @@ parsing/ast_invariants.cmi : \ parsing/ast_iterator.cmo : \ parsing/parsetree.cmi \ parsing/location.cmi \ + parsing/extensions.cmi \ parsing/ast_iterator.cmi parsing/ast_iterator.cmx : \ parsing/parsetree.cmi \ parsing/location.cmx \ + parsing/extensions.cmx \ parsing/ast_iterator.cmi parsing/ast_iterator.cmi : \ parsing/parsetree.cmi \ - parsing/location.cmi + parsing/location.cmi \ + parsing/extensions.cmi parsing/ast_mapper.cmo : \ parsing/parsetree.cmi \ utils/misc.cmi \ parsing/longident.cmi \ parsing/location.cmi \ utils/load_path.cmi \ + parsing/extensions.cmi \ utils/config.cmi \ utils/clflags.cmi \ - parsing/builtin_attributes.cmi \ parsing/asttypes.cmi \ parsing/ast_helper.cmi \ parsing/ast_mapper.cmi @@ -308,15 +313,16 @@ parsing/ast_mapper.cmx : \ parsing/longident.cmx \ parsing/location.cmx \ utils/load_path.cmx \ + parsing/extensions.cmx \ utils/config.cmx \ utils/clflags.cmx \ - parsing/builtin_attributes.cmx \ parsing/asttypes.cmi \ parsing/ast_helper.cmx \ parsing/ast_mapper.cmi parsing/ast_mapper.cmi : \ parsing/parsetree.cmi \ - parsing/location.cmi + parsing/location.cmi \ + parsing/extensions.cmi parsing/asttypes.cmi : \ parsing/location.cmi parsing/attr_helper.cmo : \ @@ -344,6 +350,7 @@ parsing/builtin_attributes.cmo : \ utils/config.cmi \ utils/clflags.cmi \ parsing/asttypes.cmi \ + parsing/ast_iterator.cmi \ parsing/ast_helper.cmi \ parsing/builtin_attributes.cmi parsing/builtin_attributes.cmx : \ @@ -355,6 +362,7 @@ parsing/builtin_attributes.cmx : \ utils/config.cmx \ utils/clflags.cmx \ parsing/asttypes.cmi \ + parsing/ast_iterator.cmx \ parsing/ast_helper.cmx \ parsing/builtin_attributes.cmi parsing/builtin_attributes.cmi : \ @@ -371,6 +379,7 @@ parsing/depend.cmo : \ utils/misc.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + parsing/extensions.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ parsing/asttypes.cmi \ @@ -380,6 +389,7 @@ parsing/depend.cmx : \ utils/misc.cmx \ parsing/longident.cmx \ parsing/location.cmx \ + parsing/extensions.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ parsing/asttypes.cmi \ @@ -403,21 +413,42 @@ parsing/docstrings.cmi : \ parsing/location.cmi parsing/extensions.cmo : \ parsing/parsetree.cmi \ - utils/misc.cmi \ parsing/location.cmi \ + parsing/extensions_parsing.cmi \ + utils/clflags.cmi \ parsing/asttypes.cmi \ parsing/ast_helper.cmi \ parsing/extensions.cmi parsing/extensions.cmx : \ parsing/parsetree.cmi \ - utils/misc.cmx \ parsing/location.cmx \ + parsing/extensions_parsing.cmx \ + utils/clflags.cmx \ parsing/asttypes.cmi \ parsing/ast_helper.cmx \ parsing/extensions.cmi parsing/extensions.cmi : \ - utils/warnings.cmi \ parsing/parsetree.cmi \ + parsing/location.cmi \ + parsing/asttypes.cmi +parsing/extensions_parsing.cmo : \ + parsing/parsetree.cmi \ + parsing/location.cmi \ + utils/clflags.cmi \ + parsing/asttypes.cmi \ + parsing/ast_helper.cmi \ + parsing/extensions_parsing.cmi +parsing/extensions_parsing.cmx : \ + parsing/parsetree.cmi \ + parsing/location.cmx \ + utils/clflags.cmx \ + parsing/asttypes.cmi \ + parsing/ast_helper.cmx \ + parsing/extensions_parsing.cmi +parsing/extensions_parsing.cmi : \ + parsing/parsetree.cmi \ + parsing/location.cmi \ + utils/clflags.cmi \ parsing/asttypes.cmi parsing/lexer.cmo : \ utils/warnings.cmi \ @@ -518,6 +549,7 @@ parsing/pprintast.cmo : \ parsing/parsetree.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + parsing/extensions.cmi \ parsing/asttypes.cmi \ parsing/ast_helper.cmi \ parsing/pprintast.cmi @@ -525,6 +557,7 @@ parsing/pprintast.cmx : \ parsing/parsetree.cmi \ parsing/longident.cmx \ parsing/location.cmx \ + parsing/extensions.cmx \ parsing/asttypes.cmi \ parsing/ast_helper.cmx \ parsing/pprintast.cmi @@ -913,13 +946,13 @@ typing/includemod_errorprinter.cmo : \ typing/printtyp.cmi \ typing/path.cmi \ typing/oprint.cmi \ + typing/mtype.cmi \ utils/misc.cmi \ parsing/location.cmi \ typing/includemod.cmi \ typing/includecore.cmi \ typing/includeclass.cmi \ typing/ident.cmi \ - typing/env.cmi \ utils/diffing.cmi \ utils/clflags.cmi \ typing/includemod_errorprinter.cmi @@ -929,13 +962,13 @@ typing/includemod_errorprinter.cmx : \ typing/printtyp.cmx \ typing/path.cmx \ typing/oprint.cmx \ + typing/mtype.cmx \ utils/misc.cmx \ parsing/location.cmx \ typing/includemod.cmx \ typing/includecore.cmx \ typing/includeclass.cmx \ typing/ident.cmx \ - typing/env.cmx \ utils/diffing.cmx \ utils/clflags.cmx \ typing/includemod_errorprinter.cmi @@ -1003,6 +1036,7 @@ typing/parmatch.cmo : \ parsing/longident.cmi \ parsing/location.cmi \ typing/ident.cmi \ + parsing/extensions.cmi \ typing/env.cmi \ typing/ctype.cmi \ utils/config.cmi \ @@ -1026,6 +1060,7 @@ typing/parmatch.cmx : \ parsing/longident.cmx \ parsing/location.cmx \ typing/ident.cmx \ + parsing/extensions.cmx \ typing/env.cmx \ typing/ctype.cmx \ utils/config.cmx \ @@ -1867,8 +1902,7 @@ typing/typemod.cmi : \ typing/ident.cmi \ typing/env.cmi \ utils/compilation_unit.cmi \ - file_formats/cmi_format.cmi \ - utils/clflags.cmi + file_formats/cmi_format.cmi typing/typeopt.cmo : \ typing/types.cmi \ typing/typedtree.cmi \ @@ -1998,6 +2032,7 @@ typing/typetexp.cmi : \ parsing/location.cmi \ typing/errortrace.cmi \ typing/env.cmi \ + utils/clflags.cmi \ parsing/asttypes.cmi typing/untypeast.cmo : \ typing/typedtree.cmi \ @@ -3785,6 +3820,72 @@ lambda/tmc.cmx : \ lambda/tmc.cmi lambda/tmc.cmi : \ lambda/lambda.cmi +lambda/transl_array_comprehension.cmo : \ + typing/typeopt.cmi \ + typing/typedtree.cmi \ + lambda/transl_comprehension_utils.cmi \ + typing/predef.cmi \ + utils/misc.cmi \ + lambda/matching.cmi \ + lambda/lambda.cmi \ + typing/ident.cmi \ + typing/env.cmi \ + lambda/debuginfo.cmi \ + parsing/asttypes.cmi \ + lambda/transl_array_comprehension.cmi +lambda/transl_array_comprehension.cmx : \ + typing/typeopt.cmx \ + typing/typedtree.cmx \ + lambda/transl_comprehension_utils.cmx \ + typing/predef.cmx \ + utils/misc.cmx \ + lambda/matching.cmx \ + lambda/lambda.cmx \ + typing/ident.cmx \ + typing/env.cmx \ + lambda/debuginfo.cmx \ + parsing/asttypes.cmi \ + lambda/transl_array_comprehension.cmi +lambda/transl_array_comprehension.cmi : \ + typing/typedtree.cmi \ + lambda/lambda.cmi \ + lambda/debuginfo.cmi +lambda/transl_comprehension_utils.cmo : \ + typing/primitive.cmi \ + lambda/lambda.cmi \ + typing/ident.cmi \ + lambda/transl_comprehension_utils.cmi +lambda/transl_comprehension_utils.cmx : \ + typing/primitive.cmx \ + lambda/lambda.cmx \ + typing/ident.cmx \ + lambda/transl_comprehension_utils.cmi +lambda/transl_comprehension_utils.cmi : \ + parsing/location.cmi \ + lambda/lambda.cmi \ + typing/ident.cmi +lambda/transl_list_comprehension.cmo : \ + typing/typeopt.cmi \ + typing/typedtree.cmi \ + lambda/transl_comprehension_utils.cmi \ + lambda/matching.cmi \ + lambda/lambda.cmi \ + typing/ident.cmi \ + parsing/asttypes.cmi \ + lambda/transl_list_comprehension.cmi +lambda/transl_list_comprehension.cmx : \ + typing/typeopt.cmx \ + typing/typedtree.cmx \ + lambda/transl_comprehension_utils.cmx \ + lambda/matching.cmx \ + lambda/lambda.cmx \ + typing/ident.cmx \ + parsing/asttypes.cmi \ + lambda/transl_list_comprehension.cmi +lambda/transl_list_comprehension.cmi : \ + typing/typedtree.cmi \ + lambda/lambda.cmi \ + lambda/debuginfo.cmi lambda/translattribute.cmo : \ utils/warnings.cmi \ typing/typedtree.cmi \ @@ -3853,28 +3954,6 @@ lambda/translclass.cmi : \ typing/ident.cmi \ lambda/debuginfo.cmi \ parsing/asttypes.cmi -lambda/translcomprehension.cmo : \ - typing/typeopt.cmi \ - typing/typedtree.cmi \ - typing/primitive.cmi \ - lambda/matching.cmi \ - lambda/lambda.cmi \ - typing/ident.cmi \ - parsing/asttypes.cmi \ - lambda/translcomprehension.cmi -lambda/translcomprehension.cmx : \ - typing/typeopt.cmx \ - typing/typedtree.cmx \ - typing/primitive.cmx \ - lambda/matching.cmx \ - lambda/lambda.cmx \ - typing/ident.cmx \ - parsing/asttypes.cmi \ - lambda/translcomprehension.cmi -lambda/translcomprehension.cmi : \ - typing/typedtree.cmi \ - lambda/lambda.cmi \ - lambda/debuginfo.cmi lambda/translcore.cmo : \ utils/warnings.cmi \ typing/types.cmi \ @@ -3883,8 +3962,10 @@ lambda/translcore.cmo : \ typing/typecore.cmi \ lambda/translprim.cmi \ lambda/translobj.cmi \ - lambda/translcomprehension.cmi \ + lambda/translmode.cmi \ lambda/translattribute.cmi \ + lambda/transl_list_comprehension.cmi \ + lambda/transl_array_comprehension.cmi \ typing/printtyp.cmi \ typing/primitive.cmi \ typing/predef.cmi \ @@ -3914,8 +3995,10 @@ lambda/translcore.cmx : \ typing/typecore.cmx \ lambda/translprim.cmx \ lambda/translobj.cmx \ - lambda/translcomprehension.cmx \ + lambda/translmode.cmx \ lambda/translattribute.cmx \ + lambda/transl_list_comprehension.cmx \ + lambda/transl_array_comprehension.cmx \ typing/printtyp.cmx \ typing/primitive.cmx \ typing/predef.cmx \ @@ -3938,7 +4021,6 @@ lambda/translcore.cmx : \ parsing/asttypes.cmi \ lambda/translcore.cmi lambda/translcore.cmi : \ - typing/types.cmi \ typing/typedtree.cmi \ parsing/longident.cmi \ parsing/location.cmi \ @@ -4002,6 +4084,17 @@ lambda/translmod.cmi : \ lambda/lambda.cmi \ typing/ident.cmi \ utils/compilation_unit.cmi +lambda/translmode.cmo : \ + typing/types.cmi \ + lambda/lambda.cmi \ + lambda/translmode.cmi +lambda/translmode.cmx : \ + typing/types.cmx \ + lambda/lambda.cmx \ + lambda/translmode.cmi +lambda/translmode.cmi : \ + typing/types.cmi \ + lambda/lambda.cmi lambda/translobj.cmo : \ typing/primitive.cmi \ utils/misc.cmi \ @@ -4035,6 +4128,7 @@ lambda/translprim.cmo : \ typing/types.cmi \ typing/typeopt.cmi \ typing/typedtree.cmi \ + lambda/translmode.cmi \ typing/primitive.cmi \ typing/predef.cmi \ typing/path.cmi \ @@ -4053,6 +4147,7 @@ lambda/translprim.cmx : \ typing/types.cmx \ typing/typeopt.cmx \ typing/typedtree.cmx \ + lambda/translmode.cmx \ typing/primitive.cmx \ typing/predef.cmx \ typing/path.cmx \ @@ -4150,6 +4245,7 @@ file_formats/cmx_format.cmi : \ utils/compilation_unit.cmi \ middle_end/clambda.cmi file_formats/cmxs_format.cmi : \ + utils/import_info.cmi \ utils/compilation_unit.cmi file_formats/linear_format.cmo : \ utils/misc.cmi \ @@ -6494,6 +6590,7 @@ toplevel/genprintval.cmo : \ typing/datarepr.cmi \ typing/ctype.cmi \ typing/btype.cmi \ + parsing/asttypes.cmi \ toplevel/genprintval.cmi toplevel/genprintval.cmx : \ typing/types.cmx \ @@ -6512,6 +6609,7 @@ toplevel/genprintval.cmx : \ typing/datarepr.cmx \ typing/ctype.cmx \ typing/btype.cmx \ + parsing/asttypes.cmi \ toplevel/genprintval.cmi toplevel/genprintval.cmi : \ typing/types.cmi \ diff --git a/.depend.menhir b/.depend.menhir index 3b9e6e095e36..b9efb39a87c4 100644 --- a/.depend.menhir +++ b/.depend.menhir @@ -1,11 +1,30 @@ -parsing/parser.cmo : parsing/syntaxerr.cmi parsing/parsetree.cmi \ - parsing/longident.cmi parsing/location.cmi parsing/docstrings.cmi \ - utils/clflags.cmi parsing/asttypes.cmi parsing/ast_helper.cmi \ +parsing/parser.cmo : \ + parsing/syntaxerr.cmi \ + parsing/parsetree.cmi \ + parsing/longident.cmi \ + parsing/location.cmi \ + parsing/extensions.cmi \ + parsing/docstrings.cmi \ + utils/clflags.cmi \ + parsing/builtin_attributes.cmi \ + parsing/asttypes.cmi \ + parsing/ast_helper.cmi \ parsing/parser.cmi -parsing/parser.cmx : parsing/syntaxerr.cmx parsing/parsetree.cmi \ - parsing/longident.cmx parsing/location.cmx parsing/docstrings.cmx \ - utils/clflags.cmx parsing/asttypes.cmi parsing/ast_helper.cmx \ +parsing/parser.cmx : \ + parsing/syntaxerr.cmx \ + parsing/parsetree.cmi \ + parsing/longident.cmx \ + parsing/location.cmx \ + parsing/extensions.cmx \ + parsing/docstrings.cmx \ + utils/clflags.cmx \ + parsing/builtin_attributes.cmx \ + parsing/asttypes.cmi \ + parsing/ast_helper.cmx \ parsing/parser.cmi -parsing/parser.cmi : parsing/parsetree.cmi parsing/location.cmi \ +parsing/parser.cmi : \ + parsing/parsetree.cmi \ + parsing/longident.cmi \ + parsing/location.cmi \ parsing/docstrings.cmi -parsing/parser.ml parsing/parser.mli: parsing/ast_helper.cmi parsing/asttypes.cmi utils/clflags.cmi parsing/docstrings.cmi parsing/location.cmi parsing/longident.cmi parsing/parsetree.cmi parsing/syntaxerr.cmi +parsing/parser.ml parsing/parser.mli: parsing/ast_helper.cmi parsing/asttypes.cmi parsing/builtin_attributes.cmi utils/clflags.cmi parsing/docstrings.cmi parsing/extensions.cmi parsing/location.cmi parsing/longident.cmi parsing/parsetree.cmi parsing/syntaxerr.cmi diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2fae5fd1acec..1607e7a944bd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,58 +46,58 @@ jobs: with: path: 'ocaml-jst' - - name: Cache OCaml 4.12 and dune + - name: Cache OCaml 4.14 and dune uses: actions/cache@v1 id: cache with: - path: ${{ github.workspace }}/ocaml-412/_install - key: ${{ matrix.os }}-cache-ocaml-412-dune-341-bits-${{ matrix.boot_cachekey }} + path: ${{ github.workspace }}/ocaml-414/_install + key: ${{ matrix.os }}-cache-ocaml-414-dune-361-bits-${{ matrix.boot_cachekey }} - - name: Checkout OCaml 4.12 + - name: Checkout OCaml 4.14 uses: actions/checkout@master if: steps.cache.outputs.cache-hit != 'true' with: repository: 'ocaml/ocaml' - path: 'ocaml-412' - ref: '4.12' + path: 'ocaml-414' + ref: '4.14' - name: Setup 32-bit C compiler if: matrix.name == 'i386' && steps.cache.outputs.cache-hit != 'true' run: | - mkdir -p ocaml-412/_install/bin - { echo '#!/bin/sh'; echo 'exec gcc -m32 "$@"'; } > ocaml-412/_install/bin/cc32 - chmod +x ocaml-412/_install/bin/cc32 + mkdir -p ocaml-414/_install/bin + { echo '#!/bin/sh'; echo 'exec gcc -m32 "$@"'; } > ocaml-414/_install/bin/cc32 + chmod +x ocaml-414/_install/bin/cc32 - - name: Build OCaml 4.12 + - name: Build OCaml 4.14 if: steps.cache.outputs.cache-hit != 'true' - working-directory: ocaml-412 + working-directory: ocaml-414 run: | - export PATH=$GITHUB_WORKSPACE/ocaml-412/_install/bin:$PATH - ./configure --prefix=$GITHUB_WORKSPACE/ocaml-412/_install ${{ matrix.boot_config }} + export PATH=$GITHUB_WORKSPACE/ocaml-414/_install/bin:$PATH + ./configure --prefix=$GITHUB_WORKSPACE/ocaml-414/_install ${{ matrix.boot_config }} make -j $J world.opt make install # Remove unneeded parts to shrink cache file - rm -rf $GITHUB_WORKSPACE/ocaml-412/_install/{lib/ocaml/compiler-libs,lib/ocaml/expunge,bin/*.byte} + rm -rf $GITHUB_WORKSPACE/ocaml-414/_install/{lib/ocaml/compiler-libs,lib/ocaml/expunge,bin/*.byte} - name: Checkout dune github repo uses: actions/checkout@master if: steps.cache.outputs.cache-hit != 'true' with: repository: 'ocaml/dune' - ref: '3.4.1' + ref: '3.6.1' path: 'dune' - name: Build dune working-directory: dune if: steps.cache.outputs.cache-hit != 'true' run: | - PATH=$GITHUB_WORKSPACE/ocaml-412/_install/bin:$PATH make release - cp dune.exe $GITHUB_WORKSPACE/ocaml-412/_install/bin/dune + PATH=$GITHUB_WORKSPACE/ocaml-414/_install/bin:$PATH make release + cp _boot/dune.exe $GITHUB_WORKSPACE/ocaml-414/_install/bin/dune - name: Configure OCaml working-directory: ocaml-jst run: | - export PATH=$GITHUB_WORKSPACE/ocaml-412/_install/bin:$PATH + export PATH=$GITHUB_WORKSPACE/ocaml-414/_install/bin:$PATH autoconf ./configure \ --prefix=$GITHUB_WORKSPACE/_install \ @@ -106,7 +106,7 @@ jobs: - name: Build, install and test ocaml-jst working-directory: ocaml-jst run: | - export PATH=$GITHUB_WORKSPACE/ocaml-412/_install/bin:$PATH + export PATH=$GITHUB_WORKSPACE/ocaml-414/_install/bin:$PATH make -f Makefile.jst runtest-upstream env: BUILD_OCAMLPARAM: ${{ matrix.ocamlparam }} diff --git a/.github/workflows/menhir.yml b/.github/workflows/menhir.yml new file mode 100644 index 000000000000..8ac2adf8ad26 --- /dev/null +++ b/.github/workflows/menhir.yml @@ -0,0 +1,15 @@ +name: menhir +on: [push, pull_request] +jobs: + menhir: + name: Check Menhir version + runs-on: ubuntu-latest + steps: + - name: Checkout the ocaml-jst repo + uses: actions/checkout@master + with: + path: 'ocaml-jst' + - name: Check Menhir version + shell: bash + run: | + grep --count --max-count=1 --quiet 'MenhirLib.StaticVersion.require_20210419' ocaml-jst/boot/menhir/parser.ml diff --git a/Makefile.common-jst b/Makefile.common-jst index db63bafa22fc..17490a7abe53 100644 --- a/Makefile.common-jst +++ b/Makefile.common-jst @@ -290,7 +290,15 @@ test-one: install_for_test export LIBRARY_PATH=$$(dirname $$(gfortran -print-file-name=libgfortran.a)); \ fi; \ cd _runtest/testsuite && make one $(if $(TEST),TEST="tests/$(TEST)") $(if $(DIR),DIR="tests/$(DIR)")) - + +promote-one: install_for_test + (export OCAMLSRCDIR=$$(pwd)/_runtest; \ + export CAML_LD_LIBRARY_PATH=$$(pwd)/_runtest/lib/ocaml/stublibs; \ + if $$(which gfortran > /dev/null 2>&1); then \ + export LIBRARY_PATH=$$(dirname $$(gfortran -print-file-name=libgfortran.a)); \ + fi; \ + cd _runtest/testsuite && make promote $(if $(TEST),TEST="tests/$(TEST)") $(if $(DIR),DIR="tests/$(DIR)")) + # This target is like a polling version of upstream "make ocamlopt" .PHONY: hacking hacking: _build/_bootinstall diff --git a/asmcomp/cmm_helpers.ml b/asmcomp/cmm_helpers.ml index f0fb7855cac6..a59540d68689 100644 --- a/asmcomp/cmm_helpers.ml +++ b/asmcomp/cmm_helpers.ml @@ -2347,8 +2347,8 @@ let assignment_kind (ptr: Lambda.immediate_or_pointer) (init: Lambda.initialization_or_assignment) = match init, ptr with - | Assignment Alloc_heap, Pointer -> Caml_modify - | Assignment Alloc_local, Pointer -> + | Assignment Modify_heap, Pointer -> Caml_modify + | Assignment Modify_maybe_stack, Pointer -> assert Config.stack_allocation; Caml_modify_local | Heap_initialization, _ -> diff --git a/boot/menhir/parser.ml b/boot/menhir/parser.ml index 48918720fe32..f297c6d24149 100644 --- a/boot/menhir/parser.ml +++ b/boot/menhir/parser.ml @@ -16,7 +16,7 @@ module MenhirBasics = struct | VAL | UNDERSCORE | UIDENT of ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) # 22 "parsing/parser.ml" ) @@ -28,7 +28,7 @@ module MenhirBasics = struct | THEN | STRUCT | STRING of ( -# 821 "parsing/parser.mly" +# 871 "parsing/parser.mly" (string * Location.t * string option) # 34 "parsing/parser.ml" ) @@ -41,12 +41,12 @@ module MenhirBasics = struct | RBRACKET | RBRACE | QUOTED_STRING_ITEM of ( -# 825 "parsing/parser.mly" +# 875 "parsing/parser.mly" (string * Location.t * string * Location.t * string option) # 47 "parsing/parser.ml" ) | QUOTED_STRING_EXPR of ( -# 823 "parsing/parser.mly" +# 873 "parsing/parser.mly" (string * Location.t * string * Location.t * string option) # 52 "parsing/parser.ml" ) @@ -54,7 +54,7 @@ module MenhirBasics = struct | QUESTION | PRIVATE | PREFIXOP of ( -# 807 "parsing/parser.mly" +# 857 "parsing/parser.mly" (string) # 60 "parsing/parser.ml" ) @@ -64,7 +64,7 @@ module MenhirBasics = struct | PERCENT | OR | OPTLABEL of ( -# 800 "parsing/parser.mly" +# 850 "parsing/parser.mly" (string) # 70 "parsing/parser.ml" ) @@ -84,12 +84,12 @@ module MenhirBasics = struct | LPAREN | LOCAL | LIDENT of ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) # 90 "parsing/parser.ml" ) | LETOP of ( -# 763 "parsing/parser.mly" +# 812 "parsing/parser.mly" (string) # 95 "parsing/parser.ml" ) @@ -100,6 +100,7 @@ module MenhirBasics = struct | LBRACKETPERCENT | LBRACKETLESS | LBRACKETGREATER + | LBRACKETCOLON | LBRACKETBAR | LBRACKETATATAT | LBRACKETATAT @@ -109,49 +110,49 @@ module MenhirBasics = struct | LBRACE | LAZY | LABEL of ( -# 768 "parsing/parser.mly" +# 817 "parsing/parser.mly" (string) -# 115 "parsing/parser.ml" +# 116 "parsing/parser.ml" ) | INT of ( -# 767 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * char option) -# 120 "parsing/parser.ml" +# 121 "parsing/parser.ml" ) | INITIALIZER | INHERIT | INFIXOP4 of ( -# 761 "parsing/parser.mly" +# 810 "parsing/parser.mly" (string) -# 127 "parsing/parser.ml" +# 128 "parsing/parser.ml" ) | INFIXOP3 of ( -# 760 "parsing/parser.mly" +# 809 "parsing/parser.mly" (string) -# 132 "parsing/parser.ml" +# 133 "parsing/parser.ml" ) | INFIXOP2 of ( -# 759 "parsing/parser.mly" +# 808 "parsing/parser.mly" (string) -# 137 "parsing/parser.ml" +# 138 "parsing/parser.ml" ) | INFIXOP1 of ( -# 758 "parsing/parser.mly" +# 807 "parsing/parser.mly" (string) -# 142 "parsing/parser.ml" +# 143 "parsing/parser.ml" ) | INFIXOP0 of ( -# 757 "parsing/parser.mly" +# 806 "parsing/parser.mly" (string) -# 147 "parsing/parser.ml" +# 148 "parsing/parser.ml" ) | INCLUDE | IN | IF | HASHOP of ( -# 818 "parsing/parser.mly" +# 868 "parsing/parser.mly" (string) -# 155 "parsing/parser.ml" +# 156 "parsing/parser.ml" ) | HASH | GREATERRBRACKET @@ -163,9 +164,9 @@ module MenhirBasics = struct | FUN | FOR | FLOAT of ( -# 745 "parsing/parser.mly" +# 794 "parsing/parser.mly" (string * char option) -# 169 "parsing/parser.ml" +# 170 "parsing/parser.ml" ) | FALSE | EXTERNAL @@ -177,35 +178,36 @@ module MenhirBasics = struct | ELSE | DOWNTO | DOTOP of ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 183 "parsing/parser.ml" +# 184 "parsing/parser.ml" ) | DOTDOT | DOT | DONE | DOCSTRING of ( -# 842 "parsing/parser.mly" +# 892 "parsing/parser.mly" (Docstrings.docstring) -# 191 "parsing/parser.ml" +# 192 "parsing/parser.ml" ) | DO | CONSTRAINT | COMMENT of ( -# 841 "parsing/parser.mly" +# 891 "parsing/parser.mly" (string * Location.t) -# 198 "parsing/parser.ml" +# 199 "parsing/parser.ml" ) | COMMA + | COLONRBRACKET | COLONGREATER | COLONEQUAL | COLONCOLON | COLON | CLASS | CHAR of ( -# 725 "parsing/parser.mly" +# 773 "parsing/parser.mly" (char) -# 209 "parsing/parser.ml" +# 211 "parsing/parser.ml" ) | BEGIN | BARRBRACKET @@ -216,9 +218,9 @@ module MenhirBasics = struct | ASSERT | AS | ANDOP of ( -# 764 "parsing/parser.mly" +# 813 "parsing/parser.mly" (string) -# 222 "parsing/parser.ml" +# 224 "parsing/parser.ml" ) | AND | AMPERSAND @@ -361,8 +363,12 @@ let mkuplus ~oploc name arg = let local_ext_loc loc = mkloc "extension.local" loc +let mk_attr ~loc name payload = + Builtin_attributes.(register_attr Parser name); + Attr.mk ~loc name payload + let local_attr loc = - Builtin_attributes.mk_internal ~loc (local_ext_loc loc) (PStr []) + mk_attr ~loc (local_ext_loc loc) (PStr []) let local_extension loc = Exp.mk ~loc:Location.none @@ -371,8 +377,7 @@ let local_extension loc = let include_functor_ext_loc loc = mkloc "extension.include_functor" loc let include_functor_attr loc = - Builtin_attributes.mk_internal ~loc:loc (include_functor_ext_loc loc) - (PStr []) + mk_attr ~loc:loc (include_functor_ext_loc loc) (PStr []) let mkexp_stack ~loc ~kwd_loc exp = ghexp ~loc (Pexp_apply(local_extension (make_loc kwd_loc), [Nolabel, exp])) @@ -399,8 +404,7 @@ let wrap_exp_local_if p exp loc = if p then wrap_exp_stack exp (make_loc loc) else exp let curry_attr loc = - Builtin_attributes.mk_internal ~loc:Location.none - (mkloc "extension.curry" loc) (PStr []) + mk_attr ~loc:Location.none (mkloc "extension.curry" loc) (PStr []) let is_curry_attr attr = attr.attr_name.txt = "extension.curry" @@ -418,12 +422,12 @@ let maybe_curry_typ typ loc = let global_loc loc = mkloc "extension.global" loc let global_attr loc = - Builtin_attributes.mk_internal ~loc:loc (global_loc loc) (PStr []) + mk_attr ~loc:loc (global_loc loc) (PStr []) let nonlocal_loc loc = mkloc "extension.nonlocal" loc let nonlocal_attr loc = - Builtin_attributes.mk_internal ~loc:Location.none (nonlocal_loc loc) (PStr []) + mk_attr ~loc:Location.none (nonlocal_loc loc) (PStr []) let mkld_global ld loc = { ld with pld_attributes = global_attr loc :: ld.pld_attributes } @@ -512,6 +516,50 @@ let unclosed opening_name opening_loc closing_name closing_loc = raise(Syntaxerr.Error(Syntaxerr.Unclosed(make_loc opening_loc, opening_name, make_loc closing_loc, closing_name))) +(* Normal mutable arrays and immutable arrays are parsed identically, just with + different delimiters. The parsing is done by the [array_exprs] rule, and the + [Generic_array] module provides (1) a type representing the possible results, + and (2) a function for going from that type to an AST fragment representing + an array. *) +module Generic_array = struct + (** The three possible ways to parse an array (writing [[? ... ?]] for either + [[| ... |]] or [[: ... :]]): *) + type (_, _) t = + | Literal : 'ast list -> ('ast, 'ast_desc) t + (** A plain array literal/pattern, [[? x; y; z ?]] *) + | Opened_literal : open_declaration * + Lexing.position * + Lexing.position * + expression list + -> (expression, expression_desc) t + (** An array literal with a local open, [Module.[? x; y; z ?]] (only valid in + expressions) *) + | Unclosed : (Lexing.position * Lexing.position) * + (Lexing.position * Lexing.position) + -> (_, _) t + (** Parse error: an unclosed array literal, [\[? x; y; z] with no closing + [?\]]. *) + + let to_ast (type ast ast_desc) + (open_ : string) (close : string) + (array : ast list -> ast_desc) + : (ast, ast_desc) t -> ast_desc = function + | Literal elts -> + array elts + | Opened_literal(od, startpos, endpos, elts) -> + (Pexp_open(od, mkexp ~loc:(startpos, endpos) (array elts)) : ast_desc) + | Unclosed(startpos, endpos) -> + unclosed open_ startpos close endpos + + let expression : _ -> _ -> _ -> (expression, expression_desc) t -> _ = to_ast + let pattern : _ -> _ -> _ -> (pattern, pattern_desc) t -> _ = to_ast +end + +let ppat_iarray loc elts = + (Extensions.Immutable_arrays.pat_of + ~loc:(make_loc loc) + (Iapat_immutable_array elts)).ppat_desc + let expecting loc nonterm = raise Syntaxerr.(Error(Expecting(make_loc loc, nonterm))) @@ -584,6 +632,8 @@ let bigarray_untuplify = function { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist | exp -> [exp] +(* Immutable array indexing is a regular operator, so it doesn't need a special + case here *) let builtin_arraylike_name loc _ ~assign paren_kind n = let opname = if assign then "set" else "get" in let opname = if !Clflags.unsafe then "unsafe_" ^ opname else opname in @@ -909,7 +959,7 @@ let mk_directive ~loc name arg = } -# 913 "parsing/parser.ml" +# 963 "parsing/parser.ml" module Tables = struct @@ -919,138 +969,142 @@ module Tables = struct fun _tok -> match _tok with | AMPERAMPER -> - 126 + 128 | AMPERSAND -> - 125 + 127 | AND -> - 124 + 126 | ANDOP _ -> - 123 + 125 | AS -> - 122 + 124 | ASSERT -> - 121 + 123 | BACKQUOTE -> - 120 + 122 | BANG -> - 119 + 121 | BAR -> - 118 + 120 | BARBAR -> - 117 + 119 | BARRBRACKET -> - 116 + 118 | BEGIN -> - 115 + 117 | CHAR _ -> - 114 + 116 | CLASS -> - 113 + 115 | COLON -> - 112 + 114 | COLONCOLON -> - 111 + 113 | COLONEQUAL -> - 110 + 112 | COLONGREATER -> - 109 + 111 + | COLONRBRACKET -> + 110 | COMMA -> - 108 + 109 | COMMENT _ -> - 107 + 108 | CONSTRAINT -> - 106 + 107 | DO -> - 105 + 106 | DOCSTRING _ -> - 104 + 105 | DONE -> - 103 + 104 | DOT -> - 102 + 103 | DOTDOT -> - 101 + 102 | DOTOP _ -> - 100 + 101 | DOWNTO -> - 99 + 100 | ELSE -> - 98 + 99 | END -> - 97 + 98 | EOF -> - 96 + 97 | EOL -> - 95 + 96 | EQUAL -> - 94 + 95 | EXCEPTION -> - 93 + 94 | EXTERNAL -> - 92 + 93 | FALSE -> - 91 + 92 | FLOAT _ -> - 90 + 91 | FOR -> - 89 + 90 | FUN -> - 88 + 89 | FUNCTION -> - 87 + 88 | FUNCTOR -> - 86 + 87 | GLOBAL -> - 85 + 86 | GREATER -> - 84 + 85 | GREATERRBRACE -> - 83 + 84 | GREATERRBRACKET -> - 82 + 83 | HASH -> - 81 + 82 | HASHOP _ -> - 80 + 81 | IF -> - 79 + 80 | IN -> - 78 + 79 | INCLUDE -> - 77 + 78 | INFIXOP0 _ -> - 76 + 77 | INFIXOP1 _ -> - 75 + 76 | INFIXOP2 _ -> - 74 + 75 | INFIXOP3 _ -> - 73 + 74 | INFIXOP4 _ -> - 72 + 73 | INHERIT -> - 71 + 72 | INITIALIZER -> - 70 + 71 | INT _ -> - 69 + 70 | LABEL _ -> - 68 + 69 | LAZY -> - 67 + 68 | LBRACE -> - 66 + 67 | LBRACELESS -> - 65 + 66 | LBRACKET -> - 64 + 65 | LBRACKETAT -> - 63 + 64 | LBRACKETATAT -> - 62 + 63 | LBRACKETATATAT -> - 61 + 62 | LBRACKETBAR -> + 61 + | LBRACKETCOLON -> 60 | LBRACKETGREATER -> 59 @@ -1213,6 +1267,8 @@ module Tables = struct Obj.repr () | COLONGREATER -> Obj.repr () + | COLONRBRACKET -> + Obj.repr () | COMMA -> Obj.repr () | COMMENT _v -> @@ -1311,6 +1367,8 @@ module Tables = struct Obj.repr () | LBRACKETBAR -> Obj.repr () + | LBRACKETCOLON -> + Obj.repr () | LBRACKETGREATER -> Obj.repr () | LBRACKETLESS -> @@ -1431,22 +1489,22 @@ module Tables = struct Obj.repr () and default_reduction = - (16, "\000\000\000\000\000\000\0035\0034\0033\0032\0031\003\002\0030\003/\003.\003-\003,\003+\003*\003)\003(\003'\003&\003%\003$\003#\003\021\003\"\003!\003 \003\031\003\030\003\029\003\001\003\028\003\027\003\026\003\025\003\024\003\023\003\022\003\020\003\019\003\018\003\017\003\016\003\015\003\014\003\r\003\012\003\011\003\n\003\t\003\b\003\007\003\006\003\005\003\004\003\003\000\000\000\000\000,\000\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\158\001\212\001\191\001\209\001\208\001\207\001\213\001\217\000\000\003\159\001\211\001\210\001\192\001\215\001\206\001\205\001\204\001\203\001\202\001\200\001\216\001\214\000\000\000\000\000\000\000\237\000\000\000\000\001\195\000\000\000\000\000\000\001\197\000\000\000\000\000\000\001\199\001\221\001\218\001\201\001\193\001\219\001\220\000\000\003\157\003\156\003\160\000\000\000\000\000\026\001i\000\203\000\000\000\231\000\232\000\000\000\000\000\000\001\243\001\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\153\000\000\003\148\000\000\000\000\003\150\000\000\003\152\000\000\003\149\003\151\000\000\003\143\000\000\003\142\003\138\002c\000\000\003\141\000\000\002d\000\000\000\000\000\000\000\000\000v\000\000\000\025\000\000\000\000\000t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\198\001u\000\000\000\000\000\000\000\000\000\000\000\000\002L\000\000\000\000\000\000\000\000\000\000\000\000\000q\000\000\000\000\000\000\000\000\000\000\002\239\000\000\002\155\002\156\000\000\002\153\002\154\000\000\000\000\000\000\000\000\000\000\001\140\001\139\000\000\002\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\017\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001s\000\000\000\000\001v\001t\001|\000C\002\188\000\000\0014\003r\003q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000s\000\000\000\249\000\000\002\158\002\157\000\000\000\000\000\000\001\225\000\000\000\000\000'\000\000\000\000\000\000\001g\000\000\000\000\001{\000\000\001z\000\000\001j\001y\000\000\001h\000d\000 \000\000\000\000\001\168\000\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\137\000*\000\000\000\000\000!\000\028\000\000\000\000\000\000\000\000\003F\000\000\000\000\000\216\000\000\000\000\000\000\000\"\000\029\000\000\000\018\000\000\000\137\000\000\000\000\000\000\000\019\000\000\000\000\002U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003;\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\000\000\000\000\003>\000\000\000\000\000\000\000\000\000\000\003<\000\000\003D\002q\002_\000\000\000$\000\000\002`\000\000\000\000\001\222\000\000\000\000\000\000\000\000\003s\000\000\003t\000\000\000\000\000#\000\000\000\000\000\000\000%\000\000\000&\000\000\000(\000\000\000\000\000)\002S\002R\000\000\000\000\000\000\000\000\000\000\000\000\000o\000\000\002\244\000r\000u\000p\002\233\003\161\002\234\002\030\002\236\000\000\000\000\002\241\002\152\002\243\000\000\000\000\000\000\002\250\002\247\000\000\000\000\000\000\002\026\002\012\000\000\000\000\000\000\000\000\002\016\000\000\002\011\000\000\002\029\003\000\000\000\000\000\000\000\000\000\001\170\000\000\000\000\002\028\002\242\000}\000\000\000\000\000|\000\000\002\251\002\235\000\000\002\022\000\000\000\000\002\254\000\000\002\253\002\252\000\000\002\018\000\000\000\000\002\014\002\r\002\027\002\019\000\000\000{\000\000\002\249\002\248\000\000\002\246\000\000\002\160\002\159\000\000\000\000\002{\002\245\000\000\000\000\000\000\000\000\001\227\001O\001P\002\162\000\000\002\163\002\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\007\000\000\001\006\001\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\003\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\140\000\000\000\000\000\000\000\000\000\000\001\149\000\000\000\000\000\000\001r\001\156\001q\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002]\000\000\000\000\002^\002O\002N\000\000\001\148\001\147\000\000\000\218\000\000\000\000\001\133\000\000\000\000\001\137\000\000\001\247\001\246\000\000\000\000\001\245\001\244\001\136\001\134\000\000\001\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\194\001w\002\199\002\197\000\000\000\000\000\000\002\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\232\000\000\002\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000\001\003\002(\001\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\003\134\000\000\000\000\003\133\000\000\000\000\000\000\000\000\000\253\000\252\000\000\000\254\000\000\000\000\000\000\002\207\000\000\000\000\000\000\002\176\002\167\000\000\000\000\000\000\000\000\003\162\002\209\002\196\002\195\000\000\000\000\000\183\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\182\000\000\000\000\000\000\002\130\002\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\n\000\000\000\000\002T\000\000\000\000\000\000\001\014\000\000\000\000\000\000\000\000\000\000\001\r\001\t\000\000\001S\000\000\000\000\001R\001\011\001Q\001U\000\000\001T\000\000\000\000\001\012\000\000\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\000\000\001\022\000\000\000\000\001\020\001\026\000\000\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\210\000\209\000\000\0039\003:\000\000\000\000\000\000\000\000\000\000\000\000\001\023\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001\019\001\018\000\000\000\000\000\000\000\000\001\025\000\000\000\000\001\024\000\000\002\025\000\000\000\000\002%\000\000\000\000\002'\000\000\000\000\002#\002\"\002 \002!\000\000\000\000\000\000\001\016\000\000\000\000\001:\000\020\001\028\000\000\000\000\000\000\002\178\002\169\000\000\000\000\002\177\002\168\000\000\000\000\000\000\000\000\002\180\002\171\000\000\000\000\002u\000\000\000\000\002\184\002\175\000\000\000\000\002\182\002\173\002\203\000\000\000\000\000\000\000\000\000\000\002\179\000\000\000\000\000\000\000\000\000\000\002\183\000\000\000\000\000\000\000\000\000\000\002\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002P\000\181\000\000\002\170\000\000\000\000\002\174\000\000\000\000\002\172\000\000\000\138\000\139\000\000\000\000\000\000\000\000\000\154\000\211\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\000\000\000\213\000\214\000\147\000\000\000\146\000\000\000\000\001W\000\000\001X\001V\002W\000\000\000\000\002X\002V\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001&\000\000\000\000\000\184\000\000\001(\001'\000\000\000\000\002\211\002\204\000\000\002\220\000\000\002\221\002\219\000\000\000\000\000\000\000\000\000\000\000h\000j\000g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\\\000i\002[\002\227\000\000\002\229\000\000\002\230\002\228\000\000\000\000\000\000\000\000\000\000\000l\000n\000k\000m\002\226\000\000\000\000\002\206\002\205\000\000\000\000\000\000\002?\000\000\001\241\000\000\000\000\000\000\002~\002>\000\000\002\215\002\214\000\000\000\000\000\000\001x\000\000\002\186\000\000\002\187\002\185\000\000\002\213\002\212\000\000\000\000\000\000\002x\002\202\000\000\002\201\002\200\000\000\002\223\002\222\000\000\002\224\000\144\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\141\000\000\001\127\000\000\000\000\000\000\000w\000\000\000\000\000x\000\000\000\000\000\000\000\000\000\000\000\000\001\162\001\160\001\161\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\133\000\000\000\245\000\243\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\142\000y\000\000\000\000\002=\000\000\000\000\001\027\001\239\000\000\001\001\000\000\000\000\001\000\001\002\001#\000\000\000\199\002\218\000\000\002\217\002\216\000\000\002\225\002\198\000\000\000\000\000\000\000\000\002\189\000\000\002\191\000\000\002\190\000\000\002\165\002\164\000\000\002\166\000\000\000\000\000\000\000\000\001\254\001\248\000\000\001\253\000\000\001\251\000\000\001\252\000\000\001\249\000\000\000\000\001\250\000\000\001\188\000\000\000\000\000\000\001\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0010\003k\000\000\000\000\003j\000\000\000\000\000\000\000\000\000\000\002.\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\000\001\172\000\000\0024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0037\000\000\000\000\002\131\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\190\000\000\000\000\000\000\001\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\155\000\000\000\000\000\000\000\000\001\142\000\000\001\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\002\145\000\000\000\000\000\000\002\143\000\000\000\000\000\000\002\142\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\170\000\000\000\000\000\000\000\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\001\167\000\000\001\166\000\000\000\000\000\000\000\000\000J\000\000\000\000\000\000\002;\000\000\002:\000\000\000\000\000\000\000\000\000K\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000Q\000O\000\000\000T\000\000\000\000\000\000\000\000\000\000\000I\000\000\000\000\000\000\000\000\000\000\000\000\000L\000\000\000S\000R\000\000\000M\000N\000\000\001C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\000\000b\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001,\002\150\002\135\000\000\002\141\002\136\002\148\002\147\002\146\002\144\001=\000\000\002\133\000\000\000\000\000\000\000\000\002\149\000\000\000\000\000\000\000\000\000\000\002L\000\000\000\000\0016\002\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\183\001\179\000\000\000\000\000\000\000\225\000\000\000\000\002B\002L\000\000\000\000\0018\002@\002A\000\000\000\000\000\000\000\000\000\000\001\186\001\182\001\178\000\000\000\000\000\226\000\000\000\000\001\185\001\181\001\177\001\175\002\138\002\134\002\151\001<\002+\002\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\158\000\000\000\000\000\000\003\165\000\000\000\000\003\167\000\000\0008\000\000\000\000\003\173\000\000\003\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\164\000\000\000\000\003\166\000\000\000\000\000\000\0026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001f\000\000\000\000\001d\001b\000\000\0009\000\000\000\000\003\176\000\000\003\175\000\000\000\000\000\000\001`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001e\000\000\000\000\001c\001a\000\000\000\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\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Z\000\000\000\000\000\000\000\000\000\000\000\000\0005\000\000\000\000\000Y\000\000\0003\001\031\000\000\000B\000/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\029\000\000\000X\000W\000\000\000\000\000]\000\\\000\000\000\000\001\229\000\000\0007\000\000\000\000\000\000\0006\000\000\000\000\000\000\000:\000\000\000[\000^\000\000\000<\000=\000\000\001E\000\000\000\000\000\000\000\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*\003n\003e\000\000\000\000\003i\0036\003d\003m\003l\001A\000\000\000\000\003b\000\000\000\000\000\000\000\000\003p\000\000\003f\003c\003o\002*\000\000\000\000\003`\000\000\000\206\003_\000\000\000\000\000\239\000\000\000\000\001@\001?\000\000\001\131\001\130\000\000\000\000\002\255\002\238\000\000\000D\000\000\000\000\000E\000\000\000\000\002\193\002\192\000\000\000\000\000\150\000\000\000\000\0023\000\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\204\000\000\003h\002G\002H\002C\002E\002D\002F\000\000\000\000\000\000\000\205\000\000\000\000\002L\000\000\000\229\000\000\000\000\000\000\000\000\003g\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000\000\001_\001Y\000\000\000\000\001Z\000\031\000\000\000\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003A\000\000\000\000\000\000\000\000\000\000\003B\000\000\000\000\000\000\000\000\000\000\003@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003C\000\000\000\000\001\184\001\180\000\000\001\176\003\136\000\000\002L\000\000\000\228\000\000\000\000\000\000\000\000\002\140\002K\002I\002J\000\000\000\000\000\000\002L\000\000\000\227\000\000\000\000\000\000\000\000\002\139\000\000\001\144\001\143\000\000\000\024\000\000\003\168\000\000\000-\000\000\000\000\000\000\000\000\000\153\000\000\000\233\000\001\000\000\000\000\000\238\000\002\000\000\000\000\000\000\001l\001m\000\003\000\000\000\000\000\000\000\000\001o\001p\001n\000\021\001k\000\022\000\000\001\255\000\000\000\004\000\000\002\000\000\000\000\005\000\000\002\001\000\000\000\000\002\002\000\006\000\000\000\007\000\000\002\003\000\000\000\b\000\000\002\004\000\000\000\t\000\000\002\005\000\000\000\n\000\000\002\006\000\000\000\011\000\000\002\007\000\000\000\000\002\b\000\012\000\000\000\000\002\t\000\r\000\000\000\000\000\000\000\000\000\000\003{\003v\003w\003z\003x\000\000\003\127\000\014\000\000\003~\000\000\001G\000\000\000\000\003|\000\000\003}\000\000\000\000\000\000\000\000\001K\001L\000\000\000\000\001J\001I\000\015\000\000\000\000\000\000\003\155\000\000\003\154") + (16, "\000\000\000\000\000\000\003?\003>\003=\003<\003;\003\012\003:\0039\0038\0037\0036\0035\0034\0033\0032\0031\0030\003/\003.\003-\003\031\003,\003+\003*\003)\003(\003'\003\011\003&\003%\003$\003#\003\"\003!\003 \003\030\003\029\003\028\003\027\003\026\003\025\003\024\003\023\003\022\003\021\003\020\003\019\003\018\003\017\003\016\003\015\003\014\003\r\000\000\000\000\000,\000\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\168\001\209\001\188\001\206\001\205\001\204\001\210\001\214\000\000\003\169\001\208\001\207\001\189\001\212\001\203\001\202\001\201\001\200\001\199\001\197\001\213\001\211\000\000\000\000\000\000\000\234\000\000\000\000\001\192\000\000\000\000\000\000\001\194\000\000\000\000\000\000\001\196\001\218\001\215\001\198\001\190\001\216\001\217\000\000\003\167\003\166\003\170\000\000\000\000\000\026\001f\000\200\000\000\000\228\000\229\000\000\000\000\000\000\001\240\001\239\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\163\000\000\003\158\000\000\000\000\003\160\000\000\003\162\000\000\003\159\003\161\000\000\003\153\000\000\003\152\003\148\002b\000\000\003\151\000\000\002c\000\000\000\000\000\000\000\000\000s\000\000\000\025\000\000\000\000\000q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\195\001r\000\000\000\000\000\000\000\000\000\000\000\000\002I\000\000\000\000\000\000\000\000\000\000\000\000\000n\000\000\000\000\000\000\000\000\000\000\002\249\000\000\002\154\002\155\000\000\002\152\002\153\000\000\000\000\000\000\000\000\000\000\001\137\001\136\000\000\002\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\017\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001p\000\000\000\000\001s\001q\001y\000D\002\190\000\000\0011\003|\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\000p\000\000\000\246\000\000\002\157\002\156\000\000\000\000\000\000\001\222\000\000\000\000\000'\000\000\000\000\000\000\001d\000\000\000\000\001x\000\000\001w\000\000\001g\001v\000\000\001e\000e\000 \000\000\000\000\001\165\000\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000*\000\000\000\000\000!\000\028\000\000\000\000\000\000\000\000\003P\000\000\000\000\000\213\000\000\000\000\000\000\000\"\000\029\000\000\000\018\000\000\000\134\000\000\000\000\000\000\000\019\000\000\000\000\002T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003E\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003G\000\000\000\000\000\000\000\000\000\000\003H\000\000\000\000\000\000\000\000\000\000\003F\000\000\003N\002p\002^\000\000\000$\000\000\002_\000\000\000\000\001\219\000\000\000\000\000\000\000\000\003}\000\000\003~\000\000\000\000\000#\000\000\000\000\000\000\000%\000\000\000&\000\000\000(\000\000\000\000\000)\002R\002Q\000\000\000\000\000\000\000\000\000\000\000\000\000l\000\000\002\254\000o\000r\000m\002\243\003\171\002\244\002\027\002\246\000\000\000\000\002\251\002\151\002\253\000\000\000\000\000\000\003\004\003\001\000\000\000\000\000\000\002\023\002\t\000\000\000\000\000\000\000\000\002\r\000\000\002\b\000\000\002\026\003\n\000\000\000\000\000\000\000\000\001\167\000\000\000\000\002\025\002\252\000z\000\000\000\000\000y\000\000\003\005\002\245\000\000\002\019\000\000\000\000\003\b\000\000\003\007\003\006\000\000\002\015\000\000\000\000\002\011\002\n\002\024\002\016\000\000\000x\000\000\003\003\003\002\000\000\003\000\000\000\002\159\002\158\000\000\000\000\002z\002\255\000\000\000\000\000\000\000\000\001\224\001L\001M\002\162\000\000\002\161\002\160\002\165\000\000\002\164\002\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\004\000\000\001\003\001\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\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\147\000\000\000\000\000\000\000\000\000\000\000\000\003\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\150\000\000\000\000\000\000\000\000\000\000\001\146\000\000\000\000\000\000\001o\001\153\001n\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\\\000\000\000\000\002]\002N\002M\000\000\001\145\001\144\000\000\000\215\000\000\000\000\001\130\000\000\000\000\001\134\000\000\001\244\001\243\000\000\000\000\001\242\001\241\001\133\001\131\000\000\001\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\196\001t\002\201\002\199\000\000\000\000\000\000\002\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\000\000\002\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\001\000\002%\001\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\000\000\003\144\000\000\000\000\003\143\000\000\000\000\000\000\000\000\000\250\000\249\000\000\000\251\000\000\000\000\000\000\002\209\000\000\000\000\000\000\002\178\002\169\000\000\000\000\000\000\000\000\003\172\002\211\002\198\002\197\000\000\000\000\000\180\000\000\000\000\000\000\000\000\000\000\000\194\000\000\000\000\000\000\000\179\000\000\000\000\000\000\002\129\002\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\007\000\000\000\000\002S\000\000\000\000\000\000\001\011\000\000\000\000\000\000\000\000\000\000\001\n\001\006\000\000\001P\000\000\000\000\001O\001\b\001N\001R\000\000\001Q\000\000\000\000\001\t\000\000\000\000\000\000\000\000\000\000\001\012\000\000\000\000\000\000\000\000\000\000\001\019\000\000\000\000\001\017\001\023\000\000\000\000\000\000\000\000\000\000\000\000\003B\000\000\000\000\000\207\000\206\000\000\003C\003D\000\000\000\000\000\000\000\000\000\000\000\000\001\020\000\000\000\000\000\000\000\000\001\018\000\000\000\000\001\016\001\015\000\000\000\000\000\000\000\000\001\022\000\000\000\000\001\021\000\000\002\022\000\000\000\000\002\"\000\000\000\000\002$\000\000\000\000\002 \002\031\002\029\002\030\000\000\000\000\000\000\001\r\000\000\000\000\0017\000\020\001\025\000\000\000\000\000\000\002\180\002\171\000\000\000\000\002\179\002\170\000\000\000\000\000\000\000\000\002\182\002\173\000\000\000\000\002t\000\000\000\000\002\186\002\177\000\000\000\000\002\184\002\175\002\205\000\000\000\000\000\000\000\000\000\000\002\181\000\000\000\000\000\000\000\000\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002P\002O\000\178\000\000\002\172\000\000\000\000\002\176\000\000\000\000\002\174\000\000\000\135\000\136\000\000\000\000\000\000\000\000\000\151\000\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\000\000\210\000\211\000\144\000\000\000\143\000\000\000\000\001T\000\000\001U\001S\002V\000\000\000\000\002W\002U\000\000\000\000\000\000\000\000\000\000\001\"\000\000\000\000\001#\000\000\000\000\000\181\000\000\001%\001$\000\000\000\000\002\213\002\206\000\000\002\228\000\000\002\229\002\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000h\002[\002Z\000\000\002\237\002L\002K\000\000\002\222\000\000\002\223\002\221\000\000\000\000\002\236\000\000\002\239\000\000\002\240\002\238\000\000\000\000\002\235\000\000\000\000\002\208\002\207\000\000\000\000\000\000\002<\000\000\001\238\000\000\000\000\000\000\002}\002;\000\000\002\217\002\216\000\000\000\000\000\000\001u\000\000\002\188\000\000\002\189\002\187\000\000\002\215\002\214\000\000\000\000\000\000\002w\002\204\000\000\002\203\002\202\000\000\002\231\002\230\000\000\000\000\002\232\002\220\000\000\002\219\002\218\000\000\000\000\002\233\000\141\000\000\000\000\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\138\000\000\001|\000\000\000\000\000\000\000t\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\000\000\000\001\159\001\157\001\158\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\130\000\000\000\242\000\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\000\000\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\000v\000\000\000\000\002:\000\000\000\000\001\024\001\236\000\000\000\254\000\000\000\000\000\253\000\255\001 \000\000\000\196\002\226\000\000\002\225\002\224\000\000\000\000\002\234\002\200\000\000\000\000\000\000\000\000\002\191\000\000\002\193\000\000\002\192\000\000\002\167\002\166\000\000\002\168\000\000\000\000\000\000\000\000\001\251\001\245\000\000\001\250\000\000\001\248\000\000\001\249\000\000\001\246\000\000\000\000\001\247\000\000\001\185\000\000\000\000\000\000\001\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\003u\000\000\000\000\003t\000\000\000\000\000\000\000\000\000\000\002+\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\000\001\169\000\000\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003A\000\000\000\000\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\187\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\152\000\000\000\000\000\000\000\000\001\139\000\000\001\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001/\002\144\000\000\000\000\000\000\002\142\000\000\000\000\000\000\002\141\000\000\001~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\180\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\000\000\000\001\164\000\000\001\163\000\000\000\000\000\000\000\000\000K\000\000\000\000\000\000\0028\000\000\0027\000\000\000\000\000\000\000\000\000L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Q\000\000\000\000\000\000\000R\000P\000\000\000U\000\000\000\000\000\000\000\000\000\000\000J\000\000\000\000\000\000\000\000\000\000\000\000\000M\000\000\000T\000S\000\000\000N\000O\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001+\000d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000\000\000c\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\002\149\002\134\000\000\002\140\002\135\002\147\002\146\002\145\002\143\001:\000\000\002\132\000\000\000\000\000\000\000\000\002\148\000\000\000\000\000\000\000\000\000\000\002I\000\000\000\000\0013\002\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\180\001\176\000\000\000\000\000\000\000\222\000\000\000\000\002?\002I\000\000\000\000\0015\002=\002>\000\000\000\000\000\000\000\000\000\000\001\183\001\179\001\175\000\000\000\000\000\223\000\000\000\000\001\182\001\178\001\174\001\172\002\137\002\133\002\150\0019\002(\002\131\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\155\000\000\000\000\000\000\003\175\000\000\000\000\003\177\000\000\0009\000\000\000\000\003\183\000\000\003\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\174\000\000\000\000\003\176\000\000\000\000\000\000\0023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001c\000\000\000\000\001a\001_\000\000\000:\000\000\000\000\003\186\000\000\003\185\000\000\000\000\000\000\001]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\000\000\000\000\001`\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\001\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000[\000\000\000\000\000\000\000\000\000\000\000\000\0006\000\000\000\000\000Z\000\000\0004\001\028\000\000\000C\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\026\000\000\000Y\000X\000\000\000\000\000^\000]\000\000\000\000\001\226\000\000\0008\000\000\000\000\000\000\0007\000\000\000\000\000\000\000;\000\000\000\\\000_\000\000\000=\000>\000\000\001B\000\000\000\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001'\003x\003o\000\000\000\000\003s\003@\003n\003w\003v\001>\000\000\000\000\003l\000\000\000\000\000\000\000\000\003z\000\000\003p\003m\003y\002'\000\000\000\000\003j\000-\003i\000\000\000\000\000\203\000\000\000\236\000\000\000\000\001=\001<\000\000\001\128\001\127\000\000\000\000\003\t\002\248\000\000\000E\000\000\000\000\000F\000\000\000\000\002\195\002\194\000\000\000\000\000\147\000\000\000\000\0020\000\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\201\000\000\003r\002D\002E\002@\002B\002A\002C\000\000\000\000\000\000\000\202\000\000\000\000\002I\000\000\000\226\000\000\000\000\000\000\000\000\003q\000\000\000\199\000\000\000\000\000\000\000\000\000\000\000\000\001\\\001V\000\000\000\000\001W\000\031\000\000\000\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003K\000\000\000\000\000\000\000\000\000\000\003L\000\000\000\000\000\000\000\000\000\000\003J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\001\181\001\177\000\000\001\173\003\146\000\000\002I\000\000\000\225\000\000\000\000\000\000\000\000\002\139\002H\002F\002G\000\000\000\000\000\000\002I\000\000\000\224\000\000\000\000\000\000\000\000\002\138\000\000\001\141\001\140\000\000\000\024\000\000\003\178\000\000\000.\000\000\000\000\000\000\000\000\000\150\000\000\000\230\000\001\000\000\000\000\000\235\000\002\000\000\000\000\000\000\001i\001j\000\003\000\000\000\000\000\000\000\000\001l\001m\001k\000\021\001h\000\022\000\000\001\252\000\000\000\004\000\000\001\253\000\000\000\005\000\000\001\254\000\000\000\000\001\255\000\006\000\000\000\007\000\000\002\000\000\000\000\b\000\000\002\001\000\000\000\t\000\000\002\002\000\000\000\n\000\000\002\003\000\000\000\011\000\000\002\004\000\000\000\000\002\005\000\012\000\000\000\000\002\006\000\r\000\000\000\000\000\000\000\000\000\000\003\133\003\128\003\129\003\132\003\130\000\000\003\137\000\014\000\000\003\136\000\000\001D\000\000\000\000\003\134\000\000\003\135\000\000\000\000\000\000\000\000\001H\001I\000\000\000\000\001G\001F\000\015\000\000\000\000\000\000\003\165\000\000\003\164") and error = - (127, "'\225 \197\138V\252\204\244\005\001\252\128\000q\192F\194\000\139\132\141\248\147\232\002\003\224\000\000c\129\247\217\016 \191\198\208\000L\028\015q\197\129A\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235f\245\155W\252\205\255%C\252B \243\192\251\236\136\016_\227h\000&\014\007\184\226\192\160\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X$o\196\159@\016\031\000\000\003\028\015\190\200\129\005\2546\128\002`\224{\142,\n\r\t\248H\181b\149\1913=\001@\127\000\000\251\"\004\023\248\218\000\t\131\129\2388\176(4'\225\"\213\138V\252\204\244\005\001\252\000\000\241\192\000\000\000\000\000\000\000\000\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\001&\b\018\128\b\001\000\000\000\000\000\b\0000\000\002H\016%\000\016\002\000\000\000\000\000\016\000`\000\004\144 J\000\000\004\000\000\000\000\000 \000\192\000\t \000\148\000\000\b\000\000\000\000\000@\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\132\128\"\130\b\016\004\134\000\004@\014\192 @\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000\138\000 @\018\024\000\017\0003\000\129\000#\239\178 A\127\141\160\000\1528\030\227\139\002\131B~\018-X\165o\204\207@P\031\192\000\015\028\004l \b\184H\223\137>\128 >\000\000\0068\b\216@\017`\145\191\018}\000@|\000\000\012p\017\176\128\"\193#~$z\000\128\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002B\000\136\004\128\160\145\200\000\000`\000\000c\002\016\000\002\001\000\005\002\020\012\000\000\001\000\128\000\004 \000\004\000\000\n\004(\024\000\000\002\001\000\000\b@\000\b\000\000\020\b@0\000\000\004\002\000\000\000d \b\016\000J\t\022\128\b\006\128\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016d1\b\252\002\203)\022\159\025\006\193\000d\178\224\000\002\000\000\000\000\000\001\000\000\b\000\000\000\000A\128\000\000 \000\000\000\128\000\000\000\000\000\000\000\003\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\016\016\000\004\020\016\000\000\000\128\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\002\004\000\128\000\000\128\130\000\000\004\000\000\000\000\000\004\b\001\000\000\001\001\000\000\000\b\000\000\000\000\005?\t\006,R\183\230o\160(\015\226\000\003\142\n~\018\012X\165o\204\207@P\031\196\000\007\028\020\252$X\177J\223\153\158\128\160?\152\000\0148\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\128\128\000\128\130\000\000\004\000\000\000\002\000\004\b\001\001\000\001\001\004\000\000\b\000\000\000\000\000\b\016\002\000\000\002\002\b\000\000\016\000\000\000\000\000\016 \004\000\000\004\004\000\000\000 \000\000\000\000\000\160@\b\000\000\b\b\000\000\000@\000\000\000\000\b\216@\017`\145\191\018}\000@|\000\000\012p\017\176\128\"\193#~$z\000\128\248\000\000\024\224\001\000\000\000@\000\016\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000 \002\000\000\000\000\000\000\000\000\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\127[\191\236\223\191\239\255\249:\127\230!\003\158@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\176\128\"\225#~$\250\000\128\248\000\000\024\224#a\000E\130F\252I\244\001\001\240\000\0001\192F\194\000\139\004\141\248\145\232\002\003\224\000\000c\130\141\134!\031\137[\245#\211\230'\200 \012\215\\\t\bB \018\002\130G \000\001\128\000\001\140\0026\016\004X$o\196\143@\016\031\000\000\003\156\004l \b\176H\223\137\030\128 >\000\000\00685on\245\254\151\213\243\251\255\182\031\190\219\255\231\145\176\128\"\193#~$z\000\128\248\000\000\024\224\003!\000@\128\002PH\180\000@0\000\000 \128\006B\000\129\000\004\160\145h\000\128h\000\000Q\000\012\132\t\002\000\tA\"\208\001\000\208\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\001\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\024\000\003\128\128\003\139\132\000\002\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\014\002\000\014.\016\000\b\000\000\000\000\016\000\192\000\156\004\000\028\\ \000\016\000\000\000\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000qp\128\000@\000\000\000\000\128\006\000\000\224 \000\226\225\000\000\128\000\000\000\005\000\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\004\000\000\000\000\000\000 \000\000\016 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000qp\128\000@\000\000\000\000\128\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\012H\003\184\000\129\144Hp0D\128\236\002\196\"\192`\000\014\002\000\014.\016\000\b\000\000\000\000\000\000\192\000\024\000\000\020\\ \000\016\000\000\000\000\000b@\029\192\004\012\130C\129\130$\007`\022!\022\003\000\000p\016\000qp\128\000@\000\000\000\000\000\006\000\000\192\000\000\162\225\000\000\128\000\000\000\000\003\018\000\238\000 d\018\028\012\017 ;\000\177\b\182$\005\220\000@\200$8\024\"@v\001b\017`0\000\006\000\000\005\023\b\000\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\000b\192]\192\004\012\138C\129\130$\007`\022!\022\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006,\005\220\000@\200\1648\024\"@v\001b\017`0\000\006\000\000\005\023\b\000\004\000\000\000\000\000\024\176\023p\001\003\"\144\224`\137\001\216\005\136E\177 \014\224\002\006A!\192\193\018\003\176\011\016\139\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000`\000\000qp\128\000@\000\000\000\000\000\006\000\000\224 \226\225\000\000\128\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000 \000\000\000\000\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\003\000\000p\016\000qp\128\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\004\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\003\184\000\129\144Hp0D\128\236\002\196\"\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\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\002\000\000\000\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\024\000\003\128\128\003\139\132\000\002\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\192\000\028\004\000\028\\ \000\016\000\000\000\000\000\001\128\0000\000\000(\184@\000 \000\000\000\000\000\196\128;\128\b\025\004\135\003\004H\014\192,B-\137\000w\000\0162\t\014\006\b\144\029\128X\132X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\014\002\000\014.\016\000\b\000\000\000\000\000\000\000\002\000\000\000\000\000@\000\000\000\000\002\000\000\001\128\0000\000\000(\184@\000 \000\000\000\000\000\003\000\000p\016\016qp\128\000@\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\004\000\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000`\000\014\002\000\014.\016\000\b\000\000\000\000\000\000\192\000\024\000\000\020\\ \000\016\000\000\000\000\000b@\029\192\004\012\130C\129\130$\007`\022!\022\196\128;\128\b\025\004\135\003\004H\014\192,B,\000\000\000\000\000\000\000\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\003\128\128\003\139\132\000\002\000\000\000\000\000\0000\000\006\000\000\005\023\b\000\004\000\000\000\000\000\024\144\007p\001\003 \144\224`\137\001\216\005\136E\177 \014\224\002\006A!\192\193\018\003\176\011\016\139\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\006\000\000\224 \000\226\225\000\000\128\000\000\000\000\000\012\000\001\128\000\001E\194\000\001\000\000\000\000\000\006$\001\220\000@\200$8\024\"@v\001b\017lH\003\184\000\129\144Hp0D\128\236\002\196\"\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001 \014\224\002\006A!\192\193\018\003\176\011\016\139\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\007\023\b\000\004\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\001\000\000\000@\000\002\000\000\000\000\128\001\128\0008\b\0008\184@\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\224 \000\226\225\000\000\128\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000 \000\000\000\b\016\024\000\003\128\128\003\139\132\000\002\000\000\000\000\000\000\000\000 \000\000\000\000\016\000\000\128\000\000\000\"@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\002\000\000\000\000\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\001\000\000\b\000\000\000\002\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\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\016\0000\000\007\001\000\007\023\b\000\004\000\000\000\000\b\000\000\000@\000\000\000\000\000\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\016\000\000\000\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\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\001\000\000\000\002\000\000\000\001\000\000\"\000\000\000\000\000\000\000\000\004\000\000\000\000\012\132\001\002\000\tA\"\208\001\000\208\000\000\130\000\025\b\002\006\000\018\130M \002\001\128\000\001\004\0002\016\004\b\000%\004\154@\004\003\000\000\002\b\000d \b\016\000J\t\020\128\b\006\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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&R6\161 \020\160\147X\004\128e\b\027U@\000\004\000\002\000\b\000\000\016\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\202F\212$\002\148\018o\000\144\r\160\131j\168\000\128\000\000\000\000 \004P\000\000\000\000\000\000\000\131!\b@\128\002PH\180\000@4\000\001 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\b\002\006\000\018\130M\160\002\001\160\000\001\004\0002\016\004\b\000%\004\155@\004\003@\000\002\b\000d \b\016\000J\t\022\128\b\006\128\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\027\000\000\b\000\001\000\002\000\002\128\t\138 \006B\000\129\000\004\160\145h\000\128h\000\000A\002@\000l\000\000 \000\004\000\b\000\n\000&(\132\025\b\002\004\000\018\130E\160\002\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\003`\000\001\000\000 \000@\000P\0011D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000I\144\141\160@\005($\218\001 \027@\004\213P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002L\132m\002\000)A&\208\t\000\218\000&\170\132\029\012B?\000\178\202E\167\198A\176@\025,\176\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\002PH\164\000@0\000\000 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000@\000\002\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\004\000\000\000\000\000\128\000\000\000\000\004\193\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\012\132\001\002\000\tA\"\208\001\000\208\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\000\128\000\016\000 \000(\000\152\162\016`\000\014\002\000\014.\016\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\004\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\012\132\001\002\000\tA\"\208\001\000\208\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\000\128\000\016\000 \000(\000\152\162\016\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\016\000\000\000\000\000\144\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\144\129 @\001($Z\000 \026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\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\b\000\001 \000\000\000\000\016\000\000\000\000\000\144\162\016d H\016\000J\t\022\128\b\006\128\000\005\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\001\000\000\000\000\000\t\002!\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000\002\012\000\004\000\000\000@\000\000\000\000\000\000\000\000\004\000\000\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025H\002\132\128\018\130M`\018\001\144\000M\021\128\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000qp\128\000@\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\004\000\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\000\016\000\000\000\000\000\000\128\000\000\000\000\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\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\001\000\000\000\000\000\000\000\000\000@\000\000\000\b\216@\017`\145\191\018=\000@|\000\000\012p\001\144\130 d\t8$\218\000 \026\000\000\016@\001\002\000@@\000@A\000\000\002\000\000\000\001\000\002\004\000\128\128\000\128\130\000\000\004\000\000\000\000\000\004\b\001\000\000\001\001\004\000\000\b\000\000\000\000\000\b\016\002\000\000\002\002\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\192\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\128\000\002\000\128\128\000 \160\128\000\000\004\000\000\000\000\000\004\001\001\000\000AA\000\000\000\b\000\000\000\000\000\000\000\000\000\000\002\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\000@\016\016\000\004\020\016\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b\024\004\135\000\004@\014\192\004@\b\001\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\012\000\000\146\000\t@\000\000\128\000\000\000\000\004\000\b\000\000\000\000\000\128\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\002\000\014.\016\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\0008\b\0008\184@\000 \000\000\000\000\000\196\128*\128\b\024\004\135\000\004@\014\192\004@(\006\000\000\224 \000\226\225\000\000\128\000\000\000\000\003\018\000\170\000 `\018\028\000\017\000;\000\145\000\166$\001T\000@\192$8\000\"\000v\001\"\000@0\000\007\001\000\007\023\b\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\000\000\000\000\192\000\028\004\000\028\\ \000\016\000\000\000\000\000b@\021@\004\012\002C\128\002 \007`\018 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\016\000\000\016\004\004\000\001\005\004\000\000\000 \000\000\000\000\024\144\005P\001\003\000\144\224\000\136\001\216\000\136\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\001\000\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\001\137\000U\000\0160\137\014\000\b\128\029\132\012\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\004\020\016\000\000\000\128\000\000\000\000b@\021@\004\012\002C\128\002 \007`\002 \004\001\000@@\000\016P@\000\000\002\000\000\000\000\001\137\000U\000\0160\t\014\000\b\128\029\128\b\128\016\000\000\000\000\000\000\000\000\000\000\000\b\b\b\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\129\132Hp\000D\000\236 D\000\128 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000b@\021@\004\012\"C\128\002 \007a\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000U\000\0160\t\014\000\b\128\029\128\b\128\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\002\000\000\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\128\000\016\000\000\016\000\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\000B\000\000\000\000\000\000\000\000\000\000\016 \004\000\000\004\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001 \n\160\002\006\017!\192\001\144\003\176\0010\002\002\129\004 \000\000 \000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000\128\002\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\004\004\000\001\005\004\000\000\000 \000\000\000\000\024\000\001\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\018\000\170\000 a\018\028\000\025\000;\b\019\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\016\000 \000\000\000\000\000\004l \b\176H\223\137\030\128 >\000\000\0068\b\216@\145`\145\191\018=\000@|\000\000\012p\000\000\000\000\000\000\b\000\000\000\b\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000\016\002\000\000\000\000F\194\000\139\004\141\248\145\232\002\003\224\000\000c\128\004\132\001\016\t\001A#\144\000\000\192\000\000\198\006\000\000\136\000\000\000\000\000\000\006\000\016P$\000\0026\016\004\\$o\196\159@\016\031\004\000\003\028\004l \b\176H\223\137>\128 >\b\000\0068\b\216@\017`\145\191\018=\000@|\016\000\012p\000\144\128\"! ($\242\000\000\024\000\000\024\192\001!\000D\002@PI\228\000\0000\000\0001\128\002B\000\136\004\128\160\145\200\000\000`\000\000c\000\004\132\001\016\t\001A#\144\000\000\192\000\000\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000j\222\221\235\253/\170\231\247\255l?}\183\255\223\001\000\000\000\000\000P\b\224\000\000\000\000\000\000\001F\195\016\143\196\173\250\145\233\243\019\228\016\006k\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\027\bB,\0187\226G\160\b\015\128\000\001\142\n6\016\132X$o\196\143@\016\031\000\000\003\028\016 @\b\b\000\b\b \000\000@\000\000\000\000\000@\128\016\000\000\016\016@\000\000\128\000\000\000\000\000\129\000 \000\000 \000\000\001\000\000\000\000\000\000\000\000\000\000\000@\001\000\000\000\000\000\000\128\001\002\000\128\128\000 \160\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000@\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020l!\b\176H\223\137\030\128 >\000\000\0068(\216B\017`\145\191\018=\000@|\000\000\012pA\144\132 @\001($Z\000 \024\000\000\016@\000\000\000\000\000\000\000\001\000\000\000\002\000\t\130 \006\000\000\224 \000\226\225\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\000\001\027\b\002,\0187\226G\160\b\015\128\000\001\142\0026\016\004\\$o\196\159@\016\031\000\000\003\028\004l \b\176H\223\137>\128 >\000\000\0068\b\216@\017`\145\191\018=\000@|\000\000\012p\001\144\128 `\001($\218\000 \026\000\000\017@\003!\000@\128\002PI\180\000@4\000\000\"\128\006B\000\129\000\004\160\145h\000\128h\000\000E\000\012\132\001\002\000\tA\"\208\001\000\208\000\000\130\000\128\000\000\000\000@\000\b\000\000\000\000\000H\017\0026\016\004X$o\196\143@\016\031\000\000\003\028\000e \n\026\000J\t5\128\b\006\000\000\004\016\000\202@\020$\000\148\018k\000\016\012\000\000\b \001\148\128(H\001($V\000 \024\000\000\016@\002\000\000\000\000\000P\000\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\132\001\002\000\t\193\"\208\001\000\208\000\000\130\000\025\b\002\004\000\018\130E\160\002\001\160\000\001\004\000\000\000\128\000\000\000\000\016\000\000\000 \000\152\"\000`\000\014\002\000\014.\016\000\b\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\128\000\000\001\128\0008\b\0008\184@\000 \000\000\000\000\000\000\000\b\000\000\000\000\001\000\000\000\002\000\000\000\000\000\000\016\000\000\000\000\002\000\000\000\004\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\000\000\000\000\000\000@\000\000\000\000\000\000\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\134!\031\128Y\229\"\211\227 \216 \012\150X\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000e \n\018\001J\t\021\128\b\006\000\000\020\016\b\216@\017`\145\191\018=\000@|\000\000\012p\001\144\128 `\001($\218\000 \026\000\000\016@\003!\000@\128\002PI\180\000@4\000\000 \128\006B\000\129\000\004\160\145h\000\128h\000\000A\000\000\000\000\000\000\000\000\004\000\000\000\b\000$\b\129\027\b\002,\0187\226G\160\b\015\128\000\001\142\000\018\016\004D$\005\004\158@\000\003\000\000\003\024\000$ \b\128H\n\t<\128\000\006\000\000\0060\000H@\017\000\144\020\0189\000\000\012\000\000\012`jJ]\193\244\015\130\195\129\255l'}\183\231\015\001!\000D\002@PH\228\000\0000\000\0001\129\171{w\175\244\190\171\159\223\253\176\253\246\223\255|\000\000\000\000\000\001\000\002\128\000\000\000\000\000\000\001\027\b\002,\0187\226G\160\b\015\128\000\001\142\0026\016\004X$o\196\143@\016\031\000\000\003\028\026\183\183z\255K\234\185\253\255\219\015\223m\255\243\192\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\006\000\000\224 \000\226\225\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\200\000\000\000\000\b\000\000\000\016\000\000\000\b0\000\007\001\000\007\023\b\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\006@\000\000\000\000@\000\000\000\128\001\000\000\001\128\0008\b\0008\184@\000 \000\000\000\000\000\128\000\025\000\000\000\000\001\000\000\000\002\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000H@\017\000\144\020\0189\000\000\012\000\000\012`j\222\221\235\253/\170\231\247\255l?}\183\255\223\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\001@\002\128\000\000\000\000\000\000\001\027\b\002,\0187\226G\160\b\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jJ]\193\244\015\130\195\129\255,'x\183\231\015#a\000E\130F\252H\244\001\001\240\000\0001\193\171{w\175\244\190\171\159\223\253\176\253\246\223\255?RR\238\015\160|\022\028\015\251a;\237\1918x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004#a\000E\130F\252H\244\001\001\240\000\0001\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003RR\238\015\160|\022\028\015\249a;\197\1918y\027\b\002,\0187\226G\160\b\015\128\000\001\142\rIK\184>\129\240Xp?\229\132\239\022\252\225\228l \b\176H\223\137\030\128 >\000\000\00685%.\224\250\007\193a\192\255\150\019\188[\243\135\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\189\187\215\250_U\207\239\254\216~\251o\255\159\169)w\007\208>\011\014\007\253\176\157\246\223\156<\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\127[\188~\165\255\220\255\127\245\159\239\022\255\253\239\190\200\129\005\2546\128\002`\224{\142,\n\r\b\216@\017`\145\191\018=\000@|\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F\194\000\139\004\141\248\145\232\002\003\224\000\000c\131RR\238\015\160|\022\028\015\249a;\197\1918y\027\b\002,\0187\226G\160\b\015\128\000\001\142\rIK\184>\129\240Xp?\229\132\239\022\252\225\228l \b\176H\223\137\030\128 >\000\000\00685%.\224\250\007\193a\192\255\150\019\188[\243\135\145\176\128\"\193#~$z\000\128\248\000\000\024\224\212\148\187\131\232\031\005\135\003\254XN\241o\206\030F\194\000\139\004\141\248\145\232\002\003\224\000\000c\131RR\238\015\160|\022\028\015\249a;\197\1918y\027\b\002,\0187\226G\160\b\015\128\000\001\142\rIK\184>\129\240Xp?\229\132\239\022\252\225\228l \b\176H\223\137\030\128 >\000\000\00685%.\224\250\007\193a\192\255\150\019\188[\243\135\145\176\128\"\193#~$z\000\128\248\000\000\024\224\212\148\187\131\232\031\005\135\003\254XN\241o\206\030F\194\000\139\004\141\248\145\232\002\003\224\000\000c\131RR\238\015\160|\022\028\015\249a;\197\1918y\027\b\002,\0187\226G\160\b\015\128\000\001\142\rIK\184>\129\240Xp?\229\132\239\022\252\225\228l \b\176H\223\137\030\128 >\000\000\00685%.\224\250\007\193a\192\255\150\019\188[\243\135\145\176\128\"\193#~$z\000\128\248\000\000\024\224\212\148\187\131\232\031\005\135\003\254XN\241o\206\030F\194\000\139\004\141\248\145\232\002\003\224\000\000c\131RR\238\015\160|\022\028\015\249a;\197\1918y\027\b\002,\0187\226G\160\b\015\128\000\001\142\rIK\184>\129\240Xp?\229\132\239\022\252\225\228l \b\176H\223\137\030\128 >\000\000\00685%.\224\250\007\193a\192\255\150\019\188[\243\135\145\176\128\"\193#~$z\000\128\248\000\000\024\224\212\148\187\131\232\031\005\135\003\254XN\241o\206\030F\194\000\139\004\141\248\145\232\002\003\224\000\000c\131RR\238\015\160|\022\028\015\249a;\197\1918y\027\b\002,\0187\226G\160\b\015\128\000\001\142\rIK\184>\129\240Xp?\229\132\239\022\252\225\228l \b\176H\223\137\030\128 >\000\000\00685%.\224\250\007\193a\192\255\150\019\188[\243\135\145\176\128\"\193#~$z\000\128\248\000\000\024\224\212\148\187\131\232\031\005\135\003\254XN\241o\206\030\006B\000\129\000\004\224\147h\000\128`\000\000A\000\012\132\001\002\000\t\193\"\208\001\000\192\000\000\130\000\000\000\000\000\000\002\128\000\000\000\000\000\000\000\000\0002\144\005\t\000%\004\138\192\004\003 \000J\b\016t1\b\252\002\207)\022\159\025\006\193\000d\178\192\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\002PH\172\000@2\000\004\160\128\006B\000\129\000\004\160\145H\000\128`\000\000A\002\012\134!\031\128Y\229\"\211\227 \216 \012\150X\025\b\002\004\000\018\130E\160\002\001\160\000\001\004\000\000\000\128\000\000\000\000\016\000\000\000\000\000\152\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\004\000\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\000\000\000\000\000 \000\000\000\000\0010D \192\000\028\004\000\028\\ \000\016\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000qp\128\000@\000\000\000\000\000\000\000\016\000\000\000\000\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\0026\016\004X$o\196\143@\016\031\000\000\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\017\176\128\"\193#~$z\000\128\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\000%\004\138\192\004\003 \000J\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200@\016 \000\148\018-\000\016\r\000\000\b \000\000\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\001\000\000\016\000\000\000\000\002\000\000\000\000\000\019\004B\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\007\023\b\000\004\000\000\000\000\000\000\000\001\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\128\0008\b\0008\184@\000 \000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\002\000\000\000\006\000\000\224 \000\226\225\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\000\000\001\027\b\002,\0187\226G\160\b\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\b\216@\017`\145\191\018=\000@|\000\000\012p\000\000\000\000\000\000\000\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\015RE\1610$\169\159X\012\128}\128\027\197R\014\134!\031\128Y\229\"\211\227 \216 \012\150X\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000e \n\018\000J\t\021\128\b\006@\000\148\016\b\216@\017`\145\191\018=\000@|\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000F\194\000\139\004\141\248\145\232\002\003\224\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\000%\004\138\192\004\003 \000J\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\192\0008\b\0008\184@\000 \000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\016\000\000\000\0026\016\004X$o\196\143@\016\031\000\000\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\128\000\000\001\128\0008\b\0008\184@\000 \000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000\000F\194\000\139\004\141\248\145\232\002\003\224\000\000c\128\000\000\000\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\000\000\000\0026\016\004X$o\196\143@\016\031\000\000\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\004\193\016\003\000\000p\016\000qp\128\000@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\004\000\000\000\000\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\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\000\000\000 \000\144\"\004l \b\176H\223\137\030\128 >\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\144\128 @\001($Z\000 \026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\004\000\018\004B\012\132\001\002\000\tA\"\208\001\000\208\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000 \000\144\"\016d \b\016\000J\t\022\128\b\006\128\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\004\129\016\128\000\000\000\000\000P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 D\000\200@\016 \000\148\018-\000\016\r\000\000\b \000\000\000\000\000\000\000\000\128\000\000\001\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000E\000\016 \t\012\000\012\128\025\128\000\128\018\018\000\138\000 D\018\024\012\025\0003\000\129\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0005%.\224\250\007\193a\192\255\150\019\188[\243\135\145\176\128\"\193#~$z\000\128\248\000\000\024\224\128\000\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\001\027\b\002,\0187\226G\160\b\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000@\000\160\000\000\000\000\000\000\000F\194\000\139\004\141\248\145\232\002\003\224\000\000c\130\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\019`|\000\192 \031\001\000@\001a\128\232\216B\209`\145\191\018=\000@|\000\000\014p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130F\252H\244\001\001\240\000\0001\193\000\000\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\0026\016\004X$o\196\143@\016\031\000\000\003\028\016\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002B\000\136\004\128\160\145\200\000\000`\000\000c\003V\246\239_\233}W?\191\251a\251\237\191\254\248\000\000\000\000\000\002\000\005\000\000\000\000\000\000\000\0026\016\004X$o\196\143@\016\031\000\000\003\028\016\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\000j\222\221\235\253/\171\231\247\255l?}\183\255\207#a\000E\130F\252H\244\001\001\240\000\0001\193\169)w\007\208>\011\014\007\252\176\157\226\223\156<\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\183\183z\255K\234\249\253\255\219\015\223m\255\243\200\216@\017`\145\191\018=\000@|\000\000\012pjJ]\193\244\015\130\195\129\255,'x\183\231\015#a\000E\130F\252H\244\001\001\240\000\0001\193\000\000\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\006\173\237\222\191\210\250\190\127\127\246\195\247\219\127\252\2426\016\004X$o\196\143@\016\031\000\000\003\028\026\146\151p}\003\224\176\224\127\203\t\222-\249\195\192@\000\000\000\000\020\000(\000\000\000\000\000\000\000\017\176\128\"\193#~$z\000\128\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\001\171{w\175\244\190\175\159\223\253\176\253\246\223\255<\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\006\164\165\220\031@\248,8\031\242\194w\139~p\2426\016\004X$o\196\143@\016\031\000\000\003\028\016\000\000@\000\000\000\000\000\000\000\000\000\000\000\0005on\245\254\151\213\243\251\255\182\031\190\219\255\231\145\176\128\"\193#~$z\000\128\248\000\000\024\224\212\148\187\131\232\031\005\135\003\254XN\241o\206\030F\194\000\139\004\141\248\145\232\002\003\224\000\000c\130\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\006\173\237\222\191\210\250\190\127\127\246\195\247\219\127\252\2426\016\004X$o\196\143@\016\031\000\000\003\028\026\146\151p}\003\224\176\224\127\203\t\222-\249\195\192\000\000\000\000\000\000\000\000\000\000\000\002\128\000\000\000\000\000\000\000\000 \000P\000\000\000\000\000\000\000#a\000E\130F\252H\244\001\001\240\000\0001\193\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\003V\246\239_\233}_?\191\251a\251\237\191\254y\027\b\002,\0187\226G\160\b\015\128\000\001\142\rIK\184>\129\240Xp?\229\132\239\022\252\225\228l \b\176H\223\137\030\128 >\000\000\0068 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000j\222\221\235\253/\171\231\247\255l?}\183\255\207#a\000E\130F\252H\244\001\001\240\000\0001\193\169)w\007\208>\011\014\007\252\176\157\226\223\156<\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\004\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\r[\219\189\127\165\245|\254\255\237\135\239\182\255\249\228l \b\176H\223\137\030\128 >\000\000\00685%.\224\250\007\193a\192\255\150\019\188[\243\135\234\222\221\235\253/\171\231\247\255l?}\183\255\207#a\000E\130F\252H\244\001\001\240\000\0001\193\169)w\007\208>\011\014\007\252\176\157\226\223\156?V\246\239_\233}W?\191\251a\251\237\191\254\254\173\237\222\191\210\250\174\127\127\242\195\247\139\127\252\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F\194\000\139\004\141\248\145\232\002\003\224\000\000c\130\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X$o\196\143@\016\031\000\000\003\028\016\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\0026\016\004X$o\196\143@\016\031\000\000\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\161\136G\224\022yH\180\248\2006\b\003%\150\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\025H\002\132\128R\130E`\002\001\128\000\005\004\0000\000\006\000\000\005\023\b\000\004\000\000\000\000\000\000 \000\000\000\001\002\000\000\000\b\000\000\000\000\000\b\216@\017`\145\191\018=\000@|\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\nPH\172\000@0\000\000\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\000\165\004\138\192\004\003\000\000\n\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\017\176\128\"\193#~$z\000\128\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F\194\000\139\004\141\248\145\232\002\003\224\004\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\146\151p}\003\224\176\224\127\203\t\222-\249\195\192\200@\016 \000\148\018-\000\016\r\000\000\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\006\164\165\220\031@\248,8\031\242\194w\139~p\2426\016\004X$o\196\143@\016\031\000\000\003\028\026\146\151p}\003\224\176\224\127\203\t\222-\249\195\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\004\129\016#a\000E\130F\252H\244\001\001\240\000\0001\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000A\027\b\002,\0187\226G\160\b\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d \b\016\000J\t\022\128\b\006\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129!\bD\002@PH\228\000\0000\000\0001\129\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X$o\196\143@\016\031\000\000\003\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\001 \007\192\012\002\002\001\240\016\132\000\022\024\012\012\132\001\003\000\tA&\208\001\000\208\000\000\130\000\128\000\000\000\000\000\000\000\000\000\002\000\000\000@B6\016\004X$o\196\143@\016\031\000\000\003\028\000\000\016\000|\000\192 \031\001\b@\001a\128\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006B\000\129\128\004\160\147h\000\128h\000\000A\000\012\132\001\002\000\tA&\208\001\000\208\000\000\130\000\025\b\002\004\000\018\130E\160\002\001\160\000\001\004\000\000\000\000\000\000\000\000\016\000 \000 \000\144\"\004l \b\176H\223\137\030\128 >\000\000\0068\004\000 \128\248\001\128@@>\002\016\128\002\195\003\145\176\128\"\193#~$z\000\128\248\000\000\024\224\000\016\128\003\224\006\001\001\000\248\b\002\016\011\004\006F\194\000\139\004\141\248\145\232\002\003\224\000\000c\128@\002\b\015\128\024\004\004\003\224!\b\000,08\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\176\129\"\193#~$z\000\128\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\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\b\000\t >\000`\016\016\015\128\132 \000\176@`d \b\024\000J\t6\128\b\006\128\000\004\016\004\000\000\128\000\000\000\000\000\000\000\016\000\000\000\002\017\176\128\"\193#~$z\000\128\248\000\000\024\224\000\000\130\003\224\006\001\001\000\248\bB\000\011\004\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\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\132\001\016\t\001A#\144\000\000\192\000\000\198\002\000\000\000\000\000\000\000\000\000\006\000\000P\000\000\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\004@\000\000\000\000\000\000\000\000\128\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\002\000\000\000\001\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\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\016\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\n\000\000\000\002\000\000\000\000\000\160\017\192\000\000\000\000\000\000\003\000\000D\000\000\000\000\000\000\003\000\b(\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rIK\184>\129\240Xp?\237\132\239\182\252\225\224\000\000\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\000\000\000\000\000\000\000\000\000\000\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\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\b\000\t\016>\000`\016\016\015\129\128 \000\176@p\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000 \000\000\000\000\000\004\000\000\000\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\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\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000I\001\240\003\000\128\128|\004!\000\005\130\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\b\001\000\000\001\001\004\000\000\b\000\000\000\000\000\b\016\002\000\000\002\002\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\016\000 \000\000\000\000\000\004l \b\176H\223\137\030\128 >\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000 \000\000\000\128\000\000\000\000\000\000\000\003\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\006\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\b\000\002\000\000\b\016\002\000\000\002\002\000\000\000\016\000\000\000\000\bH\002(\000\129\004Hp\000d\000\204\000\004\000\128 \b\b\000\002\n\b\000\000\000@\000\000\000\000\016\000\000\000\000\002\000\000@\000\000\000\128\000\000\000\000\129\000 \000\000 \000\000\001\000\000\000\000\000\132\128\"\128\b\016D\135\000\006@\012\192\000@\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000 \000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\016\000\016\000`\000\000\004\000\000\000\000\000\144\000\000\000\000 \000\192\000\000\b\000\000\000\000\001 \000\000\000\000@\000\128\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\004\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\000\000\000 \000\001\128\0000\000@(\184P\000\"\000\000\000\000\000\003\000\000`\000\000Qp\128\000@\000\000\000\000\001\011\001E\000\0160)\014\000\012\128\025\128@\132\016\000\000\000\000\002\128@\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\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\000p\016\000qp\128\000@\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\004\000\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\000\000\136\000\000\000\000\b\000\000@\000\000\000\001\000\000\001\016\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000(\004\000@\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\001\000\000\b\000\000\000\000 \000\000\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\b\000\005\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\024\000\000\020\\ \000\016\000\000\000\000\000B\192Q@\004\012\nC\128\003 \006`\016!\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\192\001\000\162\225\000\000\136\000\000\000\000\000\012\000\001\128\000\001E\194\000\001\000\000\000\000\000\004,\005\020\000@\192\1648\0002\000f\001\002\016@0\000\006\000\000\005\023\b\000\004\000\000\000\000\000\016\176\020P\001\003\002\144\224\000\200\001\152\004\bA!`(\160\002\006\005!\192\001\144\0030\b\016\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\128\162\128\b\016\020\135\000\006@\012\192 B\b\006\000\000\192\001\000\162\225@\000\136\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\b\000\000\000\024\000\003\000\004\002\139\133\000\002 \000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000`\000\012\000\000\n.\016\000\b\000\000\000\000\000!`\b\160\002\004\005!\192\001\144\0030\b\016\130B\192Q@\004\012\nC\128\003 \006`\016!\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\006\000\000\192\000\000\162\225\000\000\128\000\000\000\000\002\022\000\138\000 @R\028\000\025\0003\000\129\b$,\005\020\000@\192\1648\0002\000f\001\002\016@\000\000\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\b\216@\017`\145\191\018=\000@|\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006B\b\129\000\004\224\147h\000\128`\000\000A\000\012\132\017\002\000\t\193\"\208\001\000\192\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000'\004\139@\004\003\000\000\002\b\016\144\004P\001\002\000\144\192\000\200\001\152\000\b\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\b\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jJ]\193\244\015\130\195\129\255,'x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\018\000|\000\192 \031\001\b@\001a\128\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\002\000@@\000@A\000\000\002\000\000\000\000\000\002\004\000\128\000\000\128\130\000\000\004\000\000\000\000\000\004\b\001\000\000\001\001\000\000\000\b\000\000\000\000\000\000\000@\000\000\002\000\b\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \b\b\000\002\n\b\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\004\000\000\004\000\000\128\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\016\000\000\000\000\000\000\000\000\000\000\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\144\128 @\001($Z\000 \026\000\000\017@\212\148\187\131\232\031\005\135\003\254XN\241o\206\031\000\001\016\007\192\012\002\002\001\240\016\004\000\031\b\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\004\004\000\001\005\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\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\129\000@@\000\016P@\000\000\002\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\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\004\004\000\001\005\004\000\000\000 \000\000\000\000\b\000\001\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B@\017@\004\b\"C\128\002 \006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\128\000\000\128\130\000\000\004\000\000\000\000\000\004\b\001\000\000\001\001\000\000\000\b\000\000\000\000\004$\001\020\000@\130$8\000\"\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000p\000\128\b\000\000\000 \000\000\000\000\000\000\000\000@\000\000\016\000\004\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\128\000\000\000\000\000\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\001\t\000E\000\016 \t\012\000\b\128\029\128\000\128\000\004\001\001\000\000AA\000\000\000\b\000\000\000\000\006$\001\020\000@\192$8\000\"\000f\000\002\000\bH\002(\000\129\000H`\000D\000\204\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\001\000\000\000\000\000@\000\000\000\000\000\000\000\001\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\001\000\002\018\000\138\000 @\018\024\000\017\0003\000\001\000$$\001\020\000@\128$ \000\"\000f\000\002\000@0\000\000\000\000\000\000\016\000\000\000\000\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\000\000\000\000\000\128\000 \000B@\017@\004\b\002C\000\002 \006`\000 \004\132\128\"\128\b\016\004\132\000\004@\012\192\000@\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\016\000\004\000\bH\002(\000\129\000H`\000D\000\204\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031}\145\002\011\252m\000\004\193\192\247\028X\020\026\019\240\145j\197+~fz\002\128\254\000\000x\224\003!\000@\128\002PH\180\000@4\000\000 \128 \000\004\000\000\000\000\002\000\000\000\000\000\018\004@\141\132\001\022\t\027\241#\208\004\007\192\000\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\223d@\130\255\027@\0010p=\199\022\005\006\132\252$Z\177J\223\153\158\128\160?\128\000\0308\000@\144\016\016\004\020\016@\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000P\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\160\002\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\000\000\000\000\000\004\000\0000\000\007\001\000\007\023\b\000\004\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000@\000\000\000\192\000\028\004\000\028\\ \000\016\000\000\000\000\000B@\017@\004\b\130C\129\130 \007`\016 \000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\004\138\000 @\018\024\000\017\0003\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\129\000H`\000D\000\204\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \b\160\002\004A!\192\193\016\003\176\b\016\000\000\144\000\000 \000 \000\192\000\000\b\000\000\000\000\001 \000\000\000\000@\001\128\000\000\016\000\000\000\000\002@\000\000\000\000\128\001\000\000\000 \000\000\000\002\018\000\138\0000@\018\028\000\017\000;\000\003\000\000\t\000\000\000\000\002\000\004\000\000\000\128\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\016\000\016\144\004P\001\002\000\144\224\000\136\001\152@\b@\000@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\132\128\"\128\b\016\004\135\000\004@\012\192\000@\001\t\000E\000\016 \t\012\000\b\128\025\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004$\001\020\000@\128$8\000\"\000f\000\002\000\bH\002(\000\129\000H`\000D\000\204\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\224\b\188\006\004\028} \001\016\003\000\000\016\000B@\017@\004\b\000B\000\002\000\006`\000 \000\001\000\000\000@\000\000\001\000\000\000\000\000\000\001\000\002\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\129\004\b`\000@\000\204 \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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b\016@\134\000\004\000\012\194\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\000\016\001\000\000\000\004\000\000\000\000\000\000\000\000\b\000\000\002\000\000\128\b\000\000\000\000\000\000\000\000\016\000\000\000\000\001\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000! \b\160\002\004\000!\128\001\000\003\176\000\144\000\000\128 \000\b( \000\000\001\000\000\000\000\000\196\128\"\128\b\024\000\135\000\004\000\012\192\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\024\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000 \000(\000\016 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B@\017@\004\b C\000\002\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\b\002\002\000\000\130\130\000\000\000\016\000\000\000\000\012H\002(\000\129\128\bp\000@\000\204\000\004\000\144\144\004P\001\002\000\016\128\000\128\001\152\000\b\001\000\192\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\128\128\000 \160\128\000\000\004\000\000\000\000\003\018\000\138\000 `\002\028\000\016\0003\000\001\000$$\001\020\000@\128\004 \000 \000f\000\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\016\000\000\000\000\000\128\000 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b\016\000\134\000\004\000\012\194\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\001\000\000AA\000\000\000\b\000\000\000\000\006$\001\020\000@\192\0048\000 \000f\000\002\000\bH\002(\000\129\000\b`\000@\000\204\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\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@\001\128\000\000\016\000\000\000\000\002@\000\000\000\000\128\003\000\000\000 \000\000\000\000\004\128\000\000\000\001\000\002\000\000\000@\000\000\000\004$\001\020\000`\128\0048\000 \000f\000\006\000\000\136\000\000\004\000\001\000\024\000\000\000\000\000\000\000\001\000\000\000\b\000\002\0000\000\000\000\000\000\000\000\002\000\000\000\000\000\004\000`\000\000\000\000\000\000\000\004\000\000\000\000\000\b\000@\000\000\000\000\000\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\b\000\000\146\000\b\000\000\000\128\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\128\000 \001\000\n @\000\000\000\000\000\000\000\132\000\000\128\000\001@\133\001\000\000\000@ \000\001\b\000\001\000\000\002\129\b\002\000\000\000\128@\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\128\000\016\000\000 \016\128 \000\000\b\004\000\000\002\000\000\000\000\b\004\000@\000\000\000\000\000\000\000\004\000\000\000\000\016\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000@\000\000\000\000\000\000\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\000\000\000\000\000\000\016\000\000\192\000\028\004\000\028\\ \000\016\000\000\000\000\000B\000\000@\000\000\128C\128\128\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\016\000\000 \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\128\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\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\006\000\000\224 \000\226\225\000\000\128\000\000\000\000\002\016\000\002\000\000\004\002\024\004\000\000\001\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000 \001D\024\000\000\000\000\000\000\000\000 \000\b\000@\002\136\016\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\128\000\000\000\000\000\000\128\001\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\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\b\000\000\b\000\000\000\b\000\002\000\016\000\162\004\000\000\000\000\000\000\000\0000\000\007\001\000\007\023\b\000\004\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\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\003\000\000p\016\000qp\128\000@\000\000\000\000\000\000\000\004\000\000\000\000\002\000\000\000\000\000\016\000\000\000\000\b\000\000\000\000\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\016\144\005P\001\002 \144\224 \136\001\216\004\b\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\002\000\000\128\004\000(\129\000\000\000\000\000\000\000\002\018\000\170\000 D\018\028\004\017\000;\000\129\000$ \000\004\000\000\b\0048\b\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\014\002\000\014.0\000\b\000\000\000\000\000\000\192\000\028\004\000\028\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000\003\000\000p\016\000qp\128\000@\000\000\000\000\001\b\000\001\000\000\002\001\014\006\000\000\000\128@\000\002\016\000\002\000\000\004\002\024\004\000\000\001\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\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\000B\000\000@\000\000\128C\000\128\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\016\000\002\000\000\004\002\016\004\000\000\001\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\129\000Hp\000D\000\204\000\004\000\144\144\004P\001\002\000\144\128\000\136\001\152\000\b\001\002\000\000\000\000\000\004\000`\000\000\000\000\000\000\000\004\000\000\000\000\000\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\b\000\002\000\016\000\162\004\000\000\000\000\000\000\000\bH\002(\000\129\000Hp\000D\000\204\000\004\000\144\144\004P\001\002\000\144\128\000\136\001\152\000\b\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\b\000\000\000\000\000\016\001\128\000\000\000\000\000\000\000\016\000\000\000\000\000 \001\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000`\000\014\002@\n\174\016\000\b\000\000\000\000\000!`*\160\002\006\004!\192\001\016\003\176\0000\002\001\128\0000\000\000(\184@\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\006\000\000\224$\000\170\225\000\000\128\000\000\000\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\n\000\000\000\016\000\000\000\000\b\000\000\000\000\000@\016\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000`\000\014\002@\n\174\016\000\b\000\000\000\000\000\000\192\000\024\000\000\020\\ \000\016\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000Up\128\000@\000\000\000\000\001\011\001U\000\0160!\014\000\b\128\029\128\000\128\018\022\002\170\000 `B\028\000\017\000;\000\001\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\129\000\bp\000@\000\236\000\004\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000B@\017@\004\b\000C\000\002\000\006`\000 \004\132\128\"\128\b\016\000\132\000\004\000\012\192\000@\b\016\000\000\000\000\000 \003\000\000\000\000\000\000\000\000 \000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\004\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\000\000\000\000\000\000\016\000\000\192\000\028\004\128\021\\ \000\016\000\000\000\000\000B@\017@\004\b\000C\000\002\000\006`\000 \004\132\128\"\128\b\016\000\132\000\004\000\012\192\000@\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\129\000\b@\000@\000\204\000\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\000\000\000\000\000\000\000\000\000\000\bH\002(\000\129\000\b`\000@\000\204\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\016\016\016\004\020\016@\000\000\128\000\000\000\000\000\128 \000\b( \128\000\001\000\000\000\000\000\001\000@@\000\016P@\000\000\002\000\000\000\000\001\137\000E\000\0160\001\014\000\b\000\025\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004$\001\020\000@\128\004 \000 \000f\000\002\000@ \000\002H\000%\000\016\002\000\000\000\000\000\016\000@\000\004\144\000J\000\000\004\000\000\000\000\000 \000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000B@\017@\004\b\002C\000\002 \007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000E\000\016 \t\012\000\b\128\025\128@\128\018\018\000\138\000 @\018\016\000\017\0003\000\001\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\144\004P\001\002\000\016\128\000\128\001\152\000\b\001\000\128\000\t \000\148\000@\b\000\000\000\000\000@\001\000\000\018@\001(\000\000\016\000\000\000\000\000\128\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\012\128\001\224@\001\197\194\128\001\000@\016\000\b\000\024\000\019\128\128\003\139\132\000\002\000\000\000\000\020\000\000\000\000\000\n\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\000\000\000\000\000\000\000\000\000\133\160\"\128\b\016D\134\128\004@\028\192 @\t\t\000E\000\024 \t\014\000\b\128\025\128A\132\018\018\000\138\000 @\018\028\000\017\0003\000\129\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\129\000H`\000D\000\204\002\004 \128$\000\000\000\000\b\000\016\000\000\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\132\128\"\128\b\016\000\134\000\004\000\012\192 @\t\t\000E\000\016 \001\b\000\b\000\025\128\000\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\004P\001\002\000\144\224\000\136\001\216\004\b\001\000H\000\002\000\000\016\000(\000\000\004\001\000\000\128\000\144\000\000\000\000 \000P\000\000\b\002\000\001\000\000\000\000\000\000\160\016\000\000\000\004\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\144\004P\001\130\000\144\224\000\136\001\152\004\024A! \b\160\002\004\001!\192\001\016\0030\b\016\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\160\016\000\000\000\004\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\001\016\000\000\b\000\002\0000\000\000\000\000\000\000\000\002\000\000\000\000\000\004\000`\000\000\000\000\000\000\000\004\000\000\000\000\000\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\012\164\001B@\tA\"\176\001\000\200\000\002\130\004\025\012B?\000\179\202E\167\198A\176@\025,\176\016\000\004\000 \005D\b\000\000\b\000\000\000\000\016\128\000\016\000\000(\016\160`\000\000\b\004\000\000!\000\000 \000\000P!\000\192\000\000\016\b\000\000B\000\000@\000\000\128B\001\128\000\000 \016\000\000\b\000\000\000\000 \016\001\000\000\000\000\000\000\001\000\000\000\000\000\000@ \002\000\000\000\000\000\000\000\000\000\000\000\000\000\128@\000\000\000\000\000\000\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\000\000\000\000@\000\144\000\b\216@\017`\145\191\018=\000@|\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000F\194\000\139\004\141\248\145\232\002\003\224\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004 \000\004\000\000\b\0040\024\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\004\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\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\b\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\007\023\b\000\004\000\000\000\000\000\016\128\000\016\000\000 \016\224`\000\000\b\004\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\002@\000#a\000E\130F\252H\244\001\001\240\000\0001\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\001\027\b\002,\0187\226G\160\b\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\002\000 \000\000\000\000\000\000 \000\000\000\002\000\000\004\000@\000\000\000\000\000\000\000\000\000\000\004\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\164\001B@\tA\"\176\001\000\200\000\002\130\000\028\000\003\128\128\003\139\132\000\002\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\000\000\000\000\000@\000\000\000\192\000\028\004\000\028\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000#a\000E\130F\252H\244\001\001\240\000\0001\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\001\027\b\002,\0187\226G\160\b\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\000\000 \000\000@!\128\192\000\000\016\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\128\0008\b\0008\184@\000 \000\000\000\000\000\000\000\000\000\000\000\000\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\164\001B@\tA\"\176\001\000\200\000\002\130\000\028\000\003\128\128\003\139\132\000\002\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\000\000\000\000\000@\000\000\000\192\000\028\004\000\028\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000#a\000E\130F\252H\244\001\001\240\000\0001\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\001\027\b\002,\0187\226G\160\b\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\216@\017`\145\191\018}\000@|\000\000\012p\017\176\128\"\193#~$z\000\128\248\000\000\024\224\132\000\000\128\000\001\000\134\003\000\000\000@ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\000\b\001Q\006\000\000\002\000\000\000\004\000\b\000\002\000\016\002\162\012\000\000\004\000\000\000\000\000\016\000\004\000 \005D\b\000\000\b\000\000\000\000\000 \000\b\000@\n\136\016\000\000\016\000\000\000\000\000\200A\0162\000\156\018m\000\016\012\000\000\b >\251\"\004\023\248\218\000\t\131\129\2388\176(4\003!\004@\128\002pI\180\000@0\000\000 \128\006B\b\129\000\004\224\145h\000\128`\000\000A\000\012\132\001\002\000\t\193\"\208\001\000\192\000\000\130\000\000\000\000\000\000\000\000\016\000\016\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000 \000\000\000\000\000\000 \000@\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\002\000\000\128\004\000\168\129\000\000\001\000\000\000\000\000\012\000\001\192@\001\197\194\000\001\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202@\020$\000\148\018k\000\016\012\000\000\b \001\148\128(H\001($V\000 \024\000\000\016@\003)\000P\144\nPH\172\000@0\000\000 \128\002\000\000\128\004\000\168\129\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000 \b\000\002\000\016\002\162\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\181%Z\131J*\153\253\224\136\007\152\004\0305!jJ\181\006\148U3\251\193\016\0150\b\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\000\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\128\000\000\128\128\000\000\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\002\000\b\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \b\b\000\002\n\b\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\004\000\000\128\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d \b\016\000J\t\022\128\b\006\128\000\004\016\000\000\000\000\000\000\000\000@\000\000\000 \002@\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000@\000\000\000@\000\000\000\000\020\000\000\000\000\000\000\000\000\000\019\240\144b\197+~fz\002\160\254@\0008\224\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\011BA\000\016 \169\b\b\b\1289\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\016@\004\b\002B\000\002 \006A\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\129\000H@\000@\000\192\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\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?\t\006,R\183\230g\160*\015\228\000\003\142\002~\018\012X\165o\204\207@T\031\200\000\007\028\000\144\004\016\001\002\000\144\128\000\136\001\144\000\b\000\001 \b \002\004\001!\000\001\016\003 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000A\000\016 \t\012\000\b\128\025\000\000\128\000\018\000\130\000 @\018\016\000\017\0002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \b \002\004\001!\128\001\016\003 \000\016\000\002@\016@\004\b\002B\000\002 \006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") + (129, "'\225 \197\138V\252\206z\002\128\254@\000\028p\017\176\128\"\225#~&}\000@|\000\000\0068\031}\145\002\011\252m\000\002`\224{\142,\005\006\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235f\245\155W\252\206\255\146\161\254!\016<\240>\251\"\004\023\248\218\000\004\193\192\247\028X\n\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X$o\196\207\160\b\015\128\000\000\199\003\239\178 A\127\141\160\000L\028\015q\197\128\160\208\159\132\139V)[\2439\232\n\003\248\000\000\241\192\000\000\000\000\128\000\160\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000(\000\000\000\000\000\000\000\000\000 \000 \001\248\005\130@\000\031\017\000A\000 Q`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000(\000\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\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\002\000\000\000\000\128\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000`\000\014\002\000\014.\b\000\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\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!`.\232\002\006E \224`\201\001\216ED\"\128\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\006\000\000\224 \226\224\128\000@\000\000\000\000\000\001\000@@@\016P@\128\000\001\000\000\000\000\000\000\128 \000\b( @\000\000\128\000\000\000\000\000@\016\016\000\004\020\016\000\000\000@\000\000\000\000\024\144\005P\001\003\b\144p\000D\000\236 2\000HH\002\b\000\129\000\b(\000 \000b\000\001\000\004$\001\004\000@\128\004\016\000\016\0001\000\000\128\000\012\000\000\147\004\t@\002\000@\000\000\000\000\001\000\006\000\000I\002\004\160\001\000 \000\000\000\000\000\128\003\000\000$\129\002P\000\000\016\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\002H\000%\000\000\001\000\000\000\000\000\004\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000I\000\004\000\000\000 \000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\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\000\000\000\000\000\000\000\000\000 \000\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\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\002\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\000\000 \000\002H\000 \000\000\001\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\001\t\000E\004\016 \001\006\000\004\000\014\192! \004\003 \000x\016\000qpP\000 \b\002\000\000\128B@\017@\006\b\"A\192\001\016\0030\136\024A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\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\025\000\003\128\128\003\139\130\128\001\000@\016\000\004\000\012\000!\192@A\197\193\000\000\128\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000`\000\000Qp@\000 \000\000\000\000\000\001\128\0008\b\b8\184 \000\016\000\000\000\000\0001`.\224\002\006E \224`\137\001\216\005L\"\192`\000\012\000\000\014.\b\000\004\000\000\000\000\000\0000\000\007\001\001\007\023\004\000\002\000\000\000\000\000\000\024\000\003\000\000\002\139\130\000\001 \000\016\000\000\000\012\000\001\192@A\197\193\000\000\128\000\000\000\000\000\251\236\136\016_\227h\000\019\007\003\220q`(4'\225\"\213\138V\252\206z\002\128\254\000\000A\0003]p$!\b\128H\n\t\142@\000\003\000\000\001\140\0026\016\004X$o\196\199\160\b\015\128\000 \199\001\027\b\002,\0187\226c\208\004\007\192\000\000c\131V\246\239_\233}_?\223\253\176\253\246\223\255\158F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\003!\000@\128\002PLZ\000 \024\000\000\b \001\144\128 @\001(&-\000\016\r\000\001\004\016\000\200@\016 \000\148\019\022\128\b\006\128\000\002\136\000d H\016\000J\t\139@\004\003@\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\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\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\004@\000\000\000\000\000\000\000\000@\000\b\000\000`\000\014\002\000\014.\b\000\004\000\000\000\000\000\0000\000\007\001\000\007\023\004\000\002\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\128\006\000\004\224 \000\226\224\128\000@\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\0008\b\0008\184 \000\016\000\000\000\000\016\000\192\000\028\004\000\028\\\016\000\b\000\000\000\000(\000 \000\000\000\000\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\002\000\000\000\000\000\000\b\000\000\002\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\b\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\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\0008\b\0008\184 \000\016\000\000\000\000\016\000@\000\000\000\000\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\006$\001\220\000@\200$\028\012\017 ;\000\168\132X\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\000\006\000\000\192\000\000\162\224\128\000@\000\000\000\000\000\196\128;\128\b\025\004\131\129\130$\007`\021\016\139\001\128\0008\b\0008\184 \000\016\000\000\000\000\000\000\192\000\024\000\000\020\\\016\000\b\000\000\000\000\000\024\144\007p\001\003 \144p0D\128\236\002\162\017lH\011\184\000\129\144H8\024\"@v\001Q\b\176\024\000\003\000\000\002\139\130\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\128\187\128\b\025\020\131\129\130$\007`\021\016\139\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012X\011\184\000\129\145H8\024\"@v\001Q\b\176\024\000\003\000\000\002\139\130\000\001\000\000\000\000\000\003\022\002\238\000 dR\014\006\b\144\029\128TB-\137\000w\000\0162\t\007\003\004H\014\192*!\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\0000\000\0008\184 \000\016\000\000\000\000\000\000\192\000\028\004\004\028\\\016\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000@\000\000\b\000\000\000\000\000\128\000\000\001\000\000\000\000\000\000\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\001\128\0008\b\0008\184 \000\016\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\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006$\001\220\000@\200$\028\012\017 ;\000\168\132P\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\128\000\000\000@\000\000\000\000\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\0000\000\007\001\000\007\023\004\000\002\000\000\000\000\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\006\000\000\224 \000\226\224\128\000@\000\000\000\000\000\003\000\000`\000\000Qp@\000 \000\000\000\000\000b@\029\192\004\012\130A\192\193\018\003\176\n\136E\177 \014\224\002\006A \224`\137\001\216\005D\"\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\001\000\000\000\000\000\b\000\000\003\000\000`\000\000Qp@\000 \000\000\000\000\000\001\128\0008\b\b8\184 \000\016\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000@\000\000\000`\000\014\002\000\014.\b\000\004\000\000\000\000\000\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\000\006\000\000\192\000\000\162\224\128\000@\000\000\000\000\000\196\128;\128\b\025\004\131\129\130$\007`\021\016\139b@\029\192\004\012\130A\192\193\018\003\176\n\136E\128\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\0000\000\007\001\000\007\023\004\000\002\000\000\000\000\000\000\024\000\003\000\000\002\139\130\000\001\000\000\000\000\000\003\018\000\238\000 d\018\014\006\b\144\029\128TB-\137\000w\000\0162\t\007\003\004H\014\192*!\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\192\000\028\004\000\028\\\016\000\b\000\000\000\000\000\000`\000\012\000\000\n.\b\000\004\000\000\000\000\000\012H\003\184\000\129\144H8\024\"@v\001Q\b\182$\001\220\000@\200$\028\012\017 ;\000\168\132X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000w\000\0162\t\007\003\004H\014\192*!\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\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\b\000\000\001\000\000\b\000\000\000\001\000\003\000\000p\016\000qp@\000 \000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\028\004\000\028\\\016\000\b\000\000\000\000\000\000\000\000@\000\000\000\000\016\000\000\128\000\000\000\016 0\000\007\001\000\007\023\004\000\002\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000 \000\000\000\004H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\001\000\000\b\000\000\000\001\018\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\002\000\000\000\000@\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\001\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\128\000\000\000\000@\000\000\000\128\000\000\000 \000\004@\000\000\000\000\000\000\000\000@\000\000\000\000d \b\016\000J\t\139@\004\003@\000\001\004\0002\016\004\012\000%\004\205 \002\001\128\000\000\130\000\025\b\002\004\000\018\130f\144\001\000\192\000\000A\000\012\132\001\002\000\tA1H\000\128`\000\000 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\202F\212$\002\148\0195\128H\006P\129\218\170\000\000 \000\016\000@\000\000@\000\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001&R6\161 \020\160\153\188\002@6\130\014\213P\001\000\000\000\000\000@\012P\000\000\000\000\000\000\000A\144\132 @\001(&-\000\016\r\000\000$\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\012\000%\004\205\160\002\001\160\000\000\130\000\025\b\002\004\000\018\130f\208\001\000\208\000\000A\000\012\132\001\002\000\tA1h\000\128h\000\000 \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\r\128\000\004\000\000@\000\128\000\160\0031D\000\200@\016 \000\148\019\022\128\b\006\128\000\002\b\018\000\003`\000\001\000\000\016\000 \000(\000\204Q\b2\016\004\b\000%\004\197\160\002\001\160\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000l\000\000 \000\002\000\004\000\005\000\025\138 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147!\027@\128\nPL\218\001 \027@\006j\168\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018d#h\016\001J\t\155@$\003h\000\205U\b:\024\132~\001e\148\197\167\198A\176@\012\150X\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\144\128 @\001(&)\000\016\012\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\000\000\000\016\000\000\128\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\128\000\000\000\000\004`\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016d \b\016\000J\t\139@\004\003@\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\000\216\000\000@\000\004\000\b\000\n\0003\020B\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016d \b\016\000J\t\139@\004\003@\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\000\216\000\000@\000\004\000\b\000\n\0003\020B\000\000\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\000\000\004\000\000\000\000\000\"\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\003!\002@\128\002PLZ\000 \026\000\000\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\144\000\000\000\000\004\000\000\000\000\0002\020B\012\132\t\002\000\tA1h\000\128h\000\b(\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\128\000\000\000\000@\000\000\000\000\002 D \000\004@\000\000\000\000\000\000\000\000\000\000\000\000\016`\000 \000\000\002\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\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)\000P\144\002PL\214\001 \025\000\004h\172\000\000\000\000\000\000(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\016\000\002\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\004\000\000\000\006\000\000\224 \000\226\224\128\000@\000\000\000\000\000\000\000\b\000\000\000\000\000\128\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000@\000\000\000\128\000\000\000\000\000\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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000@\000\000\000\004l \b\176H\223\137\143@\016\031\000\000\001\142\0002\016D\012\129'\004\205\160\002\001\160\000\000\130\000\b\016\002\002\000\002\002\004\000\000\b\000\000\000\002\000\004\b\001\001\000\001\001\002\000\000\004\000\000\000\000\000\002\004\000\128\000\000\128\129\000\000\002\000\000\000\000\000\001\002\000@\000\000@@\000\000\001\000\000\000\000\000\000\000\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\016\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\000\000\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\004\001\001\000\000AA\000\000\000\004\000\000\000\000\000\002\000\128\128\000 \160\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\016\000\000\000\000\000\000\000\000\000\000 \b\b\000\002\n\b\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006$\001T\000@\192$\028\000\017\000;\000\b\128\016\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\006\000\000I\000\004\160\000\000 \000\000\000\000\000\128\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000@\000\000\192\000\030\004\000\028\\\016\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\007\023\004\000\002\000\000\000\000\000\006$\001T\000@\192$\028\000\017\000;\000\b\128P\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\001\137\000U\000\0160\t\007\000\004@\014\192\" \020\196\128*\128\b\024\004\131\128\002 \007`\017\016\002\001\128\0008\b\0008\184 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000@\000\000\000\000`\000\014\002\000\014.\b\000\004\000\000\000\000\000\012H\002\168\000\129\128H8\000\"\000v\001\017\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\128\000\000\128 \000\b( \000\000\000\128\000\000\000\0001 \n\160\002\006\001 \224\000\136\001\216\000D\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\016\000\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\003\018\000\170\000 a\018\014\000\b\128\029\132\006@\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \b\b\000\002\n\b\000\000\000 \000\000\000\000\012H\002\168\000\129\128H8\000\"\000v\000\017\000 \b\002\002\000\000\130\130\000\000\000\b\000\000\000\000\003\018\000\170\000 `\018\014\000\b\128\029\128\004@\b\000\000\000\000\000\000\000\000\000\000\000\002\002\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000b@\021@\004\012\"A\192\001\016\003\176\128\136\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\012H\002\168\000\129\132H8\000\"\000v\016\017\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\018\000\170\000 `\018\014\000\b\128\029\128\004@\b\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\001\000\000\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\b@\000\000\000\000\000\000\000\000\000\000\129\000 \000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\144\005P\001\003\b\144p\000d\000\236\000&\000@P \132\000\000\004\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\001\000\002\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128 \000\b( \000\000\000\128\000\000\000\0000\000\002\000\000\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\000\000\000\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\137\000U\000\0160\137\007\000\006@\014\194\002`\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\128\000\000\000\000\000\b\216@\017`\145\191\019\030\128 >\000\000\003\028\004l \b\176H\223\137\143@\016\031\000\000\001\206\0026\016$X$o\196\199\160\b\015\128\000\000\199\000\000\000\000\000\000\000\128\000\000\000@\000\000\000\000\002\000\000@\000\000\000\000\000\000\000 \004\000\000\000\000F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\001!\000D\002@PLr\000\000\024\000\000\012``\000\b\128\000\000\000\000\000\0000\000\130\128\144\000\b\216@\017p\145\191\019>\128 >\b\000\003\028\004l \b\176H\223\137\159@\016\031\004\000\001\142\0026\016\004X$o\196\199\160\b\015\130\000\000\199\000\t\b\002\"\018\002\130g\144\000\000\192\000\000c\000\004\132\001\016\t\001A3\200\000\000`\000\0001\128\002B\000\136\004\128\160\152\228\000\0000\000\000\024\192\001!\000D\002@PLr\000\000\024\000\000\012`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\173\237\222\191\210\250\174\127\191\251a\251\237\191\255|\004\000\000\000\000\001@1\192\000\000\000\000\000\000\001F\195\016\143\196\173\250\152\244\249\137\242\b\001\154\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Q\176\132\"\193#~&=\000@|\000\000\0068(\216B\017`\145\191\019\030\128 >\000\000\003\028\016 @\b\b\000\b\b\016\000\000 \000\000\000\000\000\016 \004\000\000\004\004\b\000\000\016\000\000\000\000\000\b\016\002\000\000\002\002\000\000\000\b\000\000\000\000\000\000\000\000\000\000\001\000\002\000\000\000\000\000\000\128\001\002\000\128\128\000 \160\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\004\000\000\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\020l!\b\176H\223\137\143@\016\031\000\000\001\142\n6\016\132X$o\196\199\160\b\015\128\000\000\199\004\025\bB\004\000\018\130b\208\001\000\192\000\000A\000\000\000\000\000\000\000\000\002\000\000\000\004\000\017\130 \006\000\000\224 \000\226\224\128\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000\017\176\128\"\193#~&=\000@|\000\000\0068\b\216@\017p\145\191\019>\128 >\000\000\003\028\004l \b\176H\223\137\159@\016\031\000\000\001\142\0026\016\004X$o\196\199\160\b\015\128\000\000\199\000\025\b\002\006\000\018\130f\208\001\000\208\000\000E\000\012\132\001\002\000\tA3h\000\128h\000\000\"\128\006B\000\129\000\004\160\152\180\000@4\000\000\017@\003!\000@\128\002PLZ\000 \026\000\000\b \b\000\000\000\000\004\000\000@\000\000\000\000\002 D\b\216@\017`\145\191\019\030\128 >\000\000\003\028\000e \n\026\000J\t\154\192\004\003\000\000\001\004\0002\144\005\t\000%\004\205`\002\001\128\000\000\130\000\025H\002\132\128\018\130b\176\001\000\192\000\000A\000\b\000\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\002pLZ\000 \026\000\000\b \001\144\128 @\001(&-\000\016\r\000\000\004\016\000\000\002\000\000\000\000\000 \000\000\000@\001\024\"\000`\000\014\002\000\014.\b\000\004\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\016\000\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\004\000\000\000\000\000\000\016\000\000\000\000\001\000\000\000\002\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\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\001\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\161\136G\224\022yLZ|d\027\004\000\201e\128\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000e \n\018\001J\t\138\192\004\003\000\000\005\004\0026\016\004X$o\196\199\160\b\015\128\000\000\199\000\025\b\002\006\000\018\130f\208\001\000\208\000\000A\000\012\132\001\002\000\tA3h\000\128h\000\000 \128\006B\000\129\000\004\160\152\180\000@4\000\000\016@\000\000\000\000\000\000\000\000\128\000\000\001\000\004@\136\017\176\128\"\193#~&=\000@|\000\000\0068\000H@\017\016\144\020\019<\128\000\006\000\000\003\024\000$ \b\128H\n\t\158@\000\003\000\000\001\140\000\018\016\004@$\005\004\199 \000\001\128\000\000\198\006\164\165\220\031@\248,\028\015\251a;\237\191\156<\004\132\001\016\t\001A1\200\000\000`\000\0001\129\171{w\175\244\190\171\159\239\254\216~\251o\255\223\000\000\000\000\000\000@\000P\000\000\000\000\000\000\000\017\176\128\"\193#~&=\000@|\000\000\0068\b\216@\017`\145\191\019\030\128 >\000\000\003\028\026\183\183z\255K\234\185\254\255\237\135\239\182\255\252\240\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\006\000\000\224 \000\226\224\128\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\012\128\000\000\000\000@\000\000\000\128\000\000\000 \192\000\028\004\000\028\\\016\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\144\000\000\000\000\b\000\000\000\016\000\016\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\002\000\000d\000\000\000\000\002\000\000\000\004\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@$\005\004\199 \000\001\128\000\000\198\006\173\237\222\191\210\250\174\127\191\251a\251\237\191\255|\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000P\000P\000\000\000\000\000\000\000\017\176\128\"\193#~&=\000@|\000\000\0068 \000\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\006\164\165\220\031@\248,\028\015\249a;\197\191\156<\141\132\001\022\t\027\2411\232\002\003\224\000\0001\193\171{w\175\244\190\171\159\239\254\216~\251o\255\207\212\148\187\131\232\031\005\131\129\255l'}\183\243\135\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\016\141\132\001\022\t\027\2411\232\002\003\224\000\0001\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\212\148\187\131\232\031\005\131\129\255,'x\183\243\135\145\176\128\"\193#~&=\000@|\000\000\00685%.\224\250\007\193`\224\127\203\t\222-\252\225\228l \b\176H\223\137\143@\016\031\000\000\001\142\rIK\184>\129\240X8\031\242\194w\139\1278x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003V\246\239_\233}W?\223\253\176\253\246\223\255\159\169)w\007\208>\011\007\003\254\216N\251o\231\015#a\000E\130F\252Lz\000\128\248\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\253n\241\250\151\255s\254\255\235?\222-\255\253\239\190\200\129\005\2546\128\0010p=\199\022\002\131B6\016\004X$o\196\199\160\b\015\128\000\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\212\148\187\131\232\031\005\131\129\255,'x\183\243\135\145\176\128\"\193#~&=\000@|\000\000\00685%.\224\250\007\193`\224\127\203\t\222-\252\225\228l \b\176H\223\137\143@\016\031\000\000\001\142\rIK\184>\129\240X8\031\242\194w\139\1278y\027\b\002,\0187\226c\208\004\007\192\000\000c\131RR\238\015\160|\022\014\007\252\176\157\226\223\206\030F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\212\148\187\131\232\031\005\131\129\255,'x\183\243\135\145\176\128\"\193#~&=\000@|\000\000\00685%.\224\250\007\193`\224\127\203\t\222-\252\225\228l \b\176H\223\137\143@\016\031\000\000\001\142\rIK\184>\129\240X8\031\242\194w\139\1278y\027\b\002,\0187\226c\208\004\007\192\000\000c\131RR\238\015\160|\022\014\007\252\176\157\226\223\206\030F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\212\148\187\131\232\031\005\131\129\255,'x\183\243\135\145\176\128\"\193#~&=\000@|\000\000\00685%.\224\250\007\193`\224\127\203\t\222-\252\225\228l \b\176H\223\137\143@\016\031\000\000\001\142\rIK\184>\129\240X8\031\242\194w\139\1278y\027\b\002,\0187\226c\208\004\007\192\000\000c\131RR\238\015\160|\022\014\007\252\176\157\226\223\206\030F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\212\148\187\131\232\031\005\131\129\255,'x\183\243\135\145\176\128\"\193#~&=\000@|\000\000\00685%.\224\250\007\193`\224\127\203\t\222-\252\225\228l \b\176H\223\137\143@\016\031\000\000\001\142\rIK\184>\129\240X8\031\242\194w\139\1278y\027\b\002,\0187\226c\208\004\007\192\000\000c\131RR\238\015\160|\022\014\007\252\176\157\226\223\206\030F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\212\148\187\131\232\031\005\131\129\255,'x\183\243\135\145\176\128\"\193#~&=\000@|\000\000\00685%.\224\250\007\193`\224\127\203\t\222-\252\225\228l \b\176H\223\137\143@\016\031\000\000\001\142\rIK\184>\129\240X8\031\242\194w\139\1278y\027\b\002,\0187\226c\208\004\007\192\000\000c\131RR\238\015\160|\022\014\007\252\176\157\226\223\206\030\006B\000\129\000\004\224\153\180\000@0\000\000\016@\003!\000@\128\002pLZ\000 \024\000\000\b \000\000\000\000\000\000(\000\000\000\000\000\000\000\000\000\000\202@\020$\000\148\019\021\128\b\006@\000J\b\016t1\b\252\002\207)\139O\140\131`\128\025,\176\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\012\164\001B@\tA1X\000\128d\000\004\160\128\006B\000\129\000\004\160\152\164\000@0\000\000\016@\131!\136G\224\022yLZ|d\027\004\000\201e\129\144\128 @\001(&-\000\016\r\000\000\004\016\000\000\002\000\000\000\000\000 \000\000\000\000\001\024\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\002\000\000\000\003\000\000p\016\000qp@\000 \000\000\000\000\000\000\000\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\016\000\001\000\000\000\000\000\016\000\000\000\000\000\140\017\b0\000\007\001\000\007\023\004\000\002\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\b\000\000\000\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\216@\017`\145\191\019\030\128 >\000\000\003\028\000\000\000\000\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\000\000\000\001\027\b\002,\0187\226c\208\004\007\192\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202@\020$\000\148\019\021\128\b\006@\000J\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000%\004\197\160\002\001\160\000\000\130\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000\000\001\000\000\000\000\000\b\193\016\131\000\000p\016\000qp@\000 \000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\128\000\000\000\192\000\028\004\000\028\\\016\000\b\000\000\000\000\000\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\004\000\000\000\006\000\000\224 \000\226\224\128\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000\017\176\128\"\193#~&=\000@|\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\0026\016\004X$o\196\199\160\b\015\128\000\000\199\000\000\000\000\000\000\000\000\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\015RE\1610$\169\159\172\006@>\192\n\241T\131\161\136G\224\022yLZ|d\027\004\000\201e\128\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000e \n\018\000J\t\138\192\004\003 \000%\004\0026\016\004X$o\196\199\160\b\015\128\000\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202@\020$\000\148\019\021\128\b\006@\000J\b\000\000\000\000\000\000\000\000\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\028\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\003\000\000p\016\000qp@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\128\000\000\000\b\216@\017`\145\191\019\030\128 >\000\000\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\016\000\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\004\000\000\000\000F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\b\216@\017`\145\191\019\030\128 >\000\000\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000#\004@\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\002\000\000\000\000#a\000E\130F\252Lz\000\128\248\000\000\012p\000\000\000\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\016\"\004l \b\176H\223\137\143@\016\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\b\002\004\000\018\130b\208\001\000\208\000\000A\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\002\000\b\129\016\131!\000@\128\002PLZ\000 \026\000\000\b \000\000\000\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\016\"\016d \b\016\000J\t\139@\004\003@\000\001\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\004\000\000\000\b\000\"\004B\000\000\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000 \000\136\017\0002\016\004\b\000%\004\197\160\002\001\160\000\000\130\000\000\000\000\000\000\000\000\004\000\000\000\b\000\"\004@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000E\000\016 \t\006\000\006@\012\192\000 \004\132\128\"\128\b\017\004\131\001\131 \006`\016\016\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\000\000\rIK\184>\129\240X8\031\242\194w\139\1278y\027\b\002,\0187\226c\208\004\007\192\000\000c\130\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\176\128\"\193#~&=\000@|\000\000\0068 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001@\000\000\000\000\000\000\000F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\019`|\000\192 \016\015\128\128 \000\216`:6\016\180X$o\196\199\160\b\015\128\000 \231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\141\132\001\022\t\027\2411\232\002\003\224\000\0001\193\000\000\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\b\216@\017`\145\191\019\030\128 >\000\000\003\028\016\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002B\000\136\004\128\160\152\228\000\0000\000\000\024\192\213\189\187\215\250_U\207\247\255l?}\183\255\239\128\000\000\000\000\000 \000(\000\000\000\000\000\000\000\b\216@\017`\145\191\019\030\128 >\000\000\003\028\016\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\006\173\237\222\191\210\250\190\127\191\251a\251\237\191\255<\141\132\001\022\t\027\2411\232\002\003\224\000\0001\193\169)w\007\208>\011\007\003\254XN\241o\231\015#a\000E\130F\252Lz\000\128\248\000\000\012p@\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\026\183\183z\255K\234\249\254\255\237\135\239\182\255\252\2426\016\004X$o\196\199\160\b\015\128\000\000\199\006\164\165\220\031@\248,\028\015\249a;\197\191\156<\141\132\001\022\t\027\2411\232\002\003\224\000\0001\193\000\000\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\000j\222\221\235\253/\171\231\251\255\182\031\190\219\255\243\200\216@\017`\145\191\019\030\128 >\000\000\003\028\026\146\151p}\003\224\176p?\229\132\239\022\254p\240\016\000\000\000\000\005\000\005\000\000\000\000\000\000\000\001\027\b\002,\0187\226c\208\004\007\192\000\000c\130\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\001\171{w\175\244\190\175\159\239\254\216~\251o\255\207#a\000E\130F\252Lz\000\128\248\000\000\012pjJ]\193\244\015\130\193\192\255\150\019\188[\249\195\200\216@\017`\145\191\019\030\128 >\000\000\003\028\016\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\r[\219\189\127\165\245|\255\127\246\195\247\219\127\254y\027\b\002,\0187\226c\208\004\007\192\000\000c\131RR\238\015\160|\022\014\007\252\176\157\226\223\206\030F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000j\222\221\235\253/\171\231\251\255\182\031\190\219\255\243\200\216@\017`\145\191\019\030\128 >\000\000\003\028\026\146\151p}\003\224\176p?\229\132\239\022\254p\240\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\002\000\002\128\000\000\000\000\000\000\000\141\132\001\022\t\027\2411\232\002\003\224\000\0001\193\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\213\189\187\215\250_W\207\247\255l?}\183\255\231\145\176\128\"\193#~&=\000@|\000\000\00685%.\224\250\007\193`\224\127\203\t\222-\252\225\228l \b\176H\223\137\143@\016\031\000\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\006\173\237\222\191\210\250\190\127\191\251a\251\237\191\255<\141\132\001\022\t\027\2411\232\002\003\224\000\0001\193\169)w\007\208>\011\007\003\254XN\241o\231\015#a\000E\130F\252Lz\000\128\248\000\000\012p@\000\000\128\000\000\000\000\000\000\000\000\000\000\000\0005on\245\254\151\213\243\253\255\219\015\223m\255\249\228l \b\176H\223\137\143@\016\031\000\000\001\142\rIK\184>\129\240X8\031\242\194w\139\1278~\173\237\222\191\210\250\190\127\191\251a\251\237\191\255<\141\132\001\022\t\027\2411\232\002\003\224\000\0001\193\169)w\007\208>\011\007\003\254XN\241o\231\015\213\189\187\215\250_U\207\247\255l?}\183\255\239\234\222\221\235\253/\170\231\251\255\150\031\188[\255\243\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\128\000\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\b\216@\017`\145\191\019\030\128 >\000\000\003\028\016\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130F\252Lz\000\128\248\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\b\216@\017`\145\191\019\030\128 >\000\000\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\134!\031\128Y\2291i\241\144l\016\003%\150\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\148\128(H\005(&+\000\016\012\000\000\020\016\000\192\000\024\000\000\020\\\016\000\b\000\000\000\000\000\000 \000\000\000\001\002\000\000\000\004\000\000\000\000\000\0026\016\004X$o\196\199\160\b\015\128\000\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\164\001B@)A1X\000\128`\000\000\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202@\020$\002\148\019\021\128\b\006\000\000\n\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\027\b\002,\0187\226c\208\004\007\192\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000F\194\000\139\004\141\248\152\244\001\001\240\002\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\146\151p}\003\224\176p?\229\132\239\022\254p\2402\016\004\b\000%\004\197\160\002\001\160\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130F\252Lz\000\128\248\000\000\012pjJ]\193\244\015\130\193\192\255\150\019\188[\249\195\200\216@\017`\145\191\019\030\128 >\000\000\003\028\026\146\151p}\003\224\176p?\229\132\239\022\254p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\b\000\"\004@\141\132\001\022\t\027\2411\232\002\003\224\000\0001\192\000\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\004\017\176\128\"\193#~&=\000@|\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d \b\016\000J\t\139@\004\003\000\000\001\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\002\004\132!\016\t\001A1\200\000\000`\000\0001\129\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\216@\017`\145\191\019\030\128 >\000\000\131\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\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 \001 \007\192\012\002\001\000\248\bB\000\r\130\003#a\000E\130F\252Lz\000\128\248\000\000\012p\b\000A\001\240\003\000\128@>\002\016\128\003a\128\192\200@\016 \000\156\0196\128\b\006\128\000\002\b\002\000\000@\000\000\000\000\000\000\000\004\000\000@@@2\016\004\b\000'\004\205\160\002\001\160\000\000\130\000\025\b\002\004\000\019\130b\208\001\000\208\000\000A\000\012\132\001\002\000\tA1h\000\128h\000\000 \128\000\000\000\000\000\000\000\001\000\002\000\000\000\b\129\016#a\000E\130F\252Lz\000\128\248\000\000\012p\b\000A\001\240\003\000\128@>\002\016\128\003a\129\192\000\000\000\000\000\000\000 \000@\000@\001\016\"\004l \b\176H\223\137\143@\016\031\000\000\001\142\001\000\b >\000`\016\b\007\192B\016\000l09\027\b\002,\0187\226c\208\004\007\192\000\000c\128\000B\000\015\128\024\004\002\001\240\016\004 \019\004\006F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\016\000\130\003\224\006\001\000\128|\004!\000\006\195\003\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\000\000\000\000\000\000#a\000E\130F\252Lz\000\128\248\000\000\014p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\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\128\004\128\031\0000\b\004\003\224!\b\000&\024\012@\000\000\000\000\000\000\000\000\000\000\128\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\002E\130F\252Lz\000\128\248\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\004\144\031\0000\b\004\003\224!\b\000&\b\012@\000\b\000\000\000\000\000\000\000\000\128\000\000\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\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\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\018\016\004@$\005\004\199 \000\001\128\000\000\198\002\000\000\000\000\000\000\000\000\000\003\000\000(\000\000\000\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\128\000\017\000\000\000\000\000\000\000\000\001\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\004@\000\000\000\000\000\000\000\000@\000\000\000\016\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\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\016\000\000\000\000\000\000\000\000\000\024\000\001@\000\000\000 \000\000\000\000\n\001\142\000\000\000\000\000\000\000\012\000\001\016\000\000\000\000\000\000\006\000\016P\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003RR\238\015\160|\022\014\007\253\176\157\246\223\206\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\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\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\002D\015\128\024\004\002\001\2400\004\000\019\004\007\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\128\000\000\000\000\000\016\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000I\001\240\003\000\128@>\002\016\128\002`\128\196\000\000\128\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\144\003\224\006\001\000\128|\004!\000\004\195\001\136\000\000\000\000\000\000\000\000\000\000\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \004\000\000\004\004\b\000\000\016\000\000\000\000\000\b\016\002\000\000\002\002\000\000\000\b\000\000\000\000\000\000\000\000\000\000\001\000\002\000\004\000\000\000\000\000\000F\194\000\139\004\141\248\152\244\001\001\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000 \000\000\000@\000\000\000\000\000\000\000\000\192\000\000\000\000\000\000 \000\000\000\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\016\000\002\000\000\b\016\002\000\000\002\002\000\000\000\b\000\000\000\000\002\018\000\138\000 A\018\014\000\012\128\025\128\000@\b\002\000\128\128\000 \160\128\000\000\002\000\000\000\000\000@\000\000\000\000\b\000\000\128\000\000\001\000\000\000\000\000\129\000 \000\000 \000\000\000\128\000\000\000\000! \b\160\002\004\017 \224\000\200\001\152\000\004\000\128\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\0026\016\004X$o\196\199\160\b\015\128\000\000\199\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\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000@\000@\000\192\000\000\b\000\000\000\000\000\144\000\000\000\000 \000`\000\000\004\000\000\000\000\000H\000\000\000\000\016\000\016\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\128\001\000\000\000\000 \000\001\128\0000\000@(\184(\000\017\000\000\000\000\000\000\192\000\024\000\000\020\\\016\000\b\000\000\000\000\000\016\176\020P\001\003\002\144p\000d\000\204\002\002\016@\000\000\000\000\n\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\192\000\028\004\000\028\\\016\000\b\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000 \000\000\0000\000\007\001\000\007\023\004\000\002\000\000\000\000\000\000\000\000\136\000\000\000\000\004\000\000 \000\000\000\000@\000\000D\000\000\000\000\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\001\000\000\160\016\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004@\000\000\000\000 \000\001\000\000\000\000\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\b\000\005\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000`\000\000Qp@\000 \000\000\000\000\000B\192Q@\004\012\nA\192\001\144\0030\b\bA\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\012\000\016\n.\b\000\004@\000\000\000\000\0000\000\006\000\000\005\023\004\000\002\000\000\000\000\000\004,\005\020\000@\192\164\028\000\025\0003\000\128\132\016\012\000\001\128\000\001E\193\000\000\128\000\000\000\000\001\011\001E\000\0160)\007\000\006@\012\192 !\004\133\128\162\128\b\024\020\131\128\003 \006`\016\016\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!`(\160\002\004\005 \224\000\200\001\152\004\004 \128`\000\012\000\016\n.\n\000\004@\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\016\000\000\000\024\000\003\000\004\002\139\130\128\001\016\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\006\000\000\192\000\000\162\224\128\000@\000\000\000\000\000\133\128\"\128\b\016\020\131\128\003 \006`\016\016\130B\192Q@\004\012\nA\192\001\144\0030\b\bA\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000`\000\012\000\000\n.\b\000\004\000\000\000\000\000\bX\002(\000\129\001H8\0002\000f\001\001\b$,\005\020\000@\192\164\028\000\025\0003\000\128\132\016\000\000\000\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000#a\000E\130F\252Lz\000\128\248\000\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d \136\016\000N\t\155@\004\003\000\000\001\004\0002\016D\b\000'\004\197\160\002\001\128\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\132\001\002\000\t\1931h\000\128`\000\000 \129\t\000E\000\016 \t\006\000\006@\012\192\000 \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\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\128\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000jJ]\193\244\015\130\193\192\255\150\019\188[\249\195\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\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 \001 \007\192\012\002\001\000\248\bB\000\r\130\003\016\000\000\000\000\000\000\000\000\000\000 \000\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\016 @\b\b\000\b\b\016\000\000 \000\000\000\000\000\016 \004\000\000\004\004\b\000\000\016\000\000\000\000\000\b\016\002\000\000\002\002\000\000\000\b\000\000\000\000\000\000\000 \000\000\001\000\002\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000@@\000\016P@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\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\b\000\000\128\000\000\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200@\016 \000\148\019\022\128\b\006\128\000\002(\026\146\151p}\003\224\176p?\229\132\239\022\254p\248\000\b\128>\000`\016\b\007\192@\016\000^\016\024\000\000\000\000\000\000\000\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\002\000\128\128\000 \160\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\004\000\000\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\016 \b\b\000\002\n\b\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000@\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\128\128\000 \160\128\000\000\002\000\000\000\000\000@\000\b\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \b\160\002\004\017 \224\000\136\001\152\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \004\000\000\004\004\b\000\000\016\000\000\000\000\000\b\016\002\000\000\002\002\000\000\000\b\000\000\000\000\002\018\000\138\000 A\018\014\000\b\128\025\128\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\004\000@\000\000\000\128\000\000\000\000\000\000\000\000\128\000\000 \000\b\000@\000\000\000\000\000\000\000\000@\000\000\000\000\004\000 \000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\bH\002(\000\129\000H0\000\"\000v\000\001\000\000\b\002\002\000\000\130\130\000\000\000\b\000\000\000\000\003\018\000\138\000 `\018\014\000\b\128\025\128\000@\001\t\000E\000\016 \t\006\000\004@\012\192\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\002\000\000\000\000\000@\000\000\000\000\000\000\000\000\192\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\004\000\000\000\000\000\016\000\002\000\004$\001\020\000@\128$\024\000\017\0003\000\000\128\018\018\000\138\000 @\018\b\000\b\128\025\128\000@\b\006\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\128\000\016\000! \b\160\002\004\001 \192\000\136\001\152\000\004\000\144\144\004P\001\002\000\144@\000D\000\204\000\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\001\000\000\000\000\000\004\000\000\128\001\t\000E\000\016 \t\006\000\004@\012\192\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000>\251\"\004\023\248\218\000\004\193\192\247\028X\n\r\t\248H\181b\149\1913\158\128\160?\128\000\015\028\000d \b\016\000J\t\139@\004\003@\000\001\004\001\000\000 \000\000\000\000\b\000\000\000\000\000D\b\129\027\b\002,\0187\226c\208\004\007\192\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\251\236\136\016_\227h\000\019\007\003\220q`(4'\225\"\213\138V\252\206z\002\128\254\000\000\000\000\003\028\016\128\000\016\000\000 \016`0\000\000\004\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\002\000\016\002\162\006\000\000\002\000\000\000\002\000\004\000\001\000\b\001Q\003\000\000\001\000\000\000\000\000\002\000\000\128\004\000\168\128\128\000\000\128\000\000\000\000\001\000\000@\002\000T@@\000\000@\000\000\000\000\001\144\130 d\0018&m\000\016\012\000\000\004\016\031}\145\002\011\252m\000\002`\224{\142,\005\006\128d \136\016\000N\t\155@\004\003\000\000\001\004\0002\016D\b\000'\004\197\160\002\001\128\000\000\130\000\025\b\002\004\000\019\130b\208\001\000\192\000\000A\000\000\000\000\000\000\000\000\004\000\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\128\000\000\000\000\000\000@\000\128\000\000\000\000\000\000@\000\000\000\000\000\000\000\000@\000\000\000\000\000\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\000\004\000 \005D\004\000\000\004\000\000\000\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\016\000\000\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\001\148\128(H\001(&k\000\016\012\000\000\004\016\000\202@\020$\000\148\019\021\128\b\006\000\000\002\b\000e \n\018\001J\t\138\192\004\003\000\000\001\004\000\016\000\004\000 \005D\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\016\004\000\001\000\b\001Q\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\169*\212\026QT\207\247\130 \030`\016\011\007\003\254XN\241o\231\015\000\000\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\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\004\000\004\000\000\000\128\000\000\b\000\t\000\000\000\000\002\000\002\000\000\000@\000\000\004\000\004\128\000\000\000\001\000\001\000\000\000 \000\000\000\001\t\000E\000\024 \t\007\000\004@\014\192\000a\000\001 \000\000\000\000@\000@\000\000\b\000\000\000\000B@\017@\004\b\002A\192\001\016\0030\000\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\144\004P\001\002\000\144`\000D\000\204\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\004P\001\130\000\144p\000D\000\236\000\006\016\000\018\000\000\000\000\004\000\004\000\000\000\128\000\000\000\004$\001\020\000@\128$\028\000\017\0003\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\132\128\"\130\b\016\004\131\000\002 \007`\016\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \b\160\002\004\001 \192\000\136\001\152\004\004\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\t\000\000@\000\002\000\002\000\000\000@\000\000\004\000\004\128\000\000\000\001\000\001\000\000\000 \000\000\002\001\t\000E\000\016 \t\006\000\004@\012\192\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\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\000\000\000\002\000\000\000\004\128\000\000\004\000\0000\000\007\001\000\007\023\004\000\002\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000 \000\000\000\000\000\000\000@\000\000\000\000\000\000\000\016\000\000\000\000\000\006\000\000\192\000\000\162\225\128\000H\000\004\000\000\000\003\000\000`\000\000Qp@\000$\000\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 \002\000\000\000\002\000\000\000\004\128\000\000\000\000\0000\000\006\000\000\005\023\004\000\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\b\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\000\000\000\000\000\000\000\000\000\128\000\000\000\192\000\028\004\000\028\\\016\000\b\000\000\000\000\000\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\012\000\001\128\000\001E\193\000\000\128\000\000\000\000\001\137\000w\000\0162\t\007\003\004H\014\192*!\022\196\128;\128\b\025\004\131\129\130$\007`\021\016\139\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\024\000\000\020\\\016\000\b\000\000\000\000\000\000`\000\014\002\002\014.\b\000\004\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\016\000\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000qp@\000 \000\000\000\000\000\001\128\0000\000\000(\184 \000\016\000\000\000\000\0001 \014\224\002\006A \224`\137\001\216\005D\"\216\144\007p\001\003 \144p0D\128\236\002\162\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\012\000\001\192@\001\197\193\000\000\128\000\000\000\000\000\006\000\000\192\000\000\162\224\128\000@\000\000\000\000\000\196\128;\128\b\025\004\131\129\130$\007`\021\016\139b@\029\192\004\012\130A\192\193\018\003\176\n\136E\128\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\0000\000\007\001\000\007\023\004\000\002\000\000\000\000\000\000\024\000\003\000\000\002\139\130\000\001\000\000\000\000\000\003\018\000\238\000 d\018\014\006\b\144\029\128TB-\137\000w\000\0162\t\007\003\004H\014\192*!\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\128\000\000\000\192\000\028\004\000\028\\\016\000\b\000\000\000\000\000\000\000\001\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\024\000\003\128\128\003\139\130\000\001\000\000\000\000\000\000\012\000\001\128\000\001E\193\000\000\128\000\000\000\000\001\137\000w\000\0162\t\007\003\004H\014\192*!\022\196\128;\128\b\025\004\131\129\130$\007`\021\016\139\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000 \000\000\0000\000\007\001\000\007\023\004\000\002\000\000\000\000\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\006\000\000\224 \000\226\224\128\000@\000\000\000\000\000\003\000\000`\000\000Qp@\000 \000\000\000\000\000b@\029\192\004\012\130A\192\193\018\003\176\n\136E\177 \014\224\002\006A \224`\137\001\216\005D\"\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\001\000\000\000\000 \000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b\016\004\131\128\002 \006`\016\016\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\000d\000\015\002\000\014.\n\000\004\001\000@\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004$\001\020\000@\128\004\024\000\016\0003\000\128\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000@\000@\000\000\b\000\000\000\128\000\144\000\000\000\000 \000 \000\000\004\000\000\000@! \b\160\002\004\000 \192\000\128\001\152\000\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\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\132\128\"\130\b\016\000\131\000\002\000\007`\016\144\002\001\144\000<\b\0008\184(\000\016\004\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\144\004P\001\002\000\016`\000@\000\204\002\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\128\000 \000\001\000\001\000\000\000 \000\000\002\000\002@\000\000\000\000\128\000\128\000\000\016\000\000\001\000\132\128\"\128\b\016\000\131\000\002\000\006`\000\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000@\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000E\000\016 \t\006\000\004@\012\192\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\000\000\000\000\000\000\000\000\000\000\000\000\004l \b\176H\223\137\143@\016\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\027\b\002,\0187\226c\208\004\007\192\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\004\016\001\002\000\016@\000@\000\200\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002@\000\000\000\000\160\000\128\000\000\016\000\000\000\000\128\000\136\007\224\022\t\000\000|D\001\004\000\193E\128\000\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\002\000\000\000\000\000\000\b\000\000\000\004\000\000\000\000\001@\000\000\000\000\000\000\000\000\001\000\001\000\015\192,\018\000\000\248\136\002\b\001\130\139\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\000\000\000 \000 \000\000\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\003\128\128\003\139\130\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\001\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\176\128\"\193#~&=\000@|\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\002\000\000\002\002\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\001\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128 \000\b( \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000\016\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\144\128 @\001(&-\000\016\r\000\000\004\016\000\000\000\000\000\000\000\000 \000\000\000\016\001\016\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\002\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000@\000\000\000\000\020\000\000\000\000\000\000\000\000\000\004\252$\024\177J\223\153\207@T\031\200\000\003\142\000\016\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000-\t\004\000@\130\164\016\016\017\000r\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\004\016\001\002\000\144@\000D\000\200 \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\128\000\000\000\000\000\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\128 \128\b\016\004\130\000\002\000\006\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\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\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\000O\194A\139\020\173\249\156\244\005A\252\128\0008\224'\225 \197\138V\252\206z\002\160\254@\000\028p\002@\016@\004\b\002A\000\001\016\003 \000\b\000\001 \b \002\004\001 \128\000\136\001\144\000\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$\001\004\000@\128$\024\000\017\0002\000\000\128\000\018\000\130\000 @\018\b\000\b\128\025\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 \b \002\004\001 \192\000\136\001\144\000\004\000\000\144\004\016\001\002\000\144@\000D\000\200\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") and start = 15 and action = - ((16, "ENS\nF@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\204F@\000\000\000\000\020\214F@EN\0218\000K\001\234m>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\168\000\000\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\222\000(\001&\000\000\002\012\002\130\000\000\000~\003\002\003\168\000\000\003\214\003R\0040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003p\000\000\000\000\000\000\002\216\155\188\000\000\000\000\000\000\001\250\000\000\000\000Q(\004h\005\138\000\000\000\000\155\188G\200\020\214C*m\180\020\214\159\174P\028\020\214F\240\000\000\004\222\000\000F\240\005\"\000\000E6\000\000\0224\000\000\000\000\004b\000\000\001\250\000\000\000\000\000\000\002r\000\000E6\000\000\003@\143 \149`yn\000\000\001\250\000\000\151\150\155\188\000\000\164\170\155\188R\024p\128\155\188\163b\156\012F@EN\000\000\000\000P\028\020\214L:F\240\003\188\139\160\000\000\149\232F@ENS\n\020\214\000\000\000\000\016\222PL\020xT\198\\h\000\000\000\"\000\000\000\000\001 \000\000\000\000J\144\000\"\022d\004\154\000*\000\000\000\000\002<\000\000C*\007X\007.\020\214\027\182\020\214ENEN\000\000\000\000\000\000RJHJ\020\214\027\182QZ\020\214\000\000\022\144\007\142\004\148\000\000\007\136\005<\000\000\000\000\000\000\000\000\000\000\020\214\000\000\000\000\000\000S\n\020\214\000\000Cf\139\198EN\000\000\000\254\000\000\\hl2l2\000\000\004\148\000\000\007\020\000\000\000\000E\248v\236[\000\000\000v\236[\000\000\000v\236\156\012\003\b\000\000\004\200\007\014\000\000\000\168\000\000\005\242\000\000\000\000\005\242\000\000\000\000\000\000v\236\001\250\000\000\000\000^,\160j\164\170^\178\160\160\164\170_8[x{d\000\000\000\000S\244\003\b\000\000\000\000T\240{dU\236_\190\000\000\164d\155\188\000\000\007h\003\b\003\b\000\000\000\000v\236\000\000\006\190\000\000kB\bB\001\250\000\000\000\150\001\250\000\000v\236\005\222\t\012\160\230\164\170`D`\202\000\000\bf\000\000v\236\td\164\192\155\188\005rv\236\006\220\tT\161\028\164\170aPa\214\000\000\t\156\161b\164\170b\\b\226\000\000\t\232\161\152\164\170chc\238\000\000dt\000\000\000\000\000\000\000%\000\000v\236\000\000\020L\158\142\000\000v\236\005\252v\236B\192\000\000G\196\000\000\001\006\b$\000\000\nrv\236\b,\000\000\b:\000\000\005@\000\000\000\000\006f\000\000\000\000\000\000\029\190\000F\\hS\n\020\214\\h\000\000\003\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P:Lv\000\000\000\000\000\000\002\000\015\200l2\000\000\000\000S\022\020\214\\h\000\000\000\000\\\182\\hn\238\143\158\000\000q\224\000\000\\h\000\000\000\000]ZOH\002@\002@\000\000\011\180\\h\000\000\000\000\000\000\001 \012\194\000\000C2\000\000\000\000\143\234\000\000\156\158v\236\000\000\007\188\000\000\000\000\144|\000\000\156\228\006\196\000\000\000\000\000\000\000\000\r\230\000\000MD\000\000\000\000\142\158\000\000\0032\000\000\000\000D\254\138H\000\000\000\000F\130\022v\024\004\024F\000\000\000\000\000\000\000\000\004\026\000\000\000\000l\018\006<\007<\007<\021~\155\188\007\206v\236\nb\n\142\014B\000\000\014\194\000\000\000\000\006\152\t4\007<\007\242\000\000S\nR\216HJ\020\214\027\182\000K\004\156\011\140\000\000\014VC*C*\000K\004\156\b\224C*\000\000~\018\tFF\240\004\148\007\228\159\006\000\000v\236y\238v\236pVznv\236\bfv\236z\238\000\000\n\138\b6\b\226C*~\146\000\000\b\168\005\150m\232\000\000\000\000\000\000\000\000C*\127\018C*\127\146\000\224\003\bp\252\005<\003\bq\130\000\000\128\018\tF\000\000\000\000\000\000\021\162\000\000\000\000\001J\000\000\t\190\027\182\000\000n\174XN\000\000\025@\000\000\000\000C*\023\178\000\000\000\000\000\000\000\000l\208\000\000\bd\000\000Y\214\nV\007@\000\000\022\192P\162S\n\020\214I\nS\n\020\214\016\222\016\222\000\000\000\000\000\000\000\000\001\252\023pDZ\000\000V\222W\152S\000\020\214\027\182\011|W\004\000\000\002H\000\000XRY\012\144\200\0210v\236\tz\000\000S\n\020\214\000\000S\028\020\214l2\\h\0240\000\000S\n\020\214\140r\002\160\000\000\\h\\hDH\155\188\nhv\236\012^\012\138\007\242\015X\000\000\007\242\015\226\000\000\000\000\000\000J\144\002@\016f\133\202\000\000S\022\020\214\\h\026L\000\000S\n\020\214\016\222\022\192\016\222\002\250\016\198\000\000\000\000\016\222\t\234\0168\t.\156\012\000\000\028>\159N\000\000\022lv\236\028\192\016\186\000\000\000\000\016\132\000\000\016\222\003\248\016\148\000\000\017\196\000\000\n:\000\000\000\000\026\184\000\000\017\220\023\190\000\000\000\000\000\000\000\000\000\"\000\000\000\000\027\182\000\000\028\180\000\000\029\178\000\000\018\218\024\188\000\000\000\000\000\000F@\000\000\000\000\000\000\000\000\030\176\000\000\031\174\000\000 \172\000\000!\170\000\000\"\168\000\000#\166\000\000$\164\000\000%\162\000\000&\160\000\000'\158\000\000(\156\000\000)\154\000\000*\152\000\000+\150\000\000,\148\000\000-\146\000\000.\144\000\000/\142\000\0000\140\000\0001\138\020\214\138H\001\234\128\170K\130\002@\016\234\1296\153\202OH\\h\024\022\000\000\017\n\001\250\000\000\n\238v\236\n,\000\000H\194\155\188\011Tv\236\011*\000\000\000\000\000\000\000\000\016\168\000\000\000\000\000\000\000\000\000\000\1296\000\000\\h\017T\000\000Jp\155\188\011\192v\236\011n\000\000\1574\012dv\236\011|\000\000\000\000\016\224\000\000\000\000\000\000LvMd\002@\017\140\129\194\000\000\000\000\017<\000\000\000\000\000\000\129\194\000\000\000\000\1574\002@\017:v\236\011\140\000\000\000\000\012\190v\236\011\148\000\000\000\000\017T\000\000\000\000\000\000\024Pv\236\012z\000\000\000\000\028H\000\000\000\000\145Z\000\000\029F\145\166\000\000\030D\1468\000\000\031B\007\194\000\000\000\000\000\000\000\000 @\\h!>\000\000\134F\134F\000\000\000\000\000\0002\136\000\000\n\194\000\000\000\000\000\000\012\004\000\000\000\000\n*\0210\000\000\n\222\000\000\000\000oVI\n\000\000\000\000\011\240\000\000\000\000\000\000\r\216\000\000\000\000\000\000\016\222\004\246\022H\000\000\0118\000\000\005\244\000\0003\134\000\000\012\146\000\000\006\242\000\0004\132\000\000\014\000\000\000\007\240\000\0005\130\018\194\000\000\0126\b\238\000\0006\128\000\000\r\144\t\236\000\0007~\000\000\014\214\n\234\000\0008|\nr\023\166\000\000\012n\011\232\000\0009z\000\000\r\236\012\230\000\000:x\000\000\014\254\r\228\000\000;v\014\226\000\000p\000\000?n\000\000\"<\000\000\000\000\004\170\000\000\000\000\\h\000\000\000\000\140\190\rl\000\000\000\000I\196\000\000\012L\000\000\000\000oVS\022\020\234\000\000|\246\000\000\000\000\000\000S\022\020\214\\hH\194\000\000r\020\000\000r\020\000\000r\214\000\000\000\000\000\000\000\000Z\160\000\000\014\130\000\000\000\000{`S\022\024\024\000\000{\234\000\000\000\000\000\000\000\000\000\000\nV\012\148\000\000\000\000\022\192\025\158\004\148\000\000B\186\000\000\023\006\026\000\027\238\000\000\000\000\015\212\000\000\000\000\001d\025lUf\000\000\025\186\000\000\r\150\000\000\000\000\016V\000\000\000\000{\234\001(\rJ\000\000\000\000\r\146\000\000\000\000\014\142\000\000\000\000{`\000\000\000\000\020\214\027\182\tb\000\000\000\000\022d\004\154\000*\012\250\027\182\140\254C*\002\166\027\182\141\132\017\238\000\000\000\000\012\250\000\000D\"\020\154\027\244\000\000\012\198\018r\000\000\018z\003\226{d{ds*\002\244\000\000\000\000\000\000\018F\017\210\155\188\014\192v\236B\136\020\176\014\030\020\176\000\000B\238\018\160\000\000\024t\000\000\000\000{ds\248\018\194\163\192{dt&{dt\244u\"\000\000|\138\161\206\014\230{d\018\142{d\130Du\240\018\148{d\130\196v\030\006L\018Z\000\000\000\000\000\000\020\214\146\132\000\000\138H\134F\000\000\000\000\018\212\000\000\007\242\018\220\000\000\000\000\000\000@l\000\000\000\000\0150\000\000\000\000oV\000\000\000\000S\000\020\214\027\182\0298\000\000Yz\000\000\005B\000\000\024\172\000\000\000\000\018\230\000\000\019\016l2Aj|\246\000\000\000\000ZD\000\000\006@\000\000[\170\000\000\029\190\000\000C*\b<\000\000\134F\000\000\020\214\027\182\134F\000\000#\204\022\144\007\142\001\250\152\030C*\147\"\134F\000\000\020x\000*\000*\012\250\134F\154.\004\154\000*\012\250\134F\154.\000\000\000\000\012\250\134F\000\000F@EN\\h\025.\000\000\000\000F@EN}N\000\000\0218\000K\001\234\018J\155\188\015xv\236\134\198\018r\019\028\152T\000\000\134F\000\000\135FD\"\020\154\027\244\141\178\028\242\014h\147v\014\132\018`\020\214\134F\000\000\020\214\134F\000\000v\236\159\174\019\254\t\226\004\154\003\b\134h\000\000\004\154\003\b\134h\000\000$\026\022\144\007\142\001\250V\146C*\134F\000\000\020x\004:\025\206\r\016\000\000\134h\000\000\000*\018pC*\134F\157d\004\154\000*\018\128C*\134F\157d\000\000\000\000\r\248\000\000\134F\000\000C*\152\248\134F\000\000\004\156\000\000D\"\020\154\027\244\135\198D\"\027\134\020\154\026V\000\000\007\146E6\n\232\000\000\019\018\018\194Kb\020xY$v\236\014\n\000\000L:\000\"\006L\012R\000\000\015*\000\000\019\030\018\166v\236N\240\000\000\020\196\023\190\016\154\000\000\015:\000\000\019\"\018\170\155\188N\240\000\000\020\154Kb\019P\020x\004\154\000\000\000jKbv\236\r\188\003\b\000\000v\236\003\222\004\220\000\000\000\000\131D\000\000\000\000\015\028Kb\131\196N\240\000\000\020\214v\236\014\142v\236E\156N\240\000\000\015\146\000\000\000\000N\240\000\000\000\000L:\000\000\134F\154j\020\154\026V\007\146\019>\018\238Kb\134F\154j\000\000\000\000\020\154\026V\007\146\019J\018\236\150\004Q\206{d\019v\150\004\156\012\028>\019\132\150\004{d\019\136\150\004\132J\132\202\000\000\150D\000\000\000\000\134F\157\190\020\154\026V\007\146\019~\019\n\150\004\134F\157\190\000\000\000\000\000\000\159\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\134F\000\000G\200\020\214C*\134F\000\000\154\234\020\162F\240\019\142\139\160\000\000\149\232\154\234\000\000\000\000\158\024\020\162F\240\019\148\019&\149`\156\012\002\244\019\226\000\000\000\000\133L\135\198\020\214\000\000\147\164\027\244\000\000\000\000\149\232\158\024\000\000\000\000\000\000\142\006I\208G\b\002\244\019\244\000\000\000\000\000\000\135\198\020\214\000\000\002\244\019\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\166D\"\020\154\026V\007\146\019\194\136\163J\164\170j6j\188\000\000\002\244\022t\000\000\000\000\148*\000\000\000\000\149`\000\000\149\232\000\000\022lF\174Nr\156l\000\000\000\000\000\000\000\000\017~\148~\149`\000\000\149\232\000\000\022xF\174Nr\156l\000\000\018\140\000\000\000\000\t:\000\000\134F\000\000\022\138\000\000\000\000\021\242\000\000\022\n\000\000\022\028\000\000\000\000T$\0224\000\000\000\000\026\246m>\022\208\000\000\000\000\000\000\015\154\005\150o\224\022\226\000\000\000\000\000\000\000\000\000\000\000\000\022P\000\000\028\242\000\000\022T\000\000v\236\000\000\n\142\000\000\000\000\022`\000\000\000\000\003\b\000\000\000\146\000\000\000\000\000\000\012\142\000\000\027\182\000\000\011|\000\000C*\000\000\002\166\000\000\b6\000\000\022d\000\000\\h\0240\000\000\000\000\b\144\022v\000\000\000\000\022|\b\236I\n\001\250\149\000\000\000\000\000\000\000\000\000\000\000y\194\000\000\000\000\023:\000\000T \000\000\004\164\023@\000\000\023F\000\000I\196I\196\146^\146^\000\000\000\000\134F\146^\000\000\000\000\000\000\134F\146^\022\172\000\000\022\174\000\000"), (16, "\t\253\t\253\000\006\t\253\005\206\t\253\002\198\002\202\t\253\002\246\002\138\t\253\004\201\t\253\004\201\003\002\t\253\0079\t\253\t\253\t\253\004\201\t\253\t\253\t\253\001\218\000\246\003J\003N\003\006\t\253\003~\003\130\011\150\t\253\007\173\t\253\0079\003\n\001n\003\173\003\162\020\"\t\253\t\253\003\214\003\218\t\253\003\222\003\234\003\246\003\250\004\002\b\030\007\173\t\253\t\253\002\190\007\173\004\201\003\242\t\253\t\253\t\253\tz\t~\t\138\t\158\004\201\006Z\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\n\018\000\246\t\253\001n\t\253\t\253\003\173\003\"\n\030\n6\n\158\006f\006j\t\253\t\253\t\253\011b\t\253\t\253\t\253\t\253\005\210\005&\016\n\t\253\004b\t\253\t\253\003&\t\253\t\253\t\253\t\253\t\253\t\253\006n\t\146\t\253\t\253\t\253\t\170\004\134\n\178\004V\t\253\t\253\t\253\t\253\014}\014}\006J\014}\022\142\014}\004V\014}\014}\025&\014}\014}\014}\014}\012F\014}\014}\007E\014}\014}\014}\t\213\014}\014}\014}\014}\t\197\014}\b\246\014}\014}\014}\014}\014}\014}\014}\014}\007E\014}\bf\017\154\014}\031s\014}\014}\014}\014}\014}\004f\014}\005.\014}\001\229\014}\003\254\014}\014}\014}\t*\004f\014}\014}\014}\014}\014}\014}\014}\000\246\014}\014}\014}\014}\014}\014}\014}\014}\014}\014}\014}\b\238\014}\014}\b\226\014}\014}\0012\003.\b\246\t\197\014}\014}\014}\014}\014}\014}\b\250\014}\014}\014}\014}\014}\000\246\014}\014}\t\213\014}\014}\0032\014}\014}\014}\014}\014}\014}\014}\014}\014}\014}\014}\014}\014}\001r\t\197\014}\014}\014}\014}\001\229\001\229\001\229\001\229\001\229\001\229\001\226\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\017f\001\229\001z\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\bf\001\n\001\229\001\198\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\230\001\229\003V\001\229\006\161\001\229\001\229\001\229\t\242\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\007\005\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\002n\001\229\001\229\b\226\001\229\001\229\006\246\bf\007\005\nF\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\000\246\t\194\001\229\006\158\001\229\001\229\b\173\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001\229\001~\001\229\001\229\001\229\001\229\001\229\011=\011=\b\226\011=\nJ\011=\n\130\011=\011=\006\161\011=\011=\011=\011=\001\214\011=\011=\003Z\011=\011=\011=\000\246\011=\011=\011=\011=\001\138\011=\007\138\011=\011=\011=\011=\011=\011=\011=\011=\018N\011=\018R\002r\011=\001\214\011=\011=\011=\011=\011=\006y\011=\007\142\011=\017\254\011=\031\163\011=\011=\011=\004N\001\190\011=\011=\011=\011=\011=\011=\011=\001\154\011=\011=\011=\011=\011=\011=\011=\011=\011=\011=\011=\001\194\011=\011=\018V\011=\011=\026\174\002~\007\r\004\246\011=\011=\011=\011=\011=\011=\001\206\011=\011=\011=\011=\n\202\027\002\011*\011=\001\214\011=\011=\007\r\011=\011=\011=\011=\011=\011=\011=\011=\011=\011=\011=\011=\011=\027\006\011=\011=\011=\011=\011=\003\249\003\249\001n\003\249\012F\003\249\003\173\003\249\003\249\t\133\003\249\003\249\003\249\003\249\001\142\003\249\003\249\007\198\003\249\003\249\003\249\002\226\003\249\003\249\003\249\003\249\018>\003\249\007\021\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\000\246\003\249\003J\021R\003\249\002\238\003\249\003\249\003\249\003\249\003\249\007\021\003\249\000\246\003\249\003i\003\249\021f\003\249\003\249\003\249\004\225\002V\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003i\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\002Z\n\194\011\"\001\158\003\249\003\249\002\202\027\n\004\201\004\201\003\249\003\249\003\249\003\249\003\249\003\249\t\133\003\249\003\249\003\249\003\249\n\202\018\198\011*\003\249\004\225\003\249\003\249\001\242\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\014A\003\249\003\249\003\249\003\249\003\249\003\233\003\233\003\174\003\233\b:\003\233\007\202\003\233\003\233\t\129\003\233\003\233\003\233\003\233\014A\003\233\003\233\000\246\003\233\003\233\003\233\002\238\003\233\003\233\003\233\003\233\004V\003\233\014E\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\001j\003\233\bf\016N\003\233\003\186\003\233\003\233\003\233\003\233\003\233\014E\003\233\000\246\003\233\001\130\003\233\001\146\003\233\003\233\003\233\019\130\006*\003\233\003\233\003\233\003\233\003\233\003\233\003\233\021\170\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\004r\n\194\011\"\b\226\003\233\003\233\016V\003\190\b\198\005&\003\233\003\233\003\233\003\233\003\233\003\233\t\129\003\233\003\233\003\233\003\233\n\202\000\246\011*\003\233\004\201\003\233\003\233\002.\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\006.\003\233\003\233\003\233\003\233\003\233\n\165\n\165\031\014\n\165\001\230\n\165\004j\n\165\n\165\0056\n\165\n\165\n\165\n\165\002:\n\165\n\165\004\201\n\165\n\165\n\165\000\246\n\165\n\165\n\165\n\165\004\201\n\165\005\210\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\005j\n\165\bf\004\201\n\165\004\201\n\165\n\165\n\165\n\165\n\165\022\"\n\165\004v\n\165\000\246\n\165\014\162\n\165\n\165\n\165\019\190\001\246\n\165\n\165\n\165\n\165\n\165\n\165\n\165\000\246\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\0066\n\165\n\165\b\226\n\165\n\165\007\214\022*\b\006\004\201\n\165\n\165\n\165\n\165\n\165\n\165\006\137\n\165\n\165\n\165\n\165\n\165\000\246\n\165\n\165\007Z\n\165\n\165\000\246\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\t\169\004\201\n\165\n\165\n\165\n\165\n\181\n\181\005\238\n\181\b\014\n\181\0196\n\181\n\181\005r\n\181\n\181\n\181\n\181\004Z\n\181\n\181\004\030\n\181\n\181\n\181\001\214\n\181\n\181\n\181\n\181\001\n\n\181\001\198\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\000\246\n\181\007\157\004\"\n\181\029.\n\181\n\181\n\181\n\181\n\181\025Z\n\181\004\134\n\181\000\246\n\181\014\186\n\181\n\181\n\181\007\157\003b\n\181\n\181\n\181\n\181\n\181\n\181\n\181\003f\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\004\242\n\181\n\181\t\169\n\181\n\181\004\201\025b\007\218\007\222\n\181\n\181\n\181\n\181\n\181\n\181\006q\n\181\n\181\n\181\n\181\n\181\007B\n\181\n\181\r\230\n\181\n\181\005q\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\007F\007\157\n\181\n\181\n\181\n\181\n\173\n\173\004\201\n\173\0039\n\173\t\134\n\173\n\173\005&\n\173\n\173\n\173\n\173\000\246\n\173\n\173\021\234\n\173\n\173\n\173\007\181\n\173\n\173\n\173\n\173\001\n\n\173\001\198\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\000\246\n\173\bf\005\002\n\173\002\014\n\173\n\173\n\173\n\173\n\173\006\n\n\173\003\182\n\173\006\026\n\173\014\210\n\173\n\173\n\173\019\218\006\"\n\173\n\173\n\173\n\173\n\173\n\173\n\173\005\026\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\005R\n\173\n\173\b\226\n\173\n\173\007\234\001\230\002\202\bv\n\173\n\173\n\173\n\173\n\173\n\173\b\026\n\173\n\173\n\173\n\173\n\173\000\246\n\173\n\173\b~\n\173\n\173\t>\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\000\246\000\246\n\173\n\173\n\173\n\173\n\153\n\153\001\n\n\153\001\198\n\153\003\186\n\153\n\153\tv\n\153\n\153\n\153\n\153\004V\n\153\n\153\t\193\n\153\n\153\n\153\005\210\n\153\n\153\n\153\n\153\b\154\n\153\005\210\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\bZ\n\153\bf\005V\n\153\b:\n\153\n\153\n\153\n\153\n\153\001\n\n\153\001\198\n\153\bj\n\153\014\234\n\153\n\153\n\153\030\170\005:\n\153\n\153\n\153\n\153\n\153\n\153\n\153\b\194\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\t\173\n\153\n\153\b\226\n\153\n\153\b\018\007\222\b\166\b\178\n\153\n\153\n\153\n\153\n\153\n\153\005v\n\153\n\153\n\153\n\153\n\153\000\246\n\153\n\153\b\218\n\153\n\153\t>\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\000\246\000\246\n\153\n\153\n\153\n\153\n\161\n\161\003\029\n\161\005\142\n\161\000\246\n\161\n\161\017\214\n\161\n\161\n\161\n\161\n\230\n\161\n\161\n\242\n\161\n\161\n\161\t2\n\161\n\161\n\161\n\161\b:\n\161\000\n\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\014\n\161\0116\t\173\n\161\005\166\n\161\n\161\n\161\n\161\n\161\n\222\n\161\011\014\n\161\012\146\n\161\014\254\n\161\n\161\n\161\003\029\011:\n\161\n\161\n\161\n\161\n\161\n\161\n\161\025:\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\003\221\n\161\n\161\n\230\n\161\n\161\n\242\002\202\b\170\005&\n\161\n\161\n\161\n\161\n\161\n\161\000\246\n\161\n\161\n\161\n\161\n\161\003\217\n\161\n\161\t\130\n\161\n\161\014&\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\014N\000\246\n\161\n\161\n\161\n\161\n\157\n\157\014*\n\157\014B\n\157\003\182\n\157\n\157\017\162\n\157\n\157\n\157\n\157\014R\n\157\n\157\000\246\n\157\n\157\n\157\021\242\n\157\n\157\n\157\n\157\003\221\n\157\005&\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n^\n\157\014\154\015\030\n\157\003\182\n\157\n\157\n\157\n\157\n\157\003\217\n\157\031S\n\157\012\170\n\157\015\018\n\157\n\157\n\157\006\018\014\158\n\157\n\157\n\157\n\157\n\157\n\157\n\157\025\130\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\005&\n\157\n\157\n\230\n\157\n\157\n\242\012\250\003J\003N\n\157\n\157\n\157\n\157\n\157\n\157\000\246\n\157\n\157\n\157\n\157\n\157\b>\n\157\n\157\012\138\n\157\n\157\002r\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\007\002\t>\n\157\n\157\n\157\n\157\n\169\n\169\000\246\n\169\014j\n\169\005&\n\169\n\169\000\246\n\169\n\169\n\169\n\169\0146\n\169\n\169\000\246\n\169\n\169\n\169\000\246\n\169\n\169\n\169\n\169\014n\n\169\012\162\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\014:\n\169\0116\r\014\n\169\031\147\n\169\n\169\n\169\n\169\n\169\rr\n\169\016~\n\169\r\134\n\169\015.\n\169\n\169\n\169\t\230\014\230\n\169\n\169\n\169\n\169\n\169\n\169\n\169\014N\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\004\133\n\169\n\169\012\242\n\169\n\169\014\178\017\"\015*\005&\n\169\n\169\n\169\n\169\n\169\n\169\022&\n\169\n\169\n\169\n\169\n\169\004\129\n\169\n\169\006\145\n\169\n\169\014\182\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\014\154\000\246\n\169\n\169\n\169\n\169\n\185\n\185\007\026\n\185\002\158\n\185\005&\n\185\n\185\000\246\n\185\n\185\n\185\n\185\015\130\n\185\n\185\000\246\n\185\n\185\n\185\021Z\n\185\n\185\n\185\n\185\004\133\n\185\001\214\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\r\006\n\185\016\130\r\170\n\185\017&\n\185\n\185\n\185\n\185\n\185\004\129\n\185\t\217\n\185\031\131\n\185\015B\n\185\n\185\n\185\b\246\b:\n\185\n\185\n\185\n\185\n\185\n\185\n\185\016j\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\015\162\n\185\n\185\r~\n\185\n\185\014&\017\170\016n\017~\n\185\n\185\n\185\n\185\n\185\n\185\018.\n\185\n\185\n\185\n\185\n\185\t\130\n\185\n\185\017\238\n\185\n\185\014\250\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\014z\017\246\n\185\n\185\n\185\n\185\n\177\n\177\022\154\n\177\014j\n\177\t\217\n\177\n\177\026\146\n\177\n\177\n\177\n\177\014\202\n\177\n\177\014~\n\177\n\177\n\177\007n\n\177\n\177\n\177\n\177\015>\n\177\014\178\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\014\206\n\177\022\018\015\166\n\177\017\174\n\177\n\177\n\177\n\177\n\177\018z\n\177\015\142\n\177\003\193\n\177\015V\n\177\n\177\n\177\017\130\b:\n\177\n\177\n\177\n\177\n\177\n\177\n\177\007\250\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\016\234\n\177\n\177\000\246\n\177\n\177\017\182\002\158\003\186\022\162\n\177\n\177\n\177\n\177\n\177\n\177\022\162\n\177\n\177\n\177\n\177\n\177\016\238\n\177\n\177\021\158\n\177\n\177\017\186\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\0146\021\170\n\177\n\177\n\177\n\177\011)\011)\020\222\011)\b\002\011)\027\018\011)\011)\005&\011)\011)\011)\011)\014z\011)\011)\015\014\011)\011)\011)\000\246\011)\011)\011)\011)\027\022\011)\005&\011)\011)\011)\011)\011)\011)\011)\011)\015R\011)\019N\022.\011)\bF\011)\011)\011)\011)\011)\022Z\011)\007\022\011)\022\226\011)\015b\011)\011)\011)\025.\014\202\011)\011)\011)\011)\011)\011)\011)\006q\011)\011)\011)\011)\011)\011)\011)\011)\011)\011)\011)\nr\011)\011)\015\154\011)\011)\018j\025f\006\141\022\246\011)\011)\011)\011)\011)\011)\b\221\011)\011)\011)\011)\011)\005&\011)\011)\018\206\011)\011)\022\198\011)\011)\011)\011)\011)\011)\011)\011)\011)\011)\011)\011)\011)\017Z\003\186\011)\011)\011)\011)\003\229\003\229\026\134\003\229\b\246\003\229\006u\003\229\003\229\000\246\003\229\003\229\003\229\003\229\004V\003\229\003\229\017^\003\229\003\229\003\229\n~\003\229\003\229\003\229\003\229\b\246\003\229\019R\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\006\162\003\229\025\242\025\194\003\229\028n\003\229\003\229\003\229\003\229\003\229\004\006\003\229\020\154\003\229\007~\003\229\004\018\003\229\003\229\003\229\022\250\017\138\003\229\003\229\003\229\003\229\003\229\003\229\003\229\031\n\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\025^\n\194\011\"\017\142\003\229\003\229\000\246\b\213\n\150\014\169\003\229\003\229\003\229\003\229\003\229\003\229\n\226\003\229\003\229\003\229\003\229\n\202\005&\011*\003\229\001\214\003\229\003\229\026\230\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\022R\003\229\003\229\003\229\003\229\003\229\002-\002-\011\n\002-\b\246\002-\011\022\002\202\002-\000\246\002\138\002-\n\218\002-\011&\003\002\002-\b\225\002-\002-\002-\028\242\002-\002-\002-\001\218\012b\011\018\005&\003\006\002-\002-\002-\002-\002-\011\026\002-\n\206\003\n\027R\026\"\003\162\029b\002-\002-\002-\002-\002-\012~\003\234\029Z\001\198\015\134\002-\015\146\002-\002-\002\190\028F\025\162\003\242\002-\002-\002-\tz\t~\t\138\012\190\014\134\006Z\002-\002-\002-\002-\002-\002-\002-\002-\002-\012\226\n\194\011\"\b\209\002-\002-\000\246\029\142\001\214\028z\002-\006f\006j\002-\002-\002-\r\026\002-\002-\002-\002-\014\142\005&\014\218\002-\029\134\002-\002-\r6\002-\002-\002-\002-\002-\002-\006n\t\146\002-\002-\002-\t\170\004\134\025\234\002\202\002-\002-\002-\002-\011\017\011\017\000\246\011\017\030r\011\017\005&\002\202\011\017\027V\002\138\011\017\011\017\011\017\rF\003\002\011\017\014\181\011\017\011\017\011\017\rj\011\017\011\017\011\017\001\218\r\146\011\017\028J\003\006\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011.\003\n\003\174\015\178\003\162\029\226\011\017\011\017\011\017\011\017\011\017\015\186\003\234\029\218\001\198\014\030\011\017\014.\011\017\011\017\002\190\028~\015\206\003\242\011\017\011\017\011\017\tz\t~\t\138\015\254\011\017\006Z\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\016*\011\017\011\017\030\002\011\017\011\017\000\246\030\n\018\n\030\158\011\017\006f\006j\011\017\011\017\011\017\0182\011\017\011\017\011\017\011\017\011\017\004\014\011\017\011\017\018^\011\017\011\017\018b\011\017\011\017\011\017\011\017\011\017\011\017\006n\t\146\011\017\011\017\011\017\t\170\004\134\018\138\002\202\011\017\011\017\011\017\011\017\011\r\011\r\000\246\011\r\018\166\011\r\018\214\002\202\011\r\018\230\002\138\011\r\011\r\011\r\018\250\003\002\011\r\019&\011\r\011\r\011\r\0192\011\r\011\r\011\r\001\218\019\150\011\r\019\158\003\006\011\r\011\r\011\r\011\r\011\r\011\r\011\r\014\222\003\n\003\174\020\146\003\162\020\166\011\r\011\r\011\r\011\r\011\r\020\170\003\234\007j\001\198\014\242\011\r\015\006\011\r\011\r\002\190\030\162\021n\003\242\011\r\011\r\011\r\tz\t~\t\138\021\134\011\r\006Z\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\021\250\011\r\011\r\021\254\011\r\011\r\0226\022:\022b\022f\011\r\006f\006j\011\r\011\r\011\r\022~\011\r\011\r\011\r\011\r\011\r\023*\011\r\011\r\023.\011\r\011\r\023R\011\r\011\r\011\r\011\r\011\r\011\r\006n\t\146\011\r\011\r\011\r\t\170\004\134\023V\023f\011\r\011\r\011\r\011\r\002q\002q\023v\002q\023\130\002q\023\182\002\202\002q\023\186\002\138\002q\n\218\002q\024\030\003\002\002q\024F\002q\002q\002q\024J\002q\002q\002q\001\218\003\029\011\018\024Z\003\006\002q\002q\002q\002q\002q\011\026\002q\024\170\003\n\024\202\025\n\003\162\0256\002q\002q\002q\002q\002q\025F\003\234\025n\001\198\000\n\002q\025r\002q\002q\002\190\025~\025\142\003\242\002q\002q\002q\tz\t~\t\138\025\170\014\134\006Z\002q\002q\002q\002q\002q\002q\002q\002q\002q\025\186\004\201\002q\003\029\002q\002q\004\201\004\201\004\201\025\206\002q\006f\006j\002q\002q\002q\005\222\002q\002q\002q\002q\025\250\004\201\025\254\002q\004\201\002q\002q\004\201\002q\002q\002q\002q\002q\002q\006n\t\146\002q\002q\002q\t\170\004\134\000\246\004\201\002q\002q\002q\002q\004\201\026\n\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\021\006\004\201\016\146\004\201\004\201\000\246\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\026\026\004\201\004\201\000\246\004\201\004\201\004\201\000\246\004\201\004\201\004\201\004\201\004\201\004\201\000\246\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\000\246\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\000\246\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\022\130\026.\004\201\027\"\027z\004\201\004\201\004\201\000\246\004\201\000\n\027\162\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\004\201\014F\000\246\004\201\004\201\003\029\016\138\003\029\004\201\t\030\bf\003\213\004\201\004\201\028\030\be\014b\025\154\014r\003\029\004\201\004\201\004\201\028.\028\134\004\201\004\201\004\201\004\201\t\"\000\169\004\201\000\169\016\162\000\169\000\169\000\169\000\169\000\169\000\169\000\169\016\166\000\169\026N\000\169\000\169\be\000\169\000\169\028\150\028\162\000\169\000\169\b\226\000\169\000\169\000\169\000\169\026z\000\169\be\000\169\000\169\be\n\006\000\169\000\169\029\006\000\169\000\169\be\000\169\000\246\000\169\be\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\029\026\003\213\000\169\000\169\014I\029R\000\169\000\169\029f\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\029\146\007\226\000\169\029\170\0012\000\169\014I\000\169\014\005\000\169\003\029\003\029\002J\0051\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\029\194\029\230\004\162\000\169\002N\014\005\014\005\030\014\000\230\014\005\007\170\003\029\000\169\030*\0051\000\n\030R\014\146\000\169\000\169\000\169\000\169\030\138\030\186\000\169\000\169\000\169\000\169\002i\002i\030\198\002i\014\170\002i\014\194\002\202\002i\000\n\002\138\002i\030\206\002i\030\215\003\002\002i\003\029\002i\002i\002i\000\246\002i\002i\002i\001\218\030\231\003\029\030\250\003\006\002i\002i\002i\002i\002i\007\157\002i\031\022\003\n\003\029\0313\003\162\031C\002i\002i\002i\002i\002i\031_\003\234\031\179\t\142\014\005\002i\007\157\002i\002i\002\190\007\157\031\207\003\242\002i\002i\002i\tz\t~\t\138\n\254\031\218\006Z\002i\002i\002i\002i\002i\002i\002i\002i\002i \015\n\194\011\" #\002i\002i + g o\000\000\002i\006f\006j\002i\002i\002i\003\186\002i\002i\002i\002i\n\202\000\000\011*\002i\000\000\002i\002i\000\000\002i\002i\002i\002i\002i\002i\006n\t\146\002i\002i\002i\t\170\004\134\tZ\bf\002i\002i\002i\002i\002}\002}\t\134\002}\022N\002}\000\000\000\000\002}\000\000\t\198\002}\001\198\002}\t^\000\000\002}\000\000\002}\002}\002}\016r\002}\002}\002}\016\222\017\026\017*\022V\000\000\002}\002}\002}\002}\002}\0055\002}\015\"\b\226\000\000\000\000\007\174\002\202\002}\002}\002}\002}\002}\016\254\000\000\000\000\b\217\0156\002}\015J\002}\002}\000\246\0055\000\000\n2\002}\002}\002}\012v\000\000\000\000\017\014\007\133\000\000\002}\002}\002}\002}\002}\002}\002}\002}\002}\000\000\n\194\011\"\000\000\002}\002}\000\000\003\174\007\178\000\000\002}\000\000\007\133\002}\002}\002}\000\000\002}\002}\002}\002}\n\202\016\006\011*\002}\001\214\002}\002}\000\246\002}\002}\002}\002}\002}\002}\003\205\000\000\002}\002}\002}\019\138\000\246\000\000\000\000\002}\002}\002}\002}\002y\002y\000\000\002y\018N\002y\018R\016\246\002y\011\165\000\000\002y\019\142\002y\015\218\006y\002y\000\000\002y\002y\002y\004N\002y\002y\002y\007*\031\191\000\000\006\206\012z\002y\002y\002y\002y\002y\007J\002y\000\000\007*\007V\011\165\006\206\016\166\002y\002y\002y\002y\002y\007J\018V\000\000\004\194\007V\002y\011\165\002y\002y\011\165\r\162\000\000\020j\002y\002y\002y\011\165\000\000\tJ\000\000\011\165\000\000\002y\002y\002y\002y\002y\002y\002y\002y\002y\b\177\n\194\011\"\000\000\002y\002y\000\000\tN\000\000\000\000\002y\000\000\000\000\002y\002y\002y\003\186\002y\002y\002y\002y\n\202\n\230\011*\002y\n\242\002y\002y\000\000\002y\002y\002y\002y\002y\002y\0172\t>\002y\002y\002y\000\000\000\246\000\000\000\000\002y\002y\002y\002y\002m\002m\000\246\002m\000\000\002m\000\000\000\000\002m\000\000\t\198\002m\017j\002m\000\000\000\000\002m\000\000\002m\002m\002m\016r\002m\002m\002m\016\222\017\026\017*\000\000\000\000\002m\002m\002m\002m\002m\t\237\002m\000\000\007*\000\000\000\000\006\206\000\000\002m\002m\002m\002m\002m\007J\000\000\000\000\tR\007V\002m\017J\002m\002m\001\214\t\237\006)\000\000\002m\002m\002m\028b\000\000\n\194\011\"\000\000\029B\002m\002m\002m\002m\002m\002m\002m\002m\002m\000\000\n\194\011\"\021\226\002m\002m\000\000\n\202\000\000\011*\002m\025\230\000\000\002m\002m\002m\000\000\002m\002m\002m\002m\n\202\004N\011*\002m\006)\002m\002m\000\246\002m\002m\002m\002m\002m\002m\025\238\000\000\002m\002m\002m\000\000\021V\000\000\006)\002m\002m\002m\002m\002u\002u\014\161\002u\004\194\002u\000\000\005u\002u\000\246\b\209\002u\000\000\002u\005\153\014\161\002u\000\000\002u\002u\002u\000\000\002u\002u\002u\007*\005\153\000\000\006\206\028f\002u\002u\002u\002u\002u\007J\002u\000\000\002\014\007V\n\174\002\138\000\000\002u\002u\002u\002u\002u\000\000\000\000\000\000\000\000\000\000\002u\007*\002u\002u\006\206\005\153\000\000\000\000\002u\002u\002u\007J\000\000\000\000\000\000\007V\000\000\002u\002u\002u\002u\002u\002u\002u\002u\002u\000\000\030\242\002u\001\230\002u\002u\000\000\000\000\000\000\005\153\002u\000\000\005\153\002u\002u\002u\0186\002u\002u\002u\002u\000\000\000\000\000\000\002u\000\000\002u\002u\003\029\011B\002u\002u\002u\002u\002u\000\000\000\000\002u\002u\002u\029\"\000\000\000\000\006j\002u\002u\002u\002u\t\249\t\249\000\000\t\249\000\000\t\249\000\000\002\202\t\249\000\n\000\000\t\249\000\000\t\249\003n\000\000\011n\000\000\t\249\011\146\t\249\000\000\t\249\t\249\t\249\001\218\000\000\003\029\t\241\000\000\011\166\011\190\011\198\011\174\011\206\002\202\t\249\000\000\018&\003\029\003\029\002\138\000\000\t\249\t\249\011\214\011\222\t\249\000\000\003\150\000\000\t\241\000\000\t\249\000\000\011\230\t\249\002\190\000\000\000\000\000\000\t\249\t\249\000\246\000\000\000\000\000\000\000\000\014\r\000\000\t\249\t\249\011v\011\182\011\238\011\246\012\006\t\249\t\249\003\174\018*\t\249\000\000\t\249\012\014\000\000\b2\014\r\014\r\t\249\t\129\014\r\t\249\t\249\012\022\0186\t\249\t\249\t\249\t\249\000\000\000\000\000\000\t\249\000\000\t\249\t\249\000\000\0126\t\249\012>\011\254\t\249\t\249\000\000\000\000\t\249\012\030\t\249\000\000\000\000\000\000\006j\t\249\t\249\012&\012.\002\169\002\169\000\000\002\169\000\246\002\169\014\t\000\000\002\169\000\246\000\000\002\169\000\000\002\169\000\000\000\000\002\169\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\014\t\014\t\000\000\000\000\014\t\002\169\002\169\002\169\002\169\002\169\014\r\002\169\000\000\002\202\000\000\r\182\002\138\000\000\002\169\002\169\002\169\002\169\002\169\000\000\t\129\000\000\000\000\000\000\002\169\r\190\002\169\002\169\r\202\000\000\t\197\000\000\002\169\002\169\002\169\r\214\000\000\000\000\000\000\r\226\000\246\002\169\002\169\011v\002\169\002\169\002\169\002\169\002\169\002\169\000\000\020\210\002\169\000\000\002\169\002\169\000\000\019r\000\000\000\000\002\169\000\000\000\000\002\169\002\169\002\169\0186\002\169\002\169\002\169\002\169\014\t\000\000\000\000\002\169\000\000\002\169\002\169\000\000\002\169\002\169\002\169\002\169\002\169\002\169\000\000\t>\002\169\002\169\002\169\000\000\000\000\000\000\006j\002\169\002\169\002\169\002\169\002\145\002\145\000\246\002\145\000\000\002\145\007\153\bf\002\145\000\246\000\000\002\145\000\000\002\145\000\000\000\000\002\145\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\007\153\019\206\000\000\000\000\007\153\002\145\002\145\002\145\002\145\002\145\000\000\002\145\000\000\028V\bf\b]\000\000\000\000\002\145\002\145\002\145\002\145\002\145\000\000\000\000\b\226\019v\000\000\002\145\b]\002\145\002\145\006\206\028Z\000\000\000\000\002\145\002\145\002\145\b]\000\000\000\000\000\000\b]\000\246\002\145\002\145\011v\002\145\002\145\002\145\002\145\002\145\002\145\000\000\000\000\002\145\b\226\002\145\002\145\000\000\000\000\000\000\000\000\002\145\000\000\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\002\145\007\153\000\246\000\000\002\145\000\000\002\145\002\145\000\000\002\145\002\145\002\145\002\145\002\145\002\145\000\000\019\210\002\145\002\145\002\145\000\000\000\000\000\000\000\000\002\145\002\145\002\145\002\145\002\157\002\157\000\000\002\157\000\000\002\157\000\000\000\000\002\157\by\000\000\002\157\000\000\002\157\000\000\000\000\011n\000\000\002\157\002\157\002\157\000\000\002\157\002\157\002\157\000\000\000\000\000\000\000\000\000\000\002\157\002\157\002\157\011\174\002\157\000\000\002\157\000\000\000\000\000\000\by\000\000\000\000\002\157\002\157\002\157\002\157\002\157\000\000\000\000\000\000\000\000\000\000\002\157\by\002\157\002\157\006\206\000\000\000\000\000\000\002\157\002\157\002\157\by\000\000\000\000\000\000\by\000\000\002\157\002\157\011v\011\182\002\157\002\157\002\157\002\157\002\157\000\000\000\000\002\157\000\000\002\157\002\157\000\000\000\000\000\000\000\000\002\157\000\000\000\000\002\157\002\157\002\157\000\000\002\157\002\157\002\157\002\157\000\000\000\000\000\000\002\157\000\000\002\157\002\157\000\000\002\157\002\157\002\157\002\157\002\157\002\157\000\000\000\000\002\157\002\157\002\157\000\000\000\000\000\000\000\000\002\157\002\157\002\157\002\157\002\173\002\173\000\000\002\173\000\000\002\173\000\000\000\000\002\173\000\246\000\000\002\173\000\000\002\173\000\000\000\000\002\173\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\002\173\002\173\002\173\002\173\002\173\000\000\002\173\000\000\000\000\000\000\b\149\000\000\000\000\002\173\002\173\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\002\173\007*\002\173\002\173\006\206\000\000\000\000\000\000\002\173\002\173\002\173\b\149\000\000\000\000\000\000\b\149\000\000\002\173\002\173\011v\002\173\002\173\002\173\002\173\002\173\002\173\000\000\000\000\002\173\000\000\002\173\002\173\000\000\000\000\000\000\000\000\002\173\000\000\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\002\173\000\000\000\000\000\000\002\173\000\000\002\173\002\173\000\000\002\173\002\173\002\173\002\173\002\173\002\173\000\000\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\002\173\002\173\002\173\002\173\002\141\002\141\000\000\002\141\000\000\002\141\000\000\000\000\002\141\b\141\000\000\002\141\000\000\002\141\000\000\000\000\002\141\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\002\141\002\141\002\141\002\141\002\141\000\000\002\141\000\000\000\000\000\000\b\141\000\000\000\000\002\141\002\141\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\002\141\r\250\002\141\002\141\b\141\000\000\000\000\000\000\002\141\002\141\002\141\b\141\000\000\000\000\000\000\b\141\000\000\002\141\002\141\011v\002\141\002\141\002\141\002\141\002\141\002\141\000\000\000\000\002\141\000\000\002\141\002\141\000\000\000\000\000\000\000\000\002\141\000\000\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\002\141\000\000\000\000\000\000\002\141\000\000\002\141\002\141\000\000\002\141\002\141\002\141\002\141\002\141\002\141\000\000\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\002\141\002\141\002\141\002\141\002\153\002\153\000\000\002\153\000\000\002\153\000\000\000\000\002\153\000\246\000\000\002\153\000\000\002\153\000\000\000\000\011n\000\000\002\153\002\153\002\153\000\000\002\153\002\153\002\153\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\011\174\002\153\000\000\002\153\000\000\000\000\000\000\bY\000\000\000\000\002\153\002\153\002\153\002\153\002\153\000\000\000\000\000\000\000\000\000\000\002\153\bY\002\153\002\153\006\206\000\000\000\000\000\000\002\153\002\153\002\153\bY\000\000\000\000\000\000\bY\000\000\002\153\002\153\011v\011\182\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\000\000\002\153\002\153\000\000\000\000\000\000\000\000\002\153\000\000\000\000\002\153\002\153\002\153\000\000\002\153\002\153\002\153\002\153\000\000\000\000\000\000\002\153\000\000\002\153\002\153\000\000\002\153\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\002\153\002\153\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\149\002\149\000\000\002\149\000\000\002\149\000\000\000\000\002\149\000\246\000\000\002\149\000\000\002\149\000\000\000\000\011n\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\002\149\011\174\002\149\000\000\002\149\000\000\000\000\000\000\016B\000\000\000\000\002\149\002\149\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\002\149\r\190\002\149\002\149\r\202\000\000\000\000\000\000\002\149\002\149\002\149\r\214\000\000\000\000\000\000\r\226\000\000\002\149\002\149\011v\011\182\002\149\002\149\002\149\002\149\002\149\000\000\000\000\002\149\000\000\002\149\002\149\000\000\000\000\000\000\000\000\002\149\000\000\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\002\149\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\002\149\002\149\002\149\002\149\002\149\002\149\000\000\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\002\149\002\149\002\149\002\149\002\189\002\189\000\000\002\189\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\011n\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\003\029\003\029\019\250\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\189\000\000\000\000\000\000\003\029\000\000\000\000\002\189\002\189\011\214\011\222\002\189\000\000\000\000\000\000\000\000\000\n\002\189\000\000\011\230\002\189\000\000\000\000\000\000\000\000\002\189\002\189\000\246\003\029\003\029\021.\000\000\000\000\000\000\002\189\002\189\011v\011\182\011\238\011\246\012\006\002\189\002\189\003\029\000\000\002\189\003\029\002\189\012\014\000\000\000\000\000\000\000\000\002\189\000\000\000\n\002\189\002\189\012\022\000\000\002\189\002\189\002\189\002\189\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\002\189\002\189\002\189\011\254\002\189\002\189\000\000\000\000\002\189\012\030\002\189\000\000\000\000\003\029\000\000\002\189\002\189\012&\012.\002\165\002\165\000\000\002\165\000\000\002\165\000\000\000\000\002\165\000\000\000\000\002\165\000\000\002\165\000\000\000\000\011n\000\000\002\165\002\165\002\165\000\000\002\165\002\165\002\165\000\000\000\000\000\000\000\000\000\000\002\165\002\165\002\165\011\174\002\165\000\000\002\165\000\000\000\000\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\002\165\000\000\000\000\000\000\000\000\000\000\002\165\000\000\002\165\002\165\000\000\000\000\000\000\000\000\002\165\002\165\002\165\000\000\000\000\000\000\000\000\000\000\000\000\002\165\002\165\011v\011\182\002\165\002\165\002\165\002\165\002\165\000\000\000\000\002\165\000\000\002\165\002\165\000\000\000\000\000\000\000\000\002\165\000\000\000\000\002\165\002\165\002\165\000\000\002\165\002\165\002\165\002\165\000\000\000\000\000\000\002\165\000\000\002\165\002\165\000\000\002\165\002\165\002\165\002\165\002\165\002\165\000\000\000\000\002\165\002\165\002\165\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\002\161\002\161\000\000\002\161\000\000\002\161\000\000\000\000\002\161\000\000\000\000\002\161\000\000\002\161\000\000\000\000\011n\000\000\002\161\002\161\002\161\000\000\002\161\002\161\002\161\000\000\000\000\000\000\000\000\000\000\002\161\002\161\002\161\011\174\002\161\000\000\002\161\000\000\000\000\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\161\000\000\000\000\000\000\000\000\000\000\002\161\000\000\002\161\002\161\000\000\000\000\000\000\000\000\002\161\002\161\002\161\000\000\000\000\000\000\000\000\000\000\000\000\002\161\002\161\011v\011\182\002\161\002\161\002\161\002\161\002\161\000\000\000\000\002\161\000\000\002\161\002\161\000\000\000\000\000\000\000\000\002\161\000\000\000\000\002\161\002\161\002\161\000\000\002\161\002\161\002\161\002\161\000\000\000\000\000\000\002\161\000\000\002\161\002\161\000\000\002\161\002\161\002\161\002\161\002\161\002\161\000\000\000\000\002\161\002\161\002\161\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\181\002\181\000\000\002\181\000\000\002\181\000\000\000\000\002\181\000\000\000\000\002\181\000\000\002\181\000\000\000\000\011n\000\000\002\181\002\181\002\181\000\000\002\181\002\181\002\181\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\002\181\000\000\002\181\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\011\214\011\222\002\181\000\000\000\000\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\000\000\000\000\000\000\002\181\002\181\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\011v\011\182\011\238\011\246\002\181\002\181\002\181\000\000\000\000\002\181\000\000\002\181\002\181\000\000\000\000\000\000\000\000\002\181\000\000\000\000\002\181\002\181\002\181\000\000\002\181\002\181\002\181\002\181\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\002\181\002\181\002\181\011\254\002\181\002\181\000\000\000\000\002\181\002\181\002\181\000\000\000\000\000\000\000\000\002\181\002\181\002\181\002\181\002\137\002\137\000\000\002\137\000\000\002\137\000\000\000\000\002\137\000\000\000\000\002\137\000\000\002\137\000\000\000\000\011n\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\002\137\002\137\002\137\011\174\002\137\000\000\002\137\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\002\137\000\000\002\137\002\137\000\000\000\000\000\000\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\011v\011\182\002\137\002\137\002\137\002\137\002\137\000\000\000\000\002\137\000\000\002\137\002\137\000\000\000\000\000\000\000\000\002\137\000\000\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\002\137\000\000\000\000\000\000\002\137\000\000\002\137\002\137\000\000\002\137\002\137\002\137\002\137\002\137\002\137\000\000\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\002\137\002\137\002\137\002\137\002\133\002\133\000\000\002\133\000\000\002\133\000\000\000\000\002\133\000\000\000\000\002\133\000\000\002\133\000\000\000\000\011n\000\000\002\133\002\133\002\133\000\000\002\133\002\133\002\133\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\002\133\000\000\002\133\000\000\000\000\000\000\000\000\000\000\000\000\002\133\002\133\011\214\011\222\002\133\000\000\000\000\000\000\000\000\000\000\002\133\000\000\002\133\002\133\000\000\000\000\000\000\000\000\002\133\002\133\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\133\002\133\011v\011\182\011\238\011\246\002\133\002\133\002\133\000\000\000\000\002\133\000\000\002\133\002\133\000\000\000\000\000\000\000\000\002\133\000\000\000\000\002\133\002\133\002\133\000\000\002\133\002\133\002\133\002\133\000\000\000\000\000\000\002\133\000\000\002\133\002\133\000\000\002\133\002\133\002\133\011\254\002\133\002\133\000\000\000\000\002\133\002\133\002\133\000\000\000\000\000\000\000\000\002\133\002\133\002\133\002\133\002\225\002\225\000\000\002\225\000\000\002\225\000\000\000\000\002\225\000\000\000\000\002\225\000\000\002\225\000\000\000\000\011n\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\002\225\000\000\002\225\000\000\000\000\000\000\000\000\000\000\000\000\002\225\002\225\011\214\011\222\002\225\000\000\000\000\000\000\000\000\000\000\002\225\000\000\002\225\002\225\000\000\000\000\000\000\000\000\002\225\002\225\002\225\000\000\000\000\000\000\000\000\000\000\000\000\002\225\002\225\011v\011\182\011\238\002\225\002\225\002\225\002\225\000\000\000\000\002\225\000\000\002\225\002\225\000\000\000\000\000\000\000\000\002\225\000\000\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\002\225\000\000\000\000\000\000\002\225\000\000\002\225\002\225\000\000\002\225\002\225\002\225\011\254\002\225\002\225\000\000\000\000\002\225\002\225\002\225\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\129\002\129\000\000\002\129\000\000\002\129\000\000\000\000\002\129\000\000\000\000\002\129\000\000\002\129\000\000\000\000\011n\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\002\129\000\000\002\129\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\011\214\011\222\002\129\000\000\000\000\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\011v\011\182\011\238\011\246\002\129\002\129\002\129\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\002\129\000\000\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\002\129\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\002\129\002\129\002\129\011\254\002\129\002\129\000\000\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\002\129\002\129\002\185\002\185\000\000\002\185\000\000\002\185\000\000\000\000\002\185\000\000\000\000\002\185\000\000\002\185\000\000\000\000\011n\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\002\185\000\000\002\185\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\011\214\011\222\002\185\000\000\000\000\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\000\000\000\000\000\000\002\185\002\185\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\011v\011\182\011\238\011\246\002\185\002\185\002\185\000\000\000\000\002\185\000\000\002\185\002\185\000\000\000\000\000\000\000\000\002\185\000\000\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\002\185\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\002\185\002\185\002\185\011\254\002\185\002\185\000\000\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\002\185\002\185\002\185\002\185\002\177\002\177\000\000\002\177\000\000\002\177\000\000\000\000\002\177\000\000\000\000\002\177\000\000\002\177\000\000\000\000\011n\000\000\002\177\002\177\002\177\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\002\177\000\000\002\177\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\011\214\011\222\002\177\000\000\000\000\000\000\000\000\000\000\002\177\000\000\002\177\002\177\000\000\000\000\000\000\000\000\002\177\002\177\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\011v\011\182\011\238\011\246\002\177\002\177\002\177\000\000\000\000\002\177\000\000\002\177\002\177\000\000\000\000\000\000\000\000\002\177\000\000\000\000\002\177\002\177\002\177\000\000\002\177\002\177\002\177\002\177\000\000\000\000\000\000\002\177\000\000\002\177\002\177\000\000\002\177\002\177\002\177\011\254\002\177\002\177\000\000\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\002\177\002\177\002\177\002\177\002\193\002\193\000\000\002\193\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\011n\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\193\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\011\214\011\222\002\193\000\000\000\000\000\000\000\000\000\000\002\193\000\000\011\230\002\193\000\000\000\000\000\000\000\000\002\193\002\193\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\011v\011\182\011\238\011\246\012\006\002\193\002\193\000\000\000\000\002\193\000\000\002\193\012\014\000\000\000\000\000\000\000\000\002\193\000\000\000\000\002\193\002\193\012\022\000\000\002\193\002\193\002\193\002\193\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\002\193\002\193\002\193\011\254\002\193\002\193\000\000\000\000\002\193\012\030\002\193\000\000\000\000\000\000\000\000\002\193\002\193\012&\012.\002\197\002\197\000\000\002\197\000\000\002\197\000\000\000\000\002\197\000\000\000\000\002\197\000\000\002\197\000\000\000\000\011n\000\000\002\197\002\197\002\197\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\002\197\000\000\002\197\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\011\214\011\222\002\197\000\000\000\000\000\000\000\000\000\000\002\197\000\000\011\230\002\197\000\000\000\000\000\000\000\000\002\197\002\197\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\011v\011\182\011\238\011\246\012\006\002\197\002\197\000\000\000\000\002\197\000\000\002\197\012\014\000\000\000\000\000\000\000\000\002\197\000\000\000\000\002\197\002\197\012\022\000\000\002\197\002\197\002\197\002\197\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\002\197\002\197\002\197\011\254\002\197\002\197\000\000\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\002\197\002\197\012&\012.\002\201\002\201\000\000\002\201\000\000\002\201\000\000\000\000\002\201\000\000\000\000\002\201\000\000\002\201\000\000\000\000\011n\000\000\002\201\002\201\002\201\000\000\002\201\002\201\002\201\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\002\201\000\000\002\201\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\011\214\011\222\002\201\000\000\000\000\000\000\000\000\000\000\002\201\000\000\011\230\002\201\000\000\000\000\000\000\000\000\002\201\002\201\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\011v\011\182\011\238\011\246\012\006\002\201\002\201\000\000\000\000\002\201\000\000\002\201\012\014\000\000\000\000\000\000\000\000\002\201\000\000\000\000\002\201\002\201\012\022\000\000\002\201\002\201\002\201\002\201\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\002\201\002\201\002\201\011\254\002\201\002\201\000\000\000\000\002\201\002\201\002\201\000\000\000\000\000\000\000\000\002\201\002\201\012&\012.\t\181\t\181\000\000\t\181\000\000\t\181\000\000\000\000\t\181\000\000\000\000\t\181\000\000\t\181\000\000\000\000\011n\000\000\t\181\t\181\t\181\000\000\t\181\t\181\t\181\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\t\181\000\000\000\000\000\000\000\000\000\000\000\000\t\181\t\181\011\214\011\222\t\181\000\000\000\000\000\000\000\000\000\000\t\181\000\000\011\230\t\181\000\000\000\000\000\000\000\000\t\181\t\181\000\246\000\000\000\000\000\000\000\000\000\000\000\000\t\181\t\181\011v\011\182\011\238\011\246\012\006\t\181\t\181\000\000\000\000\t\181\000\000\t\181\012\014\000\000\000\000\000\000\000\000\t\181\000\000\000\000\t\181\t\181\012\022\000\000\t\181\t\181\t\181\t\181\000\000\000\000\000\000\t\181\000\000\t\181\t\181\000\000\t\181\t\181\t\181\011\254\t\181\t\181\000\000\000\000\t\181\012\030\t\181\000\000\000\000\000\000\000\000\t\181\t\181\012&\012.\002\205\002\205\000\000\002\205\000\000\002\205\000\000\000\000\002\205\000\000\000\000\002\205\000\000\002\205\000\000\000\000\011n\000\000\002\205\002\205\002\205\000\000\002\205\002\205\002\205\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\205\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\011\214\011\222\002\205\000\000\000\000\000\000\000\000\000\000\002\205\000\000\011\230\002\205\000\000\000\000\000\000\000\000\002\205\002\205\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\011v\011\182\011\238\011\246\012\006\002\205\002\205\000\000\000\000\002\205\000\000\002\205\012\014\000\000\000\000\000\000\000\000\002\205\000\000\000\000\002\205\002\205\012\022\000\000\002\205\002\205\002\205\002\205\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\0126\002\205\012>\011\254\002\205\002\205\000\000\000\000\002\205\012\030\002\205\000\000\000\000\000\000\000\000\002\205\002\205\012&\012.\t\177\t\177\000\000\t\177\000\000\t\177\000\000\000\000\t\177\000\000\000\000\t\177\000\000\t\177\000\000\000\000\011n\000\000\t\177\t\177\t\177\000\000\t\177\t\177\t\177\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\t\177\000\000\000\000\000\000\000\000\000\000\000\000\t\177\t\177\011\214\011\222\t\177\000\000\000\000\000\000\000\000\000\000\t\177\000\000\011\230\t\177\000\000\000\000\000\000\000\000\t\177\t\177\000\246\000\000\000\000\000\000\000\000\000\000\000\000\t\177\t\177\011v\011\182\011\238\011\246\012\006\t\177\t\177\000\000\000\000\t\177\000\000\t\177\012\014\000\000\000\000\000\000\000\000\t\177\000\000\000\000\t\177\t\177\012\022\000\000\t\177\t\177\t\177\t\177\000\000\000\000\000\000\t\177\000\000\t\177\t\177\000\000\t\177\t\177\t\177\011\254\t\177\t\177\000\000\000\000\t\177\012\030\t\177\000\000\000\000\000\000\000\000\t\177\t\177\012&\012.\002\249\002\249\000\000\002\249\000\000\002\249\000\000\000\000\002\249\000\000\000\000\002\249\000\000\002\249\000\000\000\000\011n\000\000\002\249\002\249\002\249\000\000\002\249\002\249\002\249\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\249\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\011\214\011\222\002\249\000\000\000\000\000\000\000\000\000\000\002\249\000\000\011\230\002\249\000\000\000\000\000\000\000\000\002\249\002\249\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\011v\011\182\011\238\011\246\012\006\002\249\002\249\000\000\000\000\002\249\000\000\002\249\012\014\000\000\000\000\000\000\000\000\002\249\000\000\000\000\002\249\002\249\012\022\000\000\002\249\002\249\002\249\002\249\000\000\000\000\000\000\002\249\000\000\002\249\002\249\000\000\0126\002\249\012>\011\254\002\249\002\249\000\000\000\000\002\249\012\030\002\249\000\000\000\000\000\000\000\000\002\249\002\249\012&\012.\003\t\003\t\000\000\003\t\000\000\003\t\000\000\000\000\003\t\000\000\000\000\003\t\000\000\003\t\000\000\000\000\011n\000\000\003\t\003\t\003\t\000\000\003\t\003\t\003\t\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\003\t\000\000\000\000\000\000\000\000\000\000\000\000\003\t\003\t\011\214\011\222\003\t\000\000\000\000\000\000\000\000\000\000\003\t\000\000\011\230\003\t\000\000\000\000\000\000\000\000\003\t\003\t\000\246\000\000\000\000\000\000\000\000\000\000\000\000\003\t\003\t\011v\011\182\011\238\011\246\012\006\003\t\003\t\000\000\000\000\003\t\000\000\003\t\012\014\000\000\000\000\000\000\000\000\003\t\000\000\000\000\003\t\003\t\012\022\000\000\003\t\003\t\003\t\003\t\000\000\000\000\000\000\003\t\000\000\003\t\003\t\000\000\0126\003\t\012>\011\254\003\t\003\t\000\000\000\000\003\t\012\030\003\t\000\000\000\000\000\000\000\000\003\t\003\t\012&\012.\003\001\003\001\000\000\003\001\000\000\003\001\000\000\000\000\003\001\000\000\000\000\003\001\000\000\003\001\000\000\000\000\011n\000\000\003\001\003\001\003\001\000\000\003\001\003\001\003\001\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\003\001\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\011\214\011\222\003\001\000\000\000\000\000\000\000\000\000\000\003\001\000\000\011\230\003\001\000\000\000\000\000\000\000\000\003\001\003\001\000\246\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\011v\011\182\011\238\011\246\012\006\003\001\003\001\000\000\000\000\003\001\000\000\003\001\012\014\000\000\000\000\000\000\000\000\003\001\000\000\000\000\003\001\003\001\012\022\000\000\003\001\003\001\003\001\003\001\000\000\000\000\000\000\003\001\000\000\003\001\003\001\000\000\0126\003\001\012>\011\254\003\001\003\001\000\000\000\000\003\001\012\030\003\001\000\000\000\000\000\000\000\000\003\001\003\001\012&\012.\002\237\002\237\000\000\002\237\000\000\002\237\000\000\000\000\002\237\000\000\000\000\002\237\000\000\002\237\000\000\000\000\011n\000\000\002\237\002\237\002\237\000\000\002\237\002\237\002\237\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\237\000\000\000\000\000\000\000\000\000\000\000\000\002\237\002\237\011\214\011\222\002\237\000\000\000\000\000\000\000\000\000\000\002\237\000\000\011\230\002\237\000\000\000\000\000\000\000\000\002\237\002\237\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\237\002\237\011v\011\182\011\238\011\246\012\006\002\237\002\237\000\000\000\000\002\237\000\000\002\237\012\014\000\000\000\000\000\000\000\000\002\237\000\000\000\000\002\237\002\237\012\022\000\000\002\237\002\237\002\237\002\237\000\000\000\000\000\000\002\237\000\000\002\237\002\237\000\000\0126\002\237\012>\011\254\002\237\002\237\000\000\000\000\002\237\012\030\002\237\000\000\000\000\000\000\000\000\002\237\002\237\012&\012.\002\245\002\245\000\000\002\245\000\000\002\245\000\000\000\000\002\245\000\000\000\000\002\245\000\000\002\245\000\000\000\000\011n\000\000\002\245\002\245\002\245\000\000\002\245\002\245\002\245\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\245\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\011\214\011\222\002\245\000\000\000\000\000\000\000\000\000\000\002\245\000\000\011\230\002\245\000\000\000\000\000\000\000\000\002\245\002\245\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\011v\011\182\011\238\011\246\012\006\002\245\002\245\000\000\000\000\002\245\000\000\002\245\012\014\000\000\000\000\000\000\000\000\002\245\000\000\000\000\002\245\002\245\012\022\000\000\002\245\002\245\002\245\002\245\000\000\000\000\000\000\002\245\000\000\002\245\002\245\000\000\0126\002\245\012>\011\254\002\245\002\245\000\000\000\000\002\245\012\030\002\245\000\000\000\000\000\000\000\000\002\245\002\245\012&\012.\002\241\002\241\000\000\002\241\000\000\002\241\000\000\000\000\002\241\000\000\000\000\002\241\000\000\002\241\000\000\000\000\011n\000\000\002\241\002\241\002\241\000\000\002\241\002\241\002\241\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\241\000\000\000\000\000\000\000\000\000\000\000\000\002\241\002\241\011\214\011\222\002\241\000\000\000\000\000\000\000\000\000\000\002\241\000\000\011\230\002\241\000\000\000\000\000\000\000\000\002\241\002\241\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\241\002\241\011v\011\182\011\238\011\246\012\006\002\241\002\241\000\000\000\000\002\241\000\000\002\241\012\014\000\000\000\000\000\000\000\000\002\241\000\000\000\000\002\241\002\241\012\022\000\000\002\241\002\241\002\241\002\241\000\000\000\000\000\000\002\241\000\000\002\241\002\241\000\000\0126\002\241\012>\011\254\002\241\002\241\000\000\000\000\002\241\012\030\002\241\000\000\000\000\000\000\000\000\002\241\002\241\012&\012.\002\253\002\253\000\000\002\253\000\000\002\253\000\000\000\000\002\253\000\000\000\000\002\253\000\000\002\253\000\000\000\000\011n\000\000\002\253\002\253\002\253\000\000\002\253\002\253\002\253\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\253\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\011\214\011\222\002\253\000\000\000\000\000\000\000\000\000\000\002\253\000\000\011\230\002\253\000\000\000\000\000\000\000\000\002\253\002\253\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\011v\011\182\011\238\011\246\012\006\002\253\002\253\000\000\000\000\002\253\000\000\002\253\012\014\000\000\000\000\000\000\000\000\002\253\000\000\000\000\002\253\002\253\012\022\000\000\002\253\002\253\002\253\002\253\000\000\000\000\000\000\002\253\000\000\002\253\002\253\000\000\0126\002\253\012>\011\254\002\253\002\253\000\000\000\000\002\253\012\030\002\253\000\000\000\000\000\000\000\000\002\253\002\253\012&\012.\003\r\003\r\000\000\003\r\000\000\003\r\000\000\000\000\003\r\000\000\000\000\003\r\000\000\003\r\000\000\000\000\011n\000\000\003\r\003\r\003\r\000\000\003\r\003\r\003\r\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\003\r\000\000\000\000\000\000\000\000\000\000\000\000\003\r\003\r\011\214\011\222\003\r\000\000\000\000\000\000\000\000\000\000\003\r\000\000\011\230\003\r\000\000\000\000\000\000\000\000\003\r\003\r\000\246\000\000\000\000\000\000\000\000\000\000\000\000\003\r\003\r\011v\011\182\011\238\011\246\012\006\003\r\003\r\000\000\000\000\003\r\000\000\003\r\012\014\000\000\000\000\000\000\000\000\003\r\000\000\000\000\003\r\003\r\012\022\000\000\003\r\003\r\003\r\003\r\000\000\000\000\000\000\003\r\000\000\003\r\003\r\000\000\0126\003\r\012>\011\254\003\r\003\r\000\000\000\000\003\r\012\030\003\r\000\000\000\000\000\000\000\000\003\r\003\r\012&\012.\003\005\003\005\000\000\003\005\000\000\003\005\000\000\000\000\003\005\000\000\000\000\003\005\000\000\003\005\000\000\000\000\011n\000\000\003\005\003\005\003\005\000\000\003\005\003\005\003\005\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\003\005\000\000\000\000\000\000\000\000\000\000\000\000\003\005\003\005\011\214\011\222\003\005\000\000\000\000\000\000\000\000\000\000\003\005\000\000\011\230\003\005\000\000\000\000\000\000\000\000\003\005\003\005\000\246\000\000\000\000\000\000\000\000\000\000\000\000\003\005\003\005\011v\011\182\011\238\011\246\012\006\003\005\003\005\000\000\000\000\003\005\000\000\003\005\012\014\000\000\000\000\000\000\000\000\003\005\000\000\000\000\003\005\003\005\012\022\000\000\003\005\003\005\003\005\003\005\000\000\000\000\000\000\003\005\000\000\003\005\003\005\000\000\0126\003\005\012>\011\254\003\005\003\005\000\000\000\000\003\005\012\030\003\005\000\000\000\000\000\000\000\000\003\005\003\005\012&\012.\002\233\002\233\000\000\002\233\000\000\002\233\000\000\000\000\002\233\000\000\000\000\002\233\000\000\002\233\000\000\000\000\011n\000\000\002\233\002\233\002\233\000\000\002\233\002\233\002\233\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\233\000\000\000\000\000\000\000\000\000\000\000\000\002\233\002\233\011\214\011\222\002\233\000\000\000\000\000\000\000\000\000\000\002\233\000\000\011\230\002\233\000\000\000\000\000\000\000\000\002\233\002\233\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\233\002\233\011v\011\182\011\238\011\246\012\006\002\233\002\233\000\000\000\000\002\233\000\000\002\233\012\014\000\000\000\000\000\000\000\000\002\233\000\000\000\000\002\233\002\233\012\022\000\000\002\233\002\233\002\233\002\233\000\000\000\000\000\000\002\233\000\000\002\233\002\233\000\000\0126\002\233\012>\011\254\002\233\002\233\000\000\000\000\002\233\012\030\002\233\000\000\000\000\000\000\000\000\002\233\002\233\012&\012.\002A\002A\000\000\002A\000\000\002A\000\000\000\000\002A\000\000\000\000\002A\000\000\002A\000\000\000\000\002A\000\000\002A\002A\002A\000\000\002A\002A\002A\000\000\000\000\000\000\000\000\000\000\002A\002A\002A\002A\002A\000\000\002A\000\000\000\000\000\000\000\000\000\000\000\000\002A\002A\002A\002A\002A\000\000\000\000\000\000\000\000\000\000\002A\000\000\002A\002A\000\000\000\000\000\000\000\000\002A\002A\002A\000\000\000\000\000\000\000\000\000\000\000\000\002A\002A\002A\002A\002A\002A\002A\002A\002A\000\000\000\000\002A\000\000\002A\002A\000\000\000\000\000\000\000\000\002A\000\000\000\000\002A\002A\002A\000\000\002A\002A\002A\002A\000\000\000\000\000\000\002A\000\000\002A\002A\000\000\002A\002A\002A\002A\002A\002A\000\000\000\000\002A\002A\016\026\000\000\000\000\000\000\000\000\002A\002A\002A\002A\002]\002]\000\000\002]\000\000\002]\000\000\000\000\002]\000\000\000\000\002]\000\000\002]\000\000\000\000\011n\000\000\002]\002]\002]\000\000\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002]\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\011\214\011\222\002]\000\000\000\000\000\000\000\000\000\000\002]\000\000\011\230\002]\000\000\000\000\000\000\000\000\002]\002]\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\011v\011\182\011\238\011\246\012\006\002]\002]\000\000\000\000\002]\000\000\002]\012\014\000\000\000\000\000\000\000\000\002]\000\000\000\000\002]\002]\012\022\000\000\002]\002]\0162\002]\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\0126\002]\012>\011\254\002]\002]\000\000\000\000\002]\012\030\002]\000\000\000\000\000\000\000\000\002]\002]\012&\012.\002Y\002Y\000\000\002Y\000\000\002Y\000\000\000\000\002Y\000\000\000\000\002Y\000\000\002Y\000\000\000\000\011n\000\000\002Y\002Y\002Y\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\011\214\011\222\002Y\000\000\000\000\000\000\000\000\000\000\002Y\000\000\011\230\002Y\000\000\000\000\000\000\000\000\002Y\002Y\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\011v\011\182\011\238\011\246\012\006\002Y\002Y\000\000\000\000\002Y\000\000\002Y\012\014\000\000\000\000\000\000\000\000\002Y\000\000\000\000\002Y\002Y\012\022\000\000\002Y\002Y\002Y\002Y\000\000\000\000\000\000\002Y\000\000\002Y\002Y\000\000\0126\002Y\012>\011\254\002Y\002Y\000\000\000\000\002Y\012\030\002Y\000\000\000\000\000\000\000\000\002Y\002Y\012&\012.\002\229\002\229\000\000\002\229\000\000\002\229\000\000\000\000\002\229\000\000\000\000\002\229\000\000\002\229\000\000\000\000\011n\000\000\002\229\002\229\002\229\000\000\002\229\002\229\002\229\000\000\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\002\229\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\011\214\011\222\002\229\000\000\000\000\000\000\000\000\000\000\002\229\000\000\011\230\002\229\000\000\000\000\000\000\000\000\002\229\002\229\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\011v\011\182\011\238\011\246\012\006\002\229\002\229\000\000\000\000\002\229\000\000\002\229\012\014\000\000\000\000\000\000\000\000\002\229\000\000\000\000\002\229\002\229\012\022\000\000\002\229\002\229\002\229\002\229\000\000\000\000\000\000\002\229\000\000\002\229\002\229\000\000\0126\002\229\012>\011\254\002\229\002\229\000\000\000\000\002\229\012\030\002\229\000\000\000\000\000\000\000\000\002\229\002\229\012&\012.\002M\002M\000\000\002M\000\000\002M\000\000\000\000\002M\000\000\000\000\002M\000\000\002M\000\000\000\000\002M\000\000\002M\002M\002M\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002M\000\000\002M\000\000\000\000\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002M\002M\002M\002M\002M\000\000\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\002M\000\000\000\000\002M\002M\002M\000\000\002M\002M\002M\002M\000\000\000\000\000\000\002M\000\000\002M\002M\000\000\002M\002M\002M\002M\002M\002M\000\000\000\000\002M\002M\016\026\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002Q\002Q\000\000\002Q\000\000\002Q\000\000\000\000\002Q\000\000\000\000\002Q\000\000\002Q\000\000\000\000\002Q\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002Q\b\197\002Q\000\000\000\000\b\197\000\000\007\189\000\000\002Q\002Q\002Q\002Q\002Q\000\000\000\000\000\000\000\000\000\000\002Q\000\000\002Q\002Q\000\000\000\000\000\000\007\189\002Q\002Q\002Q\007\189\000\000\te\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002Q\002Q\002Q\002Q\002Q\b\197\000\000\002Q\000\000\002Q\002Q\000\000\b\193\000\000\000\000\002Q\b\193\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\002Q\b\197\007\"\000\000\002Q\002\014\002Q\002Q\te\002Q\002Q\002Q\002Q\002Q\002Q\002\018\000\000\002Q\002Q\016\026\000\000\000\000\007&\001\218\002Q\002Q\002Q\002Q\001\014\te\000\006\b\193\000\000\000\000\002\198\002\202\007\189\002\246\002\138\005\022\000\000\003^\000\000\003\002\001\018\000\000\000\000\bJ\002\158\001\230\000\000\n\230\b\193\001\218\n\242\002\190\000\000\003\238\001\026\t\206\t\210\001&\001*\te\000\000\000\246\003\n\005\022\000\000\003\162\te\019b\000\000\t\246\t\250\000\000\003\222\003\234\003\246\003\250\t\254\b\030\000\000\001B\bN\002\190\000\000\000\000\003\242\000\000\005\022\000\000\tz\t~\t\138\t\158\000\000\006Z\000\000\000\000\001F\001J\001N\001R\001V\000\000\000\000\n\018\001Z\000\000\007*\000\000\001^\006\206\0076\n\030\n6\n\158\006f\006j\007J\000\000\001b\000\000\007V\000\000\003\029\000\000\001f\003\029\021\214\000\000\003\029\000\000\000\000\000\000\000\000\000\000\001\162\007\022\000\000\000\000\006n\t\146\000\000\001\166\000\000\016b\004\134\n\178\001\014\001\174\000\006\001\178\001\182\000\n\002\198\002\202\000\000\002\246\002\138\004}\000\000\000\000\000\000\003\002\001\018\000\000\000\000\000\000\t\202\003\029\000\000\003\029\000\000\001\218\000\000\000\000\000\000\003\238\001\026\t\206\t\210\001&\001*\003\029\003\029\000\000\003\n\000\000\000\000\003\162\000\000\t\214\000\000\t\246\t\250\000\000\003\222\003\234\003\246\003\250\t\254\b\030\000\246\001B\000\000\002\190\000\000\000\000\003\242\000\000\000\000\003\029\tz\t~\t\138\t\158\000\000\006Z\000\000\000\000\001F\001J\001N\001R\001V\000\000\000\000\n\018\001Z\000\000\t\225\000\000\001^\004}\000\000\n\030\n6\n\158\006f\006j\000\000\000\000\001b\000\000\000\000\000\000\000\000\007*\001f\007\150\006\206\nV\t\225\000\000\000\000\000\000\000\000\007J\001\162\007j\000\000\007V\006n\t\146\014=\001\166\000\000\016b\004\134\n\178\004\245\001\174\000\006\001\178\001\182\000\254\002\198\002\202\002\206\002\246\002\138\000\000\000\000\000\000\014=\003\002\000\000\002&\003v\000\000\002*\000\000\004\245\000\246\003z\001\218\000\000\020b\000\000\003\006\000\000\003~\003\130\000\000\0026\000\000\003\134\000\000\003\n\001\245\000\000\003\162\000\000\019\246\001\245\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b\030\000\000\000\000\020Z\002\190\000\000\000\000\003\242\020r\002B\001\245\tz\t~\t\138\t\158\007*\006Z\000\000\006\206\000\000\000\000\000\000\000\000\t\225\020z\007J\n\018\000\000\000\000\007V\000\000\000\000\007\149\001\245\n\030\n6\n\158\006f\006j\020\130\020\190\000\000\001\245\004\245\004\245\000\000\000\000\001\245\001\245\000\246\000\000\007\149\000\000\000\000\002F\007\149\001\245\001\245\000\000\020\250\024\246\006n\t\146\019F\000\000\000\000\t\170\004\134\n\178\000\014\000\018\000\022\000\026\000\030\000\000\000\"\000&\000*\000.\0002\000\000\0006\000:\001\245\000\000\000>\000\000\000\000\000\000\000B\000\000\000\000\001\245\000\000\000\000\000\000\000F\000\000\000\000\000\000\000\000\007\177\000J\000\000\000N\000R\000V\000Z\000^\000b\000f\000j\000\000\000\000\000\000\000n\000r\000\000\000v\000z\007\177\000~\000\000\000\000\007\177\000\000\007\149\000\000\000\000\000\000\b\209\000\000\000\000\b\209\000\000\000\130\000\000\000\000\000\134\000\138\000\000\000\000\000\000\000\000\004*\000\142\000\146\000\150\000\000\000\000\000\000\025\162\000\000\000\000\000\154\000\158\000\162\000\166\000\000\000\170\000\174\000\178\014=\014)\000\246\000\182\000\186\000\190\000\000\000\000\000\000\000\194\b\209\000\198\000\202\018&\000\000\000\000\002\138\000\000\000\000\000\206\014=\000\210\000\000\002&\000\181\b\209\002*\000\214\000\218\000\181\000\222\002\202\000\181\0022\002\138\000\000\n\218\000\000\000\000\003\002\0026\000\000\000\181\002>\000\181\014)\000\181\007*\000\181\001\218\006\206\011\018\b\209\003\006\000\000\018*\000\000\007J\000\000\011\026\000\181\007V\003\n\000\000\000\000\003\162\000\000\000\181\002B\000\000\0186\000\181\024\162\003\234\000\000\001\198\000\000\000\181\000\000\b\209\000\181\002\190\000\000\000\000\003\242\000\181\000\181\000\181\tz\t~\t\138\000\000\014\134\006Z\000\181\000\181\000\000\006j\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\181\000\000\024\174\000\000\003\029\000\000\000\000\000\000\002F\006f\006j\000\181\000\181\000\000\003\029\000\181\000\181\ta\000\000\024b\000\000\000\000\003\029\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\n\000\181\000\181\006n\t\146\000\000\000\000\000\205\t\170\004\134\003\029\000\181\000\205\000\181\002\202\000\205\003\029\002\138\003\029\n\218\000\000\000\000\003\002\000\000\003\029\000\205\000\000\000\205\ta\000\205\003\029\000\205\001\218\000\000\011\018\005\r\003\006\000\000\000\000\003\029\025\"\000\000\011\026\000\205\000\000\003\n\003\029\000\000\003\162\ta\000\205\000\000\000\000\003\029\000\205\000\000\003\234\003\029\001\198\003z\000\205\000\000\000\000\000\205\002\190\000\n\000\000\003\242\000\205\000\205\000\205\tz\t~\t\138\000\000\014\134\006Z\000\205\000\205\000\000\000\000\003\029\025\150\ta\000\205\000\000\000\000\005\022\000\205\003\029\ta\020Z\007\"\000\000\000\000\003\029\020r\006f\006j\000\205\000\205\000\000\000\000\000\205\000\205\026:\026J\000\000\000\000\000\000\000\000\000\000\007&\000\205\000\000\000\000\000\000\000\000\003\029\000\205\000\205\006n\t\146\000\000\000\000\000\000\t\170\004\134\t\205\000\205\000\006\000\205\005\r\000\254\002\198\002\202\002\206\002\246\002\138\000\000\000\000\027>\000\000\003\002\000\000\000\000\005\021\000\000\t\205\000\000\t\205\t\205\003z\001\218\000\000\000\246\000\000\003\006\000\000\003~\003\130\000\000\000\000\000\000\003\134\000\000\003\n\000\000\000\000\003\162\016\182\019\246\000\000\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b\030\000\000\000\000\020Z\002\190\016\190\000\000\003\242\020r\000\000\000\000\tz\t~\t\138\t\158\000\000\006Z\000\000\000\000\007*\000\000\000\000\006\206\012\154\020z\000\000\n\018\000\000\031\226\007J\000\000\000\000\000\000\007V\n\030\n6\n\158\006f\006j\020\130\020\190\000\000\000\006 \003\017v\000\254\002\198\002\202\002\206\002\246\002\138\000\000\000\000\018&\000\000\003\002\002\138\000\000 2\000\000\024\246\006n\t\146\t\205\003z\001\218\t\170\004\134\n\178\003\006\000\000\003~\003\130\000\000\024\158\000\000\003\134\000\000\003\n\000\000\000\000\003\162\000\000\019\246\000\000\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b\030\000\000\018*\020Z\002\190\000\000\000\000\003\242\020r\000\000\000\000\tz\t~\t\138\t\158\000\000\006Z\0186\000\000\024\194\000\000\000\000\000\000\000\000\020z\000\000\n\018\000\000\031\226\000\000\000\000\000\000\000\000\007\"\n\030\n6\n\158\006f\006j\020\130\020\190\000\000\000\000\005\029\006j\000\000\000\000\000\000\000\000\001\014\000\000\000\000\000\000\007&\024\206\003\026\002\202\n\142\000\000\002\138\024\246\006n\t\146\016v\003\002\001\018\t\170\004\134\n\178\002\158\018&\024b\000\000\002\138\001\218\000\000\000\000\000\000\001\022\001\026\001\030\003:\001&\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\0016\007\018\000\246\000\000\0036\012\218\001\198\001>\000\000\000\000\001B\000\000\002\190\000\000\000\000\004\006\000\000\000\000\018*\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\001F\001J\001N\001R\001V\007\141\0186\000\000\001Z\006^\007\141\000\000\001^\000\000\000\000\000\000\000\000\000\000\006f\006j\007*\006\174\001b\006\206\012\234\000\000\000\000\000\000\001f\007\141\007J\000\000\000\000\006j\007V\000\000\000\000\000\000\001\162\007\022\001\214\000\000\006n\000\000\000\000\001\166\000\000\001\170\004\134\001\014\000\000\001\174\007\141\001\178\001\182\003\026\002\202\012Z\001\218\002\138\028\170\007\141\000\000\000\000\003\002\001\018\007\141\007\141\000\246\002\158\000\000\022\002\000\000\000\000\001\218\007\141\007\141\000\000\001\022\001\026\001\030\003:\001&\001*\004N\000\000\022z\000\000\000\000\000\000\002\190\000\000\003>\000\000\0016\007\018\000\000\022\146\0036\012\218\001\198\001>\007\141\000\000\001B\000\000\002\190\000\000\000\000\004\006\000\000\007\141\000\000\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\001F\001J\001N\001R\001V\000\000\027\030\000\000\001Z\006^\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\006f\006j\005\005\006\174\001b\000\000\000\000\022\026\014=\014)\001f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\162\007\022\000\000\000\000\006n\000\000\003z\001\166\014=\001\170\004\134\002&\004A\001\174\002*\001\178\001\182\004A\003\026\002\202\004A\002\218\002\138\000\000\007\210\000\000\000\000\003\002\0026\022F\004A\002>\000\000\014)\004A\000\000\004A\001\218\020Z\b\n\000\000\000\000\000\000\020r\003\030\000\000\000\000\nB\004A\000\000\000\000\000\000\000\000\022r\000\000\004A\002B\000\000\003*\000\000\000\000\r*\000\000\001\198\000\000\004A\000\000\000\000\004A\002\190\000\000\000\000\004\006\004A\004A\011\161\004\n\000\000\004\018\005\005\012f\006Z\000\000\000\000\000\000\000\000\000\000\000\000\022\214\004A\004A\000\000\000\000\006^\000\000\000\000\000\000\000\000\002\202\000\000\000\000\002F\006f\006j\004A\004A\r:\000\000\004A\004A\000\000\000\000\000\000\000\000\000\000\007v\001\218\000\000\000\000\000\000\011\161\n\230\000\000\011\161\r^\004A\006n\000\000\000\000\025\022\011\161\001\014\004\134\000\000\011\161\007z\004A\003\026\002\202\r.\026V\002\138\003\174\000\000\026Z\000\000\003\002\001\018\002\190\000\000\000\000\002\158\000\000\000\000\000\000\026\138\001\218\000\000\000\000\000\000\001\022\001\026\001\030\003:\001&\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\0016\007\018\000\246\026\154\0036\012\218\001\198\001>\000\000\000\000\001B\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\001F\001J\001N\001R\001V\014\137\000\000\000\000\001Z\006^\014\137\000\000\001^\000\000\000\000\000\000\000\000\000\000\006f\006j\007*\006\174\001b\006\206\000\000\000\000\000\000\000\000\001f\014\137\007J\000\000\000\000\000\000\007V\000\000\000\000\000\000\001\162\007\022\000\000\000\000\006n\000\000\000\000\001\166\000\000\001\170\004\134\001\014\000\000\001\174\014\137\001\178\001\182\003\026\002\202\015\198\000\000\002\138\000\000\014\137\000\000\000\000\003\002\001\018\014\137\014\137\000\246\002\158\018&\000\000\000\000\002\138\001\218\014\137\014\137\000\000\001\022\001\026\001\030\003:\001&\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\0016\007\018\000\000\000\000\0036\012\218\001\198\001>\014\137\000\000\001B\000\000\002\190\000\000\000\000\004\006\000\000\014\137\018*\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\001F\001J\001N\001R\001V\004\225\0186\000\000\001Z\006^\004\225\000\000\001^\000\000\000\000\000\000\000\000\000\000\006f\006j\000\000\006\174\001b\000\000\000\000\000\000\000\000\000\000\001f\004\225\000\000\000\000\000\000\006j\000\000\000\000\000\000\000\000\001\162\007\022\000\000\000\000\006n\000\000\000\000\001\166\000\000\001\170\004\134\001\014\000\000\001\174\004\225\001\178\001\182\003\026\002\202\006\242\000\000\002\138\024v\004\225\000\000\000\000\003\002\001\018\004\225\002\238\000\246\002\158\000\000\000\000\000\000\000\000\001\218\004\225\004\225\000\000\001\022\001\026\001\030\003:\001&\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\0016\007\018\000\000\000\000\0036\012n\001\198\001>\004\225\000\000\001B\000\000\002\190\000\000\000\000\004\006\000\000\004\225\000\000\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\001F\001J\001N\001R\001V\000\000\000\000\000\000\001Z\006^\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\006f\006j\000\000\006\174\001b\000\000\000\000\000\000\000\000\000\000\001f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\162\007\022\003\029\003\029\006n\000\000\000\000\001\166\000\000\001\170\004\134\011\189\000\000\001\174\011\189\001\178\001\182\011\189\011\189\000\000\003\029\011\189\003\029\011\189\000\000\003\029\011\189\000\000\003\029\000\n\011\189\011\189\000\000\011\189\011\189\003\029\011\189\000\000\011\189\000\000\000\000\000\000\003\029\011\189\003\029\003\029\011\189\003\029\000\000\000\000\000\000\000\000\000\000\000\n\000\000\011\189\000\000\011\189\000\000\003\029\011\189\000\000\011\189\005\201\014}\000\000\000\000\003\029\011\189\003\029\003\029\011\189\000\000\000\000\011\189\011\189\003\029\011\189\000\000\011\189\011\189\003\029\005\201\003\029\000\000\000\000\005\201\000\000\000\000\011\189\003\029\003\029\011\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\189\011\189\000\000\000\000\011\189\000\000\011\189\000\000\000\000\000\000\000\000\006\138\000\000\000\000\003\029\000\000\003\029\000\000\011\189\011\189\000\000\011\189\011\189\000\000\011\189\003\029\011\189\000\000\011\189\000a\011\189\000\000\011\189\000\000\000a\000\000\000a\000a\000\000\000\000\000\000\000\000\014}\014}\000\000\000a\000\000\000a\000a\000a\000\000\000a\000a\000a\000\000\tM\005\201\000\000\000\000\003\154\000\000\002\202\014}\000\000\014}\000a\000\000\000\000\003n\000\000\000\000\005\201\000a\000a\005\201\000\000\000a\000\000\000\000\001\218\000a\000\000\000a\000\000\000\000\000a\000\000\000\000\000\000\000\000\000a\000a\000a\000\000\000\000\000\000\000\000\000\000\000\000\000a\000a\000\000\000\000\003\150\000\000\000\000\000a\000a\000\000\000\000\000a\002\190\005\153\000a\000\000\000\000\000\000\005\153\000\000\005\153\005\153\000a\000a\000a\000\000\000a\000a\000\000\005\153\000\000\005\153\tM\005\153\000\000\005\153\000a\005\153\000a\000a\000\000\b2\000\000\000a\000\000\000\000\000\000\000\000\000a\005\153\005\153\005\153\000a\000\000\000a\005\153\005\153\005\153\005\153\000\000\000\000\000\000\000\000\000\000\005\153\000\000\005\153\000\000\005\153\005\153\005\153\000\000\005\153\005\153\005\153\005\153\005\153\000\000\000\000\000\000\000\000\000\000\003\029\000\000\000\000\000\000\005\153\000\000\000\000\003\029\005\153\000\000\000\000\005\153\005\153\000\000\000\000\005\153\000\000\000\000\003\029\005\153\000\000\005\153\000\000\005\153\005\153\005\153\000\n\005\153\005\153\005\153\005\153\005\153\000\000\000\000\000\000\000\000\000\000\000\000\005\153\005\153\000\000\000\000\003\029\023^\005\153\005\153\000\000\000\000\000\000\005\153\003\029\000\000\005\153\000\000\000\000\005\153\003\029\000\000\000\000\000\000\005\153\005\153\005\153\000\000\005\153\005\153\000\000\000\000\000\000\000\000\000\000\003\029\000\000\000\000\005\153\000\000\005\153\005\153\003\029\003\029\002\174\005\153\000\000\000\000\0012\000\000\005\153\000\000\000\000\003\029\005\153\003\029\005\153\005\153\000\000\003\029\003\029\000\n\003\029\003\029\000\000\003\029\003\029\000\000\003\029\003\029\000\000\000\000\003\029\003\029\003\029\000\000\003\138\003\029\003\029\000\000\003\029\000\n\003\029\000\000\003\029\003\029\000\n\003\029\003\029\b\"\000\000\003\029\000\n\000\000\003\029\000\n\017\222\003\029\003\029\003\029\000\000\003\029\003\029\003\029\003\029\003\029\003\029\000\000\003\029\000\000\003\029\003\029\000\000\003\029\003\029\000\000\003\029\003\029\003\029\003\029\003\029\003\029\003\029\003\029\000\000\003\029\003\029\000\000\003\029\003\029\000\000\003\029\003\029\000\000\003\029\000\000\000\000\000\000\000\000\000\000\003\029\003\029\003\029\003\029\003\029\000\000\018\026\b&\000\000\003\029\003\029\000\000\003\029\003\029\000\000\003\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\029\003\029\000\000\t\185\t\185\003\029\003\029\003\029\t\185\003\029\001\214\t\185\003\029\003\029\000\000\003\029\000\000\000\000\000\000\t\185\000\000\t\185\t\185\t\185\000\000\t\185\t\185\t\185\000\000\000\000\000\254\000\000\000\254\002\206\000\000\002\026\000\000\000\000\000\000\t\185\000\000\000\000\000\000\005\021\000\000\020\254\t\185\t\185\000\000\003z\t\185\003z\000\000\000\000\004N\000\000\t\185\000\000\000\000\t\185\000\000\003\134\000\000\021\002\t\185\t\185\t\185\000\000\019\246\000\000\021*\000\000\000\000\t\185\t\185\000\000\000\000\000\000\027\190\000\000\t\185\020Z\000\000\020Z\004\194\000\000\020r\t\185\020r\000\000\000\000\000\000\000\000\000\000\000\000\t\185\t\185\t\185\000\000\t\185\t\185\000\000\020z\000\000\020z\000\000\000\000\000\000\001\021\t\185\000\000\t\185\t\185\001\021\000\000\000\000\t\185\020\130\020\190\020\130\021\194\t\185\000\000\004\233\000\000\t\185\000\000\t\185\t\185\r\253\r\253\000\000\001\021\000\000\r\253\000\000\001\214\r\253\024\246\000\000\021\210\000\000\000\000\000\000\000\000\004\210\000\000\r\253\r\253\r\253\000\000\r\253\r\253\r\253\000\000\001\021\000\000\003\022\000\000\000\000\000\000\000\000\000\000\000\000\001\021\r\253\000\000\000\000\000\000\001\021\000\000\000\000\r\253\r\253\000\000\000\000\r\253\000\000\001\021\001\021\004N\000\000\r\253\000\000\000\000\r\253\000\000\000\000\005\205\014}\r\253\r\253\r\253\000\000\000\000\000\000\000\000\000\000\000\000\r\253\r\253\000\000\000\000\000\000\000\000\001\021\r\253\005\205\000\000\000\000\004\194\005\205\000\000\r\253\001\021\000\000\000\000\000\000\000\000\000\000\000\000\r\253\r\253\r\253\000\000\r\253\r\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\253\000\000\r\253\r\253\000\000\000\000\000\000\r\253\000\000\000\000\000\000\000\000\r\253\000\000\000\000\000\000\r\253\000\000\r\253\r\253\t\189\t\189\000\000\000\000\000\000\t\189\000\000\001\214\t\189\000\000\000\000\000\000\000\000\014}\014}\000\000\t\189\000\000\t\189\t\189\t\189\000\000\t\189\t\189\t\189\000\000\000\000\005\205\000\000\000\000\000\000\000\000\000\000\014}\000\000\014}\t\189\000\000\000\000\000\000\000\000\000\000\005\205\t\189\t\189\005\205\000\000\t\189\000\000\000\000\000\000\004N\000\000\t\189\000\000\000\000\t\189\000\000\000\000\000\000\000\000\t\189\t\189\t\189\000\000\000\000\000\000\000\000\000\000\000\000\t\189\t\189\000\000\000\000\000\000\000\000\000\000\t\189\000\000\000\000\000\000\004\194\000\000\007\165\t\189\000\000\000\000\000\000\007\165\000\000\000\000\007\165\t\189\t\189\t\189\000\000\t\189\t\189\000\000\000\000\000\000\007\165\000\000\000\000\000\000\007\165\t\189\007\165\t\189\t\189\000\000\000\000\000\000\t\189\000\000\000\000\000\000\000\000\t\189\007\165\000\000\007=\t\189\000A\t\189\t\189\007\165\000A\000A\000\000\000A\000A\000\000\000\000\000\000\000\000\000A\000\000\000\000\007\165\t\234\007=\000\000\000\000\007\165\007\165\000A\002\014\000\000\000\000\000A\000\000\000A\000A\000\000\000\000\000\000\002\018\000\000\000A\007\165\000\000\000A\000\000\000\000\001\218\000A\000A\000\000\000A\000A\000A\000A\000A\000A\007\165\007\165\020\n\000A\007\165\007\165\000A\000\000\003^\000\000\000A\000A\000A\000A\bJ\000A\001\230\000\000\021>\000\000\000\000\007\165\002\190\000\000\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\000A\000A\000A\000A\000\000\0079\000\000\000=\000\000\000\000\000\000\000=\000=\000\000\000=\000=\000\000\bN\000\000\000\000\000=\000\000\000\000\000\000\000\000\0079\000A\000A\000\000\000\000\000=\000A\000A\000A\000=\000\000\000=\000=\000\000\000\000\000\000\000\000\000\000\000=\000\000\000\000\000=\000\000\000\000\000\000\000=\000=\000\000\000=\000=\000=\000=\000=\000=\000\000\000\000\000\000\000=\000\000\000\000\000=\000\000\000\000\000\000\000=\000=\000=\000=\000\000\000=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\000=\000=\000=\000=\000\000\007I\000\000\r\197\003\154\000\000\002\202\r\197\r\197\000\000\r\197\r\197\000\000\003n\000\000\000\000\r\197\000\000\000\000\tB\000\000\007I\000=\000=\001\218\000\000\r\197\000=\000=\000=\r\197\000\000\r\197\r\197\000\000\000\000\000\000\000\000\000\000\r\197\000\000\000\000\r\197\000\000\000\000\000\000\r\197\r\197\003\150\r\197\r\197\r\197\r\197\r\197\r\197\000\000\002\190\000\000\r\197\000\000\000\000\r\197\000\000\000\000\000\000\r\197\r\197\r\197\r\197\000\000\r\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\197\000\000\000\000\000\000\000\000\b2\000\000\000\000\r\197\r\197\r\197\r\197\r\197\000\000\007E\000\000\r\193\000\000\000\000\000\000\r\193\r\193\000\000\r\193\r\193\000\000\001\029\000\000\000\000\r\193\000\000\001\029\000\000\000\000\007E\r\197\r\197\000\000\000\000\r\193\r\197\r\197\r\197\r\193\000\000\r\193\r\193\000\000\000\000\000\000\001\029\000\000\r\193\000\000\000\000\r\193\000\000\000\000\000\000\r\193\r\193\000\000\r\193\r\193\r\193\r\193\r\193\r\193\000\000\019z\000\000\r\193\000\000\001\029\r\193\022\n\002\014\000\000\r\193\r\193\r\193\r\193\001\029\r\193\000\000\000\000\002\018\001\029\000\000\000\000\000\000\000\000\000\000\r\193\001\218\000\000\000\000\001\029\000\000\000\000\000\000\r\193\r\193\r\193\r\193\r\193\000\000\000\000\000\000\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\006\bJ\000\000\001\230\002\198\002\202\001\029\002\246\002\138\002\190\000\000\r\193\r\193\003\002\000\000\001\029\r\193\r\193\r\193\000\000\004\014\000\000\000\000\001\218\000\000\000\000\000\000\003\006\000\000\003~\003\130\000\000\000\000\000\000\000\000\000\000\003\n\000\000\bN\003\162\000\000\000\000\000\000\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b\030\000\000\019\182\000\000\002\190\000\000\000\000\003\242\000\000\002\014\000\000\tz\t~\t\138\t\158\000\000\006Z\000\000\000\000\002\018\000\000\000\000\000\000\000\000\000\000\000\000\n\018\001\218\000\000\000\000\000\000\000\000\000\000\000\000\n\030\n6\n\158\006f\006j\000\000\000\000\000\000\000\000\000\000\000\000\003^\000\000\000\000\000\000\000\000\000\006\bJ\000\000\001\230\002\198\002\202\000\000\002\246\002\138\002\190\000\000\006n\t\146\003\002\000\000\000\000\t\170\004\134\n\178\000\000\016\226\000\000\000\000\001\218\000\000\000\000\000\000\003\006\000\000\003~\003\130\000\000\000\000\000\000\000\000\000\000\003\n\000\000\bN\003\162\000\000\000\000\000\000\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b\030\007}\007}\000\000\002\190\000\000\000\000\003\242\000\000\000\000\000\000\tz\t~\t\138\t\158\000\000\006Z\004>\000\000\000\000\007}\007}\007}\000\000\000\000\000\000\n\018\000\000\000\000\000\000\007}\000\000\000\000\000\000\n\030\n6\n\158\006f\006j\000\000\000\000\000\000\000\000\000\000\007}\007}\007}\000\000\000\000\000\000\007}\000\000\007}\007}\007}\014\001\014\001\000\000\000\000\007}\014\001\006n\t\146\014\001\000\000\000\000\t\170\004\134\n\178\000\000\000\000\004\178\000\000\014\001\014\001\014\001\007}\014\001\014\001\014\001\019\198\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\000\000\014\001\000\000\000\000\000\000\000\000\000\000\002\018\014\001\014\001\000\000\000\000\014\001\000\000\000\000\001\218\000\000\000\000\014\001\000\000\000\000\014\001\000\000\0042\000\000\007}\014\001\014\001\014\001\000\000\000\000\000\000\000\000\003^\000\000\014\001\014\001\000\000\000\000\bJ\000\000\001\230\014\001\000\000\000\000\000\000\014\001\002\190\000\000\014\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\001\014\001\014\001\000\000\014\001\014\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\001\000\000\014\001\014\001\000\000\bN\000\000\014\001\000\000\000\000\000\000\000\000\014\001\000\000\011\201\000\000\014\001\011\201\014\001\014\001\003\026\002\202\000\000\000\000\002\138\000\000\000\000\000\000\000\000\003\002\000\000\000\000\000\000\011\201\011\201\000\000\011\201\011\201\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000\000\000\000\000\b9\000\000\000\000\b9\000\000\011\201\000\000\003*\000\000\000\000\0036\nN\001\198\000\000\000\000\000\000\000\000\000\000\002\190\b9\b9\004\006\b9\b9\011\201\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\201\000\000\000\000\006^\000\000\b9\000\000\000\000\000\000\000\000\000\000\000\000\006f\006j\000\000\006\174\011\201\000\000\011\201\000\000\000\000\000\000\000\000\000\000\b9\000\000\000\000\000\000\000\000\000\000\011\201\000\000\000\000\011\201\011\201\000\000\006n\000\000\011\201\b9\011\201\000\000\004\134\011\197\011\201\000\000\011\197\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\b9\000\000\b9\003\002\000\000\000\000\000\000\011\197\011\197\000\000\011\197\011\197\000\000\001\218\006\198\000\000\000\000\b9\b9\000\000\003\030\000\000\b9\000\000\b9\000\000\000\000\000\000\b9\000\000\000\000\000\000\011\197\000\000\003*\000\000\000\000\006\238\000\000\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\000\000\011\197\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\197\000\000\000\000\006^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006f\006j\000\000\006\174\011\197\000\000\011\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003Y\003Y\000\000\011\197\000\000\003Y\011\197\011\197\003Y\006n\000\000\011\197\000\000\011\197\000\000\004\134\000\000\011\197\003Y\003Y\003Y\000\000\003Y\003Y\003Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003Y\000\000\000\000\000\000\000\000\000\000\000\000\003Y\004\150\000\000\000\000\003Y\000\000\000\000\000\000\000\000\000\000\003Y\000\000\000\000\003Y\000\000\000\000\000\000\000\000\003Y\003Y\003Y\000\000\000\000\000\000\re\re\000\000\003Y\003Y\re\000\000\000\000\re\000\000\003Y\000\000\000\000\000\000\003Y\000\000\000\000\003Y\re\re\re\000\000\re\re\re\003Y\003Y\003Y\000\000\003Y\003Y\000\000\000\000\000\000\000\000\000\000\re\000\000\000\000\003Y\000\000\003Y\003Y\re\004\162\000\000\003Y\re\000\000\000\000\000\000\003Y\000\000\re\000\000\003Y\re\003Y\003Y\000\000\000\000\re\re\re\000\000\000\000\000\000\ru\ru\000\000\re\re\ru\000\000\000\000\ru\000\000\re\000\000\000\000\000\000\re\000\000\000\000\re\ru\ru\ru\000\000\ru\ru\ru\re\re\re\000\000\re\re\000\000\000\000\000\000\000\000\000\000\ru\000\000\000\000\re\000\000\re\re\ru\004\162\000\000\re\ru\000\000\000\000\000\000\re\000\000\ru\000\000\re\ru\re\re\000\000\000\000\ru\ru\ru\000\000\000\000\000\000\rq\rq\000\000\ru\ru\rq\000\000\000\000\rq\000\000\ru\000\000\000\000\000\000\ru\000\000\000\000\ru\rq\rq\rq\000\000\rq\rq\rq\ru\ru\ru\000\000\ru\ru\000\000\000\000\000\000\000\000\000\000\rq\000\000\000\000\ru\000\000\ru\ru\rq\004\150\000\000\ru\rq\000\000\000\000\000\000\ru\000\000\rq\000\000\ru\rq\ru\ru\000\000\000\000\rq\rq\rq\000\000\000\000\000\000\r\029\r\029\000\000\rq\rq\r\029\000\000\000\000\r\029\000\000\rq\000\000\000\000\000\000\rq\000\000\000\000\rq\r\029\r\029\r\029\000\000\r\029\r\029\r\029\rq\rq\rq\000\000\rq\rq\000\000\000\000\000\000\000\000\000\000\r\029\000\000\000\000\rq\000\000\rq\rq\r\029\004\162\000\000\rq\r\029\000\000\000\000\000\000\rq\000\000\r\029\000\000\rq\r\029\rq\rq\000\000\000\000\r\029\r\029\r\029\000\000\000\000\000\000\r\025\r\025\000\000\r\029\r\029\r\025\000\000\000\000\r\025\000\000\r\029\000\000\000\000\000\000\r\029\000\000\000\000\r\029\r\025\r\025\r\025\000\000\r\025\r\025\r\025\r\029\r\029\r\029\000\000\r\029\r\029\000\000\000\000\000\000\000\000\000\000\r\025\000\000\000\000\r\029\000\000\r\029\r\029\r\025\004\150\000\000\r\029\r\025\000\000\000\000\000\000\r\029\000\000\r\025\000\000\r\029\r\025\r\029\r\029\000\000\000\000\r\025\r\025\r\025\000\000\000\000\000\000\r-\r-\000\000\r\025\r\025\r-\000\000\000\000\r-\000\000\r\025\000\000\000\000\000\000\r\025\000\000\000\000\r\025\r-\r-\r-\000\000\r-\r-\r-\r\025\r\025\r\025\000\000\r\025\r\025\000\000\000\000\000\000\000\000\000\000\r-\000\000\000\000\r\025\000\000\r\025\r\025\r-\004\162\000\000\r\025\r-\000\000\000\000\000\000\r\025\000\000\r-\000\000\r\025\r-\r\025\r\025\000\000\000\000\r-\r-\r-\000\000\000\000\000\000\r)\r)\000\000\r-\r-\r)\000\000\000\000\r)\000\000\r-\000\000\000\000\000\000\r-\000\000\000\000\r-\r)\r)\r)\000\000\r)\r)\r)\r-\r-\r-\000\000\r-\r-\000\000\000\000\000\000\000\000\000\000\r)\000\000\000\000\r-\000\000\r-\r-\r)\004\150\000\000\r-\r)\000\000\000\000\000\000\r-\000\000\r)\000\000\r-\r)\r-\r-\000\000\000\000\r)\r)\r)\000\000\000\000\000\000\r5\r5\000\000\r)\r)\r5\000\000\000\000\r5\000\000\r)\000\000\000\000\000\000\r)\000\000\000\000\r)\r5\r5\r5\000\000\r5\r5\r5\r)\r)\r)\000\000\r)\r)\000\000\000\000\000\000\000\000\000\000\r5\000\000\000\000\r)\000\000\r)\r)\r5\004\162\000\000\r)\r5\000\000\000\000\000\000\r)\000\000\r5\000\000\r)\r5\r)\r)\000\000\000\000\r5\r5\r5\000\000\000\000\000\000\r1\r1\000\000\r5\r5\r1\000\000\000\000\r1\000\000\r5\000\000\000\000\000\000\r5\000\000\000\000\r5\r1\r1\r1\000\000\r1\r1\r1\r5\r5\r5\000\000\r5\r5\000\000\000\000\000\000\000\000\000\000\r1\000\000\000\000\r5\000\000\r5\r5\r1\004\150\000\000\r5\r1\000\000\000\000\000\000\r5\000\000\r1\000\000\r5\r1\r5\r5\000\000\000\000\r1\r1\r1\000\000\000\000\000\000\r%\r%\000\000\r1\r1\r%\000\000\000\000\r%\000\000\r1\000\000\000\000\000\000\r1\000\000\000\000\r1\r%\r%\r%\000\000\r%\r%\r%\r1\r1\r1\000\000\r1\r1\000\000\000\000\000\000\000\000\000\000\r%\000\000\000\000\r1\000\000\r1\r1\r%\004\162\000\000\r1\r%\000\000\000\000\000\000\r1\000\000\r%\000\000\r1\r%\r1\r1\000\000\000\000\r%\r%\r%\000\000\000\000\000\000\r!\r!\000\000\r%\r%\r!\000\000\000\000\r!\000\000\r%\000\000\000\000\000\000\r%\000\000\000\000\r%\r!\r!\r!\000\000\r!\r!\r!\r%\r%\r%\000\000\r%\r%\000\000\000\000\000\000\000\000\000\000\r!\000\000\000\000\r%\000\000\r%\r%\r!\004\150\000\000\r%\r!\000\000\000\000\000\000\r%\000\000\r!\000\000\r%\r!\r%\r%\000\000\000\000\r!\r!\r!\000\000\000\000\000\000\ra\ra\000\000\r!\r!\ra\000\000\000\000\ra\000\000\r!\000\000\000\000\000\000\r!\000\000\000\000\r!\ra\ra\ra\000\000\ra\ra\ra\r!\r!\r!\000\000\r!\r!\000\000\000\000\000\000\000\000\000\000\ra\000\000\000\000\r!\000\000\r!\r!\ra\004\150\000\000\r!\ra\000\000\000\000\000\000\r!\000\000\ra\000\000\r!\ra\r!\r!\000\000\000\000\ra\ra\ra\000\000\000\000\000\000\r=\r=\000\000\ra\ra\r=\000\000\000\000\r=\000\000\ra\000\000\000\000\000\000\ra\000\000\000\000\ra\r=\r=\r=\000\000\r=\r=\r=\ra\ra\ra\000\000\ra\ra\000\000\000\000\000\000\000\000\000\000\r=\000\000\000\000\ra\000\000\ra\ra\r=\004\162\000\000\ra\r=\000\000\000\000\000\000\ra\000\000\r=\000\000\ra\r=\ra\ra\000\000\000\000\r=\r=\r=\000\000\000\000\000\000\r9\r9\000\000\r=\r=\r9\000\000\000\000\r9\000\000\r=\000\000\000\000\000\000\r=\000\000\000\000\r=\r9\r9\r9\000\000\r9\r9\r9\r=\r=\r=\000\000\r=\r=\000\000\000\000\000\000\000\000\000\000\r9\000\000\000\000\r=\000\000\r=\r=\r9\004\150\000\000\r=\r9\000\000\000\000\000\000\r=\000\000\r9\000\000\r=\r9\r=\r=\000\000\000\000\r9\r9\r9\000\000\000\000\000\000\rM\rM\000\000\r9\r9\rM\000\000\000\000\rM\000\000\r9\000\000\000\000\000\000\r9\000\000\000\000\r9\rM\rM\rM\000\000\rM\rM\rM\r9\r9\r9\000\000\r9\r9\000\000\000\000\000\000\000\000\000\000\rM\000\000\000\000\r9\000\000\r9\r9\rM\004\162\000\000\r9\rM\000\000\000\000\000\000\r9\000\000\rM\000\000\r9\rM\r9\r9\000\000\000\000\rM\rM\rM\000\000\000\000\000\000\rI\rI\000\000\rM\rM\rI\000\000\000\000\rI\000\000\rM\000\000\000\000\000\000\rM\000\000\000\000\rM\rI\rI\rI\000\000\rI\rI\rI\rM\rM\rM\000\000\rM\rM\000\000\000\000\000\000\000\000\000\000\rI\000\000\000\000\rM\000\000\rM\rM\rI\004\150\000\000\rM\rI\000\000\000\000\000\000\rM\000\000\rI\000\000\rM\rI\rM\rM\000\000\000\000\rI\rI\rI\000\000\000\000\000\000\rU\rU\000\000\rI\rI\rU\000\000\000\000\rU\000\000\rI\000\000\000\000\000\000\rI\000\000\000\000\rI\rU\rU\rU\000\000\rU\rU\rU\rI\rI\rI\000\000\rI\rI\000\000\000\000\000\000\000\000\000\000\rU\000\000\000\000\rI\000\000\rI\rI\rU\004\162\000\000\rI\rU\000\000\000\000\000\000\rI\000\000\rU\000\000\rI\rU\rI\rI\000\000\000\000\rU\rU\rU\000\000\000\000\000\000\rQ\rQ\000\000\rU\rU\rQ\000\000\000\000\rQ\000\000\rU\000\000\000\000\000\000\rU\000\000\000\000\rU\rQ\rQ\rQ\000\000\rQ\rQ\rQ\rU\rU\rU\000\000\rU\rU\000\000\000\000\000\000\000\000\000\000\rQ\000\000\000\000\rU\000\000\rU\rU\rQ\004\150\000\000\rU\rQ\000\000\000\000\000\000\rU\000\000\rQ\000\000\rU\rQ\rU\rU\000\000\000\000\rQ\rQ\rQ\000\000\000\000\000\000\rE\rE\000\000\rQ\rQ\rE\000\000\000\000\rE\000\000\rQ\000\000\000\000\000\000\rQ\000\000\000\000\rQ\rE\rE\rE\000\000\rE\rE\rE\rQ\rQ\rQ\000\000\rQ\rQ\000\000\000\000\000\000\000\000\000\000\rE\000\000\000\000\rQ\000\000\rQ\rQ\rE\004\162\000\000\rQ\rE\000\000\000\000\000\000\rQ\000\000\rE\000\000\rQ\rE\rQ\rQ\000\000\000\000\rE\rE\rE\000\000\000\000\000\000\rA\rA\000\000\rE\rE\rA\000\000\000\000\rA\000\000\rE\000\000\000\000\000\000\rE\000\000\000\000\rE\rA\rA\rA\000\000\rA\rA\rA\rE\rE\rE\000\000\rE\rE\000\000\000\000\000\000\000\000\000\000\rA\000\000\000\000\rE\000\000\rE\rE\rA\004\150\000\000\rE\rA\000\000\000\000\000\000\rE\000\000\rA\000\000\rE\rA\rE\rE\000\000\000\000\rA\rA\rA\000\000\000\000\000\000\rm\rm\000\000\rA\rA\rm\000\000\000\000\rm\000\000\rA\000\000\000\000\000\000\rA\000\000\000\000\rA\rm\rm\rm\000\000\rm\rm\rm\rA\rA\rA\000\000\rA\rA\000\000\000\000\000\000\000\000\000\000\rm\000\000\000\000\rA\000\000\rA\rA\rm\004\162\000\000\rA\rm\000\000\000\000\000\000\rA\000\000\rm\000\000\rA\rm\rA\rA\000\000\000\000\rm\rm\rm\000\000\000\000\000\000\ri\ri\000\000\rm\rm\ri\000\000\000\000\ri\000\000\rm\000\000\000\000\000\000\rm\000\000\000\000\rm\ri\ri\ri\000\000\ri\ri\ri\rm\rm\rm\000\000\rm\rm\000\000\000\000\000\000\000\000\000\000\ri\000\000\000\000\rm\000\000\rm\rm\ri\004\150\000\000\rm\ri\000\000\000\000\000\000\rm\000\000\ri\000\000\rm\ri\rm\rm\000\000\000\000\ri\ri\ri\000\000\000\000\000\000\r]\r]\000\000\ri\ri\r]\000\000\000\000\r]\000\000\ri\000\000\000\000\000\000\ri\000\000\000\000\ri\r]\r]\r]\000\000\r]\r]\r]\ri\ri\ri\000\000\ri\ri\000\000\000\000\000\000\000\000\000\000\r]\000\000\000\000\ri\000\000\ri\ri\r]\004\162\000\000\ri\r]\000\000\000\000\000\000\ri\000\000\r]\000\000\ri\r]\ri\ri\000\000\000\000\r]\r]\r]\000\000\000\000\000\000\rY\rY\000\000\r]\r]\rY\000\000\000\000\rY\000\000\r]\000\000\000\000\000\000\r]\000\000\000\000\r]\rY\rY\rY\000\000\rY\rY\rY\r]\r]\r]\000\000\r]\r]\000\000\000\000\000\000\000\000\000\000\rY\000\000\000\000\r]\000\000\r]\r]\rY\004\150\000\000\r]\rY\000\000\000\000\000\000\r]\000\000\rY\000\000\r]\rY\r]\r]\000\000\000\000\rY\rY\rY\000\000\000\000\000\000\002\029\002\029\000\000\rY\rY\002\029\000\000\000\000\002\029\000\000\rY\000\000\000\000\000\000\rY\000\000\000\000\rY\002\029\002\029\002\029\000\000\002\029\002\029\002\029\rY\rY\rY\000\000\rY\rY\000\000\000\000\000\000\000\000\000\000\002\029\000\000\000\000\rY\000\000\rY\rY\002\029\002\029\000\000\rY\002\029\000\000\000\000\000\000\rY\000\000\002\029\000\000\rY\002\029\rY\rY\000\000\000\000\002\029\002\029\002\029\000\000\000\000\000\000\000\000\000\000\000\000\002\029\002\029\000\000\000\000\000\000\000\000\000\000\002\029\000\000\000\000\000\000\002\029\000\000\000\000\002\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\029\002\029\002\029\000\000\002\029\002\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\029\000\000\002\029\002\029\003\026\002\202\000\000\002\029\002\138\000\000\007\210\000\000\002\029\003\002\006\166\000\000\005\022\000\000\002\029\000\000\003\026\002\202\000\000\001\218\002\138\b\n\000\000\000\000\000\000\003\002\003\030\000\000\000\000\nB\006\170\000\000\004\014\000\000\000\000\001\218\000\000\000\000\000\000\000\000\003*\000\000\003\030\r*\000\000\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\003*\011\161\004\n\0036\004\018\001\198\012f\006Z\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\004\141\000\000\004\n\006^\004\018\006N\000\000\006Z\000\000\000\000\000\000\000\000\006f\006j\000\000\000\000\r:\006\025\006\025\006^\000\000\000\000\006\025\000\000\000\000\006\025\000\000\000\000\006f\006j\011\161\006\174\000\000\011\161\011\161\006\025\006n\006\025\000\000\006\025\011\161\006\025\004\134\000\000\011\161\004\141\000\000\000\000\000\000\007j\000\000\000\000\006n\006\025\007\190\000\000\n*\000\000\004\134\000\000\006\025\006\025\000\000\000\000\000\000\000\000\006\025\000\000\000\000\000\000\006\025\000\000\001\014\006\025\000\000\000\000\000\000\000\000\006\025\006\025\006\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\018\000\000\000\000\000\000\002\158\000\000\006\025\006\025\000\000\000\000\006\025\000\000\000\000\001\022\001\026\001\030\001\"\001&\001*\000\000\000\000\006\025\006\025\006\025\000\000\006\025\006\025\001.\000\000\0016\001:\b\246\000\000\000\000\000\000\000\000\001>\000\000\006\025\001B\000\000\006\025\006\025\003\153\003\153\000\000\000\000\000\000\003\153\000\000\000\000\003\153\000\000\006\025\000\000\000\000\001F\001J\001N\001R\001V\003\153\000\000\003\153\001Z\003\153\000\000\003\153\001^\003\153\003\153\000\000\000\000\000\000\003\153\000\000\000\000\003\153\001b\003\153\000\000\000\000\000\000\000\000\001f\000\000\003\153\003\153\000\000\003\153\000\000\003\153\005\161\003\153\001\162\030\246\003\153\000\000\000\000\003\153\000\000\001\166\000\000\001\170\003\153\003\153\003\153\001\174\000\000\001\178\001\182\000\000\003\153\003\153\000\000\000\000\000\000\000\000\005\165\000\000\003\153\000\000\003\153\000\000\003\153\003\153\000\000\000\000\000\000\000\000\003\153\003\153\003\153\000\000\000\000\003\153\003\153\003\153\000\000\003\153\003\153\000\000\000\000\000\000\000\000\005\161\003\153\000\000\000\000\000\000\003\153\000\000\003\153\003\153\000\000\000\000\003\153\000\000\000\000\000\000\000\000\003\153\003\153\003\153\000\000\003\153\003\153\003\153\006\r\006\r\000\000\005\165\000\000\006\r\000\000\000\000\006\r\000\000\003\153\003\153\000\000\000\000\003\153\000\000\000\000\000\000\006\r\000\000\006\r\000\000\006\r\000\000\006\r\003\153\000\000\000\000\000\000\000\000\000\000\000\000\bM\000\000\000\000\bM\006\r\000\000\000\000\000\000\000\000\000\000\000\000\006\r\006\r\000\000\000\000\000\000\000\000\t>\000\000\bM\bM\006\r\bM\bM\006\r\000\000\000\000\000\000\000\000\006\r\006\r\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\bM\006\r\006\r\000\000\000\000\006\r\000\000\000\000\t\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\r\006\r\006\r\000\246\006\r\006\r\000\000\000\000\011n\000\000\000\000\014Z\t\201\000\000\t\201\t\201\000\000\006\r\bM\000\000\006\r\006\r\011\166\011\190\011\198\011\174\011\206\000\000\000\000\000\000\000\000\000\000\006\r\000\000\bM\000\000\bM\011\214\011\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\230\bM\000\000\000\000\006\206\bM\000\000\000\000\000\246\bM\000\000\bM\000\000\000\000\001\014\bM\000\000\011v\011\182\011\238\011\246\012\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\014\001\018\000\000\000\000\000\000\016\138\000\000\000\000\000\000\000\000\012\022\000\000\000\000\000\000\001\022\001\026\001\030\001\"\001&\001*\000\000\000\000\000\000\000\000\0126\000\000\012>\011\254\001.\000\000\0016\001:\t\201\012\030\000\000\000\000\000\000\001>\000\000\000\000\001B\012&\012.\000\000\t-\t-\000\000\000\000\000\000\t-\000\000\000\000\t-\000\000\000\000\000\000\000\000\001F\001J\001N\001R\001V\t-\000\000\t-\001Z\t-\000\000\t-\001^\000\000\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\001b\t-\000\000\000\000\000\000\000\000\001f\000\000\t-\t-\000\000\001\218\002\142\000\000\000\000\000\000\001\162\031\018\t-\000\000\000\000\t-\000\000\001\166\000\000\001\170\t-\t-\t-\001\174\000\000\001\178\001\182\000\000\000\000\002\178\029z\004N\000\000\000\000\000\000\002\182\t-\002\190\004.\004:\t-\000\000\014\201\014\201\004F\000\000\000\000\014\201\000\000\000\000\014\201\t-\t-\t-\000\000\t-\t-\000\000\000\000\000\000\014\201\004J\014\201\000\000\014\201\t-\014\201\000\000\t-\000\000\000\000\000\000\t-\000\000\000\000\000\000\000\000\000\000\014\201\000\000\000\000\005\022\000\000\t-\000\000\014\201\014\201\000\000\000\000\000\000\000\000\004V\000\000\000\000\000\000\014\201\000\000\000\000\014\201\000\000\000\000\000\000\000\000\014\201\014\201\014\201\000\000\000\000\000\000\014\205\014\205\000\000\000\000\000\000\014\205\000\000\000\000\014\205\000\000\014\201\000\000\000\000\000\000\014\201\000\000\000\000\000\000\014\205\000\000\014\205\000\000\014\205\000\000\014\205\014\201\014\201\014\201\000\000\014\201\014\201\000\000\000\000\000\000\000\000\004f\014\205\000\000\000\000\000\000\000\000\000\000\014\201\014\205\014\205\000\000\014\201\b%\000\000\004V\b%\000\000\000\000\014\205\000\000\000\000\014\205\014\201\000\000\000\000\000\000\014\205\014\205\014\205\000\000\000\000\b%\b%\000\000\b%\b%\000\000\000\000\000\000\000\000\000\000\001\149\014\205\000\000\000\000\000\000\014\205\000\000\000\000\015\162\000\000\000\000\000\000\000\000\011n\000\000\b%\014\205\014\205\014\205\001\149\014\205\014\205\000\000\000\000\000\000\000\000\004f\011\166\011\190\011\198\011\174\011\206\000\000\014\205\b%\000\000\000\000\014\205\000\000\000\000\000\000\000\000\011\214\011\222\000\000\000\000\000\000\000\000\014\205\b%\000\000\000\000\011\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\246\000\000\000\000\000\000\000\000\b%\000\000\b%\000\000\011v\011\182\011\238\011\246\012\006\000\000\000\000\000\000\000\000\000\000\b%\000\000\012\014\006\206\b%\000\000\000\000\001\149\b%\000\000\b%\000\000\012\022\000\000\b%\000\000\000\000\015\166\001\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0126\000\000\012>\011\254\000\000\011n\000\000\000\000\001\149\012\030\000\000\001\145\000\000\000\000\000\000\000\000\001\149\012&\012.\011\166\011\190\011\198\011\174\011\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\000\000\000\011\214\011\222\002\001\000\000\001\214\002\001\000\000\000\000\000\000\000\000\011\230\000\000\000\000\t\153\000\000\002\001\000\000\000\000\000\246\002\001\000\000\002\001\000\000\000\000\000\000\000\000\000\000\011v\011\182\011\238\011\246\012\006\000\000\002\001\000\000\000\000\000\000\000\000\000\000\012\014\002\001\002\001\000\000\000\000\001\145\000\000\000\000\000\000\004N\012\022\002\001\000\000\000\000\002\001\000\000\000\000\000\000\000\000\002\001\002\001\002\001\000\000\000\000\0126\000\000\012>\011\254\000\000\000\000\000\000\000\000\001\145\012\030\000\000\002\001\002\001\000\000\000\000\004\194\001\145\012&\012.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\002\001\000\000\000\000\002\001\002\001\000\000\000\000\000\000\000\000\000\000\001\253\000\000\000\000\002\001\000\000\001\253\000\000\001\214\001\253\000\000\002\001\000\000\000\000\000\000\000\000\002\001\t\149\000\000\001\253\000\000\000\000\002\001\001\253\002\r\001\253\000\000\000\000\000\000\002\r\000\000\001\214\002\r\000\000\000\000\000\000\000\000\001\253\000\000\000\000\t\165\000\000\002\r\000\000\001\253\001\253\002\r\000\000\002\r\000\000\000\000\000\000\004N\000\000\001\253\000\000\000\000\001\253\000\000\000\000\002\r\000\000\001\253\001\253\001\253\000\000\000\000\002\r\002\r\000\000\000\000\000\000\000\000\000\000\000\000\004N\000\000\002\r\001\253\001\253\002\r\000\000\004\194\000\000\000\000\002\r\002\r\002\r\000\000\000\000\000\000\000\000\000\000\001\253\001\253\000\000\000\000\001\253\001\253\000\000\000\000\002\r\002\r\000\000\000\000\004\194\000\000\001\253\000\000\000\000\000\000\000\000\000\000\000\000\001\253\000\000\002\r\002\r\000\000\001\253\002\r\002\r\000\000\000\000\000\000\001\253\000\000\002\t\000\000\000\000\002\r\000\000\002\t\000\000\001\214\002\t\000\000\002\r\000\000\000\000\000\000\000\000\002\r\t\161\000\000\002\t\000\000\000\000\002\r\002\t\002\005\002\t\000\000\000\000\000\000\002\005\000\000\001\214\002\005\000\000\000\000\000\000\000\000\002\t\000\000\000\000\t\157\000\000\002\005\000\000\002\t\002\t\002\005\000\000\002\005\000\000\000\000\000\000\004N\000\000\002\t\000\000\000\000\002\t\000\000\000\000\002\005\000\000\002\t\002\t\002\t\000\000\000\000\002\005\002\005\000\000\000\000\000\000\000\000\000\000\000\000\004N\000\000\002\005\002\t\002\t\002\005\000\000\004\194\000\000\000\000\002\005\002\005\002\005\000\000\000\000\000\000\000\000\000\000\002\t\002\t\000\000\000\000\002\t\002\t\000\000\000\000\002\005\002\005\000\000\000\000\004\194\000\000\002\t\000\000\000\000\000\000\000\000\000\000\000\000\002\t\000\000\002\005\002\005\000\000\002\t\002\005\002\005\000\000\000\000\000\000\002\t\000\000\003}\000\000\000\000\002\005\000\000\003}\000\000\001\214\003}\000\000\002\005\000\000\000\000\000\000\000\000\002\005\t\145\000\000\003}\000\000\000\000\002\005\003}\003y\003}\000\000\000\000\000\000\003y\000\000\001\214\003y\000\000\000\000\000\000\000\000\003}\000\000\000\000\t\145\000\000\003y\000\000\003}\001\249\003y\000\000\003y\000\000\000\000\000\000\004N\000\000\003}\000\000\000\000\003}\000\000\000\000\003y\000\000\003}\003}\003}\000\000\000\000\003y\001\249\000\000\000\000\000\000\000\000\000\000\000\000\004N\000\000\003y\003}\003}\003y\000\000\004\194\000\000\000\000\003y\003y\003y\000\000\000\000\000\000\000\000\000\000\003}\003}\000\000\000\000\003}\003}\000\000\000\000\003y\003y\000\000\000\000\004\194\000\000\003}\000\000\000\000\000\000\000\000\000\000\000\000\003}\000\000\003y\003y\000\000\003}\003y\003y\000\000\000\000\000\000\003}\000\000\007:\000\000\000\000\003y\000\000\000\254\001\210\001\214\002\026\000\000\003y\000\000\000\000\000\000\000\000\003y\000\000\000\000\020\254\000\000\000\000\003y\004\233\000\000\003z\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\021\002\000\000\000\000\000\000\000\000\000\000\000\000\021*\000\000\000\000\000\000\000\000\000\000\001\254\002\162\002\170\000\000\000\000\000\000\002\182\020Z\002\190\004.\004:\000\000\020r\000\189\000\000\004F\000\000\000\000\000\189\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\000\000\000\020z\000\000\000\000\000\189\004J\000\189\000\000\000\189\000\000\000\189\000\000\000\000\000\000\000\000\000\000\020\130\021\194\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\189\000\000\000\000\000\000\021\210\000\000\000\189\000\000\000\000\000\189\000\000\004\134\000\000\000\000\000\189\000\189\000\246\001\001\000\000\000\000\000\000\000\000\001\001\000\189\000\189\001\001\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\189\001\001\000\000\001\001\000\000\001\001\000\000\001\001\000\000\000\000\000\000\000\189\000\189\000\000\000\000\000\189\000\189\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\189\001\001\000\000\000\000\000\000\001\001\000\189\000\189\000\000\000\000\000\000\001\001\000\000\000\000\001\001\000\000\000\189\000\000\000\189\001\001\001\001\000\246\000\197\000\000\000\000\000\000\000\000\000\197\001\001\001\001\000\197\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\001\001\000\197\000\000\000\197\000\000\000\197\000\000\000\197\000\000\000\000\000\000\001\001\001\001\000\000\000\000\001\001\001\001\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\000\001\001\000\197\000\000\000\000\000\000\000\197\001\001\001\001\000\000\000\000\000\000\000\197\000\000\000\000\000\197\000\000\001\001\000\000\001\001\000\197\000\197\000\246\000\193\000\000\000\000\000\000\000\000\000\193\000\197\000\197\000\193\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\197\000\193\000\000\000\193\000\000\000\193\000\000\000\193\000\000\000\000\000\000\000\197\000\197\000\000\000\000\000\197\000\197\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\197\000\193\000\000\000\000\000\000\000\193\000\197\000\197\000\000\000\000\000\000\000\193\000\000\000\000\000\193\000\000\000\197\000\000\000\197\000\193\000\193\000\246\000\000\000\000\000\000\001\217\000\000\000\000\000\193\000\193\001\217\000\000\000\000\001\217\000\000\000\193\000\000\000\000\000\000\000\193\000\000\000\000\000\000\001\217\000\000\000\000\000\000\001\217\000\000\001\217\000\193\000\193\000\000\000\000\000\193\000\193\000\000\000\000\000\000\000\000\000\000\001\217\001\217\000\000\000\193\000\000\000\000\000\000\001\217\000\000\000\193\000\193\r\225\000\000\005\161\r\225\000\000\000\000\001\217\000\000\000\193\001\217\000\193\000\000\000\000\r\225\001\217\001\217\001\217\014\197\014\197\r\225\000\000\000\000\014\197\000\000\000\000\014\197\000\000\000\000\000\000\000\000\001\217\r\225\000\000\000\000\001\217\014\197\000\000\014\197\r\225\014\197\000\000\014\197\000\000\000\000\000\000\001\217\001\217\000\000\r\225\001\217\001\217\r\225\000\000\014\197\000\000\005\161\r\225\000\000\000\000\001\217\014\197\014\197\000\000\000\000\000\000\001\217\001\217\000\000\000\000\000\000\014\197\001\217\r\225\014\197\000\000\000\000\r\225\001\217\014\197\014\197\014\197\014\193\014\193\000\000\000\000\000\000\014\193\r\225\r\225\014\193\000\000\r\225\000\000\000\000\014\197\000\000\000\000\031\218\014\197\014\193\000\000\014\193\000\000\014\193\000\000\014\193\000\000\000\000\r\225\014\197\014\197\014\197\000\000\014\197\014\197\000\000\000\000\014\193\000\000\000\000\000\000\000\000\000\000\000\000\014\193\014\193\014\197\000\000\000\000\000\000\014\197\000\000\000\000\000\000\014\193\000\000\000\000\014\193\000\000\005\022\000\000\014\197\014\193\014\193\014\193\t1\t1\000\000\000\000\000\000\t1\000\000\000\000\t1\000\000\000\000\000\000\000\000\014\193\000\000\000\000\000\000\014\193\t1\000\000\t1\000\000\t1\000\000\t1\000\000\000\000\000\000\014\193\014\193\014\193\000\000\014\193\014\193\000\000\000\000\t1\000\000\000\000\000\000\000\000\000\000\b\146\t1\t1\014\193\000\000\000\000\000\000\014\193\000\000\000\000\000\000\t1\000\000\000\000\t1\t\201\000\000\000\000\014\193\t1\t1\000\246\000\000\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\011n\000\000\000\000\014Z\t1\000\000\t\201\000\000\t1\000\000\000\000\001\218\002\142\000\000\011\166\011\190\011\198\011\174\011\206\t1\t1\t1\000\000\t1\t1\000\000\018B\000\000\000\000\011\214\011\222\000\000\000\000\t1\000\000\002\186\t1\004N\000\000\011\230\t1\002\182\000\000\002\190\004.\004:\000\000\000\246\000\000\000\000\004F\t1\018J\007\161\000\000\000\000\011v\011\182\011\238\011\246\012\006\000\000\000\000\000\000\000\000\000\000\000\000\004J\012\014\011n\000\000\018\154\007\161\016\246\000\000\017\006\007\161\000\000\012\022\000\000\000\000\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\000\000\000\000\000\000\0126\000\000\012>\011\254\000\000\000\000\011\214\011\222\000\000\012\030\000\000\000\000\000\000\000\000\000\000\000\000\011\230\012&\012.\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\011v\011\182\011\238\011\246\012\006\000\000\000\000\000\000\001\249\000\000\000\000\007\161\012\014\001\249\000\000\001\214\001\249\016\246\000\000\000\000\000\000\000\000\012\022\000\000\t\145\000\000\001\249\000\000\000\000\000\000\001\249\000\000\001\249\000\000\000\000\000\000\0126\000\000\012>\011\254\000\000\000\000\000\000\000\000\001\249\012\030\000\000\000\000\000\000\000\000\000\000\001\249\000\000\012&\012.\000\000\000\000\000\000\000\000\004N\000\000\001\249\019\170\000\000\001\249\000\000\000\000\000\000\000\000\001\249\001\249\001\249\000\000\000\000\000\000\000\000\000\000\000\000\011n\000\000\000\000\000\000\019\174\000\000\000\000\001\249\001\249\000\000\000\000\004\194\000\000\000\000\011\166\011\190\011\198\011\174\011\206\000\000\000\000\000\000\001\249\001\249\000\000\000\000\001\249\001\249\000\000\011\214\011\222\000\000\000\000\000\000\000\000\003\165\001\249\000\000\000\000\011\230\000\000\000\000\003\165\001\249\000\000\003\165\000\000\000\246\001\249\000\000\000\000\000\000\000\000\003\165\001\249\000\000\011v\011\182\011\238\011\246\012\006\003\165\006E\006E\000\000\000\000\000\000\006E\012\014\000\000\006E\003\165\000\000\016\138\000\000\000\000\000\000\003\165\012\022\003\165\006E\000\000\006E\000\000\006E\003\165\006E\000\000\000\000\000\000\000\000\003\165\0126\019\178\012>\011\254\019\194\000\000\006E\000\000\016\154\012\030\000\000\000\000\000\000\006E\006E\000\000\000\000\012&\012.\t>\000\000\000\000\020~\006E\000\000\000\000\006E\000\000\000\000\000\000\000\000\006E\006E\000\246\006A\bf\000\000\000\000\000\000\006A\000\000\000\000\006A\000\000\000\000\000\000\000\000\006E\000\000\000\000\000\000\006E\006A\000\000\006A\000\000\006A\000\000\006A\000\000\000\000\000\000\006E\006E\006E\000\000\006E\006E\000\000\000\000\006A\000\000\000\000\000\000\000\000\000\000\000\000\006A\b\226\006E\000\000\000\000\000\000\006E\000\000\000\000\000\000\006A\000\000\000\000\006A\000\000\000\000\000\000\006E\006A\006A\000\246\014\209\014\209\000\000\000\000\000\000\014\209\000\000\000\000\014\209\000\000\000\000\000\000\000\000\006A\000\000\000\000\000\000\006A\014\209\000\000\014\209\000\000\014\209\000\000\014\209\000\000\000\000\000\000\006A\006A\006A\000\000\006A\006A\000\000\000\000\014\209\000\000\000\000\000\000\000\000\000\000\000\000\014\209\014\209\006A\000\000\000\000\000\000\006A\000\000\000\000\000\000\014\209\000\000\000\000\014\209\000\000\000\000\000\000\006A\014\209\014\209\000\246\014\213\014\213\000\000\000\000\000\000\014\213\000\000\000\000\014\213\000\000\000\000\000\000\000\000\014\209\000\000\000\000\000\000\014\209\014\213\000\000\014\213\000\000\014\213\000\000\014\213\000\000\000\000\000\000\014\209\014\209\014\209\000\000\014\209\014\209\000\000\000\000\014\213\000\000\000\000\000\000\000\000\000\000\000\000\014\213\b\226\014\209\000\000\000\000\000\000\014\209\000\000\000\000\000\000\014\213\000\000\000\000\014\213\000\000\000\000\000\000\014\209\014\213\014\213\000\246\006Y\bf\000\000\000\000\000\000\006Y\000\000\000\000\006Y\000\000\000\000\000\000\000\000\014\213\000\000\000\000\000\000\014\213\006Y\000\000\006Y\000\000\006Y\000\000\006Y\000\000\000\000\000\000\014\213\014\213\014\213\000\000\014\213\014\213\000\000\000\000\006Y\000\000\000\000\000\000\000\000\000\000\000\000\006Y\b\226\014\213\000\000\000\000\000\000\014\213\000\000\000\000\000\000\006Y\000\000\000\000\006Y\000\000\000\000\000\000\014\213\006Y\006Y\000\246\006]\006]\000\000\000\000\000\000\006]\000\000\000\000\006]\000\000\000\000\000\000\000\000\006Y\000\000\000\000\000\000\006Y\006]\000\000\006]\000\000\006]\000\000\006]\000\000\000\000\000\000\006Y\006Y\006Y\000\000\006Y\006Y\000\000\000\000\006]\000\000\000\000\000\000\000\000\000\000\000\000\006]\006]\006Y\000\000\000\000\000\000\006Y\000\000\000\000\000\000\006]\000\000\000\000\006]\000\000\000\000\000\000\006Y\006]\006]\006]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006]\000\000\000\000\000\000\006]\003\026\002\202\000\000\000\000\002\138\000\000\007\210\000\000\000\000\003\002\006]\006]\006]\000\000\006]\006]\000\000\000\000\000\000\001\218\000\000\b\n\000\000\000\000\000\000\000\000\003\030\006]\000\000\nB\000\000\006]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\t\n\012V\000\000\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\012f\006Z\000\000\000\000\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\006^\007\210\000\000\000\000\003\002\000\000\000\000\000\000\000\000\006f\006j\000\000\000\000\012\178\001\218\000\000\b\n\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nB\000\000\000\000\000\000\n\230\000\000\000\000\012\254\000\000\006n\000\000\003*\000\000\000\000\012V\004\134\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\012f\006Z\000\000\000\000\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\006^\007\210\000\000\000\000\003\002\000\000\000\000\000\000\000\000\006f\006j\000\000\000\000\012\178\001\218\000\000\b\n\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nB\000\000\000\000\000\000\n\230\000\000\000\000\n\242\000\000\006n\000\000\003*\000\000\000\000\r*\004\134\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\003u\004\018\000\000\012f\006Z\003u\000\000\001\214\003u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006^\000\000\003u\000\000\000\000\000\000\003u\000\000\003u\006f\006j\000\000\000\000\r:\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\000\000\000\000\000\000\000\000\000\000\000\003u\n\230\000\000\000\000\n\242\000\000\006n\000\000\004N\000\000\003u\000\000\004\134\003u\000\000\000\000\000\000\000\000\003u\003u\003u\003q\000\000\000\000\000\000\000\000\003q\000\000\001\214\003q\000\000\000\000\000\000\000\000\003u\003u\000\000\000\000\004\194\003q\000\000\000\000\000\000\003q\000\000\003q\000\000\000\000\000\000\003u\003u\000\000\000\000\003u\003u\000\000\000\000\003q\000\000\000\000\000\000\000\000\000\000\003u\003q\000\000\000\000\000\000\000\000\000\000\003u\000\000\004N\000\000\003q\003u\000\000\003q\000\000\000\000\000\000\003u\003q\003q\003q\001U\000\000\000\000\000\000\000\000\001U\000\000\000\000\001U\000\000\000\000\000\000\000\000\003q\003q\000\000\000\000\004\194\001U\000\000\001U\000\000\001U\000\000\001U\000\000\000\000\000\000\003q\003q\000\000\000\000\003q\003q\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\000\003q\001U\000\000\000\000\000\000\001U\000\000\003q\000\000\000\000\000\000\001U\003q\000\000\001U\000\000\000\000\000\000\003q\001U\001U\000\246\001Q\000\000\000\000\000\000\000\000\001Q\000\000\001U\001Q\000\000\000\000\000\000\000\000\001U\000\000\000\000\000\000\001U\001Q\000\000\001Q\000\000\001Q\000\000\001Q\000\000\000\000\000\000\001U\001U\001U\000\000\001U\001U\000\000\000\000\001Q\000\000\000\000\000\000\000\000\000\000\001U\001Q\000\000\000\000\000\000\001Q\000\000\001U\000\000\000\000\000\000\001Q\000\000\000\000\001Q\000\000\000\000\000\000\001U\001Q\001Q\000\246\000\000\000\000\000\000\001\141\000\000\000\000\000\000\001Q\001\141\000\000\014!\001\141\000\000\001Q\000\000\000\000\000\000\001Q\000\000\014!\000\000\001\141\000\000\001\141\000\000\001\141\000\000\001\141\001Q\001Q\001Q\000\000\001Q\001Q\000\000\000\000\000\000\000\000\000\000\001\141\000\000\000\000\001Q\000\000\000\000\000\000\001\141\014!\000\000\001Q\000\000\000\000\000\000\000\000\014!\000\000\000\000\000\000\000\000\001\141\001Q\000\000\000\000\000\000\001\141\001\141\001\141\001A\000\000\000\000\000\000\000\000\001A\000\000\000\165\001A\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\165\014!\001A\000\000\001A\000\000\001A\000\000\001A\000\000\000\000\000\000\001\141\001\141\001\141\000\000\001\141\001\141\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\000\000\001A\000\165\000\000\000\000\000\000\000\000\001\141\000\000\000\165\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\001\141\001A\001A\001A\000\000\002\021\000\000\000\000\000\000\000\000\002\021\000\000\018&\002\021\000\000\002\138\000\000\001A\000\000\000\000\000\000\000\165\000\000\002\021\000\000\000\000\000\000\002\021\000\000\002\021\000\000\000\000\001A\001A\001A\000\000\001A\001A\000\000\000\000\000\000\002\021\000\000\000\000\000\000\000\000\000\000\000\000\002\021\000\000\000\000\000\000\000\000\001A\018*\000\000\000\000\000\000\002\021\000\000\000\000\002\021\000\000\000\000\001A\000\000\002\021\002\021\000\000\0186\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\007\210\000\000\002\021\003\002\000\000\000\000\002\021\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\b\n\006j\002\021\002\021\000\000\003\030\002\021\002\021\nB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\021\n\154\000\000\003*\000\000\000\000\015\194\002\021\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\002\021\004\225\bf\004\n\000\000\004\018\004\225\012f\006Z\004\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\225\004\225\006^\000\000\000\000\004\225\000\000\004\225\004\225\000\000\000\000\006f\006j\000\000\000\000\000\000\000\000\000\000\004\225\004\225\000\000\000\000\004\225\000\000\004\225\000\000\004\225\b\226\000\000\000\000\004\225\000\000\t>\015\210\000\000\006n\004\225\000\000\000\000\004\225\000\000\004\134\000\000\004\225\004\225\002\238\000\246\b\189\000\000\004V\000\000\000\000\b\189\004\225\004\225\b\189\004\225\000\000\000\000\000\000\004\225\004\225\002\238\000\000\004\225\b\189\000\000\000\000\000\000\b\189\000\000\b\189\000\000\000\000\000\000\004\225\004\225\004\225\000\000\004\225\004\225\000\000\000\000\b\189\000\000\b\246\000\000\000\000\000\000\004\225\b\189\000\000\004\225\004\225\b\189\000\000\004\225\004\225\000\000\000\000\b\189\028\170\004f\b\189\000\000\000\000\000\000\004\225\b\189\b\189\000\246\b\185\000\000\004\225\000\000\000\000\b\185\b\189\b\189\b\185\000\000\000\000\000\000\000\000\b\189\000\000\000\000\000\000\b\189\b\185\000\000\000\000\000\000\b\185\000\000\b\185\000\000\000\000\000\000\b\189\b\189\b\189\000\000\b\189\b\189\000\000\000\000\b\185\000\000\000\000\000\000\000\000\000\000\b\189\b\185\000\000\000\000\000\000\b\185\000\000\b\189\000\000\000\000\000\000\b\185\000\000\000\000\b\185\000\000\000\000\000\000\000\000\b\185\b\185\000\246\003i\000\000\000\000\000\000\000\000\003i\b\185\b\185\003i\000\000\000\000\000\000\000\000\b\185\000\000\000\000\000\000\b\185\003i\000\000\000\000\000\000\003i\000\000\003i\000\000\000\000\000\000\b\185\b\185\b\185\000\000\b\185\b\185\000\000\000\000\003i\018>\000\000\000\000\000\000\000\000\b\185\003i\000\000\000\000\000\000\000\000\000\000\b\185\000\000\000\000\000\000\003i\000\000\000\000\003i\000\000\000\000\000\000\000\000\003i\003i\003i\000\000\003\026\002\202\000\000\000\000\002\138\000\000\007\210\000\000\000\000\003\002\000\000\000\000\003i\000\000\000\000\000\000\003i\000\000\000\000\001\218\000\000\b\n\000\000\000\000\000\000\000\000\003\030\003i\003i\nB\000\000\003i\003i\000\000\000\000\000\000\000\000\000\000\026\166\000\000\003*\003i\000\000\025\014\000\000\001\198\000\000\018\198\003i\000\000\000\000\002\190\000\000\003i\004\006\000\000\000\000\000\000\004\n\003i\004\018\000\000\012f\006Z\000\000\000\000\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\006^\007\210\000\000\000\000\003\002\000\000\000\000\000\000\000\000\006f\006j\000\000\000\000\025\018\001\218\000\000\b\n\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nB\000\000\000\000\000\000\000\000\000\000\000\000\027r\000\000\006n\000\000\003*\000\000\000\000\r*\004\134\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\012f\006Z\000\000\000\000\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\006^\007\210\000\000\000\000\003\002\000\000\000\000\000\000\000\000\006f\006j\000\000\000\000\r:\001\218\000\000\b\n\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nB\000\000\000\000\000\000\000\000\000\000\000\000\025\174\000\000\006n\000\000\003*\000\000\000\000\r*\004\134\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\012f\006Z\000\000\000\000\000\000\004\201\004\201\000\000\000\000\004\201\000\000\000\000\000\000\006^\004\201\000\000\000\000\000\000\000\000\000\000\004\201\000\000\006f\006j\004\201\000\000\r:\000\000\000\000\000\000\000\000\004\201\026^\000\000\000\000\026v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\014\004\201\006n\000\000\004\201\004\201\004\201\000\000\004\134\000\000\t\229\000\000\004\201\000\000\000\000\004\201\003\026\002\202\000\246\004\201\002\138\004\201\004\201\000\000\004\201\003\002\000\000\000\000\000\000\000\000\000\000\000\000\t\229\000\000\000\000\001\218\004\201\000\000\000\000\000\000\000\000\000\000\003\030\000\000\000\000\004\201\004\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\000\0036\012N\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\004\201\004\006\000\000\000\000\000\000\004\n\004\201\004\018\006N\000\000\006Z\003i\000\000\000\000\000\000\003i\003i\000\000\000\000\003i\003i\000\000\006^\003i\000\000\000\000\000\000\000\000\000\000\003i\000\000\006f\006j\003i\006\174\003i\000\000\003i\000\000\003i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003i\018>\000\000\000\000\003i\018>\000\000\003i\006n\000\000\t\229\003i\000\000\000\000\004\134\000\000\000\000\003i\000\000\000\000\003i\003i\000\000\000\000\003i\003i\003i\003i\000\000\003i\003i\003i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003i\000\000\000\000\000\000\003i\000\000\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\000\000\000\003i\003i\028\178\000\000\003i\003i\028\226\000\000\003i\003i\014\025\000\000\000\000\000\000\000\000\014\025\000\000\000\000\014\025\000\000\018\198\003i\000\000\000\000\018\198\003i\003i\000\000\014\025\006\249\003i\000\000\014\025\000\000\014\025\000\000\002\202\000\000\000\000\002\138\005\153\000\000\000\000\000\000\003\002\000\000\014\025\000\000\000\000\006\249\000\000\000\000\000\000\014\025\001\218\000\000\000\000\000\000\003\006\000\000\000\000\000\000\000\000\014\025\000\000\000\000\014\025\003\n\000\000\000\000\003\162\014\025\014\025\000\000\000\000\000\000\000\000\000\000\003\234\000\000\001\198\000\000\000\000\000\000\000\000\000\000\002\190\014\025\000\000\003\242\000\000\014\025\000\000\tz\t~\t\138\000\000\000\000\006Z\000\000\000\000\000\000\014\025\014\025\002\130\000\000\014\025\014\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\025\000\000\000\000\006f\006j\003\026\002\202\014\025\000\000\002\138\000\000\007\210\000\000\000\000\003\002\000\000\000\000\000\000\014\025\000\000\000\000\000\000\000\000\000\000\001\218\000\000\b\n\006n\t\146\000\000\000\000\003\030\t\170\004\134\nB\000\000\000\000\007!\000\000\000\000\000\000\000\000\000\000\000\000\002\202\003*\000\000\002\138\n\138\000\000\001\198\000\000\003\002\000\000\000\000\000\000\002\190\007!\000\000\004\006\000\000\000\000\001\218\004\n\000\000\004\018\003\006\012f\006Z\005\241\000\000\000\000\000\000\000\000\005\241\003\n\000\000\005\241\003\162\000\000\006^\000\000\000\000\000\000\000\000\000\000\003\234\005\241\001\198\006f\006j\005\241\000\000\005\241\002\190\000\000\000\000\003\242\000\000\000\000\000\000\tz\t~\t\138\000\000\005\241\006Z\000\000\000\000\000\000\000\000\000\000\005\241\006n\000\000\000\000\000\000\000\000\t>\004\134\000\000\000\000\005\241\000\000\000\000\005\241\000\000\006f\006j\000\000\005\241\005\241\000\246\000\000\000\000\000\000\005\245\000\000\000\000\000\000\000\000\005\245\000\000\000\000\005\245\000\000\005\241\005\241\000\000\000\000\005\241\006n\t\146\000\000\005\245\000\000\t\170\004\134\005\245\003i\005\245\005\241\005\241\000\000\003i\005\241\005\241\003i\000\000\000\000\000\000\000\000\005\245\000\000\000\000\000\000\000\000\003i\000\000\005\245\000\000\003i\005\241\003i\000\000\t>\000\000\000\000\000\000\005\245\000\000\000\000\005\245\005\241\000\000\003i\018>\005\245\005\245\000\246\000\000\006\177\003i\000\000\000\000\000\000\006\177\000\000\000\000\006\177\000\000\000\000\003i\005\245\005\245\003i\000\000\005\245\000\000\006\177\003i\003i\003i\006\177\000\000\006\177\000\000\000\000\005\245\005\245\000\000\000\000\005\245\005\245\000\000\000\000\003i\006\177\000\000\000\000\003i\000\000\000\000\000\000\006\177\000\000\000\000\000\000\000\000\005\245\000\000\003i\003i\020\206\006\177\003i\003i\006\177\000\000\000\000\005\245\000\000\006\177\006\177\000\246\000\000\000\000\000\000\000\000\000\000\000\000\018\198\003i\000\000\000\000\000\000\000\000\028\138\006\177\000\000\000\000\000\000\006\177\003\026\002\202\000\000\000\000\002\138\000\000\000\000\000\000\000\000\003\002\006\177\006\177\024\154\000\000\006\177\006\177\007\130\000\000\000\000\001\218\000\000\000\000\000\000\000\000\006\177\000\000\003\030\000\000\000\000\000\000\000\000\006\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\006\177\0036\000\000\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\014\025\004\018\006N\000\000\006Z\014\025\000\000\000\000\014\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006^\000\000\014\025\000\000\000\000\000\000\014\025\000\000\014\025\006f\006j\000\000\006\174\000\000\005\153\000\000\000\000\000\000\000\000\000\000\014\025\000\000\000\000\000\000\000\000\000\000\000\000\014\025\000\000\000\000\000\000\000\000\000\000\006n\000\000\000\000\000\000\n*\000\000\004\134\014\025\000\000\000\000\000\000\000\000\014\025\014\025\006\210\000\000\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\000\000\000\000\014\025\003\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\000\000\000\000\014\025\014\025\002\130\003\030\014\025\014\025\000\000\000\000\000\000\007.\000\000\000\000\000\000\000\000\014\025\003\026\002\202\003*\030>\002\138\0036\014\025\001\198\000\000\003\002\000\000\000\000\000\000\002\190\000\000\000\000\004\006\014\025\000\000\001\218\004\n\000\000\004\018\006N\000\000\006Z\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006^\000\000\000\000\003*\000\000\000\000\0036\000\000\001\198\006f\006j\000\000\006\174\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\000\000\007N\000\000\000\000\006n\000\000\000\000\003\026\002\202\006^\004\134\002\138\000\000\000\000\000\000\000\000\003\002\000\000\006f\006j\000\000\006\174\000\000\000\000\000\000\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000\000\000\006\253\000\000\000\000\006n\000\000\000\000\003\026\002\202\003*\004\134\002\138\0036\000\000\001\198\000\000\003\002\000\000\000\000\000\000\002\190\006\253\000\000\004\006\000\000\000\000\001\218\004\n\000\000\004\018\006N\000\000\006Z\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006^\000\000\000\000\003*\000\000\000\000\0036\000\000\001\198\006f\006j\000\000\006\174\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\000\000\r\194\000\000\000\000\006n\000\000\000\000\003\026\002\202\006^\004\134\002\138\000\000\000\000\000\000\000\000\003\002\000\000\006f\006j\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000\000\000\r\206\000\000\000\000\006n\000\000\000\000\003\026\002\202\003*\004\134\002\138\0036\000\000\001\198\000\000\003\002\000\000\000\000\000\000\002\190\000\000\000\000\004\006\000\000\000\000\001\218\004\n\000\000\004\018\006N\000\000\006Z\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006^\000\000\000\000\003*\000\000\000\000\0036\000\000\001\198\006f\006j\000\000\006\174\000\000\002\190\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\006N\000\000\006Z\000\000\000\000\000\000\r\218\000\000\000\000\006n\000\000\000\000\003\026\002\202\006^\004\134\002\138\000\000\000\000\000\000\000\000\003\002\000\000\006f\006j\000\000\006\174\000\000\000\000\000\000\000\254\001\218\000\000\002\206\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000 2\000\000\000\000\000\000\006n\000\000\003z\b\237\b\237\003*\004\134\b\237\0036\000\000\001\198\000\000\b\237\000\000\003\134\000\000\002\190\000\000\019\014\004\006\000\000\019\246\b\237\004\n\000\000\004\018\006N\000\000\006Z\b\237\000\000\027\190\000\000\000\000\020Z\000\000\000\000\000\000\000\000\020r\006^\000\000\000\000\b\237\000\000\000\000\b\237\b\237\b\237\006f\006j\000\000\006\174\000\000\b\237\020z\000\000\b\237\000\000\031\226\000\000\b\237\000\000\b\237\b\237\000\000\b\237\000\000\000\000\000\000\020\130\020\190\000\000\006n\005\029\000\000\007\169\bf\b\237\004\134\000\000\007\169\000\000\000\000\007\169\000\000\000\000\b\237\b\237\000\000\000\000\024\246\000\000\000\000\007\169\000\000\000\000\000\000\007\169\000\000\007\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\237\007\169\000\000\000\000\000\000\000\000\b\237\001\229\007\169\b\226\000\000\000\000\001\229\000\000\000\000\001\229\000\000\000\000\007\169\000\000\000\000\007\169\000\000\000\000\000\000\001\229\007\169\007\169\000\246\001\229\002\025\001\229\000\000\000\000\000\000\002\025\000\000\000\000\002\025\000\000\000\000\000\000\007\169\001\229\000\000\000\000\007\169\000\000\002\025\000\000\001\229\000\000\002\025\000\000\002\025\000\000\000\000\007\169\007\169\000\000\001\229\007\169\007\169\001\229\000\000\000\000\002\025\000\000\001\229\001\229\001\229\000\000\000\000\002\025\000\000\000\000\000\000\000\000\007\169\000\000\000\000\000\000\000\000\002\025\001\229\000\000\002\025\000\000\001\229\000\000\000\000\002\025\002\025\000\000\000\000\000\000\000\000\006\181\000\000\001\229\001\229\000\000\006\181\001\229\001\229\006\181\000\000\002\025\000\000\020\218\000\000\002\025\000\000\000\000\000\000\006\181\000\000\000\000\000\000\006\181\001\229\006\181\002\025\002\025\000\000\001\229\002\025\002\025\000\000\000\000\000\000\000\000\000\000\006\181\000\000\000\000\002\025\000\000\000\000\014\025\006\181\000\000\000\000\002\025\014\025\000\000\000\000\014\025\024v\000\000\006\181\000\000\000\000\006\181\002\025\000\000\000\000\014\025\006\181\006\181\000\246\014\025\000\000\014\025\000\000\000\000\000\000\000\000\000\000\005\153\000\000\000\000\000\000\000\000\006\181\014\025\000\000\000\000\006\181\000\000\000\000\000\000\014\025\000\000\000\000\000\000\000\000\000\000\000\000\006\181\006\181\000\000\000\000\006\181\006\181\014\025\000\000\000\000\000\000\000\000\014\025\014\025\000\000\006\181\000\000\000\000\000\000\000\000\000\000\r\209\006\181\002\202\r\209\000\000\031\234\000\000\014\025\000\000\000\000\031\238\000\000\006\181\r\209\000\000\000\000\000\000\000\000\000\000\r\209\000\000\000\000\014\025\014\025\002\130\000\000\014\025\014\025\000\000\000\000\000\000\r\209\000\000\000\000\000\000\000\000\014\025\000\000\r\209\000\000\030v\000\000\000\000\014\025\001\n\000\000\001\198\000\000\r\209\001\210\002\134\r\209\000\000\002\138\014\025\000\000\r\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\242\000\000\000\000\000\000\001\218\002\142\001\238\002\150\r\209\000\000\000\000\000\000\r\209\000\000\001\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\246\r\209\r\209\000\000\000\000\r\209\002\154\002\162\002\170\000\000\000\000\000\000\002\182\000\000\002\190\004.\004:\000\000\000\000\000\000\000\000\024N\r\209\024R\000\000\004\225\000\000\000\000\000\000\000\000\004\225\000\000\000\000\004\225\000\000\000\000\000\000\000\000\004J\000\000\000\000\000\000\000\000\004\225\000\000\001\210\001\214\004\225\006j\004\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024^\000\000\000\000\004\225\000\000\000\000\001\218\002\142\001\238\000\000\004\225\000\000\000\000\001y\000\000\000\000\001\250\024b\001y\022\002\004\225\001y\000\000\004\225\000\000\000\000\000\000\000\000\004\225\002\238\002\186\001y\023Z\001y\022z\001y\002\182\001y\002\190\004.\004:\000\000\000\000\000\000\004\225\023j\000\000\000\000\004\225\001y\000\000\000\000\000\000\000\000\000\000\000\000\001y\000\000\000\000\004\225\004\225\000\000\004J\004\225\004\225\000\000\000\000\000\000\000\000\001y\000\000\000\000\000\000\b\146\001y\001y\000\246\000\245\000\000\000\000\004\225\000\000\000\245\000\000\000\000\000\245\000\000\000\000\000\000\000\000\001y\004\225\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\245\000\000\000\245\000\000\000\000\000\000\001y\001y\001y\000\000\001y\001y\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\000\249\000\000\000\000\001y\000\000\000\249\000\000\000\245\000\249\000\000\000\245\000\000\000\000\000\000\001y\000\245\000\245\000\246\000\249\000\000\000\000\000\000\000\249\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\245\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\245\000\245\000\000\000\000\000\245\000\245\000\000\000\249\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\249\000\249\000\246\000\000\001\210\002\134\000\245\000\000\002\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\245\000\000\000\000\000\249\000\000\000\000\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\249\000\249\001\250\000\000\000\249\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\002\162\002\170\000\000\000\000\000\249\002\182\000\000\002\190\004.\004:\000\000\000\000\000\000\000\000\024N\000\249\030\"\000\000\007\165\000\000\000\000\000\000\000\000\007\165\000\000\000\000\007\165\000\000\000\000\000\000\000\000\004J\000\000\000\000\000\000\000\000\007\165\000\000\000\000\000\000\007\165\006j\007\165\000\000\000\000\006\169\000\000\000\000\000\000\000\000\006\169\030.\000\000\006\169\007\165\000\000\000\000\000\000\000\000\000\000\020\170\007\165\000\000\006\169\000\000\000\000\000\000\006\169\024b\006\169\000\000\007\165\000\000\000\000\007\165\000\000\000\000\000\000\000\000\007\165\007\165\006\169\000\000\000\000\000\000\000\000\000\000\000\000\006\169\000\000\000\000\000\000\000\000\000\000\000\000\007\165\000\000\000\000\006\169\007\165\000\000\006\169\000\000\000\000\000\000\000\000\006\169\006\169\000\000\000\000\007\165\007\165\020\n\000\000\007\165\007\165\000\000\000\000\000\000\000\000\000\000\000\000\006\169\000\000\000\000\000\000\006\169\005\253\bf\000\000\000\000\007\165\005\253\000\000\000\000\005\253\000\000\006\169\006\169\000\000\000\000\006\169\006\169\000\000\000\000\005\253\000\000\000\000\000\000\005\253\000\000\005\253\000\000\000\000\000\000\000\000\r\129\000\000\006\169\000\000\000\000\r\129\000\000\005\253\r\129\000\000\000\000\000\000\000\000\000\000\005\253\b\226\000\000\000\000\r\129\000\000\000\000\000\000\r\129\000\000\r\129\000\000\000\000\005\253\000\000\000\000\000\000\000\000\005\253\005\253\000\246\000\000\r\129\000\000\000\000\000\000\000\000\000\000\000\000\r\129\000\000\000\000\000\000\000\000\005\253\000\000\000\000\000\000\000\000\r\129\000\000\000\000\r\129\000\000\000\000\000\000\000\000\r\129\000\000\005\253\005\253\000\000\000\000\005\253\005\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\129\011b\000\000\000\000\r\129\003\026\002\202\005\253\000\000\002\138\000\000\000\000\000\000\000\000\003\002\r\129\r\129\000\000\000\000\r\129\r\129\000\000\000\000\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000\r\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\012F\012j\004\185\001\198\000\000\000\000\000\000\004\185\000\000\002\190\004\185\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\004\185\006Z\000\000\000\000\004\185\000\000\004\185\000\000\000\000\000\000\000\000\000\000\004\177\006^\000\000\000\000\000\000\004\177\004\185\000\000\004\177\000\000\006f\006j\000\000\004\185\000\000\000\000\000\000\000\000\004\177\000\000\000\000\000\000\004\177\004\185\004\177\000\000\004\185\000\000\000\000\000\000\000\000\004\185\000\000\000\000\006n\000\000\004\177\000\000\000\000\000\000\004\134\000\000\000\000\004\177\000\000\000\000\000\000\004\185\000\000\000\000\000\000\004\185\000\000\004\177\000\000\000\000\004\177\000\000\000\000\000\000\000\000\004\177\004\185\004\185\004\209\000\000\004\185\004\185\000\000\004\209\000\000\000\000\004\209\000\000\000\000\000\000\000\000\004\177\000\000\000\000\000\000\004\177\004\209\004\185\000\000\000\000\004\209\000\000\004\209\000\000\004\161\000\000\004\177\004\177\0202\004\161\004\177\004\177\004\161\000\000\004\209\000\000\000\000\000\000\000\000\000\000\000\000\004\209\004\161\000\000\000\000\000\000\004\161\004\177\004\161\000\000\000\000\004\209\000\000\000\000\004\209\000\000\000\000\000\000\023\026\004\209\004\161\000\000\000\000\000\000\000\000\000\000\000\000\004\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\209\000\000\004\161\000\000\004\209\004\161\000\000\000\000\000\000\000\000\004\161\000\000\000\000\000\000\000\000\004\209\004\209\000\000\000\000\004\209\004\209\000\000\000\000\000\000\000\000\000\000\004\161\000\000\007:\000\000\004\161\000\000\000\000\000\000\001\210\001\214\004\209\000\000\000\000\000\000\000\000\004\161\004\161\000\000\000\000\004\161\004\161\024\018\002\158\000\000\000\000\000\000\000\000\001\218\001\222\001\238\000\000\000\000\000\000\000\000\000\000\000\000\004\161\001\250\000\000\000\000\000\000\000\000\n\234\000\000\000\000\002\002\000\000\027\146\001\210\001\214\000\000\001\254\002\162\002\170\000\000\000\000\000\000\002\182\000\000\002\190\004.\004:\000\000\000\000\004\014\000\000\004F\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\004J\000\000\002\002\000\000\000\000\000\000\000\000\004\225\001\254\002\162\002\170\000\000\004\225\000\000\002\182\004\225\002\190\004.\004:\000\000\000\000\000\000\000\000\004F\000\000\004\225\000\000\000\000\000\000\004\225\018.\004\225\bQ\000\000\000\000\bQ\000\000\000\000\000\000\000\000\004J\000\000\000\000\004\225\000\000\000\000\000\000\000\000\000\000\000\000\004\225\bQ\bQ\000\000\bQ\bQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\225\000\000\000\000\000\000\bA\004\225\002\238\bA\000\000\000\000\000\000\000\000\000\000\bQ\004\130\000\000\004\134\000\000\000\000\000\000\000\000\004\225\000\000\bA\bA\000\000\bA\bA\000\000\000\000\000\000\000\000\000\246\000\000\000\000\000\000\004\225\004\225\000\000\000\000\004\225\004\225\000\000\000\000\n\246\000\000\000\000\bQ\bA\000\000\001\210\001\214\rb\000\000\000\000\000\000\000\000\004\225\000\000\000\000\000\000\000\000\024v\bQ\000\000\bQ\000\000\000\246\004\193\001\218\001\222\001\238\000\000\004\193\000\000\000\000\004\193\bQ\000\000\001\250\006\206\bQ\bA\000\000\000\000\bQ\004\193\bQ\000\000\000\000\004\193\bQ\004\193\001\254\002\162\002\170\000\000\000\000\bA\002\182\bA\002\190\004.\004:\004\193\000\000\000\000\000\000\004F\000\000\000\000\004\193\007*\004\169\000\000\006\206\bA\000\000\004\169\000\000\bA\004\169\bA\000\000\004\193\004J\bA\000\000\000\000\004\193\000\000\004\169\000\000\000\000\000\000\004\169\000\000\004\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\193\000\000\000\000\000\000\004\169\000\000\000\000\000\000\000\000\000\000\000\000\004\169\000\000\004\217\000\000\004\193\004\193\000\000\004\217\004\193\004\193\004\217\000\000\000\000\004\169\000\000\000\000\000\000\000\000\004\169\000\000\004\217\000\000\000\000\000\000\004\217\004\193\004\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\169\000\000\021z\000\000\004\217\000\000\000\000\000\000\000\000\000\000\000\000\004\217\000\000\004\245\000\000\004\169\004\169\000\000\000\254\004\169\004\169\002\206\000\000\000\000\004\217\000\000\000\000\000\000\000\000\004\217\000\000\003v\000\000\007y\007y\004\245\004\169\003z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\217\000\000\023\166\000\000\003\134\000\000\000\000\007y\007y\007y\000\000\019\246\000\000\000\000\000\000\004\217\004\217\007y\000\000\004\217\004\217\027\190\000\000\000\000\020Z\000\000\000\000\000\000\000\000\020r\000\000\007y\007y\007y\000\000\000\000\004\217\007y\000\000\007y\007y\007y\000\000\000\000\000\000\020z\007y\024:\014\217\014\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\130\020\190\000\000\007y\004\245\004\245\000\000\014\217\014\217\014\217\bz\000\000\000\000\000\000\000\000\000\000\000\000\014\217\n\246\000\000\000\000\024\246\000\000\000\000\001\210\001\214\000\000\000\000\000\000\000\000\000\000\014\217\014\217\014\217\000\000\000\000\000\000\014\217\000\000\014\217\014\217\014\217\000\000\001\218\002\142\001\238\014\217\005\226\000\000\000\000\000\000\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\217\000\000\000\000\004\233\001\254\002\162\002\170\000\000\000\254\000\000\002\182\002\026\002\190\004.\004:\000\000\000\000\000\000\000\000\004F\000\000\020\254\000\000\000\000\000\000\004\233\000\000\003z\000\000\000\000\000\000\000\000\001\210\001\214\025\178\000\000\004J\000\000\000\000\021\002\000\000\000\000\000\000\000\000\000\000\000\000\021*\000\000\000\000\000\000\000\000\001\218\001\222\001\238\000\000\000\000\000\000\000\000\000\000\020Z\000\000\001\250\000\000\000\000\020r\000\000\000\000\000\000\001\210\001\214\026\018\000\000\000\000\000\000\000\000\001\254\002\162\002\170\000\000\000\000\020z\002\182\000\000\002\190\004.\004:\000\000\001\218\001\222\001\238\004F\000\000\000\000\000\000\000\000\020\130\021\194\001\250\000\000\004\233\004\233\000\000\000\000\001\210\001\214\000\000\000\000\004J\000\000\000\000\000\000\001\254\002\162\002\170\000\000\000\000\021\210\002\182\000\000\002\190\004.\004:\001\218\002\142\001\238\000\000\004F\000\000\000\000\000\000\001\210\001\214\001\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\001\254\004\154\002\170\001\218\002\142\001\238\002\182\000\000\002\190\004.\004:\000\000\000\000\001\250\000\000\004F\000\000\000\000\000\000\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\001\254\004\166\002\170\000\000\000\000\004J\002\182\000\000\002\190\004.\004:\001\218\002\142\001\238\000\000\004F\000\000\000\000\000\000\001\210\001\214\001\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\001\254\005>\002\170\001\218\002\142\001\238\002\182\000\000\002\190\004.\004:\000\000\000\000\001\250\000\000\004F\000\000\000\000\000\000\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\001\254\005z\002\170\000\000\000\000\004J\002\182\000\000\002\190\004.\004:\001\218\002\142\001\238\000\000\004F\000\000\000\000\000\000\001\210\001\214\001\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\001\254\005\146\002\170\001\218\002\142\001\238\002\182\000\000\002\190\004.\004:\001\210\001\214\001\250\000\000\004F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\254\005\170\002\170\001\218\001\222\004J\002\182\000\000\002\190\004.\004:\000\000\000\000\000\000\000\000\004F\000\000\000\000\018B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\186\000\000\004N\000\000\000\000\004J\002\182\000\000\002\190\004.\004:\000\000\000\000\000\000\000\000\004F\000\000\018J\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\001\214\000\000\004J\000\000\000\000\000\000\018\154\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\000\000\000\000\001\254\029j\002\170\000\000\001\210\001\214\002\182\000\000\002\190\004.\004:\001\254\029\150\002\170\000\000\004F\000\000\002\182\000\000\002\190\004.\004:\000\000\001\218\002\142\001\238\004F\000\000\000\000\000\000\000\000\000\000\004J\001\250\000\000\000\000\000\000\000\000\000\000\001\210\001\214\000\000\000\000\004J\000\000\000\000\000\000\001\254\029\174\002\170\000\000\001\210\001\214\002\182\000\000\002\190\004.\004:\001\218\002\142\001\238\000\000\004F\000\000\000\000\000\000\000\000\000\000\001\250\000\000\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\004J\001\250\000\000\001\254\029\198\002\170\000\000\001\210\001\214\002\182\000\000\002\190\004.\004:\000\000\001\254\029\234\002\170\004F\001\210\001\214\002\182\000\000\002\190\004.\004:\001\218\002\142\001\238\000\000\004F\000\000\000\000\000\000\000\000\004J\001\250\000\000\001\218\002\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\001\254\030\018\002\170\000\000\000\000\000\000\002\182\000\000\002\190\004.\004:\000\000\002\186\000\000\029\030\004F\001\210\001\214\002\182\000\000\002\190\004.\004:\000\000\000\000\000\000\000\000\004F\000\000\000\000\000\000\000\000\004J\000\000\000\000\001\218\002\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\029J\000\000\000\000\018\170\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\002\186\000\000\004N\001\210\001\214\0296\002\182\000\000\002\190\004.\004:\001\218\002\142\000\000\000\000\004F\000\000\000\000\000\000\000\000\000\000\000\000\001\218\002\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\002\186\018\178\029\030\000\000\001\210\001\214\002\182\000\000\002\190\004.\004:\002\186\000\000\029\030\000\000\004F\000\000\002\182\000\000\002\190\004.\004:\000\000\001\218\002\142\000\000\004F\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\005i\000\000\000\000\000\000\001\210\001\214\000\000\000\000\004J\000\000\000\000\005m\004\230\005^\004N\001\210\001\214\0296\002\182\000\000\002\190\004.\004:\001\218\002\142\000\000\000\000\004F\0296\000\000\000\000\001\210\001\214\000\000\001\218\002\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\002\166\000\000\004N\001\218\002\142\000\000\002\182\000\000\002\190\004.\004:\005b\000\000\004N\000\000\004F\000\000\002\182\000\000\002\190\004.\004:\000\000\000\000\000\000\000\000\004F\029~\000\000\004N\000\000\000\000\004J\002\182\000\000\002\190\004.\004:\000\000\000\000\000\000\000\000\004F\004J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J")) + ((16, "FfS|I@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022$I@\000\000\000\000\021*I@Ff\002\238\000K\000/w`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\000\164\000\171\000\000\000\170\001b\000\000\002\236\001\132\003\252\000\000\000\128\001\166\004\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\022\000\000\000\000\000\000\001\132\136\030\000\000\000\000\000\000\006\n\000\000\000\000Tj\002\240\003X\000\000\000\000\152pO\016\021*Kjx\012\021*\166:S\142\021*[\180\000\000\004\132\000\000[\180\007:\000\000FN\000\000\0032\000\000\000\000\007\014\000\000\006\n\000\000\000\000\000\000\0056\000\000FN\000\000\007N\151\164X\238\132\144\000\000\006\n\000\000\162F\166z\000\000\174\232\152pU^\155\168\152pH\254\169\190I@Ff\000\000\000\000S\142\021*^\224[\180\b\014\151\164\000\000\160\148I@FfS|\021*\000\000\000\000\017\"S\030\021*H\136\\p\000\000\002\240\000\000\000\000\003\242\000\000\000\000K\210\004*\021\196\001\236\002\166\000\000\000\000\0050\000\000Kj\005^\005`\021*\024b\021*FfFf\000\000\000\000\000\000M\210M\210\021*\024b\024b\021*\000\000\007\248\004H\000F\000\000\005\222\b\176\000\000\000\000\000\000\000\000\000\000\021*\000\000\000\000\000\000S|\021*\000\000Dv\149\026Ff\000\000\001\002\000\000\\p\146\160\1528\1528\000\000\000F\000\000\0070\000\000\000\000\025Z\129\232\153\004\000\000\129\232\153\004\000\000\129\232\129\232\001\016\000\000\001\170\001,\000\000\021\240\000\000\007\b\000\000\000\000\tX\000\000\000\000\000\000\129\232\006\n\000\000\000\000^\206\171`\174\232_\176\171\166\174\232`\146]\236\137l\000\000\000\000Y|\001\016\000\000\000\000Z|\137l[|at\000\000\163\016\152p\000\000\007n\001\016\001\016\000\000\000\000\129\232\000\000\0020\000\000t\224\007>\006\n\000\000\001n\006\n\000\000\129\232\tR\007V\171\188\174\232bVc8\000\000\0032\000\000\129\232\0044\175 \152p\b|\129\232\t\248\007v\172\002\174\232d\026d\252\000\000\bx\172H\174\232e\222f\192\000\000\t\n\172^\174\232g\162h\132\000\000if\000\000\000\000\000\000\004\142\000\000\129\232\000\000\020J\140\230\000\000\129\232\006\020\129\232\027\154\000\000\028\156\000\000\b\024\005F\000\000\b\152\129\232\b4\000\000\tF\000\000\005\132\000\000\000\000\007\146\000\000\000\000\000\000\026n\0318\\pS|\021*\\p\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\142\022\012\000\000\000\000\000\000\002\b\028&\146\160\000\000\000\000S\136\021*\\p\000\000\000\000\166f\\p\166\228\1528\000\000\167`\000\000\\p\000\000\000\000]\022P\158\001B\001B\000\000\n\172\\p\000\000\000\000\000\000\005,\n\196\000\000C\172\000\000\000\000\152\204\000\000\167\222\168\128\000\000\t\006\000\000\000\000\153`\000\000\168.\001L\000\000\000\000\000\000\000\000\011>\000\000L\188\000\000\000\000\152\204\000\000\004@\000\000\000\000G\016\137@\000\000\000\000D\196\021\232\025\006\023b\000\000\000\000\000\000\000\000\nL\000\000\000\000\000\000\0078\000\000\000\000u\164\n\002\n^\n^\007\002\136\030\011\026\129\232\003R\004T\011\148\000\000\011\198\000\000\000\000\011\024\011&\n^\nt\000\000S|SvM\210\021*\024b\000K\000\178\005\174\000\000\011PKjKj\000K\000\178\000\178Kj\000\000\137\234\002`[\180\000F\005\162\170\016\000\000\129\232\133\018\129\232|.\133\148\129\232\t\252\129\232\134\022\000\000\011\180\011\212\011\174Kj\138l\000\000\011\170\t\182x,\000\000\000\000\000\000\000\000Kj\138\238Kj\139p\000\152\001\016|\176\b\176\001\016}2\000\000\139\242\002`\000\000\000\000\000\000\024\018\000\000\000\000\020v\000\000\003T\024b\000\000x\212\024b\000\000\025\166\000\000\000\000Kj\025,\000\000\000\000\000\000\000\000vf\000\000\t\136\000\000FfJ\014\b\206\000P\000\000\023\028R.S|\021*J\014S\"\021*\017\"\017\"\000\000\000\000\000\000\000\000\002\004\022jEn\000\000VTW\018M\210\021*\024b\006\246Rv\000\000\028\026\000\000W\208X\142\153\252\024\178\129\232\012\000\000\000S|\021*\000\000S\142\021*\137@\\p\027\150\000\000S|\021*\149\174\004\014\000\000\\p\\pG8\136\030\011\130\129\232\b\\\t\138\nt\012@\000\000\nt\r&\000\000\000\000\000\000K\210\001B\014\166\140\134\000\000S\136\021*\\p\026\182\000\000S\"\021*\017\"\023\028\017\"\003\006\b\218\000\000\000\000\017\"\012b\014v\002\250\170*\000\000\0282\170|\000\000\024\168\129\232\028\176\015\168\000\000\000\000\016\030\000\000\017\"\004\b\016B\000\000%8\000\000\011\158\000\000\000\000\027$\000\000\018$\024\030\000\000\000\000\000\000\000\000\007\028\000\000\000\000\028&\000\000\029(\000\000\030*\000\000\019&\025 \000\000\000\000\000\000I@\000\000\000\000\000\000\000\000\031,\000\000 .\000\000!0\000\000\"2\000\000#4\000\000$6\000\000%8\000\000&:\000\000'<\000\000(>\000\000)@\000\000*B\000\000+D\000\000,F\000\000-H\000\000.J\000\000/L\000\0000N\000\0001P\000\0002R\021*\146\160\000/\134\170L\200\001B\016\166\1354\162\178P\158\\pG\016\000\000\017d\006\n\000\000\012X\129\232\011\252\000\000D@\152p\012\132\129\232\012\158\000\000\000\000\000\000\000\000\017\004\000\000\000\000\000\000\000\000\000\000\1354\000\000\\p\017\198\000\000F\026\152p\rZ\129\232\012\162\000\000\136\030\r\134\129\232\012\188\000\000\000\000\017<\000\000\000\000\000\000M\192N\178\001B\018&\135\190\000\000\000\000\017\220\000\000\000\000\000\000\135\190\000\000\000\000\136\030\001B\017\222\129\232\012\196\000\000\000\000\r\152\129\232\rf\000\000\000\000\018\022\000\000\000\000\000\000\025\180\129\232\r\146\000\000\000\000\029\188\000\000\000\000\154\134\000\000\030\190\154\174\000\000\031\192\155J\000\000 \194\bZ\000\000\000\000\000\000\000\000!\196\\p\"\198\000\000\147.\147.\000\000\000\000\000\0003T\000\000\b\182\000\000\000\000\000\000\r\242\000\000\000\000\012\160\t\220\000\000\rh\000\000\000\000v\210Q\150\000\000\000\000\t\184\000\000\000\000\000\000\014\016\000\000\000\000\000\000\017\"\005\n\n\222\000\000\r\162\000\000\006\012\000\0004V\000\000\r\192\000\000\007\014\000\0005X\000\000\014\244\000\000\b\016\000\0006Z%>\000\000\014j\t\018\000\0007\\\000\000\014\144\n\020\000\0008^\000\000\015\018\011\022\000\0009`\r\162\011\224\000\000\014|\012\024\000\000:b\000\000\014\194\r\026\000\000;d\000\000\015:\014\028\000\000j\\p\000\000\000\000\019`\000\000?l\000\000@n\000\000#\200\000\000\000\000\002\204\000\000\000\000\\p\000\000\000\000\150.\015V\000\000\000\000J\014\000\000\012\234\000\000\000\000v\210\000\000}\158\021*\025\230\021*\137@\\p\026\148\000\000y@G\172\000\000z\006\000\000y@\000\000z\204\000\000\000\000\000\000\bj\000\000\000\000\000\000J\014\000\000\014\128\000\000\000\000v\210\011\"\000\000K\002\000\000\015\146\000\000\000\000v\210\005\022\000\000\007\188\014\202\000\000\000\000\023\028\021\238\000F\000\000%\194\000\000 :\024\"\000F\000\000\000\000\016\020\000\000\000\000\002\002\024\030]\130\000\000\026\"\000\000\014\132\000\000\000\000\016<\000\000\000\000y@\0042\007\188\000\000\000\000\015&\000\000\000\000\015\196\000\000\000\000v\210\006\024\000\000\000\000\015\130\000\000\000\000v\210\012$\000\000\000\000\021*\024b\012\142\000\000\000\000\007\248\001\236\002\166\004\248\024b\155\216Kj\026\216\024b\156Z\018\236\000\000\000\000\004\248\000\000D\132\020\230\030h\000\000\014\164\019f\000\000\019f\000\"\137l\137l~@\006\006\000\000\000\000\000\000\0194\018\202\136\030\r\250\129\232\022N\021\022\016Z\021\002\000\000C\128\019\152\000\000\027J\000\000\000\000\137l~\194\019\172\174D\137l\127D\137l\127\198\128H\000\000\136N\172\164\014\252\137l\019z\137l\141\022\128\202\019|\137l\141\152\129L\015L\0198\000\000\000\000\000\000\021*\156\130\000\000\146\160\147.\000\000\000\000\019\176\000\000\nt\019\190\000\000\000\000\000\000Ap\000\000\000\000\015n\000\000\000\000v\210\nn\000\000\000\000M\210\021*\024b\002*\000\000U\212\000\000\030\246\000\000\002\250\000\000\000\000\019\202\000\000\019\246\137@Br}\158\000\000\000\000[\242\000\000\0318\000\000_\014\000\000\026.\000\000Kj\031\248\000\000\147.\000\000\021*\024b\147.\000\000\029N\007\248\004H\006\nV\236Kj\158\000\147.\000\000\006\246\006\174\002\166\004\248\147.\164^\001\236\002\166\004\248\147.\164^\000\000\000\000\004\248\147.\000\000I@Ff\\pD@\000\000\000\000I@FfJ\138\000\000\002\238\000K\000/\019\026\136\030\015\248\129\232\147\176\019^\020\014\163@\000\000\147.\000\000\1482D\132\020\230\030h\157\024 l\015\238\158^\012>\019N\021*\147.\000\000\021*\147.\000\000\129\232\170\200\021\196\007\248\000\n\001\016\164\224\000\000\000\n\001\016\164\224\000\000\029\158\007\248\004H\006\nV\236Kj\147.\000\000\006\246\t\180\022@\0148\000\000\164\224\000\000\002\166\019PKj\147.\162\026\001\236\002\166\019VKj\147.\162\026\000\000\000\000\005\250\000\000\147.\000\000Kj\163\158\147.\000\000\005\250\000\000D\132\020\230\030hz^\030\n\026\002\000\208\001\210\000\000\015\238FN\007X\000\000\019\222\019\140P\224\021*^\"\129\232\012\188\000\000O\252\000\208\002\212\rt\000\000\016l\000\000\019\236\019x\129\232L&\000\000\021\022\025l\016\192\000\000\016\140\000\000\019\250\019\142\136\030L&\000\000\020\236P\224\0204\020\202\000\n\000\000\015\138P\224\129\232\016j\001\016\000\000\129\232\015\178\016\180\000\000\000\000\141\250\000\000\000\000\016\140P\224\142|L&\000\000\021*\129\232\016\174\129\232z\192L&\000\000\017V\000\000\000\000L&\000\000\000\000O\252\000\000\147.\165\028\000\208\001\210\015\238\020\"\019\206P\224\147.\165\028\000\000\000\000\000\208\001\210\015\238\020*\019\184\170\244UN\137l\020X\170\244\129\232\026\234\020p\170\244\137l\020|\170\244\143\004\143\134\000\000\160\242\000\000\000\000\147.\168\252\000\208\001\210\015\238\020p\019\246\170\244\147.\168\252\000\000\000\000\000\000\170\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147.\000\000O\016\021*Kj\147.\000\000\165z\021*FN\020\130\151\164\000\000\160\148\165z\000\000\000\000\169*\021*FN\020\140\020 X\238\168\128\006\006\020\242\000\000\000\000\143\228\148\180\021*\000\000\158\192\030h\000\000\000\000\160\148\169*\000\000\000\000\000\000\157zE@K\014\006\006\020\254\000\000\000\000\000\000\148\180\021*\000\000\006\006\021\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\168\030\n\000\208\001\210\015\238\021\014\144xK\210\\X\021*H\136P(\000\208\000\208\015@\000\000\021\\\002\250\000\000\000\000\0214\000\000\000\000Lp\000\000\005,\017\028\000\000\017D\000\000\021\142\021\020\129\232\134\154\021\148\n\002\000\000\000\000\021>\000\000\000\000\021\022\012\254\017\224\000\000\021\156\145\002\152p\001B\0216\129\232\016\180\000\000\000\000\021L\000\000\000\000\000\000Lp\000\000\026\"\018\b\000\000\017\142\000\000\021\166\021>\136\030\000\000\021\212\145\140\166z\001B\021|\129\232\017\n\000\000\000\000\021\162\000\000\000\000\000\000\021*\000\000Lp\000\000\021L\020\236\\X\\X\146\022I@\021*\156\130\146\160\006\228\000\000\021j\000\n\000\000\017\142\\X\129\232\017\182\000F\000\000\021*\144x\144x\\X\0174\\X\000\000GTHD\000\000\130b\000\000\000\000\130\228\000\000\000\000\131f\000\000\017\186\\X\131\232\156\130\146\160\006\228\000\000\006\000\000\000\000\000\170\244\017\022\000\000\000\000NX\022\000\000\000Lp\000\000\\XNXLp\000\000\021*\129\232Lp\000\000\018t\000\000\000\000Lp\000\000\000\000P(\000\000\161T\170\244\021\176\\X\161\178\144x\000\000\147.\165\220\000\208\001\210\015\238\0224\144x\147.\165\220\000\000\000\000\000\000v\bS|\000\000\000\000\000\000\000\000\000\000\000\000\164\000\147.\000\000M\210\021*\024b\147.\000\000\165z\000\000\000\000\000\000\000\000\147.v\b\000\000\000\000\000\000\164\000\022\154\000\000\022\158\000\000\147.v\b\000\000\000\000\018\132\000\000\000\000\136\172\028t\000\000\000\000N\166\000\000\129\232\017N\000\000P(\018\140\000\000\000\000\022\228\150\184\000\000Ct\022\190\000\000\000\000\022\186C\178Gf\030h\148\180 l\021*\000\000\147.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\151F l\021*\000\000\018d\151\164\000\000\160\148\000\000\022\196C\178Gf\147.\000\000\022\216\000\000\030\206\136\030\n\n\nb\021*\174\140\000\000\000\000\029\142\174\162\000\000\000\000\022\\\000\000\016\184\129\232\017\168\022\184\173\000\174\232jHk*\000\000\175f\152p\018\002\129\232\018p\022\186\173F\174\232l\012l\238\000\000\022\208\173\\\174\232m\208n\178\000\000\022\214\173\162\174\232o\148pv\000\000\018\144\129\232\018\170\022\220\173\232\174\232qXr:\000\000\022\224\018\162\129\232\018\244\022\230\173\254\174\232s\028s\254\000\000\006\006\023$\000\000\000\000\159B\000\000\000\000X\238\000\000\160\148\000\000\023*C\178K\186\167\170\000\000\000\000\000\000\000\000\019 \159\164X\238\000\000\160\148\000\000\023.C\178K\186\167\170\000\000\019Z\000\000\000\000 :\000\000\147.\000\000\023@\000\000\000\000\022\168\000\000\022\176\000\000\022\194\000\000\000\000Q\150\022\208\000\000\000\000\022\238w`\023|\000\000\000\000\000\000\018\022\t\182{\130\023\148\000\000\000\000\000\000\000\000\000\000\000\000\023\000\000\000 l\000\000\023\006\000\000\129\232\000\000\018p\000\000\000\000\023\b\000\000\000\000\001\016\000\000\n\168\000\000\000\000\000\000\015\254\000\000\024b\000\000\003R\000\000Kj\000\000\028\026\000\000\011\212\000\000\023\n\000\000\\p\026\148\000\000\000\000\n\184\023\012\000\000\000\000\023\014\011\186J\014\006\n\160&\000\000\000\000\000\000\000\000\000\000W\170\000\000\000\000\023\196\000\000T\154\000\000\019\030\023\202\000\000\023\208\000\000K\002K\002Z\172Z\172\000\000\000\000Y\172Z\172\000\000\000\000\000\000Y\172Z\172\023d\000\000\023h\000\000"), (16, "\t\249\t\249\000\006\t\249\0012\t\249\002\198\002\202\t\249\002\246\002\138\t\249\004\189\t\249\004\189\003\002\t\249\001r\t\249\t\249\t\249\001j\t\249\t\249\t\249\001\218\001\n\000\246\001\198\003\006\t\249\003~\003\130\011\174\t\249\t\237\t\249\001\130\003\n\001\146\007\145\003\162\002\202\t\249\t\249\003\214\003\218\t\249\003\222\003\234\003\246\003\250\004\002\b2\018\134\t\249\t\249\002\190\t\237\007\145\003\242\t\142\t\249\t\249\t\249\t\146\t\150\t\162\t\182\000\246\006^\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\n*\003]\t\249\001n\t\249\t\249\003\174\003\161\n6\nN\n\182\006j\006n\t\249\t\249\t\249\003]\t\249\t\249\t\249\t\249\001n\003\161\016\"\t\249\001z\t\249\t\249\004\189\t\249\t\249\t\249\t\249\t\249\t\249\t\249\006r\t\170\t\249\t\249\t\249\t\194\004\138\n\202\007\145\t\249\t\249\t\249\t\249\014\165\014\165\019\014\014\165\bn\014\165\t\158\014\165\014\165\bN\014\165\014\165\014\165\014\165\001\214\014\165\014\165\004\189\014\165\014\165\014\165\004^\014\165\014\165\014\165\014\165\004\189\014\165\001\214\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\007^\014\165\000\246\004\189\014\165\t\002\014\165\014\165\014\165\014\165\014\165\006\249\014\165\t\n\014\165\006\149\014\165\003\254\014\165\014\165\014\165\004R\t\014\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\006\249\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\005*\014\165\014\165\006\250\014\165\014\165\001\n\001\138\001\198\004\250\014\165\014\165\014\165\014\165\014\165\014\165\025r\014\165\014\165\014\165\014\165\014\165\001~\014\165\014\165\001\154\014\165\014\165\022.\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\014\165\004\189\004\189\014\165\014\165\014\165\014\165\001\217\001\217\001\217\001\217\004Z\001\217\006\149\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\014\201\001\217\0052\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\019\190\014\201\001\217\t\165\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\206\001\217\000\246\001\217\b~\001\217\001\217\001\217\004v\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\tR\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\000\246\001\217\001\217\000\246\003J\003N\b\186\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\017\142\t\218\001\217\006\162\001\217\001\217\022n\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\001\217\019\214\001\217\001\217\001\217\001\217\001\217\011E\011E\t\165\011E\019\194\011E\001n\011E\011E\003\161\011E\011E\011E\011E\019\218\011E\011E\022v\011E\011E\011E\000\n\011E\011E\011E\011E\006}\011E\014q\011E\011E\011E\011E\011E\011E\011E\011E\003\017\011E\003\017\001\242\011E\005V\011E\011E\011E\011E\011E\014q\011E\016f\011E\003\017\011E\002J\011E\011E\011E\003\209\003\"\011E\011E\011E\011E\011E\011E\011E\011E\002N\011E\011E\011E\011E\011E\011E\011E\011E\011E\011E\011E\003&\011E\011E\tF\011E\011E\000\246\tR\bN\025\134\011E\011E\011E\011E\011E\011E\016n\011E\011E\011E\011E\n\226\000\246\011B\011E\n\254\011E\011E\011\n\011E\011E\011E\011E\011E\011E\011E\011E\011E\011E\011E\011E\011E\011E\007\001\011E\011E\011E\011E\011E\003\237\003\237\005Z\003\237\003\209\003\237\031\227\003\237\003\237\n^\003\237\003\237\003\237\003\237\007\001\003\237\003\237\007-\003\237\003\237\003\237\t\209\003\237\003\237\003\237\003\237\001\246\003\237\007\142\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\007-\003\237\004\189\017\194\003\237\t\169\003\237\003\237\003\237\003\237\003\237\001\142\003\237\007\146\003\237\nb\003\237\n\154\003\237\003\237\003\237\003\205\003.\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\014i\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\0032\n\218\011:\004\189\003\237\003\237\000\246\003\"\014i\005\210\003\237\003\237\003\237\003\237\003\237\003\237\000\246\003\237\003\237\003\237\003\237\n\226\000\246\011B\003\237\t\209\003\237\003\237\003&\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\007\t\003\237\003\237\003\237\003\237\003\237\003\221\003\221\t\169\003\221\003\205\003\221\001\190\003\221\003\221\016\162\003\221\003\221\003\221\003\221\007\t\003\221\003\221\0079\003\221\003\221\003\221\025\166\003\221\003\221\003\221\003\221\001\194\003\221\017>\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\0079\003\221\003V\bN\003\221\002n\003\221\003\221\003\221\003\221\003\221\001\158\003\221\003b\003\221\006\014\003\221\002.\003\221\003\221\003\221\005\214\025\174\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\006e\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003f\n\218\011:\006.\003\221\003\221\0186\003.\003J\003N\003\221\003\221\003\221\003\221\003\221\003\221\016\170\003\221\003\221\003\221\003\221\n\226\bR\011B\003\221\018>\003\221\003\221\0032\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\003\221\027N\003\221\003\221\003\221\003\221\003\221\n\173\n\173\002r\n\173\003Z\n\173\001\226\n\173\n\173\016\162\n\173\n\173\n\173\n\173\027R\n\173\n\173\0062\n\173\n\173\n\173\t\189\n\173\n\173\n\173\n\173\004\189\n\173\017\238\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\018\150\n\173\018\154\bN\n\173\b\138\n\173\n\173\n\173\n\173\n\173\006m\n\173\001\230\n\173\005\214\n\173\014\186\n\173\n\173\n\173\000\246\b\146\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\000\246\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\003\182\n\173\n\173\018\158\n\173\n\173\021\234\003J\003N\004\189\n\173\n\173\n\173\n\173\n\173\n\173\016\170\n\173\n\173\n\173\n\173\n\173\020n\n\173\n\173\021\246\n\173\n\173\027V\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\004\189\004\189\n\173\n\173\n\173\n\173\n\189\n\189\005\242\n\189\004n\n\189\002V\n\189\n\189\004\189\n\189\n\189\n\189\n\189\003\201\n\189\n\189\004\"\n\189\n\189\n\189\007\218\n\189\n\189\n\189\n\189\002Z\n\189\014m\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\tR\n\189\001\214\004&\n\189\002\238\n\189\n\189\n\189\n\189\n\189\014m\n\189\005\030\n\189\000\246\n\189\014\210\n\189\n\189\n\189\004\213\022>\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\004\246\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\005>\n\189\n\189\002~\n\189\n\189\011z\t\213\006:\003\201\n\189\n\189\n\189\n\189\n\189\n\189\005z\n\189\n\189\n\189\n\189\n\189\t\254\n\189\n\189\004\213\n\189\n\189\007\246\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\n\189\003\017\003\017\n\189\n\189\n\189\n\189\n\181\n\181\007\222\n\181\012^\n\181\001\214\n\181\n\181\t\154\n\181\n\181\n\181\n\181\002:\n\181\n\181\002r\n\181\n\181\n\181\000\n\n\181\n\181\n\181\n\181\t\193\n\181\005\006\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\r\254\n\181\003\017\006\030\n\181\t\213\n\181\n\181\n\181\n\181\n\181\016\162\n\181\002\226\n\181\003\017\n\181\014\234\n\181\n\181\n\181\004y\004\138\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\000\246\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\005*\n\181\n\181\014>\n\181\n\181\001\n\003\186\001\198\t\193\n\181\n\181\n\181\n\181\n\181\n\181\005\146\n\181\n\181\n\181\n\181\n\181\000\246\n\181\n\181\014B\n\181\n\181\015\186\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\n\181\007F\t\193\n\181\n\181\n\181\n\181\n\161\n\161\003\190\n\161\004y\n\161\016\170\n\161\n\161\005\214\n\161\n\161\n\161\n\161\007J\n\161\n\161\t\154\n\161\n\161\n\161\n\230\n\161\n\161\n\161\n\161\016\246\n\161\005n\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\015\158\n\161\015\170\005\170\n\161\004n\n\161\n\161\n\161\n\161\n\161\006&\n\161\017\202\n\161\005:\n\161\015\002\n\161\n\161\n\161\000\246\006\022\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\015\190\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\004u\n\161\n\161\014\130\n\161\n\161\004z\003J\021\158\b\218\n\161\n\161\n\161\n\161\n\161\n\161\000\246\n\161\n\161\n\161\n\161\n\161\021\178\n\161\n\161\014\134\n\161\n\161\tR\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\n\161\000\246\000\246\n\161\n\161\n\161\n\161\n\169\n\169\031^\n\169\001\230\n\169\005v\n\169\n\169\t\138\n\169\n\169\n\169\n\169\004\189\n\169\n\169\005\214\n\169\n\169\n\169\014^\n\169\n\169\n\169\n\169\004u\n\169\007\202\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\014z\n\169\014\138\007\234\n\169\b\026\n\169\n\169\n\169\n\169\n\169\016\162\n\169\000\246\n\169\000\246\n\169\015\022\n\169\n\169\n\169\029~\000\246\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\007\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\004\189\n\169\n\169\b\174\n\169\n\169\025\206\007\238\007\242\002\202\n\169\n\169\n\169\n\169\n\169\n\169\007\006\n\169\n\169\n\169\n\169\n\169\n\254\n\169\n\169\011\n\n\169\n\169\007\030\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\n\169\004Z\005e\n\169\n\169\n\169\n\169\n\165\n\165\001\n\n\165\001\198\n\165\016\170\n\165\n\165\016\162\n\165\n\165\n\165\n\165\b.\n\165\n\165\007\206\n\165\n\165\n\165\014\170\n\165\n\165\n\165\n\165\019\166\n\165\005*\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\014\194\n\165\014\218\007r\n\165\031\195\n\165\n\165\n\165\n\165\n\165\004j\n\165\b\"\n\165\019~\n\165\015*\n\165\n\165\n\165\b&\007\242\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\011N\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\005*\n\165\n\165\b\014\n\165\n\165\002\202\b\190\011R\003\186\n\165\n\165\n\165\n\165\n\165\n\165\016\170\n\165\n\165\n\165\n\165\n\165\002\014\n\165\n\165\007\254\n\165\n\165\b\022\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\n\165\004Z\017\030\n\165\n\165\n\165\n\165\n\177\n\177\001\n\n\177\001\198\n\177\012\170\n\177\n\177\016\162\n\177\n\177\n\177\n\177\bZ\n\177\n\177\001\230\n\177\n\177\n\177\015:\n\177\n\177\n\177\n\177\003\186\n\177\nv\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\015N\n\177\015b\n\138\n\177\b\198\n\177\n\177\n\177\n\177\n\177\b\214\n\177\000\246\n\177\000\246\n\177\015F\n\177\n\177\n\177\005*\b\238\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\021*\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\005*\n\177\n\177\n&\n\177\n\177\n\246\012\194\011&\r\018\n\177\n\177\n\177\n\177\n\177\n\177\016\170\n\177\n\177\n\177\n\177\n\177\022^\n\177\n\177\016\150\n\177\n\177\tR\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\000\246\018\n\n\177\n\177\n\177\n\177\n\193\n\193\000\246\n\193\000\246\n\193\012\162\n\193\n\193\018\030\n\193\n\193\n\193\n\193\004\189\n\193\n\193\000\246\n\193\n\193\n\193\000\246\n\193\n\193\n\193\n\193\n\150\n\193\012\186\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\004\189\n\193\014f\014Z\n\193\003\182\n\193\n\193\n\193\n\193\n\193\r&\n\193\000\246\n\193\r\138\n\193\015Z\n\193\n\193\n\193\005*\014j\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\014\178\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\005*\n\193\n\193\014\202\n\193\n\193\016\154\022r\014\182\005*\n\193\n\193\n\193\n\193\n\193\n\193\006\133\n\193\n\193\n\193\n\193\n\193\000\246\n\193\n\193\014\206\n\193\n\193\014N\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\014\146\000\246\n\193\n\193\n\193\n\193\n\185\n\185\014R\n\185\r\158\n\185\r\n\n\185\n\185\005*\n\185\n\185\n\185\n\185\021\166\n\185\n\185\014\150\n\185\n\185\n\185\001\214\n\185\n\185\n\185\n\185\r\194\n\185\r\030\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\r\150\n\185\011N\0156\n\185\003\182\n\185\n\185\n\185\n\185\n\185\014f\n\185\017\014\n\185\017\166\n\185\015n\n\185\n\185\n\185\014>\014\254\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\015B\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\015\018\n\185\n\185\014\130\n\185\n\185\018\178\017J\002\158\n\174\n\185\n\185\n\185\n\185\n\185\n\185\n\250\n\185\n\185\n\185\n\185\n\185\014\202\n\185\n\185\015V\n\185\n\185\014\226\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\n\185\014N\015\166\n\185\n\185\n\185\n\185\0111\0111\014\230\0111\017\210\0111\014\178\0111\0111\005*\0111\0111\0111\0111\014\146\0111\0111\015&\0111\0111\0111\017\170\0111\0111\0111\0111\015\154\0111\016\130\0111\0111\0111\0111\0111\0111\0111\0111\015j\0111\017\018\019\150\0111\017N\0111\0111\0111\0111\0111\016\134\0111\017\250\0111\018v\0111\015z\0111\0111\0111\017.\025z\0111\0111\0111\0111\0111\0111\0111\0111\006e\0111\0111\0111\0111\0111\0111\0111\0111\0111\0111\0111\0172\0111\0111\017\222\0111\0111\019\022\000\246\017\214\011\"\0111\0111\0111\0111\0111\0111\t\129\0111\0111\0111\0111\0111\004\189\0111\0111\017\226\0111\0111\014\226\0111\0111\0111\0111\0111\0111\0111\0111\0111\0111\0111\0111\0111\0111\017\130\002\158\0111\0111\0111\0111\003\217\003\217\015\178\003\217\022\218\003\217\005*\003\217\003\217\000\246\003\217\003\217\003\217\003\217\017\178\003\217\003\217\017\134\003\217\003\217\003\217\019\154\003\217\003\217\003\217\003\217\003-\003\217\t\n\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\017\182\003\217\017\254\0226\003\217\022z\003\217\003\217\003\217\003\217\003\217\018\194\003\217\011.\003\217\003\181\003\217\t\129\003\217\003\217\003\217\022\166\022\230\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\011>\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\031\211\n\218\011:\020\230\003\217\003\217\t\n\012z\007\026\006\129\003\217\003\217\003\217\003\217\003\217\003\217\t}\003\217\003\217\003\217\003\217\n\226\005*\011B\003\217\b\209\003\217\003\217\022\158\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\003\217\027^\003\217\003\217\003\217\003\217\003\217\002!\002!\b\213\002!\023\018\002!\000\246\002\202\002!\000\246\002\138\002!\n\242\002!\027b\003\002\002!\022\238\002!\002!\002!\025\178\002!\002!\002!\001\218\023B\011*\t\n\003\006\002!\002!\002!\002!\002!\0112\002!\023.\003\n\025\170\026\014\003\162\028\190\002!\002!\002!\002!\002!\014\209\003\234\029\170\001\198\000\246\002!\t}\002!\002!\002\190\026>\012\150\003\242\t\142\002!\002!\002!\t\146\t\150\t\162\006i\014\158\006^\002!\002!\002!\002!\002!\002!\002!\002!\002!\012\214\n\218\011:\026n\002!\002!\000\246\029\178\026\250\b\161\002!\006j\006n\002!\002!\002!\026\222\002!\002!\002!\002!\014\166\012\250\014\242\002!\b\201\002!\002!\r2\002!\002!\002!\002!\002!\002!\002!\006r\t\170\002!\002!\002!\t\194\004\138\025\238\023F\002!\002!\002!\002!\011\025\011\025\000\246\011\025\026\210\011\025\012^\002\202\011\025\005*\002\138\011\025\011\025\011\025\0266\003\002\011\025\b\197\011\025\011\025\011\025\rN\011\025\011\025\011\025\001\218\0272\011\025\t\n\003\006\011\025\011\025\011\025\011\025\011\025\011\025\011\025\014\221\003\n\001\214\027\158\003\162\004Z\011\025\011\025\011\025\011\025\011\025\028\150\003\234\t\n\001\198\028\202\011\025\022\238\011\025\011\025\002\190\029\222\r^\003\242\t\142\011\025\011\025\011\025\t\146\t\150\t\162\r\130\011\025\006^\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\005*\011\025\011\025\029B\011\025\011\025\029\214\0302\r\170\005*\011\025\006j\006n\011\025\011\025\011\025\031Z\011\025\011\025\011\025\011\025\011\025\000\246\011\025\011\025\015\202\011\025\011\025\015\210\011\025\011\025\011\025\011\025\011\025\011\025\011\025\006r\t\170\011\025\011\025\011\025\t\194\004\138\015\230\030Z\011\025\011\025\011\025\011\025\011\021\011\021\000\246\011\021\001\214\011\021\031\163\002\202\011\021\027\162\002\138\011\021\011\021\011\021\004\213\003\002\011\021\028\154\011\021\011\021\011\021\028\206\011\021\011\021\011\021\001\218\030\238\011\021\030*\003\006\011\021\011\021\011\021\011\021\011\021\011\021\011\021\030R\003\n\000\246\016\022\003\162\016B\011\021\011\021\011\021\011\021\011\021\030\194\003\234\018R\001\198\018z\011\021\004\018\011\021\011\021\002\190\018\166\002\238\003\242\t\142\011\021\011\021\011\021\t\146\t\150\t\162\018\170\011\021\006^\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\018\210\011\021\011\021\018\238\011\021\011\021\019\030\019.\019B\019n\011\021\006j\006n\011\021\011\021\011\021\019z\011\021\011\021\011\021\011\021\011\021\019\226\011\021\011\021\019\234\011\021\011\021\020\222\011\021\011\021\011\021\011\021\011\021\011\021\011\021\006r\t\170\011\021\011\021\011\021\t\194\004\138\020\242\030\242\011\021\011\021\011\021\011\021\002e\002e\020\246\002e\007n\002e\021\186\002\202\002e\021\210\002\138\002e\n\242\002e\022F\003\002\002e\022J\002e\002e\002e\022\130\002e\002e\002e\001\218\022\134\011*\022\174\003\006\002e\002e\002e\002e\002e\0112\002e\022\178\003\n\004\189\bz\003\162\022\202\002e\002e\002e\002e\002e\023v\003\234\023z\001\198\023\158\002e\005\226\002e\002e\002\190\023\162\t>\003\242\t\142\002e\002e\002e\t\146\t\150\t\162\023\178\014\158\006^\002e\002e\002e\002e\002e\002e\002e\002e\002e\023\194\000\246\002e\b\246\002e\002e\023\206\024\002\004\189\024\006\002e\006j\006n\002e\002e\002e\024j\002e\002e\002e\002e\024\146\004\189\000\246\002e\004\189\002e\002e\024\150\002e\002e\002e\002e\002e\002e\002e\006r\t\170\002e\002e\002e\t\194\004\138\004\189\024\166\002e\002e\002e\002e\004\189\024\246\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\025\022\004\189\004\189\004\189\004\189\000\246\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\000\246\004\189\004\189\000\246\004\189\004\189\004\189\025V\004\189\004\189\004\189\004\189\004\189\004\189\000\246\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\000\246\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\000\246\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\022\206\004\189\004\189\025\130\0012\004\189\004\189\004\189\000\246\004\189\003\017\003\017\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\004\189\005%\000\246\004\189\004\189\017Z\025\146\025\186\004\189\025\190\025\202\025\218\004\189\004\189\025\246\026\006\000\n\025\230\026\026\026F\007\174\004\189\004\189\004\189\005%\004f\004\189\004\189\004\189\004\189\026J\000\169\004\189\000\169\003\002\000\169\000\169\000\169\000\169\000\169\000\169\000\169\026V\000\169\026\154\000\169\000\169\003\017\000\169\000\169\026f\003\030\000\169\000\169\004Z\000\169\000\169\000\169\000\169\026\198\000\169\026z\000\169\000\169\027n\003*\000\169\000\169\027\198\000\169\000\169\b\185\000\169\003\186\000\169\b\185\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\n\218\011:\000\169\000\169\006^\027\238\000\169\000\169\000\169\006\029\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\021R\n\226\000\169\011B\004j\000\169\006j\000\169\028v\000\169\028~\t\222\b\185\001\198\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\016\138\017\002\028\214\000\169\028\230\017\"\017B\017R\000\230\006r\028\242\b\185\000\169\002\014\006\029\029V\002\138\029j\029\162\000\169\000\169\000\169\000\169\029\182\029\226\000\169\000\169\000\169\000\169\002]\002]\021\162\002]\006\029\002]\029\250\002\202\002]\030\018\002\138\002]\0306\002]\004\166\003\002\002]\030^\002]\002]\002]\005\026\002]\002]\002]\001\218\031B\030z\001\230\003\006\002]\002]\002]\002]\002]\007y\002]\030\162\003\n\030\218\031\n\003\162\018~\002]\002]\002]\002]\002]\031\022\003\234\031\030\t\166\031'\002]\007\182\002]\002]\002\190\007y\0317\003\242\t\142\002]\002]\002]\t\146\t\150\t\162\031J\006n\006^\002]\002]\002]\002]\002]\002]\002]\002]\002]\031f\n\218\011:\031\131\002]\002]\031\147\031\175 \003 \031\002]\006j\006n\002]\002]\002] *\002]\002]\002]\002]\n\226 _\011B\002] s\002]\002] {\002]\002]\002]\002]\002]\002]\002]\006r\t\170\002]\002]\002]\t\194\004\138\t2\bz\002]\002]\002]\002]\002q\002q\t\233\002q \183\002q \191\003\186\002q\000\000\000\000\002q\000\000\002q\t6\000\000\002q\000\000\002q\002q\002q\017r\002q\002q\002q\t\233\000\000\000\000\000\000\000\000\002q\002q\002q\002q\002q\000\000\002q\000\000\b\246\003\154\000\000\002\202\000\000\002q\002q\002q\002q\002q\003n\t\222\000\000\017\146\000\000\002q\tV\002q\002q\000\000\000\246\001\218\016\138\017\002\002q\002q\002q\017\"\017B\017R\000\000\014-\000\000\002q\002q\002q\002q\002q\002q\002q\002q\002q\000\000\n\218\011:\003\150\002q\002q\000\000\000\000\014-\014-\002q\002\190\014-\002q\002q\002q\000\000\002q\002q\002q\002q\n\226\000\000\011B\002q\000\000\002q\002q\000\000\002q\002q\002q\002q\002q\002q\002q\005)\000\000\002q\002q\002q\bF\007\178\002\202\000\000\002q\002q\002q\002q\002m\002m\000\000\002m\000\246\002m\tn\bz\002m\bY\005)\002m\000\000\002m\000\000\000\000\002m\000\000\002m\002m\002m\000\000\002m\002m\002m\000\000\tr\000\000\000\000\007\137\002m\002m\002m\002m\002m\014-\002m\000\000\003\174\000\000\bY\000\000\022\154\002m\002m\002m\002m\002m\007\137\000\000\b\246\011\022\007\137\002m\bY\002m\002m\000\000\bY\n\030\000\000\000\000\002m\002m\002m\bY\022\162\t^\000\000\bY\000\246\002m\002m\002m\002m\002m\002m\002m\002m\002m\000\000\n\218\011:\000\000\002m\002m\000\000\tb\000\000\b\205\002m\000\000\000\000\002m\002m\002m\000\000\002m\002m\002m\002m\n\226\001\149\011B\002m\000\000\002m\002m\000\000\002m\002m\002m\002m\002m\002m\002m\tR\003\017\002m\002m\002m\001\149\000\000\000\000\007\137\002m\002m\002m\002m\002a\002a\000\246\002a\0262\002a\000\000\bz\002a\011\205\000\000\002a\000\000\002a\004.\000\000\002a\000\n\002a\002a\002a\000\000\002a\002a\002a\000\000\020\026\000\000\026:\000\000\002a\002a\002a\002a\002a\003\017\002a\000\000\007\141\000\000\011\205\000\000\000\000\002a\002a\002a\002a\002a\003\017\003\017\b\246\b\197\tf\002a\011\205\002a\002a\007\141\011\205\r\186\001\149\007\141\002a\002a\002a\011\205\000\000\000\000\000\000\011\205\000\246\002a\002a\002a\002a\002a\002a\002a\002a\002a\001\149\n\218\011:\000\000\002a\002a\000\000\000\000\001\149\000\000\002a\000\000\bz\002a\002a\002a\016\178\002a\002a\002a\002a\n\226\000\246\011B\002a\000\000\002a\002a\000\000\002a\002a\002a\002a\002a\002a\002a\000\000\020\030\002a\002a\002a\000\246\t}\000\000\000\000\002a\002a\002a\002a\002i\002i\000\000\002i\007\141\002i\b\246\016\194\002i\000\246\000\000\002i\000\000\002i\000\000\000\000\002i\000\000\002i\002i\002i\000\000\002i\002i\002i \015\000\246\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\246\002i\007.\000\000\000\000\n\198\006\210\003\193\002i\002i\002i\002i\002i\007N\000\000\000\000\000\000\007Z\002i\007.\002i\002i\018F\006\210\018\150\nJ\018\154\002i\002i\002i\007N\000\000\000\000\000\000\007Z\006m\002i\002i\002i\002i\002i\002i\002i\002i\002i\t}\ta\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\002i\t\193\000\000\002i\002i\002i\000\000\002i\002i\002i\002i\016\030\000\000\000\000\002i\018\158\002i\002i\000\000\011Z\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\002i\002i\000\246\000\000\ta\bz\002i\002i\002i\002i\t\245\t\245\000\000\t\245\000\000\t\245\0145\003\186\t\245\000\000\000\000\t\245\000\000\t\245\n\n\ta\011\134\000\000\t\245\011\170\t\245\000\000\t\245\t\245\t\245\0145\0145\000\000\000\000\0145\011\190\011\214\011\222\011\198\011\230\000\000\t\245\007.\b\246\028\166\bz\006\210\000\000\t\245\t\245\011\238\011\246\t\245\007N\006\166\ta\000\000\007Z\t\245\005\026\011\254\t\245\ta\000\246\028\170\004\006\004\n\t\245\t\245\000\246\007\130\000\000\004\022\000\000\0141\000\246\t\245\t\245\011\142\011\206\012\006\012\014\012\030\t\245\t\245\000\000\t]\t\245\b\246\t\245\012&\000\000\000\000\0141\0141\t\245\031\243\0141\t\245\t\245\012.\000\000\t\245\t\245\t\245\t\245\0145\001\214\000\246\t\245\000\000\t\245\t\245\000\000\012N\t\245\t\245\012V\012\022\t\245\t\245\000\000\000\000\t\245\0126\t\245\000\000\000\000\t]\000\000\t\245\t\245\012>\012F\002\157\002\157\000\000\002\157\000\246\002\157\000\000\000\000\002\157\000\000\015\242\002\157\000\000\002\157\000\000\t]\002\157\004R\002\157\002\157\002\157\000\000\002\157\002\157\002\157\003\017\003\017\020F\000\000\000\000\002\157\002\157\002\157\002\157\002\157\0141\002\157\000\000\000\000\000\000\003\017\000\000\000\000\002\157\002\157\002\157\002\157\002\157\004\198\000\000\t]\000\000\000\n\002\157\005\026\002\157\002\157\t]\001\214\000\000\000\000\000\000\002\157\002\157\002\157\003\017\003\017\021z\000\000\000\000\029\146\002\157\002\157\011\142\002\157\002\157\002\157\002\157\002\157\002\157\003\017\000\000\002\157\003\017\002\157\002\157\000\000\000\000\000\000\000\000\002\157\000\000\000\n\002\157\002\157\002\157\000\000\002\157\002\157\002\157\002\157\000\000\004R\000\000\002\157\000\000\002\157\002\157\000\000\002\157\002\157\002\157\002\157\002\157\002\157\002\157\000\000\003\017\002\157\002\157\002\157\022\"\000\000\003\017\000\000\002\157\002\157\002\157\002\157\002\133\002\133\000\000\002\133\004\198\002\133\000\000\005i\002\133\000\246\000\000\002\133\000\000\002\133\000\000\000\000\002\133\000\n\002\133\002\133\002\133\000\000\002\133\002\133\002\133\000\000\000\000\000\000\000\000\000\000\002\133\002\133\002\133\002\133\002\133\003\017\002\133\000\000\018n\000\000\r\206\002\138\000\000\002\133\002\133\002\133\002\133\002\133\003\017\003\017\000\000\000\000\000\000\002\133\r\214\002\133\002\133\000\000\r\226\000\000\000\000\000\000\002\133\002\133\002\133\r\238\000\000\000\000\000\000\r\250\000\000\002\133\002\133\011\142\002\133\002\133\002\133\002\133\002\133\002\133\018r\000\000\002\133\000\000\002\133\002\133\000\000\000\000\000\000\005\141\002\133\000\000\000\000\002\133\002\133\002\133\018~\002\133\002\133\002\133\002\133\005\141\000\000\bz\002\133\000\000\002\133\002\133\000\000\002\133\002\133\002\133\002\133\002\133\002\133\002\133\000\000\000\000\002\133\002\133\002\133\000\000\019\206\006n\000\000\002\133\002\133\002\133\002\133\002\145\002\145\000\000\002\145\005\141\002\145\007\161\bz\002\145\000\246\000\000\002\145\000\000\002\145\000\000\000\000\011\134\b\246\002\145\002\145\002\145\000\000\002\145\002\145\002\145\007\161\020\n\000\000\000\000\007\161\002\145\002\145\002\145\011\198\002\145\005\141\002\145\000\246\005\141\000\000\bQ\000\000\000\000\002\145\002\145\002\145\002\145\002\145\000\000\000\000\b\246\000\000\000\000\002\145\bQ\002\145\002\145\000\000\006\210\000\000\000\000\000\000\002\145\002\145\002\145\bQ\000\000\029r\000\000\bQ\000\246\002\145\002\145\011\142\011\206\002\145\002\145\002\145\002\145\002\145\000\000\000\000\002\145\000\000\002\145\002\145\000\000\000\000\000\000\000\000\002\145\000\000\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\002\145\006N\000\000\bz\002\145\000\000\002\145\002\145\000\000\002\145\002\145\002\145\002\145\002\145\002\145\002\145\000\000\000\000\002\145\002\145\002\145\000\000\020&\000\000\000\000\002\145\002\145\002\145\002\145\002\161\002\161\000\000\002\161\000\000\002\161\007\145\bz\002\161\bm\000\000\002\161\000\000\002\161\000\000\000\000\002\161\b\246\002\161\002\161\002\161\000\000\002\161\002\161\002\161\007\145\030\250\000\000\000\000\007\145\002\161\002\161\002\161\002\161\002\161\000\000\002\161\000\246\002\202\000\000\bm\002\138\000\000\002\161\002\161\002\161\002\161\002\161\000\000\000\000\b\246\000\000\000\000\002\161\bm\002\161\002\161\000\000\006\210\000\000\000\000\000\000\002\161\002\161\002\161\bm\000\000\000\000\000\000\bm\000\246\002\161\002\161\011\142\002\161\002\161\002\161\002\161\002\161\002\161\021\030\000\000\002\161\000\000\002\161\002\161\000\000\000\000\000\000\000\000\002\161\000\000\000\000\002\161\002\161\002\161\018~\002\161\002\161\002\161\002\161\t\158\000\000\000\000\002\161\000\000\002\161\002\161\000\000\002\161\002\161\002\161\002\161\002\161\002\161\002\161\000\000\000\000\002\161\002\161\002\161\000\000\000\000\006n\000\000\002\161\002\161\002\161\002\161\002\129\002\129\000\000\002\129\000\000\002\129\000\000\000\000\002\129\000\246\000\000\002\129\000\000\002\129\000\000\000\000\002\129\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\000\000\002\129\002\129\002\129\002\129\002\129\000\000\002\129\000\000\000\000\000\000\b\137\000\000\000\000\002\129\002\129\002\129\002\129\002\129\000\000\000\000\000\000\000\000\000\000\002\129\007.\002\129\002\129\000\000\006\210\000\000\000\000\000\000\002\129\002\129\002\129\b\137\000\000\000\000\000\000\b\137\000\000\002\129\002\129\011\142\002\129\002\129\002\129\002\129\002\129\002\129\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\002\129\000\000\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\002\129\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\002\129\002\129\002\129\002\129\002\129\002\129\002\129\000\000\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\002\129\002\129\002\141\002\141\000\000\002\141\000\000\002\141\000\000\000\000\002\141\b\129\000\000\002\141\000\000\002\141\000\000\000\000\011\134\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\002\141\002\141\002\141\011\198\002\141\000\000\002\141\000\000\000\000\000\000\b\129\000\000\000\000\002\141\002\141\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\002\141\014\018\002\141\002\141\000\000\b\129\000\000\000\000\000\000\002\141\002\141\002\141\b\129\000\000\000\000\000\000\b\129\000\000\002\141\002\141\011\142\011\206\002\141\002\141\002\141\002\141\002\141\000\000\000\000\002\141\000\000\002\141\002\141\000\000\000\000\000\000\000\000\002\141\000\000\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\002\141\000\000\000\000\000\000\002\141\000\000\002\141\002\141\000\000\002\141\002\141\002\141\002\141\002\141\002\141\002\141\000\000\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\002\141\002\141\002\141\002\141\002\137\002\137\000\000\002\137\000\000\002\137\000\000\000\000\002\137\000\246\000\000\002\137\000\000\002\137\000\000\000\000\011\134\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\002\137\002\137\002\137\011\198\002\137\000\000\002\137\000\000\000\000\000\000\bM\000\000\000\000\002\137\002\137\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\002\137\bM\002\137\002\137\000\000\006\210\000\000\000\000\000\000\002\137\002\137\002\137\bM\000\000\000\000\000\000\bM\000\000\002\137\002\137\011\142\011\206\002\137\002\137\002\137\002\137\002\137\000\000\000\000\002\137\000\000\002\137\002\137\000\000\000\000\000\000\000\000\002\137\000\000\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\002\137\000\000\000\000\000\000\002\137\000\000\002\137\002\137\000\000\002\137\002\137\002\137\002\137\002\137\002\137\002\137\000\000\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\002\137\002\137\002\137\002\137\002\177\002\177\000\000\002\177\000\000\002\177\000\000\000\000\002\177\000\246\000\000\002\177\000\000\002\177\000\000\000\000\011\134\000\000\002\177\002\177\002\177\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\177\000\000\000\000\000\000\016Z\000\000\000\000\002\177\002\177\011\238\011\246\002\177\000\000\000\000\000\000\000\000\000\000\002\177\r\214\011\254\002\177\000\000\r\226\000\000\000\000\000\000\002\177\002\177\000\246\r\238\000\000\000\000\000\000\r\250\000\000\002\177\002\177\011\142\011\206\012\006\012\014\012\030\002\177\002\177\000\000\000\000\002\177\000\000\002\177\012&\000\000\000\000\000\000\000\000\002\177\000\000\000\000\002\177\002\177\012.\000\000\002\177\002\177\002\177\002\177\000\000\000\000\000\000\002\177\000\000\002\177\002\177\000\000\002\177\002\177\002\177\002\177\012\022\002\177\002\177\000\000\000\000\002\177\0126\002\177\000\000\000\000\000\000\000\000\002\177\002\177\012>\012F\002\153\002\153\000\000\002\153\000\000\002\153\000\000\002\202\002\153\000\000\002\202\002\153\000\000\002\153\000\000\000\000\011\134\000\000\002\153\002\153\002\153\000\000\002\153\002\153\002\153\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\011\198\002\153\000\000\002\153\000\000\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\153\000\000\011F\000\000\003\174\014\246\002\153\003\174\002\153\002\153\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\0146\000\000\014F\015\n\007\177\015\030\002\153\002\153\011\142\011\206\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\000\000\002\153\002\153\000\000\000\000\007\177\000\000\002\153\000\000\007\177\002\153\002\153\002\153\000\000\002\153\002\153\002\153\002\153\000\000\000\000\000\000\002\153\000\000\002\153\002\153\000\000\002\153\002\153\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\002\153\002\153\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\149\002\149\000\000\002\149\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\000\000\002\149\000\000\000\000\011\134\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\002\149\011\198\002\149\007\177\002\149\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\002\149\002\149\002\149\000\000\000\000\000\000\n\254\000\000\002\149\011\n\002\149\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\011\142\011\206\002\149\002\149\002\149\002\149\002\149\000\000\000\000\002\149\000\000\002\149\002\149\000\000\000\000\000\000\000\000\002\149\000\000\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\002\149\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\002\149\002\149\002\149\002\149\002\149\002\149\002\149\000\000\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\002\149\002\149\002\149\002\149\002\169\002\169\000\000\002\169\000\000\002\169\000\000\000\000\002\169\000\000\000\000\002\169\000\000\002\169\000\000\000\000\011\134\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\002\169\000\000\002\169\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\011\238\011\246\002\169\000\000\000\000\000\000\000\000\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\000\000\002\169\002\169\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\011\142\011\206\012\006\012\014\002\169\002\169\002\169\000\000\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\002\169\000\000\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\002\169\000\000\000\000\000\000\002\169\000\000\002\169\002\169\000\000\002\169\002\169\002\169\002\169\012\022\002\169\002\169\000\000\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002}\002}\000\000\002}\000\000\002}\000\000\000\000\002}\000\000\000\000\002}\000\000\002}\000\000\000\000\011\134\000\000\002}\002}\002}\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\002}\002}\002}\011\198\002}\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\000\000\002}\002}\011\142\011\206\002}\002}\002}\002}\002}\000\000\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\002}\000\000\000\000\002}\002}\002}\000\000\002}\002}\002}\002}\000\000\000\000\000\000\002}\000\000\002}\002}\000\000\002}\002}\002}\002}\002}\002}\002}\000\000\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002y\002y\000\000\002y\000\000\002y\000\000\000\000\002y\000\000\000\000\002y\000\000\002y\000\000\000\000\011\134\000\000\002y\002y\002y\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\002y\000\000\002y\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\011\238\011\246\002y\000\000\000\000\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\000\000\002y\002y\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\011\142\011\206\012\006\012\014\002y\002y\002y\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\002y\000\000\000\000\002y\002y\002y\000\000\002y\002y\002y\002y\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\002y\002y\002y\002y\012\022\002y\002y\000\000\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\002y\002y\002y\002y\002\213\002\213\000\000\002\213\000\000\002\213\000\000\000\000\002\213\000\000\000\000\002\213\000\000\002\213\000\000\000\000\011\134\000\000\002\213\002\213\002\213\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\002\213\000\000\002\213\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\011\238\011\246\002\213\000\000\000\000\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\011\142\011\206\012\006\002\213\002\213\002\213\002\213\000\000\000\000\002\213\000\000\002\213\002\213\000\000\000\000\000\000\000\000\002\213\000\000\000\000\002\213\002\213\002\213\000\000\002\213\002\213\002\213\002\213\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\002\213\002\213\002\213\002\213\012\022\002\213\002\213\000\000\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\002\213\002\213\002\213\002\213\002u\002u\000\000\002u\000\000\002u\000\000\000\000\002u\000\000\000\000\002u\000\000\002u\000\000\000\000\011\134\000\000\002u\002u\002u\000\000\002u\002u\002u\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\002u\000\000\002u\000\000\000\000\000\000\000\000\000\000\000\000\002u\002u\011\238\011\246\002u\000\000\000\000\000\000\000\000\000\000\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\000\000\002u\002u\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002u\002u\011\142\011\206\012\006\012\014\002u\002u\002u\000\000\000\000\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\002u\000\000\000\000\002u\002u\002u\000\000\002u\002u\002u\002u\000\000\000\000\000\000\002u\000\000\002u\002u\000\000\002u\002u\002u\002u\012\022\002u\002u\000\000\000\000\002u\002u\002u\000\000\000\000\000\000\000\000\002u\002u\002u\002u\002\173\002\173\000\000\002\173\000\000\002\173\000\000\000\000\002\173\000\000\000\000\002\173\000\000\002\173\000\000\000\000\011\134\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\002\173\000\000\002\173\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\011\238\011\246\002\173\000\000\000\000\000\000\000\000\000\000\002\173\000\000\002\173\002\173\000\000\000\000\000\000\000\000\000\000\002\173\002\173\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\011\142\011\206\012\006\012\014\002\173\002\173\002\173\000\000\000\000\002\173\000\000\002\173\002\173\000\000\000\000\000\000\000\000\002\173\000\000\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\002\173\000\000\000\000\000\000\002\173\000\000\002\173\002\173\000\000\002\173\002\173\002\173\002\173\012\022\002\173\002\173\000\000\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\002\173\002\173\002\173\002\173\002\165\002\165\000\000\002\165\000\000\002\165\000\000\000\000\002\165\000\000\000\000\002\165\000\000\002\165\000\000\000\000\011\134\000\000\002\165\002\165\002\165\000\000\002\165\002\165\002\165\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\002\165\000\000\002\165\000\000\000\000\000\000\000\000\000\000\000\000\002\165\002\165\011\238\011\246\002\165\000\000\000\000\000\000\000\000\000\000\002\165\000\000\002\165\002\165\000\000\000\000\000\000\000\000\000\000\002\165\002\165\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\165\002\165\011\142\011\206\012\006\012\014\002\165\002\165\002\165\000\000\000\000\002\165\000\000\002\165\002\165\000\000\000\000\000\000\000\000\002\165\000\000\000\000\002\165\002\165\002\165\000\000\002\165\002\165\002\165\002\165\000\000\000\000\000\000\002\165\000\000\002\165\002\165\000\000\002\165\002\165\002\165\002\165\012\022\002\165\002\165\000\000\000\000\002\165\002\165\002\165\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\002\181\002\181\000\000\002\181\000\000\002\181\000\000\000\000\002\181\000\000\000\000\002\181\000\000\002\181\000\000\000\000\011\134\000\000\002\181\002\181\002\181\000\000\002\181\002\181\002\181\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\181\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\011\238\011\246\002\181\000\000\000\000\000\000\000\000\000\000\002\181\000\000\011\254\002\181\000\000\000\000\000\000\000\000\000\000\002\181\002\181\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\011\142\011\206\012\006\012\014\012\030\002\181\002\181\000\000\000\000\002\181\000\000\002\181\012&\000\000\000\000\000\000\000\000\002\181\000\000\000\000\002\181\002\181\012.\000\000\002\181\002\181\002\181\002\181\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\002\181\002\181\002\181\002\181\012\022\002\181\002\181\000\000\000\000\002\181\0126\002\181\000\000\000\000\000\000\000\000\002\181\002\181\012>\012F\002\185\002\185\000\000\002\185\000\000\002\185\000\000\000\000\002\185\000\000\000\000\002\185\000\000\002\185\000\000\000\000\011\134\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\002\185\000\000\002\185\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\011\238\011\246\002\185\000\000\000\000\000\000\000\000\000\000\002\185\000\000\011\254\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\011\142\011\206\012\006\012\014\012\030\002\185\002\185\000\000\000\000\002\185\000\000\002\185\012&\000\000\000\000\000\000\000\000\002\185\000\000\000\000\002\185\002\185\012.\000\000\002\185\002\185\002\185\002\185\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\002\185\002\185\002\185\002\185\012\022\002\185\002\185\000\000\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\002\185\002\185\012>\012F\002\189\002\189\000\000\002\189\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\011\134\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\002\189\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\011\238\011\246\002\189\000\000\000\000\000\000\000\000\000\000\002\189\000\000\011\254\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\011\142\011\206\012\006\012\014\012\030\002\189\002\189\000\000\000\000\002\189\000\000\002\189\012&\000\000\000\000\000\000\000\000\002\189\000\000\000\000\002\189\002\189\012.\000\000\002\189\002\189\002\189\002\189\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\002\189\002\189\002\189\002\189\012\022\002\189\002\189\000\000\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\002\189\002\189\012>\012F\t\177\t\177\000\000\t\177\000\000\t\177\000\000\000\000\t\177\000\000\000\000\t\177\000\000\t\177\000\000\000\000\011\134\000\000\t\177\t\177\t\177\000\000\t\177\t\177\t\177\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\t\177\000\000\000\000\000\000\000\000\000\000\000\000\t\177\t\177\011\238\011\246\t\177\000\000\000\000\000\000\000\000\000\000\t\177\000\000\011\254\t\177\000\000\000\000\000\000\000\000\000\000\t\177\t\177\000\246\000\000\000\000\000\000\000\000\000\000\000\000\t\177\t\177\011\142\011\206\012\006\012\014\012\030\t\177\t\177\000\000\000\000\t\177\000\000\t\177\012&\000\000\000\000\000\000\000\000\t\177\000\000\000\000\t\177\t\177\012.\000\000\t\177\t\177\t\177\t\177\000\000\000\000\000\000\t\177\000\000\t\177\t\177\000\000\t\177\t\177\t\177\t\177\012\022\t\177\t\177\000\000\000\000\t\177\0126\t\177\000\000\000\000\000\000\000\000\t\177\t\177\012>\012F\002\193\002\193\000\000\002\193\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\011\134\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\193\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\011\238\011\246\002\193\000\000\000\000\000\000\000\000\000\000\002\193\000\000\011\254\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\011\142\011\206\012\006\012\014\012\030\002\193\002\193\000\000\000\000\002\193\000\000\002\193\012&\000\000\000\000\000\000\000\000\002\193\000\000\000\000\002\193\002\193\012.\000\000\002\193\002\193\002\193\002\193\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\012N\002\193\002\193\012V\012\022\002\193\002\193\000\000\000\000\002\193\0126\002\193\000\000\000\000\000\000\000\000\002\193\002\193\012>\012F\t\173\t\173\000\000\t\173\000\000\t\173\000\000\000\000\t\173\000\000\000\000\t\173\000\000\t\173\000\000\000\000\011\134\000\000\t\173\t\173\t\173\000\000\t\173\t\173\t\173\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\t\173\000\000\000\000\000\000\000\000\000\000\000\000\t\173\t\173\011\238\011\246\t\173\000\000\000\000\000\000\000\000\000\000\t\173\000\000\011\254\t\173\000\000\000\000\000\000\000\000\000\000\t\173\t\173\000\246\000\000\000\000\000\000\000\000\000\000\000\000\t\173\t\173\011\142\011\206\012\006\012\014\012\030\t\173\t\173\000\000\000\000\t\173\000\000\t\173\012&\000\000\000\000\000\000\000\000\t\173\000\000\000\000\t\173\t\173\012.\000\000\t\173\t\173\t\173\t\173\000\000\000\000\000\000\t\173\000\000\t\173\t\173\000\000\t\173\t\173\t\173\t\173\012\022\t\173\t\173\000\000\000\000\t\173\0126\t\173\000\000\000\000\000\000\000\000\t\173\t\173\012>\012F\002\237\002\237\000\000\002\237\000\000\002\237\000\000\000\000\002\237\000\000\000\000\002\237\000\000\002\237\000\000\000\000\011\134\000\000\002\237\002\237\002\237\000\000\002\237\002\237\002\237\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\237\000\000\000\000\000\000\000\000\000\000\000\000\002\237\002\237\011\238\011\246\002\237\000\000\000\000\000\000\000\000\000\000\002\237\000\000\011\254\002\237\000\000\000\000\000\000\000\000\000\000\002\237\002\237\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\237\002\237\011\142\011\206\012\006\012\014\012\030\002\237\002\237\000\000\000\000\002\237\000\000\002\237\012&\000\000\000\000\000\000\000\000\002\237\000\000\000\000\002\237\002\237\012.\000\000\002\237\002\237\002\237\002\237\000\000\000\000\000\000\002\237\000\000\002\237\002\237\000\000\012N\002\237\002\237\012V\012\022\002\237\002\237\000\000\000\000\002\237\0126\002\237\000\000\000\000\000\000\000\000\002\237\002\237\012>\012F\002\253\002\253\000\000\002\253\000\000\002\253\000\000\000\000\002\253\000\000\000\000\002\253\000\000\002\253\000\000\000\000\011\134\000\000\002\253\002\253\002\253\000\000\002\253\002\253\002\253\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\253\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\011\238\011\246\002\253\000\000\000\000\000\000\000\000\000\000\002\253\000\000\011\254\002\253\000\000\000\000\000\000\000\000\000\000\002\253\002\253\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\011\142\011\206\012\006\012\014\012\030\002\253\002\253\000\000\000\000\002\253\000\000\002\253\012&\000\000\000\000\000\000\000\000\002\253\000\000\000\000\002\253\002\253\012.\000\000\002\253\002\253\002\253\002\253\000\000\000\000\000\000\002\253\000\000\002\253\002\253\000\000\012N\002\253\002\253\012V\012\022\002\253\002\253\000\000\000\000\002\253\0126\002\253\000\000\000\000\000\000\000\000\002\253\002\253\012>\012F\002\245\002\245\000\000\002\245\000\000\002\245\000\000\000\000\002\245\000\000\000\000\002\245\000\000\002\245\000\000\000\000\011\134\000\000\002\245\002\245\002\245\000\000\002\245\002\245\002\245\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\245\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\011\238\011\246\002\245\000\000\000\000\000\000\000\000\000\000\002\245\000\000\011\254\002\245\000\000\000\000\000\000\000\000\000\000\002\245\002\245\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\011\142\011\206\012\006\012\014\012\030\002\245\002\245\000\000\000\000\002\245\000\000\002\245\012&\000\000\000\000\000\000\000\000\002\245\000\000\000\000\002\245\002\245\012.\000\000\002\245\002\245\002\245\002\245\000\000\000\000\000\000\002\245\000\000\002\245\002\245\000\000\012N\002\245\002\245\012V\012\022\002\245\002\245\000\000\000\000\002\245\0126\002\245\000\000\000\000\000\000\000\000\002\245\002\245\012>\012F\002\225\002\225\000\000\002\225\000\000\002\225\000\000\000\000\002\225\000\000\000\000\002\225\000\000\002\225\000\000\000\000\011\134\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\225\000\000\000\000\000\000\000\000\000\000\000\000\002\225\002\225\011\238\011\246\002\225\000\000\000\000\000\000\000\000\000\000\002\225\000\000\011\254\002\225\000\000\000\000\000\000\000\000\000\000\002\225\002\225\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\225\002\225\011\142\011\206\012\006\012\014\012\030\002\225\002\225\000\000\000\000\002\225\000\000\002\225\012&\000\000\000\000\000\000\000\000\002\225\000\000\000\000\002\225\002\225\012.\000\000\002\225\002\225\002\225\002\225\000\000\000\000\000\000\002\225\000\000\002\225\002\225\000\000\012N\002\225\002\225\012V\012\022\002\225\002\225\000\000\000\000\002\225\0126\002\225\000\000\000\000\000\000\000\000\002\225\002\225\012>\012F\002\233\002\233\000\000\002\233\000\000\002\233\000\000\000\000\002\233\000\000\000\000\002\233\000\000\002\233\000\000\000\000\011\134\000\000\002\233\002\233\002\233\000\000\002\233\002\233\002\233\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\233\000\000\000\000\000\000\000\000\000\000\000\000\002\233\002\233\011\238\011\246\002\233\000\000\000\000\000\000\000\000\000\000\002\233\000\000\011\254\002\233\000\000\000\000\000\000\000\000\000\000\002\233\002\233\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\233\002\233\011\142\011\206\012\006\012\014\012\030\002\233\002\233\000\000\000\000\002\233\000\000\002\233\012&\000\000\000\000\000\000\000\000\002\233\000\000\000\000\002\233\002\233\012.\000\000\002\233\002\233\002\233\002\233\000\000\000\000\000\000\002\233\000\000\002\233\002\233\000\000\012N\002\233\002\233\012V\012\022\002\233\002\233\000\000\000\000\002\233\0126\002\233\000\000\000\000\000\000\000\000\002\233\002\233\012>\012F\002\229\002\229\000\000\002\229\000\000\002\229\000\000\000\000\002\229\000\000\000\000\002\229\000\000\002\229\000\000\000\000\011\134\000\000\002\229\002\229\002\229\000\000\002\229\002\229\002\229\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\229\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\011\238\011\246\002\229\000\000\000\000\000\000\000\000\000\000\002\229\000\000\011\254\002\229\000\000\000\000\000\000\000\000\000\000\002\229\002\229\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\011\142\011\206\012\006\012\014\012\030\002\229\002\229\000\000\000\000\002\229\000\000\002\229\012&\000\000\000\000\000\000\000\000\002\229\000\000\000\000\002\229\002\229\012.\000\000\002\229\002\229\002\229\002\229\000\000\000\000\000\000\002\229\000\000\002\229\002\229\000\000\012N\002\229\002\229\012V\012\022\002\229\002\229\000\000\000\000\002\229\0126\002\229\000\000\000\000\000\000\000\000\002\229\002\229\012>\012F\002\241\002\241\000\000\002\241\000\000\002\241\000\000\000\000\002\241\000\000\000\000\002\241\000\000\002\241\000\000\000\000\011\134\000\000\002\241\002\241\002\241\000\000\002\241\002\241\002\241\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\241\000\000\000\000\000\000\000\000\000\000\000\000\002\241\002\241\011\238\011\246\002\241\000\000\000\000\000\000\000\000\000\000\002\241\000\000\011\254\002\241\000\000\000\000\000\000\000\000\000\000\002\241\002\241\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\241\002\241\011\142\011\206\012\006\012\014\012\030\002\241\002\241\000\000\000\000\002\241\000\000\002\241\012&\000\000\000\000\000\000\000\000\002\241\000\000\000\000\002\241\002\241\012.\000\000\002\241\002\241\002\241\002\241\000\000\000\000\000\000\002\241\000\000\002\241\002\241\000\000\012N\002\241\002\241\012V\012\022\002\241\002\241\000\000\000\000\002\241\0126\002\241\000\000\000\000\000\000\000\000\002\241\002\241\012>\012F\003\001\003\001\000\000\003\001\000\000\003\001\000\000\000\000\003\001\000\000\000\000\003\001\000\000\003\001\000\000\000\000\011\134\000\000\003\001\003\001\003\001\000\000\003\001\003\001\003\001\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\003\001\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\011\238\011\246\003\001\000\000\000\000\000\000\000\000\000\000\003\001\000\000\011\254\003\001\000\000\000\000\000\000\000\000\000\000\003\001\003\001\000\246\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\011\142\011\206\012\006\012\014\012\030\003\001\003\001\000\000\000\000\003\001\000\000\003\001\012&\000\000\000\000\000\000\000\000\003\001\000\000\000\000\003\001\003\001\012.\000\000\003\001\003\001\003\001\003\001\000\000\000\000\000\000\003\001\000\000\003\001\003\001\000\000\012N\003\001\003\001\012V\012\022\003\001\003\001\000\000\000\000\003\001\0126\003\001\000\000\000\000\000\000\000\000\003\001\003\001\012>\012F\002\249\002\249\000\000\002\249\000\000\002\249\000\000\000\000\002\249\000\000\000\000\002\249\000\000\002\249\000\000\000\000\011\134\000\000\002\249\002\249\002\249\000\000\002\249\002\249\002\249\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\249\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\011\238\011\246\002\249\000\000\000\000\000\000\000\000\000\000\002\249\000\000\011\254\002\249\000\000\000\000\000\000\000\000\000\000\002\249\002\249\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\011\142\011\206\012\006\012\014\012\030\002\249\002\249\000\000\000\000\002\249\000\000\002\249\012&\000\000\000\000\000\000\000\000\002\249\000\000\000\000\002\249\002\249\012.\000\000\002\249\002\249\002\249\002\249\000\000\000\000\000\000\002\249\000\000\002\249\002\249\000\000\012N\002\249\002\249\012V\012\022\002\249\002\249\000\000\000\000\002\249\0126\002\249\000\000\000\000\000\000\000\000\002\249\002\249\012>\012F\002\221\002\221\000\000\002\221\000\000\002\221\000\000\000\000\002\221\000\000\000\000\002\221\000\000\002\221\000\000\000\000\011\134\000\000\002\221\002\221\002\221\000\000\002\221\002\221\002\221\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\221\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\011\238\011\246\002\221\000\000\000\000\000\000\000\000\000\000\002\221\000\000\011\254\002\221\000\000\000\000\000\000\000\000\000\000\002\221\002\221\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\011\142\011\206\012\006\012\014\012\030\002\221\002\221\000\000\000\000\002\221\000\000\002\221\012&\000\000\000\000\000\000\000\000\002\221\000\000\000\000\002\221\002\221\012.\000\000\002\221\002\221\002\221\002\221\000\000\000\000\000\000\002\221\000\000\002\221\002\221\000\000\012N\002\221\002\221\012V\012\022\002\221\002\221\000\000\000\000\002\221\0126\002\221\000\000\000\000\000\000\000\000\002\221\002\221\012>\012F\0025\0025\000\000\0025\000\000\0025\000\000\000\000\0025\000\000\000\000\0025\000\000\0025\000\000\000\000\0025\000\000\0025\0025\0025\000\000\0025\0025\0025\000\000\000\000\000\000\000\000\000\000\0025\0025\0025\0025\0025\000\000\0025\000\000\000\000\000\000\000\000\000\000\000\000\0025\0025\0025\0025\0025\000\000\000\000\000\000\000\000\000\000\0025\000\000\0025\0025\000\000\000\000\000\000\000\000\000\000\0025\0025\0025\000\000\000\000\000\000\000\000\000\000\000\000\0025\0025\0025\0025\0025\0025\0025\0025\0025\000\000\000\000\0025\000\000\0025\0025\000\000\000\000\000\000\000\000\0025\000\000\000\000\0025\0025\0025\000\000\0025\0025\0025\0025\000\000\000\000\000\000\0025\000\000\0025\0025\000\000\0025\0025\0025\0025\0025\0025\0025\000\000\000\000\0025\0025\0162\000\000\000\000\000\000\000\000\0025\0025\0025\0025\002Q\002Q\000\000\002Q\000\000\002Q\000\000\000\000\002Q\000\000\000\000\002Q\000\000\002Q\000\000\000\000\011\134\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002Q\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\011\238\011\246\002Q\000\000\000\000\000\000\000\000\000\000\002Q\000\000\011\254\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\011\142\011\206\012\006\012\014\012\030\002Q\002Q\000\000\000\000\002Q\000\000\002Q\012&\000\000\000\000\000\000\000\000\002Q\000\000\000\000\002Q\002Q\012.\000\000\002Q\002Q\016J\002Q\000\000\000\000\000\000\002Q\000\000\002Q\002Q\000\000\012N\002Q\002Q\012V\012\022\002Q\002Q\000\000\000\000\002Q\0126\002Q\000\000\000\000\000\000\000\000\002Q\002Q\012>\012F\002M\002M\000\000\002M\000\000\002M\000\000\000\000\002M\000\000\000\000\002M\000\000\002M\000\000\000\000\011\134\000\000\002M\002M\002M\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002M\000\000\000\000\000\000\000\000\000\000\000\000\002M\002M\011\238\011\246\002M\000\000\000\000\000\000\000\000\000\000\002M\000\000\011\254\002M\000\000\000\000\000\000\000\000\000\000\002M\002M\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002M\002M\011\142\011\206\012\006\012\014\012\030\002M\002M\000\000\000\000\002M\000\000\002M\012&\000\000\000\000\000\000\000\000\002M\000\000\000\000\002M\002M\012.\000\000\002M\002M\002M\002M\000\000\000\000\000\000\002M\000\000\002M\002M\000\000\012N\002M\002M\012V\012\022\002M\002M\000\000\000\000\002M\0126\002M\000\000\000\000\000\000\000\000\002M\002M\012>\012F\002\217\002\217\000\000\002\217\000\000\002\217\000\000\000\000\002\217\000\000\000\000\002\217\000\000\002\217\000\000\000\000\011\134\000\000\002\217\002\217\002\217\000\000\002\217\002\217\002\217\000\000\000\000\000\000\000\000\000\000\011\190\011\214\011\222\011\198\011\230\000\000\002\217\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\011\238\011\246\002\217\000\000\000\000\000\000\000\000\000\000\002\217\000\000\011\254\002\217\000\000\000\000\000\000\000\000\000\000\002\217\002\217\000\246\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\011\142\011\206\012\006\012\014\012\030\002\217\002\217\000\000\000\000\002\217\000\000\002\217\012&\000\000\000\000\000\000\000\000\002\217\000\000\000\000\002\217\002\217\012.\000\000\002\217\002\217\002\217\002\217\000\000\000\000\000\000\002\217\000\000\002\217\002\217\000\000\012N\002\217\002\217\012V\012\022\002\217\002\217\000\000\000\000\002\217\0126\002\217\000\000\000\000\000\000\000\000\002\217\002\217\012>\012F\002A\002A\000\000\002A\000\000\002A\000\000\000\000\002A\000\000\000\000\002A\000\000\002A\000\000\000\000\002A\000\000\002A\002A\002A\000\000\002A\002A\002A\000\000\000\000\000\000\000\000\000\000\002A\002A\002A\002A\002A\000\000\002A\000\000\000\000\000\000\000\000\000\000\000\000\002A\002A\002A\002A\002A\000\000\000\000\000\000\000\000\000\000\002A\000\000\002A\002A\000\000\000\000\000\000\000\000\000\000\002A\002A\002A\000\000\000\000\000\000\000\000\000\000\000\000\002A\002A\002A\002A\002A\002A\002A\002A\002A\000\000\000\000\002A\000\000\002A\002A\000\000\000\000\000\000\000\000\002A\000\000\000\000\002A\002A\002A\000\000\002A\002A\002A\002A\000\000\000\000\000\000\002A\000\000\002A\002A\000\000\002A\002A\002A\002A\002A\002A\002A\000\000\000\000\002A\002A\0162\000\000\000\000\000\000\000\000\002A\002A\002A\002A\002E\002E\000\000\002E\000\000\002E\000\000\000\000\002E\000\000\000\000\002E\000\000\002E\000\000\000\000\002E\000\000\002E\002E\002E\000\000\002E\002E\002E\b\181\000\000\000\000\007&\b\181\002E\002E\002E\002E\002E\000\000\002E\000\000\b\197\000\000\000\000\b\197\000\000\002E\002E\002E\002E\002E\007*\000\000\000\000\000\000\000\000\002E\000\000\002E\002E\000\000\000\000\025\238\000\000\000\000\002E\002E\002E\000\000\000\000\000\000\000\000\000\000\b\181\002E\002E\002E\002E\002E\002E\002E\002E\002E\b\197\000\000\002E\000\000\002E\002E\000\000\000\000\000\000\000\000\002E\b\181\000\246\002E\002E\002E\b\197\002E\002E\002E\002E\000\000\007&\000\000\002E\020\182\002E\002E\000\000\002E\002E\002E\002E\002E\002E\002E\000\000\000\000\002E\002E\0162\000\000\007*\b\197\b\165\002E\002E\002E\002E\001\014\005\026\000\006\000\000\000\000\000\000\002\198\002\202\007.\002\246\002\138\000\000\006\210\007:\003\017\003\002\001\018\003\017\000\000\007N\002\158\000\000\b\197\007Z\000\000\001\218\000\000\000\000\000\000\003\238\001\026\t\230\t\234\001&\001*\000\000\000\000\000\246\003\n\007\165\000\n\003\162\000\000\019\174\000\000\n\014\n\018\000\000\003\222\003\234\003\246\003\250\n\022\b2\000\000\001B\003\017\002\190\007\165\000\000\003\242\t\142\007\165\000\000\000\000\t\146\t\150\t\162\t\182\000\000\006^\003\017\003\017\001F\001J\001N\001R\001V\000\000\000\000\n*\001Z\007.\000\000\000\000\001^\006\210\012\178\n6\nN\n\182\006j\006n\007N\000\000\001b\000\000\007Z\000\000\003\017\000\000\001f\000\000\000\246\000\000\000\000\000\000\000\000\018n\000\000\000\000\002\138\001\162\007\026\000\000\000\000\006r\t\170\000\000\001\166\000\000\016z\004\138\n\202\001\014\001\174\000\006\001\178\001\182\024\234\002\198\002\202\000\000\002\246\002\138\000\000\000\000\000\000\000\000\003\002\001\018\000\000\000\000\000\000\t\226\000\000\000\000\000\000\007.\001\218\018r\000\000\006\210\003\238\001\026\t\230\t\234\001&\001*\007N\000\000\000\000\003\n\007Z\000\000\003\162\018~\t\238\025\014\n\014\n\018\000\000\003\222\003\234\003\246\003\250\n\022\b2\000\000\001B\000\000\002\190\000\000\000\000\003\242\t\142\000\000\000\000\000\000\t\146\t\150\t\162\t\182\006n\006^\000\000\000\000\001F\001J\001N\001R\001V\000\000\025\026\n*\001Z\000\000\000\000\000\000\001^\007&\000\000\n6\nN\n\182\006j\006n\000\000\000\000\001b\000\000\024\174\000\000\000\000\000\000\001f\000\000\000\000\000\000\000\000\007*\000\000\000\000\000\000\000\000\000\000\001\162\007n\000\000\000\000\006r\t\170\014e\001\166\000\000\016z\004\138\n\202\004\233\001\174\000\006\001\178\001\182\000\254\002\198\002\202\002\206\002\246\002\138\000\000\000\000\000\000\014e\003\002\000\000\002&\003v\000\000\002*\000\000\004\233\000\000\003z\001\218\000\246\020\174\000\000\003\006\000\000\003~\003\130\000\000\0026\000\000\003\134\002>\003\n\014Q\000\000\003\162\000\000\020B\000\000\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b2\000\000\000\000\020\166\002\190\000\000\000\000\003\242\t\142\020\190\002B\000\000\t\146\t\150\t\162\t\182\000\000\006^\007.\000\000\000\000\000\000\006\210\r\002\000\000\020\198\000\000\n*\000\000\007N\000\000\000\000\t\221\007Z\000\000\n6\nN\n\182\006j\006n\020\206\021\n\000\000\000\000\004\233\004\233\000\000\000\000\000\000\000\000\000\000\007\154\012\142\000\000\t\221\000\000\002F\019\142\000\000\000\000\000\000\021F\025B\006r\t\170\017\242\000\185\000\000\t\194\004\138\n\202\000\185\004q\002\202\000\185\000\000\002\138\000\000\n\242\000\000\000\000\003\002\018n\000\000\000\185\002\138\000\185\000\000\000\185\000\000\000\185\001\218\000\000\011*\000\000\003\006\000\246\000\000\000\000\000\000\000\000\0112\000\185\000\000\003\n\000\000\000\000\003\162\000\000\000\185\000\000\000\000\000\000\000\185\000\000\003\234\000\246\001\198\000\000\000\185\000\000\000\000\000\185\002\190\018r\000\000\003\242\t\142\000\185\000\185\000\185\t\146\t\150\t\162\000\000\014\158\006^\000\185\000\185\000\000\018~\007.\t\221\000\000\000\185\006\210\012\146\004q\000\185\000\000\t\221\000\000\007N\000\000\000\000\000\000\007Z\006j\006n\000\185\000\185\007.\000\000\000\185\000\185\006\210\nn\006n\000\000\000\000\000\000\000\000\007N\000\185\000\246\000\000\007Z\000\000\000\000\000\000\000\185\000\185\006r\t\170\000\000\000\000\000\209\t\194\004\138\016\206\000\185\000\209\000\185\002\202\000\209\028\250\002\138\000\000\n\242\000\000\000\000\003\002\000\000\000\000\000\209\016\214\000\209\000\000\000\209\000\000\000\209\001\218\000\000\011*\000\000\003\006\000\000\000\000\000\000\007.\001\025\0112\000\209\006\210\003\n\001\025\000\000\003\162\000\000\000\209\007N\000\000\000\000\000\209\007Z\003\234\000\000\001\198\000\000\000\209\000\000\000\000\000\209\002\190\001\025\000\000\003\242\t\142\000\209\000\209\000\209\t\146\t\150\t\162\000\000\014\158\006^\000\209\000\209\000\000\000\000\000\000\000\000\000\000\000\209\000\000\000\000\001\025\000\209\003\022\000\000\000\000\000\000\000\000\000\000\000\000\001\025\006j\006n\000\209\000\209\000\000\001\025\000\209\000\209\001\210\001\214\000\000\000\000\000\000\000\000\001\025\001\025\000\209\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\209\006r\t\170\001\218\002\142\000\000\t\194\004\138\000\000\000\209\000\000\000\209\000\014\000\018\000\022\000\026\000\030\001\025\000\"\000&\000*\000.\0002\000\000\0006\000:\001\025\002\186\000>\029n\000\000\000\000\000B\002\182\000\000\002\190\0042\004>\000\000\000F\000\000\000\000\000\000\004J\000\000\000J\000\000\000N\000R\000V\000Z\000^\000b\000f\000j\000\000\000\000\000\000\000n\000r\004N\000v\000z\029\154\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\029\134\000\000\000\134\000\138\000\000\000\000\000\000\000\000\000\000\000\142\000\146\000\150\000\000\000\000\000\000\000\000\000\000\000\000\000\154\000\158\000\162\000\166\000\000\000\170\000\174\000\178\000\000\000\000\000\000\000\182\000\186\000\190\000\000\000\000\000\000\000\194\000\006\000\198\000\202\000\254\002\198\002\202\002\206\002\246\002\138\000\000\000\206\000\000\000\210\003\002\000\000\000\000\005\t\000\000\000\214\000\218\004\018\000\222\003z\001\218\000\000\000\000\000\000\003\006\000\000\003~\003\130\000\000\000\000\000\000\003\134\000\000\003\n\000\000\000\000\003\162\000\000\020B\000\000\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b2\000\000\000\000\020\166\002\190\000\000\000\000\003\242\t\142\020\190\000\000\000\000\t\146\t\150\t\162\t\182\003\153\006^\000\000\000\000\000\000\000\000\000\000\003\153\000\000\020\198\003\153\n*\000\000 2\000\000\000\000\000\000\000\000\003\153\n6\nN\n\182\006j\006n\020\206\021\n\003\153\000\000 S\017\158\000\000\000\000\000\000\000\000\000\000\000\000\003\153\000\000\000\000\000\000\000\000\016\142\003\153\000\000\003\153\000\000\025B\006r\t\170\017\006\003\153\000\000\t\194\004\138\n\202\000\006\000\000\003\153\000\254\002\198\002\202\002\206\002\246\002\138\000\000\000\000\018n\000\000\003\002\002\138\000\000 \130\000\000\000\000\000\000\017&\000\000\003z\001\218\000\000\020\202\000\000\003\006\000\000\003~\003\130\000\000\000\000\000\000\003\134\000\000\003\n\000\000\000\000\003\162\000\000\020B\000\000\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b2\000\000\018r\020\166\002\190\000\000\002\014\003\242\t\142\020\190\000\000\000\000\t\146\t\150\t\162\t\182\002\018\006^\018~\000\000\024\238\000\000\000\000\000\000\001\218\020\198\000\000\n*\000\000 2\000\000\000\000\000\000\000\000\000\000\n6\nN\n\182\006j\006n\020\206\021\n\003^\000\000\005\017\006n\018n\000\000\b^\002\138\001\230\001\014\000\000\000\000\000\000\024\250\002\190\003\026\002\202\n\166\000\000\002\138\025B\006r\t\170\000\000\003\002\001\018\t\194\004\138\n\202\002\158\000\000\024\174\000\000\000\000\001\218\000\000\000\000\000\000\001\022\001\026\001\030\003:\001&\001*\bb\000\000\018r\000\000\000\000\000\000\000\000\004\213\003>\000\000\0016\007\022\004\213\000\000\0036\012\242\001\198\001>\018~\000\000\001B\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\004\213\004\022\006R\000\000\006^\000\000\000\000\001F\001J\001N\001R\001V\000\000\004\213\006n\001Z\006b\000\000\004\213\001^\000\000\000\000\000\000\004\213\000\000\006j\006n\000\000\006\178\001b\000\000\000\000\004\213\000\000\000\000\001f\000\000\004\213\004\213\002\238\000\246\000\000\024\194\000\000\000\000\000\000\001\162\007\026\004\213\000\000\006r\007z\000\000\001\166\000\000\001\170\004\138\001\014\000\000\001\174\004\213\001\178\001\182\003\026\002\202\012r\000\000\002\138\000\000\004\213\000\000\007~\003\002\001\018\004\213\004\213\002\238\002\158\000\000\000\000\000\000\000\000\001\218\004\213\004\213\004\213\001\022\001\026\001\030\003:\001&\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\0016\007\022\000\000\000\000\0036\012\242\001\198\001>\000\000\004\213\001B\000\000\002\190\000\246\000\000\004\006\004\n\000\000\004\213\000\000\004\014\000\000\004\022\006R\000\000\006^\000\000\000\000\001F\001J\001N\001R\001V\000\000\000\000\000\000\001Z\006b\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\006j\006n\000\000\006\178\001b\000\000\000\000\000\000\000\000\000\000\001f\000\000\007.\000\000\000\000\000\000\006\210\000\000\000\000\000\000\000\000\001\162\007\026\007N\000\000\006r\000\000\007Z\001\166\000\000\001\170\004\138\000\000\0045\001\174\000\000\001\178\001\182\0045\003\026\002\202\0045\0012\002\138\000\000\007\230\000\000\000\000\003\002\003\017\000\000\0045\000\000\000\000\000\000\0045\003\017\0045\001\218\000\000\b\030\000\000\000\000\000\000\000\000\003\030\000\000\003\017\nZ\0045\000\000\000\000\000\000\000\000\000\000\000\n\0045\000\000\000\000\003*\000\000\000\000\rB\000\000\001\198\000\000\0045\000\000\000\000\0045\002\190\003\017\000\000\004\006\004\n\0045\0045\011\201\004\014\003\017\004\022\000\000\012~\006^\000\000\000\000\003\017\000\000\000\000\007\129\000\000\0045\0045\000\000\007\129\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006j\006n\0045\0045\rR\003\017\0045\0045\000\000\007\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\201\000\000\n\254\000\000\011\201\rv\0045\006r\000\000\000\000\000\000\011\201\001\014\004\138\007\129\011\201\000\000\0045\003\026\002\202\rF\003\138\002\138\007\129\000\000\000\000\028\178\003\002\001\018\007\129\007\129\000\246\002\158\000\000\000\000\000\000\000\000\001\218\007\129\007\129\000\000\001\022\001\026\001\030\003:\001&\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\0016\007\022\000\000\000\000\0036\012\242\001\198\001>\007\129\003\017\001B\000\000\002\190\000\246\000\000\004\006\004\n\007\129\000\000\003\017\004\014\000\000\004\022\006R\000\000\006^\000\000\003\017\001F\001J\001N\001R\001V\000\000\027j\000\n\001Z\006b\000\000\000\000\001^\000\000\000\000\000\000\000\000\003\017\006j\006n\000\000\006\178\001b\003\017\000\000\003\017\000\000\000\000\001f\000\000\007.\003\017\000\000\000\000\006\210\028\182\000\000\000\000\003\017\001\162\007\026\007N\000\000\006r\000\000\007Z\001\166\000\000\001\170\004\138\001\014\000\000\001\174\000\000\001\178\001\182\003\026\002\202\015\222\000\000\002\138\003\017\000\000\000\000\000\000\003\002\001\018\000\000\000\000\000\000\002\158\000\000\000\000\000\000\000\000\001\218\000\000\000\000\000\000\001\022\001\026\001\030\003:\001&\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\249\003>\000\000\0016\007\022\022f\000\000\0036\012\242\001\198\001>\000\000\000\000\001B\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\005\001\004\014\003z\004\022\006R\025n\006^\000\000\000\000\001F\001J\001N\001R\001V\000\000\000\000\000\000\001Z\006b\000\000\000\000\001^\000\000\000\000\003z\022\146\000\000\006j\006n\000\000\006\178\001b\000\000\000\000\020\166\000\000\000\000\001f\000\000\000\000\020\190\000\000\000\000\000\000\000\000\000\000\000\000\025\226\001\162\007\026\022\190\000\000\006r\000\000\000\000\001\166\020\166\001\170\004\138\001\014\000\000\001\174\020\190\001\178\001\182\003\026\002\202\006\246\000\000\002\138\000\000\026\134\026\150\000\000\003\002\001\018\004\249\000\000\000\000\002\158\000\000\000\000\000\000\000\000\001\218\023\"\000\000\000\000\001\022\001\026\001\030\003:\001&\001*\000\000\000\000\000\000\000\000\005\001\001\214\000\000\000\000\003>\000\000\0016\007\022\000\000\027\138\0036\012\134\001\198\001>\000\000\000\000\001B\000\000\002\190\001\218\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\006R\000\000\006^\022N\000\000\001F\001J\001N\001R\001V\000\000\000\000\000\000\001Z\006b\000\000\004R\001^\022\198\000\000\000\000\000\000\002\190\006j\006n\000\000\006\178\001b\000\000\000\000\022\222\000\000\000\000\001f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\162\007\026\000\000\000\000\006r\000\000\000\000\001\166\000\000\001\170\004\138\000\000\t\201\001\174\000\006\001\178\001\182\000\254\002\198\002\202\002\026\002\246\002\138\000\000\000\000\000\000\000\000\003\002\000\000\000\000\021J\000\000\t\201\000\000\t\201\t\201\003z\001\218\000\000\000\000\000\000\003\006\000\000\003~\003\130\000\000\000\000\000\000\021N\000\000\003\n\000\000\000\000\003\162\000\000\021v\000\000\003\214\003\218\000\000\003\222\003\234\003\246\003\250\004\002\b2\000\000\000\000\020\166\002\190\000\000\000\000\003\242\t\142\020\190\000\000\000\000\t\146\t\150\t\162\t\182\000\000\006^\000\000\000\000\000\000\000\000\000\000\005\189\014\165\020\198\000\000\n*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n6\nN\n\182\006j\006n\020\206\022\014\005\189\000\000\004\221\000\000\005\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\201\000\000\n\002\000\000\000\000\022\030\006r\t\170\t\201\002\014\000\000\t\194\004\138\n\202\011\229\000\000\000\000\011\229\000\000\002\018\011\229\011\229\000\000\000\000\011\229\000\000\011\229\001\218\000\000\011\229\000\000\000\000\000\000\011\229\011\229\000\000\011\229\011\229\000\000\011\229\000\000\011\229\000\000\000\000\000\000\003^\011\229\014\165\014\165\011\229\000\000\b^\000\000\001\230\000\000\000\000\000\000\000\000\011\229\002\190\011\229\005\189\000\000\011\229\000\000\011\229\000\000\014\165\000\000\014\165\000\000\011\229\000\000\000\000\011\229\011\229\000\000\005\189\011\229\011\229\005\189\011\229\000\000\011\229\011\229\000\000\003\017\000\000\000\000\bb\000\000\003\017\000\000\011\229\000\000\003\017\011\229\000\000\003\017\000\000\000\000\000\000\000\000\003\017\000\000\011\229\011\229\000\000\000\000\011\229\003\017\011\229\000\000\003\017\000\000\000\000\006\142\003\017\000\000\000\n\000\000\000\n\000\000\011\229\011\229\011\229\003\017\011\229\011\229\003\017\011\229\000\000\011\229\003\017\011\229\003\017\011\229\003\017\011\229\003\017\003\017\000\000\003\017\003\017\003\017\003\017\003\017\000\000\003\017\003\017\003\017\000\000\003\017\003\017\003\017\003\017\000\000\003\017\003\017\000\000\003\017\000\000\003\017\000\n\003\017\003\017\000\n\003\017\003\017\b6\000\000\003\017\000\n\000\000\003\017\000\n\018&\000\000\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\000\000\003\017\003\017\000\000\003\017\003\017\000\000\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\000\000\003\017\003\017\000\000\003\017\003\017\000\000\003\017\000\000\003\017\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\017\000\000\018b\000\000\000\000\003\017\003\017\000\000\003\017\003\017\000\000\003\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\003\017\003\017\b:\000a\000\000\003\017\003\017\003\017\000a\003\017\000a\000a\003\017\003\017\003\017\003\017\000\000\000\000\000\000\000a\000\000\000a\000a\000a\000\000\000a\000a\000a\000\000\tI\000\000\000\000\000\254\000\000\000\000\002\206\000\000\000\000\000\000\000a\000\000\000\000\000\000\000\000\000\000\005\t\000a\000a\000\000\000\000\000a\003z\000\000\000\000\000a\000\000\000a\000\000\000\000\000a\000\000\000\000\000\000\003\134\000\000\000a\000a\000a\000\000\000\000\020B\000\000\000\000\000\000\000a\000a\000\000\000\000\000\000\000\000\028\n\000a\000a\020\166\000\000\000a\000\000\000\000\000a\020\190\000\000\000\000\000\000\000\000\000\000\000\000\000a\000a\000a\000\000\000a\000a\000\000\000\000\000\000\020\198\tI\000\000\000\000\000\000\000a\000\000\000a\000\000\000a\000\000\000\000\005\141\000a\000\000\020\206\021\n\005\141\000a\005\141\005\141\005\141\000a\000\000\000a\005\141\000\000\005\141\005\141\000\000\005\141\000\000\005\141\000\000\005\141\000\000\005\141\025B\005\141\005\141\005\141\000\000\005\141\005\141\005\141\000\000\000\000\000\000\005\141\000\000\000\000\000\000\000\000\000\000\000\000\005\141\005\141\000\000\000\000\000\000\000\000\000\000\000\000\005\141\005\141\000\000\000\000\005\141\005\141\000\000\000\000\005\141\000\000\005\141\005\141\005\141\005\141\000\000\000\000\019\198\000\000\000\000\005\141\005\141\005\141\000\000\002\014\000\000\000\000\000\000\005\141\005\141\005\141\000\000\005\141\000\000\002\018\000\000\005\141\000\000\000\000\000\000\005\141\000\000\001\218\005\141\005\141\005\141\000\000\005\141\005\141\000\000\000\000\005\141\005\141\005\141\000\000\005\141\005\141\000\000\000\000\000\000\003^\000\000\000\000\000\000\023\170\005\141\b^\005\141\001\230\005\141\000\000\000\000\002\174\005\141\002\190\000\000\005\141\000\000\005\141\000\000\000\000\0071\005\141\000A\005\141\005\141\000\000\000A\000A\000\000\000A\000A\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\000\000\0071\000\000\000\000\bb\000\000\000A\000\000\000\000\000\000\000A\000\000\000A\000A\000\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\000A\000\000\000\000\000\000\000A\000A\000\000\000A\000A\000A\000A\000A\000A\000\000\000\000\000\000\000A\000\000\000\000\000A\000A\000\000\000\000\000\000\000A\000A\000A\000A\000\000\000A\000\000\000\000\000\000\000\000\000\000\007\153\000\000\000\000\000\000\000A\007\153\000\000\000\000\007\153\000\000\000\000\000\000\000A\000A\000A\000A\000A\000\000\007\153\007-\000\000\000=\007\153\000\000\007\153\000=\000=\000\000\000=\000=\000\000\000\000\000\000\000\000\000=\000\000\007\153\000\000\000\000\007-\000A\000A\000\000\007\153\000=\000A\000A\000A\000=\000\000\000=\000=\000\000\007\153\000\000\000\000\007\153\000=\000\000\000\000\000=\000\000\007\153\007\153\000=\000=\000\000\000=\000=\000=\000=\000=\000=\000\000\000\000\000\000\000=\000\000\007\153\000=\000=\000\000\007\153\000\000\000=\000=\000=\000=\000\000\000=\000\000\000\000\000\000\007\153\007\153\020V\000\000\007\153\007\153\000=\014\t\000\000\000\000\014\t\000\000\000\000\000\000\000=\000=\000=\000=\000=\021\138\014\t\007=\007\153\r\237\000\000\000\000\014\t\r\237\r\237\000\000\r\237\r\237\000\000\000\000\000\000\000\000\r\237\000\000\014\t\000\000\000\000\007=\000=\000=\000\000\014\t\r\237\000=\000=\000=\r\237\000\000\r\237\r\237\000\000\014\t\000\000\000\000\014\t\r\237\000\000\000\000\r\237\000\000\014\t\000\000\r\237\r\237\000\000\r\237\r\237\r\237\r\237\r\237\r\237\000\000\000\000\000\000\r\237\000\000\014\t\r\237\r\237\000\000\014\t\000\000\r\237\r\237\r\237\r\237\000\000\r\237\000\000\000\000\000\000\014\t\014\t\000\000\000\000\014\t\000\000\r\237\000\000\000\000\000\000 *\000\000\000\000\000\000\r\237\r\237\r\237\r\237\r\237\000\000\000\000\0079\014\t\r\233\000\000\000\000\000\000\r\233\r\233\000\000\r\233\r\233\000\000\000\000\000\000\000\000\r\233\000\000\000\000\000\000\000\000\0079\r\237\r\237\000\000\000\000\r\233\r\237\r\237\r\237\r\233\000\000\r\233\r\233\000\000\000\000\000\000\000\000\000\000\r\233\000\000\000\000\r\233\000\000\000\000\000\000\r\233\r\233\000\000\r\233\r\233\r\233\r\233\r\233\r\233\001\210\002\134\000\000\r\233\002\138\000\000\r\233\r\233\000\000\000\000\000\000\r\233\r\233\r\233\r\233\000\000\r\233\000\000\000\000\001\218\002\142\001\238\002\150\000\000\000\000\000\000\r\233\000\000\000\000\001\250\000\000\000\000\000\000\000\000\r\233\r\233\r\233\r\233\r\233\000\000\000\000\000\000\000\000\002\154\002\162\002\170\000\000\000\000\000\000\002\182\000\000\002\190\0042\004>\000\000\000\000\000\000\000\000\000\000\024\154\000\000\024\158\r\233\r\233\000\000\t\181\t\181\r\233\r\233\r\233\t\181\000\000\001\214\t\181\000\000\000\000\004N\000\000\000\000\000\000\000\000\t\181\000\000\t\181\t\181\t\181\006n\t\181\t\181\t\181\000\000\000\000\000\000\000\000\004\213\000\000\024\170\004\213\000\000\000\000\000\000\t\181\000\000\000\000\000\000\000\000\000\000\004\213\t\181\t\181\000\000\000\000\t\181\004\213\024\174\000\000\004R\000\000\t\181\000\000\000\000\t\181\000\000\000\000\000\000\004\213\000\000\t\181\t\181\t\181\000\000\000\000\004\213\000\000\000\000\000\000\t\181\t\181\000\000\000\000\000\000\000\000\004\213\t\181\000\000\004\213\000\000\004\198\000\000\000\000\t\181\004\213\002\238\000\000\000\000\000\000\000\000\000\000\t\181\t\181\t\181\000\000\t\181\t\181\000\000\000\000\000\000\004\213\000\000\000\000\000\000\004\213\t\181\000\000\t\181\000\000\t\181\000\000\000\000\000\000\t\181\000\000\004\213\004\213\000\000\t\181\004\213\000\000\000\000\t\181\000\000\t\181\t\181\014%\014%\000\000\000\000\000\000\014%\000\000\001\214\014%\000\000\000\000\004\213\000\000\000\000\000\000\000\000\004\214\000\000\014%\014%\014%\000\000\014%\014%\014%\000\000\000\000\000\000\000\000\000\254\000\000\000\000\002\206\000\000\000\000\000\000\014%\000\000\000\000\000\000\000\000\000\000 \130\014%\014%\000\000\000\000\014%\003z\000\000\000\000\004R\000\000\014%\000\000\000\000\014%\000\000\000\000\000\000\003\134\000\000\014%\014%\014%\000\000\000\000\020B\000\000\000\000\000\000\014%\014%\000\000\000\000\000\000\000\000\028\n\014%\000\000\020\166\000\000\004\198\000\000\000\000\014%\020\190\000\000\000\000\000\000\000\000\000\000\000\000\014%\014%\014%\000\000\014%\014%\000\000\000\000\000\000\020\198\000\000\000\000\000\000 2\014%\000\000\014%\000\000\014%\000\000\000\000\000\000\014%\000\000\020\206\021\n\000\000\014%\005\017\000\000\000\000\014%\000\000\014%\014%\t\185\t\185\000\000\000\000\000\000\t\185\000\000\001\214\t\185\000\000\000\000\025B\000\000\000\000\000\000\000\000\t\185\000\000\t\185\t\185\t\185\000\000\t\185\t\185\t\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014e\014Q\t\185\000\000\000\000\000\000\000\000\000\000\000\000\t\185\t\185\000\000\000\000\t\185\000\000\000\000\000\000\004R\000\000\t\185\014e\000\000\t\185\002&\000\000\020\002\002*\000\000\t\185\t\185\t\185\000\000\002\014\0022\000\000\000\000\000\000\t\185\t\185\000\000\0026\000\000\002\018\002>\t\185\014Q\000\000\000\000\004\198\000\000\001\218\t\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\185\t\185\t\185\000\000\t\185\t\185\000\000\000\000\000\000\003^\002B\000\000\000\000\000\000\t\185\b^\t\185\001\230\t\185\000\000\000\000\000\000\t\185\002\190\002\202\000\000\000\000\t\185\000\000\011\241\000\000\t\185\011\241\t\185\t\185\003\026\002\202\000\000\000\000\002\138\000\000\000\000\001\218\000\000\003\002\000\000\000\000\000\000\011\241\011\241\000\000\011\241\011\241\bb\001\218\025b\002F\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000\026\162\000\000\003\174\000\000\026\166\000\000\000\000\011\241\002\190\003*\000\000\000\000\0036\nf\001\198\000\000\026\214\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\011\241\004\014\000\000\004\022\006R\000\000\006^\000\000\000\000\000\000\000\000\000\000\000\000\026\230\000\000\011\241\000\000\000\000\006b\011\237\000\000\000\000\011\237\000\000\000\000\003\026\002\202\006j\006n\002\138\006\178\011\241\000\000\011\241\003\002\000\000\000\000\000\000\011\237\011\237\000\000\011\237\011\237\000\000\001\218\011\241\011\241\000\000\000\000\011\241\011\241\003\030\006r\000\000\011\241\000\000\011\241\000\000\004\138\000\000\011\241\000\000\000\000\011\237\000\000\003*\000\000\000\000\006\242\000\000\001\198\000\000\000\000\005\193\014\165\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\011\237\004\014\000\000\004\022\006R\000\000\006^\000\000\000\000\005\193\000\000\000\000\000\000\005\193\000\000\011\237\000\000\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006j\006n\000\000\006\178\011\237\000\000\011\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014)\014)\011\237\011\237\000\000\014)\011\237\011\237\014)\006r\000\000\011\237\000\000\011\237\000\000\004\138\004\182\011\237\014)\014)\014)\000\000\014)\014)\014)\000\000\000\000\001!\014\165\014\165\000\000\000\000\001!\000\000\000\000\000\000\014)\000\000\000\000\000\000\000\000\000\000\005\193\014)\014)\000\000\000\000\014)\014\165\000\000\014\165\001!\000\000\014)\000\000\000\000\014)\000\000\005\193\000\000\000\000\005\193\014)\014)\014)\000\000\000\000\000\000\000\000\000\000\000\000\014)\014)\000\000\001!\000\000\022V\000\000\014)\000\000\000\000\000\000\014)\001!\000\000\014)\000\000\000\000\000\000\001!\000\000\000\000\000\000\014)\014)\014)\000\000\014)\014)\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014)\000\000\014)\000\000\014)\000\000\003M\003M\014)\000\000\000\000\003M\000\000\014)\003M\000\000\000\000\014)\001!\014)\014)\014e\014Q\000\000\003M\003M\003M\001!\003M\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\018\000\000\000\000\014e\003M\000\000\002&\002\014\000\000\002*\000\000\003M\004\154\000\000\000\000\003M\002\218\002\018\000\000\000\000\000\000\003M\000\000\0026\003M\001\218\002>\000\000\014Q\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\003M\003M\000\000\000\000\003^\000\000\000\000\003M\000\000\000\000\b^\003M\001\230\002B\003M\000\000\000\000\000\000\002\190\000\000\000\000\000\000\003M\003M\003M\000\000\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003M\000\000\003M\000\000\003M\000\000\r\141\r\141\003M\000\000\000\000\r\141\bb\003M\r\141\000\000\000\000\003M\000\000\003M\003M\000\000\000\000\002F\r\141\r\141\r\141\000\000\r\141\r\141\r\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\141\000\000\000\000\000\000\000\000\000\000\000\000\r\141\004\166\000\000\000\000\r\141\000\000\000\000\000\000\000\000\000\000\r\141\000\000\000\000\r\141\000\000\000\000\000\000\000\000\000\000\r\141\r\141\r\141\000\000\000\000\000\000\000\000\000\000\000\000\r\141\r\141\000\000\000\000\000\000\000\000\000\000\r\141\000\000\000\000\000\000\r\141\000\000\000\000\r\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\141\r\141\r\141\000\000\r\141\r\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\141\000\000\r\141\000\000\r\141\000\000\r\157\r\157\r\141\000\000\000\000\r\157\000\000\r\141\r\157\000\000\000\000\r\141\000\000\r\141\r\141\000\000\000\000\000\000\r\157\r\157\r\157\000\000\r\157\r\157\r\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\157\000\000\000\000\000\000\000\000\000\000\000\000\r\157\004\166\000\000\000\000\r\157\000\000\000\000\000\000\000\000\000\000\r\157\000\000\000\000\r\157\000\000\000\000\000\000\000\000\000\000\r\157\r\157\r\157\000\000\000\000\000\000\000\000\000\000\000\000\r\157\r\157\000\000\000\000\000\000\000\000\000\000\r\157\000\000\000\000\000\000\r\157\000\000\000\000\r\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\157\r\157\r\157\000\000\r\157\r\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\157\000\000\r\157\000\000\r\157\000\000\r\153\r\153\r\157\000\000\000\000\r\153\000\000\r\157\r\153\000\000\000\000\r\157\000\000\r\157\r\157\000\000\000\000\000\000\r\153\r\153\r\153\000\000\r\153\r\153\r\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\153\000\000\000\000\000\000\000\000\000\000\000\000\r\153\004\154\000\000\000\000\r\153\000\000\000\000\000\000\000\000\000\000\r\153\000\000\000\000\r\153\000\000\000\000\000\000\000\000\000\000\r\153\r\153\r\153\000\000\000\000\000\000\000\000\000\000\000\000\r\153\r\153\000\000\000\000\000\000\000\000\000\000\r\153\000\000\000\000\000\000\r\153\000\000\000\000\r\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\153\r\153\r\153\000\000\r\153\r\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\153\000\000\r\153\000\000\r\153\000\000\rE\rE\r\153\000\000\000\000\rE\000\000\r\153\rE\000\000\000\000\r\153\000\000\r\153\r\153\000\000\000\000\000\000\rE\rE\rE\000\000\rE\rE\rE\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rE\000\000\000\000\000\000\000\000\000\000\000\000\rE\004\166\000\000\000\000\rE\000\000\000\000\000\000\000\000\000\000\rE\000\000\000\000\rE\000\000\000\000\000\000\000\000\000\000\rE\rE\rE\000\000\000\000\000\000\000\000\000\000\000\000\rE\rE\000\000\000\000\000\000\000\000\000\000\rE\000\000\000\000\000\000\rE\000\000\000\000\rE\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rE\rE\rE\000\000\rE\rE\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rE\000\000\rE\000\000\rE\000\000\rA\rA\rE\000\000\000\000\rA\000\000\rE\rA\000\000\000\000\rE\000\000\rE\rE\000\000\000\000\000\000\rA\rA\rA\000\000\rA\rA\rA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rA\000\000\000\000\000\000\000\000\000\000\000\000\rA\004\154\000\000\000\000\rA\000\000\000\000\000\000\000\000\000\000\rA\000\000\000\000\rA\000\000\000\000\000\000\000\000\000\000\rA\rA\rA\000\000\000\000\000\000\000\000\000\000\000\000\rA\rA\000\000\000\000\000\000\000\000\000\000\rA\000\000\000\000\000\000\rA\000\000\000\000\rA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rA\rA\rA\000\000\rA\rA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rA\000\000\rA\000\000\rA\000\000\rU\rU\rA\000\000\000\000\rU\000\000\rA\rU\000\000\000\000\rA\000\000\rA\rA\000\000\000\000\000\000\rU\rU\rU\000\000\rU\rU\rU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rU\000\000\000\000\000\000\000\000\000\000\000\000\rU\004\166\000\000\000\000\rU\000\000\000\000\000\000\000\000\000\000\rU\000\000\000\000\rU\000\000\000\000\000\000\000\000\000\000\rU\rU\rU\000\000\000\000\000\000\000\000\000\000\000\000\rU\rU\000\000\000\000\000\000\000\000\000\000\rU\000\000\000\000\000\000\rU\000\000\000\000\rU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rU\rU\rU\000\000\rU\rU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rU\000\000\rU\000\000\rU\000\000\rQ\rQ\rU\000\000\000\000\rQ\000\000\rU\rQ\000\000\000\000\rU\000\000\rU\rU\000\000\000\000\000\000\rQ\rQ\rQ\000\000\rQ\rQ\rQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rQ\000\000\000\000\000\000\000\000\000\000\000\000\rQ\004\154\000\000\000\000\rQ\000\000\000\000\000\000\000\000\000\000\rQ\000\000\000\000\rQ\000\000\000\000\000\000\000\000\000\000\rQ\rQ\rQ\000\000\000\000\000\000\000\000\000\000\000\000\rQ\rQ\000\000\000\000\000\000\000\000\000\000\rQ\000\000\000\000\000\000\rQ\000\000\000\000\rQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rQ\rQ\rQ\000\000\rQ\rQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rQ\000\000\rQ\000\000\rQ\000\000\r]\r]\rQ\000\000\000\000\r]\000\000\rQ\r]\000\000\000\000\rQ\000\000\rQ\rQ\000\000\000\000\000\000\r]\r]\r]\000\000\r]\r]\r]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r]\000\000\000\000\000\000\000\000\000\000\000\000\r]\004\166\000\000\000\000\r]\000\000\000\000\000\000\000\000\000\000\r]\000\000\000\000\r]\000\000\000\000\000\000\000\000\000\000\r]\r]\r]\000\000\000\000\000\000\000\000\000\000\000\000\r]\r]\000\000\000\000\000\000\000\000\000\000\r]\000\000\000\000\000\000\r]\000\000\000\000\r]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r]\r]\r]\000\000\r]\r]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r]\000\000\r]\000\000\r]\000\000\rY\rY\r]\000\000\000\000\rY\000\000\r]\rY\000\000\000\000\r]\000\000\r]\r]\000\000\000\000\000\000\rY\rY\rY\000\000\rY\rY\rY\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rY\000\000\000\000\000\000\000\000\000\000\000\000\rY\004\154\000\000\000\000\rY\000\000\000\000\000\000\000\000\000\000\rY\000\000\000\000\rY\000\000\000\000\000\000\000\000\000\000\rY\rY\rY\000\000\000\000\000\000\000\000\000\000\000\000\rY\rY\000\000\000\000\000\000\000\000\000\000\rY\000\000\000\000\000\000\rY\000\000\000\000\rY\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rY\rY\rY\000\000\rY\rY\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rY\000\000\rY\000\000\rY\000\000\rM\rM\rY\000\000\000\000\rM\000\000\rY\rM\000\000\000\000\rY\000\000\rY\rY\000\000\000\000\000\000\rM\rM\rM\000\000\rM\rM\rM\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rM\000\000\000\000\000\000\000\000\000\000\000\000\rM\004\166\000\000\000\000\rM\000\000\000\000\000\000\000\000\000\000\rM\000\000\000\000\rM\000\000\000\000\000\000\000\000\000\000\rM\rM\rM\000\000\000\000\000\000\000\000\000\000\000\000\rM\rM\000\000\000\000\000\000\000\000\000\000\rM\000\000\000\000\000\000\rM\000\000\000\000\rM\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rM\rM\rM\000\000\rM\rM\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rM\000\000\rM\000\000\rM\000\000\rI\rI\rM\000\000\000\000\rI\000\000\rM\rI\000\000\000\000\rM\000\000\rM\rM\000\000\000\000\000\000\rI\rI\rI\000\000\rI\rI\rI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rI\000\000\000\000\000\000\000\000\000\000\000\000\rI\004\154\000\000\000\000\rI\000\000\000\000\000\000\000\000\000\000\rI\000\000\000\000\rI\000\000\000\000\000\000\000\000\000\000\rI\rI\rI\000\000\000\000\000\000\000\000\000\000\000\000\rI\rI\000\000\000\000\000\000\000\000\000\000\rI\000\000\000\000\000\000\rI\000\000\000\000\rI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rI\rI\rI\000\000\rI\rI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rI\000\000\rI\000\000\rI\000\000\r\137\r\137\rI\000\000\000\000\r\137\000\000\rI\r\137\000\000\000\000\rI\000\000\rI\rI\000\000\000\000\000\000\r\137\r\137\r\137\000\000\r\137\r\137\r\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\137\000\000\000\000\000\000\000\000\000\000\000\000\r\137\004\154\000\000\000\000\r\137\000\000\000\000\000\000\000\000\000\000\r\137\000\000\000\000\r\137\000\000\000\000\000\000\000\000\000\000\r\137\r\137\r\137\000\000\000\000\000\000\000\000\000\000\000\000\r\137\r\137\000\000\000\000\000\000\000\000\000\000\r\137\000\000\000\000\000\000\r\137\000\000\000\000\r\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\137\r\137\r\137\000\000\r\137\r\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\137\000\000\r\137\000\000\r\137\000\000\re\re\r\137\000\000\000\000\re\000\000\r\137\re\000\000\000\000\r\137\000\000\r\137\r\137\000\000\000\000\000\000\re\re\re\000\000\re\re\re\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\re\000\000\000\000\000\000\000\000\000\000\000\000\re\004\166\000\000\000\000\re\000\000\000\000\000\000\000\000\000\000\re\000\000\000\000\re\000\000\000\000\000\000\000\000\000\000\re\re\re\000\000\000\000\000\000\000\000\000\000\000\000\re\re\000\000\000\000\000\000\000\000\000\000\re\000\000\000\000\000\000\re\000\000\000\000\re\000\000\000\000\000\000\000\000\000\000\000\000\000\000\re\re\re\000\000\re\re\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\re\000\000\re\000\000\re\000\000\ra\ra\re\000\000\000\000\ra\000\000\re\ra\000\000\000\000\re\000\000\re\re\000\000\000\000\000\000\ra\ra\ra\000\000\ra\ra\ra\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ra\000\000\000\000\000\000\000\000\000\000\000\000\ra\004\154\000\000\000\000\ra\000\000\000\000\000\000\000\000\000\000\ra\000\000\000\000\ra\000\000\000\000\000\000\000\000\000\000\ra\ra\ra\000\000\000\000\000\000\000\000\000\000\000\000\ra\ra\000\000\000\000\000\000\000\000\000\000\ra\000\000\000\000\000\000\ra\000\000\000\000\ra\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ra\ra\ra\000\000\ra\ra\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ra\000\000\ra\000\000\ra\000\000\ru\ru\ra\000\000\000\000\ru\000\000\ra\ru\000\000\000\000\ra\000\000\ra\ra\000\000\000\000\000\000\ru\ru\ru\000\000\ru\ru\ru\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ru\000\000\000\000\000\000\000\000\000\000\000\000\ru\004\166\000\000\000\000\ru\000\000\000\000\000\000\000\000\000\000\ru\000\000\000\000\ru\000\000\000\000\000\000\000\000\000\000\ru\ru\ru\000\000\000\000\000\000\000\000\000\000\000\000\ru\ru\000\000\000\000\000\000\000\000\000\000\ru\000\000\000\000\000\000\ru\000\000\000\000\ru\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ru\ru\ru\000\000\ru\ru\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ru\000\000\ru\000\000\ru\000\000\rq\rq\ru\000\000\000\000\rq\000\000\ru\rq\000\000\000\000\ru\000\000\ru\ru\000\000\000\000\000\000\rq\rq\rq\000\000\rq\rq\rq\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rq\000\000\000\000\000\000\000\000\000\000\000\000\rq\004\154\000\000\000\000\rq\000\000\000\000\000\000\000\000\000\000\rq\000\000\000\000\rq\000\000\000\000\000\000\000\000\000\000\rq\rq\rq\000\000\000\000\000\000\000\000\000\000\000\000\rq\rq\000\000\000\000\000\000\000\000\000\000\rq\000\000\000\000\000\000\rq\000\000\000\000\rq\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rq\rq\rq\000\000\rq\rq\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rq\000\000\rq\000\000\rq\000\000\r}\r}\rq\000\000\000\000\r}\000\000\rq\r}\000\000\000\000\rq\000\000\rq\rq\000\000\000\000\000\000\r}\r}\r}\000\000\r}\r}\r}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r}\000\000\000\000\000\000\000\000\000\000\000\000\r}\004\166\000\000\000\000\r}\000\000\000\000\000\000\000\000\000\000\r}\000\000\000\000\r}\000\000\000\000\000\000\000\000\000\000\r}\r}\r}\000\000\000\000\000\000\000\000\000\000\000\000\r}\r}\000\000\000\000\000\000\000\000\000\000\r}\000\000\000\000\000\000\r}\000\000\000\000\r}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r}\r}\r}\000\000\r}\r}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r}\000\000\r}\000\000\r}\000\000\ry\ry\r}\000\000\000\000\ry\000\000\r}\ry\000\000\000\000\r}\000\000\r}\r}\000\000\000\000\000\000\ry\ry\ry\000\000\ry\ry\ry\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ry\000\000\000\000\000\000\000\000\000\000\000\000\ry\004\154\000\000\000\000\ry\000\000\000\000\000\000\000\000\000\000\ry\000\000\000\000\ry\000\000\000\000\000\000\000\000\000\000\ry\ry\ry\000\000\000\000\000\000\000\000\000\000\000\000\ry\ry\000\000\000\000\000\000\000\000\000\000\ry\000\000\000\000\000\000\ry\000\000\000\000\ry\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ry\ry\ry\000\000\ry\ry\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ry\000\000\ry\000\000\ry\000\000\rm\rm\ry\000\000\000\000\rm\000\000\ry\rm\000\000\000\000\ry\000\000\ry\ry\000\000\000\000\000\000\rm\rm\rm\000\000\rm\rm\rm\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rm\000\000\000\000\000\000\000\000\000\000\000\000\rm\004\166\000\000\000\000\rm\000\000\000\000\000\000\000\000\000\000\rm\000\000\000\000\rm\000\000\000\000\000\000\000\000\000\000\rm\rm\rm\000\000\000\000\000\000\000\000\000\000\000\000\rm\rm\000\000\000\000\000\000\000\000\000\000\rm\000\000\000\000\000\000\rm\000\000\000\000\rm\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rm\rm\rm\000\000\rm\rm\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rm\000\000\rm\000\000\rm\000\000\ri\ri\rm\000\000\000\000\ri\000\000\rm\ri\000\000\000\000\rm\000\000\rm\rm\000\000\000\000\000\000\ri\ri\ri\000\000\ri\ri\ri\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ri\000\000\000\000\000\000\000\000\000\000\000\000\ri\004\154\000\000\000\000\ri\000\000\000\000\000\000\000\000\000\000\ri\000\000\000\000\ri\000\000\000\000\000\000\000\000\000\000\ri\ri\ri\000\000\000\000\000\000\000\000\000\000\000\000\ri\ri\000\000\000\000\000\000\000\000\000\000\ri\000\000\000\000\000\000\ri\000\000\000\000\ri\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ri\ri\ri\000\000\ri\ri\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ri\000\000\ri\000\000\ri\000\000\r\149\r\149\ri\000\000\000\000\r\149\000\000\ri\r\149\000\000\000\000\ri\000\000\ri\ri\000\000\000\000\000\000\r\149\r\149\r\149\000\000\r\149\r\149\r\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\149\000\000\000\000\000\000\000\000\000\000\000\000\r\149\004\166\000\000\000\000\r\149\000\000\000\000\000\000\000\000\000\000\r\149\000\000\000\000\r\149\000\000\000\000\000\000\000\000\000\000\r\149\r\149\r\149\000\000\000\000\000\000\000\000\000\000\000\000\r\149\r\149\000\000\000\000\000\000\000\000\000\000\r\149\000\000\000\000\000\000\r\149\000\000\000\000\r\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\149\r\149\r\149\000\000\r\149\r\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\149\000\000\r\149\000\000\r\149\000\000\r\145\r\145\r\149\000\000\000\000\r\145\000\000\r\149\r\145\000\000\000\000\r\149\000\000\r\149\r\149\000\000\000\000\000\000\r\145\r\145\r\145\000\000\r\145\r\145\r\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\145\000\000\000\000\000\000\000\000\000\000\000\000\r\145\004\154\000\000\000\000\r\145\000\000\000\000\000\000\000\000\000\000\r\145\000\000\000\000\r\145\000\000\000\000\000\000\000\000\000\000\r\145\r\145\r\145\000\000\000\000\000\000\000\000\000\000\000\000\r\145\r\145\000\000\000\000\000\000\000\000\000\000\r\145\000\000\000\000\000\000\r\145\000\000\000\000\r\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\145\r\145\r\145\000\000\r\145\r\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\145\000\000\r\145\000\000\r\145\000\000\r\133\r\133\r\145\000\000\000\000\r\133\000\000\r\145\r\133\000\000\000\000\r\145\000\000\r\145\r\145\000\000\000\000\000\000\r\133\r\133\r\133\000\000\r\133\r\133\r\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\133\000\000\000\000\000\000\000\000\000\000\000\000\r\133\004\166\000\000\000\000\r\133\000\000\000\000\000\000\000\000\000\000\r\133\000\000\000\000\r\133\000\000\000\000\000\000\000\000\000\000\r\133\r\133\r\133\000\000\000\000\000\000\000\000\000\000\000\000\r\133\r\133\000\000\000\000\000\000\000\000\000\000\r\133\000\000\000\000\000\000\r\133\000\000\000\000\r\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\133\r\133\r\133\000\000\r\133\r\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\133\000\000\r\133\000\000\r\133\000\000\r\129\r\129\r\133\000\000\000\000\r\129\000\000\r\133\r\129\000\000\000\000\r\133\000\000\r\133\r\133\000\000\000\000\000\000\r\129\r\129\r\129\000\000\r\129\r\129\r\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\129\000\000\000\000\000\000\000\000\000\000\000\000\r\129\004\154\000\000\000\000\r\129\000\000\000\000\000\000\000\000\000\000\r\129\000\000\000\000\r\129\000\000\000\000\000\000\000\000\000\000\r\129\r\129\r\129\000\000\000\000\000\000\000\000\000\000\000\000\r\129\r\129\000\000\000\000\000\000\000\000\000\000\r\129\000\000\000\000\000\000\r\129\000\000\000\000\r\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\129\r\129\r\129\000\000\r\129\r\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\129\000\000\r\129\000\000\r\129\000\000\002\017\002\017\r\129\000\000\000\000\002\017\000\000\r\129\002\017\000\000\000\000\r\129\000\000\r\129\r\129\000\000\000\000\000\000\002\017\002\017\002\017\000\000\002\017\002\017\002\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\017\000\000\000\000\000\000\000\000\000\000\000\000\002\017\002\017\000\000\000\000\002\017\000\000\000\000\000\000\000\000\000\000\002\017\000\000\000\000\002\017\000\000\000\000\000\000\000\000\000\000\002\017\002\017\002\017\000\000\000\000\000\000\000\000\000\000\000\000\002\017\002\017\000\000\000\000\000\000\000\000\000\000\002\017\000\000\000\000\000\000\002\017\000\000\000\000\002\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\017\002\017\002\017\000\000\002\017\002\017\000\000\000\000\000\000\000\000\000\000\003\026\002\202\000\000\002\017\002\138\002\017\007\230\002\017\000\000\003\002\000\000\002\017\000\000\000\000\000\000\000\000\002\017\000\000\000\000\001\218\005\026\b\030\002\017\000\000\000\000\000\000\003\030\000\000\000\000\nZ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\000\rB\004\233\001\198\000\000\000\000\000\000\000\254\000\000\002\190\002\206\000\000\004\006\004\n\000\000\000\000\011\201\004\014\000\000\004\022\003v\012~\006^\000\000\004\233\000\000\003z\000\000\000\000\000\000\000\000\004\129\000\000\000\000\006b\000\000\000\000\000\000\003\134\000\000\000\000\000\000\000\000\006j\006n\020B\000\000\rR\000\000\006\r\006\r\000\000\000\000\000\000\006\r\028\n\000\000\006\r\020\166\000\000\000\000\011\201\000\000\000\000\020\190\011\201\011\201\006\r\006r\006\r\000\000\006\r\011\201\006\r\004\138\000\000\011\201\004\129\000\000\000\000\020\198\000\000\000\000\000\000\000\000\006\r\000\000\000\000\000\000\000\000\000\000\000\000\006\r\006\r\000\000\020\206\021\n\000\000\006\r\004\233\004\233\000\000\006\r\t\197\000\000\006\r\016\162\000\000\000\000\000\000\000\000\006\r\006\r\006\r\000\000\000\000\000\000\025B\000\000\011\134\000\000\000\000\014r\t\197\000\000\t\197\t\197\006\r\006\r\000\000\000\000\006\r\000\000\011\190\011\214\011\222\011\198\011\230\000\000\000\000\000\000\000\000\006\r\006\r\006\r\000\000\006\r\006\r\011\238\011\246\000\000\000\000\t\n\000\000\000\000\000\000\000\000\000\000\011\254\000\000\006\r\000\000\000\000\006\r\006\r\000\000\000\000\000\246\000\000\000\000\000\000\000\000\000\000\000\000\001\014\006\r\011\142\011\206\012\006\012\014\012\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012&\000\000\001\018\000\000\000\000\016\170\002\158\000\000\000\000\000\000\012.\000\000\000\000\000\000\000\000\001\022\001\026\001\030\001\"\001&\001*\000\000\000\000\000\000\012N\t\197\000\000\012V\012\022\001.\000\000\0016\001:\t\197\0126\000\000\000\000\000\000\001>\000\000\000\000\001B\012>\012F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001F\001J\001N\001R\001V\000\000\000\000\000\000\001Z\000\000\000\000\000\000\001^\003\141\003\141\000\000\000\000\000\000\003\141\000\000\000\000\003\141\001b\000\000\000\000\000\000\000\000\000\000\001f\003\141\003\141\003\141\000\000\003\141\003\141\003\141\000\000\003\141\000\000\001\162\031F\000\000\000\000\000\000\000\000\000\000\001\166\003\141\001\170\003\141\000\000\003\141\001\174\003\141\001\178\001\182\003\141\003\141\000\000\000\000\000\000\000\000\005\149\000\000\000\000\003\141\003\141\000\000\000\000\003\141\000\000\000\000\003\141\003\141\000\000\003\141\003\141\003\141\005\153\000\000\000\000\000\000\003\141\000\000\000\000\003\141\000\000\000\000\000\000\000\000\000\000\003\141\003\141\003\141\000\000\003\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\141\003\141\003\141\000\000\003\141\003\141\000\000\006\001\006\001\000\000\005\149\000\000\006\001\000\000\000\000\006\001\003\141\003\141\003\141\003\141\003\141\003\141\003\141\000\000\000\000\006\001\005\153\006\001\000\000\006\001\000\000\006\001\000\000\003\141\003\141\003\141\000\000\000\000\003\141\000\000\000\000\000\000\000\000\006\001\000\000\000\000\000\000\000\000\000\000\003\141\006\001\006\001\000\000\000\000\000\000\000\000\tR\000\000\000\000\000\000\006\001\007\149\000\000\006\001\001\161\000\000\000\000\000\000\000\000\006\001\006\001\000\246\015\186\000\000\000\000\000\000\000\000\011\134\000\000\000\000\007\149\000\000\000\000\001\161\007\149\006\001\006\001\000\000\000\000\006\001\000\000\011\190\011\214\011\222\011\198\011\230\000\000\000\000\000\000\000\000\006\001\006\001\006\001\000\000\006\001\006\001\011\238\011\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\254\000\000\006\001\000\000\000\000\006\001\006\001\000\000\000\000\000\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\001\011\142\011\206\012\006\012\014\012\030\000\000\000\000\000\000\000\000\000\000\000\000\007\149\012&\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\000\000\012.\000\000\000\000\000\000\000\000\015\190\000\000\001\169\000\000\000\000\000\000\000\000\000\000\000\000\012N\001\161\000\000\012V\012\022\000\000\011\134\000\000\000\000\001\161\0126\000\000\001\169\000\000\000\000\000\000\000\000\001\161\012>\012F\011\190\011\214\011\222\011\198\011\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003]\011\238\011\246\000\000\000\000\003]\000\000\000\000\003]\000\000\000\000\011\254\000\000\000\000\000\000\000\000\000\000\000\000\003]\000\000\000\246\000\000\003]\000\000\003]\000\000\000\000\000\000\000\000\011\142\011\206\012\006\012\014\012\030\000\000\000\000\003]\018\134\000\000\000\000\000\000\012&\000\000\003]\000\000\000\000\001\169\000\000\000\000\001\233\000\000\012.\000\000\000\000\001\233\000\000\003]\000\000\001\165\000\000\000\000\000\000\003]\003]\003]\012N\001\169\000\000\012V\012\022\000\000\011\134\000\000\001\233\001\169\0126\000\000\001\165\003]\000\000\000\000\000\000\001\169\012>\012F\011\190\011\214\011\222\011\198\011\230\000\000\000\000\000\000\003]\003]\000\000\001\233\003]\003]\000\000\011\238\011\246\000\000\000\000\000\000\001\233\000\000\000\000\000\000\000\000\011\254\001\233\001\233\000\246\019\014\003]\000\000\000\000\000\000\000\246\001\233\001\233\000\000\000\000\000\000\000\000\000\000\000\000\011\142\011\206\012\006\012\014\012\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012&\000\000\000\000\000\000\000\000\001\165\001\014\001\233\000\000\000\000\012.\000\000\000\000\000\000\000\000\000\000\001\233\000\000\000\000\000\000\000\000\000\000\001\018\000\000\012N\001\165\000\000\012V\012\022\000\000\000\000\000\000\000\000\001\165\0126\001\022\001\026\001\030\001\"\001&\001*\001\165\012>\012F\000\000\000\000\000\000\000\000\000\000\001.\000\000\0016\001:\000\000\000\000\000\000\000\000\000\000\001>\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001F\001J\001N\001R\001V\000\000\000\000\000\000\001Z\000\000\000\000\000\000\001^\t!\t!\000\000\000\000\000\000\t!\000\000\000\000\t!\001b\000\000\000\000\000\000\000\000\000\000\001f\000\000\000\000\t!\000\000\t!\000\000\t!\000\000\t!\000\000\001\162\031b\000\000\000\000\000\000\000\000\000\000\001\166\000\000\001\170\t!\000\000\000\000\001\174\000\000\001\178\001\182\t!\t!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t!\000\000\000\000\t!\000\000\000\000\000\000\000\000\000\000\t!\t!\t!\014\241\014\241\000\000\000\000\000\000\014\241\000\000\000\000\014\241\000\000\000\000\000\000\000\000\t!\000\000\000\000\000\000\t!\014\241\000\000\014\241\000\000\014\241\000\000\014\241\000\000\000\000\000\000\t!\t!\t!\000\000\t!\t!\000\000\000\000\014\241\000\000\000\000\000\000\000\000\000\000\t!\014\241\014\241\000\000\t!\000\000\000\000\004Z\t!\000\000\000\000\014\241\000\000\000\000\014\241\000\000\000\000\005\026\000\000\t!\014\241\014\241\014\241\014\245\014\245\000\000\000\000\000\000\014\245\000\000\000\000\014\245\000\000\000\000\000\000\000\000\014\241\000\000\000\000\000\000\014\241\014\245\000\000\014\245\000\000\014\245\000\000\014\245\000\000\000\000\000\000\014\241\014\241\014\241\000\000\014\241\014\241\000\000\000\000\014\245\000\000\004j\000\000\000\000\000\000\000\000\014\245\014\245\000\000\014\241\000\000\000\000\004Z\014\241\000\000\000\000\014\245\019\246\000\000\014\245\001\153\000\000\000\000\000\000\014\241\014\245\014\245\014\245\000\000\000\000\000\000\000\000\000\000\011\134\000\000\000\000\000\000\019\250\000\000\001\153\000\000\014\245\000\000\000\000\000\000\014\245\000\000\011\190\011\214\011\222\011\198\011\230\000\000\000\000\000\000\000\000\014\245\014\245\014\245\000\000\014\245\014\245\011\238\011\246\000\000\000\000\004j\000\000\000\000\000\000\000\000\000\000\011\254\000\000\014\245\000\000\000\000\000\000\014\245\000\000\000\000\000\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\245\011\142\011\206\012\006\012\014\012\030\000\000\000\000\000\000\001\245\000\000\000\000\000\000\012&\001\245\000\000\001\214\001\245\001\153\000\000\000\000\000\000\000\000\012.\000\000\t\149\000\000\001\245\000\000\000\000\000\000\001\245\000\000\001\245\000\000\000\000\000\000\012N\001\153\019\254\012V\012\022\020\014\000\000\000\000\001\245\001\153\0126\000\000\000\000\000\000\000\000\001\245\001\245\000\000\012>\012F\000\000\000\000\000\000\004R\000\000\001\245\000\000\000\000\001\245\000\000\000\000\000\000\000\000\000\000\001\245\001\245\001\245\001\241\000\000\000\000\000\000\000\000\001\241\000\000\001\214\001\241\000\000\000\000\000\000\000\000\001\245\001\245\000\000\t\145\004\198\001\241\000\000\000\000\000\000\001\241\000\000\001\241\000\000\000\000\000\000\001\245\001\245\000\000\000\000\001\245\001\245\000\000\000\000\001\241\000\000\000\000\000\000\000\000\000\000\001\245\001\241\001\241\000\000\000\000\000\000\000\000\000\000\001\245\004R\000\000\001\241\000\000\001\245\001\241\000\000\000\000\000\000\000\000\001\245\001\241\001\241\001\241\002\001\000\000\000\000\000\000\000\000\002\001\000\000\001\214\002\001\000\000\000\000\000\000\000\000\001\241\001\241\000\000\t\161\004\198\002\001\000\000\000\000\000\000\002\001\000\000\002\001\000\000\000\000\000\000\001\241\001\241\000\000\000\000\001\241\001\241\000\000\000\000\002\001\000\000\000\000\000\000\000\000\000\000\001\241\002\001\002\001\000\000\000\000\000\000\000\000\000\000\001\241\004R\000\000\002\001\000\000\001\241\002\001\000\000\000\000\000\000\000\000\001\241\002\001\002\001\002\001\001\253\000\000\000\000\000\000\000\000\001\253\000\000\001\214\001\253\000\000\000\000\000\000\000\000\002\001\002\001\000\000\t\157\004\198\001\253\000\000\000\000\000\000\001\253\000\000\001\253\000\000\000\000\000\000\002\001\002\001\000\000\000\000\002\001\002\001\000\000\000\000\001\253\000\000\000\000\000\000\000\000\000\000\002\001\001\253\001\253\000\000\000\000\000\000\000\000\000\000\002\001\004R\000\000\001\253\000\000\002\001\001\253\000\000\000\000\000\000\000\000\002\001\001\253\001\253\001\253\001\249\000\000\000\000\000\000\000\000\001\249\000\000\001\214\001\249\000\000\000\000\000\000\000\000\001\253\001\253\000\000\t\153\004\198\001\249\000\000\000\000\000\000\001\249\000\000\001\249\000\000\000\000\000\000\001\253\001\253\000\000\000\000\001\253\001\253\000\000\000\000\001\249\000\000\000\000\000\000\000\000\000\000\001\253\001\249\001\249\000\000\000\000\000\000\000\000\000\000\001\253\004R\000\000\001\249\000\000\001\253\001\249\000\000\000\000\000\000\000\000\001\253\001\249\001\249\001\249\003q\000\000\000\000\000\000\000\000\003q\000\000\001\214\003q\000\000\000\000\000\000\000\000\001\249\001\249\000\000\t\141\004\198\003q\000\000\000\000\000\000\003q\000\000\003q\000\000\000\000\000\000\001\249\001\249\000\000\000\000\001\249\001\249\000\000\000\000\003q\000\000\000\000\000\000\000\000\000\000\001\249\003q\001\237\000\000\000\000\000\000\000\000\000\000\001\249\004R\000\000\003q\000\000\001\249\003q\000\000\000\000\000\000\000\000\001\249\003q\003q\003q\003m\000\000\000\000\000\000\000\000\003m\000\000\001\214\003m\000\000\000\000\000\000\000\000\003q\003q\000\000\t\141\004\198\003m\000\000\000\000\000\000\003m\000\000\003m\000\000\000\000\000\000\003q\003q\000\000\000\000\003q\003q\000\000\000\000\003m\000\000\000\000\000\000\000\000\000\000\003q\003m\001\237\000\000\000\000\000\000\000\000\000\000\003q\004R\000\000\003m\000\000\003q\003m\000\000\000\000\000\000\000\000\003q\003m\003m\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\000\000\000\000\004\198\000\254\001\210\001\214\002\026\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\000\000\021J\003m\003m\000\000\004\221\000\000\003z\001\218\002\142\001\238\000\000\003m\000\000\000\000\000\000\000\000\000\000\001\250\021N\003m\000\000\000\000\000\000\000\000\003m\021v\000\000\000\000\000\000\000\000\003m\001\254\002\162\002\170\000\000\000\000\000\000\002\182\020\166\002\190\0042\004>\000\000\000\193\020\190\000\000\000\000\004J\000\193\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\198\000\193\000\000\000\193\004N\000\193\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\206\022\014\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\193\022\030\000\000\000\193\000\000\000\000\004\134\000\000\004\138\000\193\000\193\000\246\001\005\000\000\000\000\000\000\000\000\001\005\000\193\000\193\001\005\000\000\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\193\001\005\000\000\001\005\000\000\001\005\000\000\001\005\000\000\000\000\000\000\000\193\000\193\000\000\000\000\000\193\000\193\000\000\000\000\001\005\000\000\000\000\000\000\000\000\000\000\000\193\001\005\000\000\000\000\000\000\001\005\000\000\000\193\000\193\000\000\000\000\001\005\000\000\000\000\001\005\000\000\000\000\000\193\000\000\000\193\001\005\001\005\000\246\000\201\000\000\000\000\000\000\000\000\000\201\001\005\001\005\000\201\000\000\000\000\000\000\000\000\001\005\000\000\000\000\000\000\001\005\000\201\000\000\000\201\000\000\000\201\000\000\000\201\000\000\000\000\000\000\001\005\001\005\000\000\000\000\001\005\001\005\000\000\000\000\000\201\000\000\000\000\000\000\000\000\000\000\001\005\000\201\000\000\000\000\000\000\000\201\000\000\001\005\001\005\000\000\000\000\000\201\000\000\000\000\000\201\000\000\000\000\001\005\000\000\001\005\000\201\000\201\000\246\000\197\000\000\000\000\000\000\000\000\000\197\000\201\000\201\000\197\000\000\000\000\000\000\000\000\000\201\000\000\000\000\000\000\000\201\000\197\000\000\000\197\000\000\000\197\000\000\000\197\000\000\000\000\000\000\000\201\000\201\000\000\000\000\000\201\000\201\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\000\000\201\000\197\000\000\000\000\000\000\000\197\000\000\000\201\000\201\000\000\000\000\000\197\000\000\000\000\000\197\000\000\000\000\000\201\000\000\000\201\000\197\000\197\000\246\000\000\000\000\000\000\000\000\000\000\000\000\000\197\000\197\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\197\000\000\001\205\000\000\000\000\000\000\000\000\001\205\000\000\000\000\001\205\000\197\000\197\000\000\000\000\000\197\000\197\000\000\000\000\000\000\001\205\000\000\000\000\000\000\001\205\000\197\001\205\000\000\000\000\000\000\000\000\000\000\000\197\000\197\000\000\000\000\000\000\000\000\001\205\001\205\000\000\000\000\000\197\000\000\000\197\001\205\000\000\000\000\000\000\000\000\000\000\005\149\000\000\000\000\000\000\001\205\000\000\000\000\001\205\000\000\000\000\000\000\000\000\000\000\001\205\001\205\001\205\014\237\014\237\000\000\000\000\000\000\014\237\000\000\000\000\014\237\000\000\000\000\000\000\000\000\001\205\000\000\000\000\000\000\001\205\014\237\000\000\014\237\000\000\014\237\000\000\014\237\000\000\000\000\000\000\001\205\001\205\000\000\000\000\001\205\001\205\000\000\000\000\014\237\000\000\005\149\000\000\000\000\000\000\001\205\014\237\014\237\000\000\000\000\000\000\000\000\001\205\001\205\000\000\000\000\014\237\000\000\001\205\014\237\000\000\000\000\000\000\000\000\001\205\014\237\014\237\014\237\014\233\014\233\000\000\000\000\000\000\014\233\000\000\000\000\014\233\000\000\000\000\000\000\000\000\014\237\000\000\000\000\000\000\014\237\014\233\000\000\014\233\000\000\014\233\000\000\014\233\000\000\000\000\000\000\014\237\014\237\014\237\000\000\014\237\014\237\000\000\000\000\014\233\000\000\000\000\000\000\000\000\000\000\000\000\014\233\014\233\000\000\014\237\000\000\000\000\000\000\014\237\000\000\000\000\014\233\000\000\000\000\014\233\000\000\000\000\005\026\000\000\014\237\014\233\014\233\014\233\t%\t%\000\000\000\000\000\000\t%\000\000\000\000\t%\000\000\000\000\000\000\000\000\014\233\000\000\000\000\000\000\014\233\t%\000\000\t%\000\000\t%\000\000\t%\000\000\000\000\000\000\014\233\014\233\014\233\000\000\014\233\014\233\000\000\000\000\t%\000\000\000\000\000\000\000\000\000\000\b\166\t%\t%\000\000\014\233\000\000\000\000\000\000\014\233\000\000\000\000\t%\000\000\000\000\t%\000\000\000\000\000\000\000\000\014\233\t%\t%\000\246\000\000\014\177\000\000\000\000\000\000\000\000\014\177\000\000\000\000\000\000\000\000\000\000\000\000\t%\000\000\003\026\002\202\t%\000\000\002\138\000\000\007\230\000\000\000\000\003\002\014\177\000\000\000\000\t%\t%\t%\000\000\t%\t%\001\218\000\000\b\030\000\000\000\000\000\000\000\000\003\030\t%\000\000\nZ\000\000\t%\000\000\014\177\000\000\t%\000\000\000\000\000\000\000\000\003*\000\000\014\177\012n\000\000\001\198\t%\000\000\014\177\014\177\000\246\002\190\000\000\000\000\004\006\004\n\000\000\014\177\014\177\004\014\000\000\004\022\000\000\012~\006^\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\007\230\006b\000\000\003\002\000\000\000\000\000\000\000\000\000\000\014\177\006j\006n\000\000\001\218\012\202\b\030\000\000\000\000\014\177\000\000\003\030\000\000\000\000\nZ\000\000\000\000\000\000\000\000\000\000\000\000\n\254\000\000\000\000\r\022\003*\006r\000\000\012n\000\000\001\198\000\000\004\138\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\000\000\012~\006^\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\007\230\006b\000\000\003\002\000\000\000\000\000\000\000\000\000\000\000\000\006j\006n\000\000\001\218\012\202\b\030\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nZ\000\000\000\000\000\000\000\000\000\000\000\000\n\254\000\000\000\000\011\n\003*\006r\011\014\rB\000\000\001\198\000\000\004\138\001\210\001\214\rz\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\000\000\012~\006^\000\000\001\237\001\218\001\222\001\238\000\000\001\237\000\000\001\214\001\237\000\000\006b\001\250\000\000\000\000\000\000\000\000\t\141\000\000\001\237\006j\006n\000\000\001\237\rR\001\237\001\254\002\162\002\170\000\000\000\000\000\000\002\182\000\000\002\190\0042\004>\001\237\000\000\000\000\n\254\000\000\004J\011\n\001\237\006r\000\000\000\000\0069\0069\000\000\004\138\004R\0069\001\237\000\000\0069\001\237\000\000\004N\000\000\000\000\000\000\001\237\001\237\001\237\0069\000\000\0069\000\000\0069\000\000\0069\000\000\000\000\000\000\000\000\000\000\000\000\001\237\001\237\000\000\000\000\004\198\0069\000\000\000\000\000\000\000\000\000\000\000\000\0069\0069\000\000\001\237\001\237\000\000\tR\001\237\001\237\000\000\0069\000\000\000\000\0069\000\000\000\000\000\000\001\237\000\000\0069\0069\000\246\000\000\000\000\000\000\001\237\000\000\000\000\000\000\000\000\001\237\t\225\000\000\000\000\000\000\0069\001\237\003\026\002\202\0069\000\000\002\138\000\000\000\000\000\000\000\000\003\002\000\000\000\000\000\000\0069\0069\0069\t\225\0069\0069\001\218\000\000\000\000\001\210\001\214\000\000\000\000\003\030\000\000\000\000\000\000\000\000\0069\000\000\000\000\000\000\0069\000\000\000\000\000\000\000\000\003*\001\218\002\142\0036\016\186\001\198\0069\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\018\138\000\000\000\000\004\014\000\000\004\022\006R\000\000\006^\002\186\000\000\004R\000\000\000\000\000\000\002\182\000\000\002\190\0042\004>\006b\000\000\000\000\0065\bz\004J\000\000\018\146\0065\006j\006n\0065\006\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0065\004N\0065\000\000\0065\018\226\0065\t\225\000\000\000\000\000\000\000\000\000\000\006r\000\000\t\225\000\000\nB\0065\004\138\000\000\000\000\000\000\000\000\000\000\0065\b\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0065\000\000\000\000\0065\000\000\000\000\000\000\000\000\000\000\0065\0065\000\246\014\249\014\249\000\000\000\000\000\000\014\249\000\000\000\000\014\249\000\000\000\000\000\000\000\000\0065\000\000\000\000\000\000\0065\014\249\000\000\014\249\000\000\014\249\000\000\014\249\000\000\000\000\000\000\0065\0065\0065\000\000\0065\0065\000\000\000\000\014\249\000\000\000\000\000\000\000\000\000\000\000\000\014\249\014\249\000\000\0065\000\000\000\000\000\000\0065\000\000\000\000\014\249\000\000\000\000\014\249\000\000\000\000\000\000\000\000\0065\014\249\014\249\000\246\014\253\014\253\000\000\000\000\000\000\014\253\000\000\000\000\014\253\000\000\000\000\000\000\000\000\014\249\000\000\000\000\000\000\014\249\014\253\000\000\014\253\000\000\014\253\000\000\014\253\000\000\000\000\000\000\014\249\014\249\014\249\000\000\014\249\014\249\000\000\000\000\014\253\000\000\000\000\000\000\000\000\000\000\000\000\014\253\b\246\000\000\014\249\000\000\000\000\000\000\014\249\000\000\000\000\014\253\000\000\000\000\014\253\000\000\000\000\000\000\000\000\014\249\014\253\014\253\000\246\006M\bz\000\000\000\000\000\000\006M\000\000\000\000\006M\000\000\000\000\000\000\000\000\014\253\000\000\000\000\000\000\014\253\006M\000\000\006M\000\000\006M\000\000\006M\000\000\000\000\000\000\014\253\014\253\014\253\000\000\014\253\014\253\000\000\000\000\006M\000\000\000\000\000\000\000\000\000\000\000\000\006M\b\246\000\000\014\253\000\000\000\000\000\000\014\253\000\000\000\000\006M\000\000\000\000\006M\000\000\000\000\000\000\000\000\014\253\006M\006M\000\246\006Q\006Q\000\000\000\000\000\000\006Q\000\000\000\000\006Q\000\000\000\000\000\000\000\000\006M\000\000\000\000\000\000\006M\006Q\000\000\006Q\000\000\006Q\000\000\006Q\000\000\000\000\000\000\006M\006M\006M\000\000\006M\006M\000\000\000\000\006Q\000\000\000\000\000\000\000\000\000\000\000\000\006Q\006Q\000\000\006M\000\000\000\000\000\000\006M\000\000\000\000\006Q\000\000\000\000\006Q\000\000\000\000\000\000\000\000\006M\006Q\006Q\006Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006Q\000\000\003\026\002\202\006Q\000\000\002\138\000\000\007\230\000\000\000\000\003\002\000\000\000\000\000\000\006Q\006Q\006Q\000\000\006Q\006Q\001\218\000\000\b\030\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nZ\000\000\006Q\000\000\000\000\000\000\006Q\000\000\000\000\n\178\000\000\003*\000\000\000\000\015\218\000\000\001\198\t\030\000\000\007m\007m\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\000\000\012~\006^\000\000\003i\007m\007m\007m\000\000\003i\000\000\001\214\003i\000\000\006b\007m\000\000\000\000\000\000\000\000\000\000\000\000\003i\006j\006n\000\000\003i\000\000\003i\007m\007m\007m\000\000\000\000\000\000\007m\000\000\007m\007m\007m\003i\000\000\000\000\000\000\000\000\007m\015\234\003i\006r\000\000\000\000\000\000\000\000\000\000\004\138\004R\000\000\003i\000\000\000\000\003i\000\000\007m\000\000\000\000\000\000\003i\003i\003i\003e\000\000\000\000\000\000\000\000\003e\000\000\001\214\003e\000\000\000\000\000\000\000\000\003i\003i\000\000\000\000\004\198\003e\000\000\000\000\000\000\003e\000\000\003e\000\000\000\000\000\000\003i\003i\000\000\000\000\003i\003i\000\000\000\000\003e\000\000\005\230\000\000\000\000\000\000\003i\003e\000\000\000\000\000\000\000\000\000\000\001Y\003i\004R\000\000\003e\001Y\003i\003e\001Y\000\000\000\000\000\000\003i\003e\003e\003e\000\000\000\000\001Y\000\000\001Y\000\000\001Y\000\000\001Y\000\000\000\000\000\000\000\000\003e\003e\000\000\000\000\004\198\000\000\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\001Y\003e\003e\000\000\001Y\003e\003e\000\000\000\000\000\000\001Y\000\000\000\000\001Y\000\000\003e\000\000\000\000\000\000\001Y\001Y\000\246\001U\003e\000\000\000\000\000\000\001U\003e\001Y\001U\000\000\000\000\000\000\003e\001Y\000\000\000\000\000\000\001Y\001U\000\000\001U\000\000\001U\000\000\001U\000\000\000\000\000\000\001Y\001Y\001Y\000\000\001Y\001Y\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\000\001Y\001U\000\000\000\000\000\000\001U\000\000\000\000\001Y\000\000\000\000\001U\000\000\000\000\001U\000\000\000\000\000\000\000\000\001Y\001U\001U\000\246\000\000\000\000\000\000\001\145\000\000\000\000\000\000\001U\001\145\000\000\014I\001\145\000\000\001U\000\000\000\000\000\000\001U\000\000\014I\000\000\001\145\000\000\001\145\000\000\001\145\000\000\001\145\001U\001U\001U\000\000\001U\001U\000\000\000\000\000\000\000\000\000\000\001\145\000\000\000\000\001U\000\000\000\000\000\000\001\145\014I\000\000\000\000\001U\000\000\000\000\000\000\014I\000\000\000\000\000\000\000\000\001\145\000\000\001U\000\000\000\000\000\000\001\145\001\145\001\145\001E\000\000\000\000\000\000\000\000\001E\000\000\000\165\001E\000\000\000\000\000\000\000\000\001\145\000\000\000\000\000\165\014I\001E\000\000\001E\000\000\001E\000\000\001E\000\000\000\000\000\000\001\145\001\145\001\145\000\000\001\145\001\145\000\000\000\000\001E\000\000\000\000\000\000\000\000\000\000\000\000\001E\000\165\000\000\000\000\002\t\000\000\000\000\001\145\000\165\002\t\000\000\018n\002\t\001E\002\138\000\000\000\000\000\000\001\145\001E\001E\001E\002\t\000\000\000\000\000\000\002\t\000\000\002\t\000\000\000\000\000\000\000\000\000\000\000\000\001E\000\000\000\000\000\000\000\165\002\t\000\000\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\000\001E\001E\001E\018r\001E\001E\000\000\002\t\000\000\000\000\002\t\000\000\000\000\000\000\000\000\000\000\002\t\002\t\000\000\018~\000\000\000\000\001E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\t\001E\003\026\002\202\002\t\000\000\002\138\000\000\007\230\000\000\000\000\003\002\000\000\000\000\006n\002\t\002\t\000\000\000\000\002\t\002\t\001\218\000\000\b\030\000\000\000\000\000\000\000\000\003\030\002\t\000\000\nZ\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\000\026\242\000\000\003*\000\000\000\000\025Z\000\000\001\198\002\t\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\000\000\012~\006^\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\007\230\006b\000\000\003\002\000\000\000\000\000\000\000\000\000\000\000\000\006j\006n\000\000\001\218\025^\b\030\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nZ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\190\003*\006r\000\000\rB\000\000\001\198\000\000\004\138\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\000\000\012~\006^\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\007\230\006b\000\000\003\002\000\000\000\000\000\000\000\000\000\000\000\000\006j\006n\000\000\001\218\rR\b\030\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nZ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\250\003*\006r\000\000\rB\000\000\001\198\000\000\004\138\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\000\000\012~\006^\000\000\000\000\000\000\000\000\004\189\004\189\000\000\000\000\004\189\000\000\000\000\006b\000\000\004\189\000\000\000\000\000\000\000\000\000\000\004\189\006j\006n\000\000\004\189\rR\000\000\000\000\000\000\000\000\000\000\004\189\026\170\000\000\000\000\026\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026Z\004\189\006r\000\000\004\189\004\189\004\189\000\000\004\138\000\000\000\000\000\000\004\189\000\000\000\000\004\189\004\189\000\000\000\000\000\246\004\189\000\000\004\189\004\189\006\170\004\189\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\000\000\004\189\000\000\003\002\000\000\000\000\000\000\000\000\006\174\000\000\004\189\004\189\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\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*\004\189\000\000\0036\012f\001\198\000\000\004\189\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\006R\000\000\006^\004\213\bz\000\000\000\000\000\000\004\213\000\000\000\000\004\213\000\000\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\004\213\000\000\006j\006n\004\213\006\178\004\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\213\000\000\000\000\007\210\000\000\000\000\007n\004\213\b\246\006r\000\000\004\213\000\000\tR\000\000\004\138\000\000\004\213\000\000\000\000\004\213\000\000\000\000\000\000\000\000\000\000\004\213\002\238\000\246\b\177\000\000\000\000\000\000\000\000\b\177\004\213\004\213\b\177\000\000\000\000\000\000\000\000\004\213\004\213\000\000\000\000\004\213\b\177\000\000\000\000\000\000\b\177\000\000\b\177\000\000\000\000\000\000\004\213\004\213\000\000\000\000\004\213\004\213\000\000\000\000\b\177\000\000\t\n\000\000\000\000\000\000\004\213\b\177\000\000\000\000\000\000\b\177\000\000\000\000\004\213\000\000\000\000\b\177\000\000\028\250\b\177\000\000\000\000\000\000\000\000\004\213\b\177\b\177\000\246\b\173\000\000\000\000\000\000\000\000\b\173\b\177\b\177\b\173\000\000\000\000\000\000\000\000\b\177\000\000\000\000\000\000\b\177\b\173\000\000\000\000\000\000\b\173\000\000\b\173\000\000\000\000\000\000\b\177\b\177\b\177\000\000\b\177\b\177\000\000\000\000\b\173\000\000\000\000\000\000\000\000\000\000\b\177\b\173\000\000\000\000\000\000\b\173\000\000\000\000\b\177\000\000\000\000\b\173\000\000\000\000\b\173\000\000\000\000\000\000\000\000\000\000\b\173\b\173\000\246\003]\000\000\000\000\000\000\000\000\003]\b\173\b\173\003]\000\000\000\000\000\000\000\000\b\173\000\000\000\000\000\000\b\173\003]\000\000\000\000\000\000\003]\000\000\003]\000\000\000\000\000\000\b\173\b\173\b\173\000\000\b\173\b\173\000\000\000\000\003]\018\134\000\000\000\000\000\000\000\000\b\173\003]\000\000\000\000\000\000\000\000\000\000\000\000\b\173\006\237\000\000\003]\000\000\000\000\003]\000\000\002\202\000\000\000\000\002\138\003]\003]\003]\000\000\003\002\000\000\000\000\000\000\000\000\006\237\000\000\000\000\000\000\000\000\001\218\000\000\003]\000\000\003\006\000\000\003]\000\000\000\000\000\000\000\000\000\000\000\000\003\n\000\000\000\000\003\162\003]\003]\029\002\000\000\003]\003]\000\000\003\234\000\000\001\198\000\000\000\000\000\000\000\000\003]\002\190\000\000\000\000\003\242\t\142\000\000\019\014\003]\t\146\t\150\t\162\000\000\003]\006^\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\007\230\000\000\000\000\003\002\000\000\006j\006n\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\b\030\000\000\000\000\000\000\000\000\003\030\000\000\000\000\nZ\000\000\000\000\000\000\000\000\000\000\000\000\006r\t\170\000\000\000\000\003*\t\194\004\138\n\162\000\000\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\007\021\004\014\000\000\004\022\000\000\012~\006^\002\202\000\000\000\000\002\138\000\000\000\000\000\000\000\000\003\002\000\000\000\000\006b\000\000\007\021\000\000\000\000\000\000\000\000\001\218\000\000\006j\006n\003\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\n\000\000\000\000\003\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\234\000\000\001\198\006r\000\000\000\000\000\000\000\000\002\190\004\138\000\000\003\242\t\142\000\000\000\000\000\000\t\146\t\150\t\162\000\000\028\218\006^\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\000\000\000\000\000\000\003\002\000\000\000\000\000\000\000\000\000\000\000\000\006j\006n\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\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*\006r\t\170\0036\000\000\001\198\t\194\004\138\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\006R\000\000\006^\003]\000\000\000\000\000\000\000\000\003]\000\000\000\000\003]\000\000\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\003]\000\000\006j\006n\003]\006\178\003]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003]\018\134\000\000\000\000\000\000\000\000\000\000\003]\000\000\006r\000\000\014A\000\000\nB\000\000\004\138\014A\003]\000\000\014A\003]\000\000\000\000\000\000\000\000\000\000\003]\003]\003]\014A\000\000\000\000\000\000\014A\000\000\014A\000\000\000\000\000\000\000\000\000\000\005\141\003]\000\000\000\000\000\000\003]\014A\000\000\000\000\000\000\000\000\000\000\000\000\014A\000\000\000\000\003]\003]\0292\000\000\003]\003]\000\000\014A\000\000\000\000\014A\000\000\000\000\000\000\000\000\000\000\014A\014A\000\000\000\000\000\000\019\014\003]\000\000\000\000\000\000\000\000\003]\006\214\000\000\000\000\000\000\014A\000\000\003\026\002\202\014A\000\000\002\138\000\000\000\000\000\000\000\000\003\002\000\000\000\000\000\000\014A\014A\002\130\004\018\014A\014A\001\218\000\000\000\000\007>\000\000\000\000\000\000\003\030\014A\001\210\001\214\025\254\000\000\030\142\000\000\000\000\014A\000\000\000\000\000\000\000\000\003*\000\000\000\000\0036\000\000\001\198\014A\001\218\001\222\001\238\000\000\002\190\000\000\000\000\004\006\004\n\000\000\001\250\000\000\004\014\000\000\004\022\006R\000\000\006^\002\002\000\000\000\000\0072\000\000\000\000\001\254\002\162\002\170\003\026\002\202\006b\002\182\002\138\002\190\0042\004>\000\000\003\002\000\000\006j\006n\004J\006\178\000\000\007\134\000\000\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\007q\007q\004N\000\000\000\000\000\000\000\000\000\000\006r\000\000\007\194\000\000\003*\000\000\004\138\0036\004B\001\198\000\000\007q\007q\007q\000\000\002\190\000\000\000\000\004\006\004\n\000\000\007q\000\000\004\014\000\000\004\022\006R\000\000\006^\000\000\000\000\000\000\007R\000\000\000\000\007q\007q\007q\003\026\002\202\006b\007q\002\138\007q\007q\007q\000\000\003\002\000\000\006j\006n\007q\006\178\000\000\000\000\000\000\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\007q\000\000\000\000\000\000\000\000\000\000\006r\000\000\000\000\000\000\003*\000\000\004\138\0036\000\000\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\006R\000\000\006^\000\000\000\000\000\000\0046\000\000\007q\000\000\006\241\000\000\000\000\000\000\006b\000\000\003\026\002\202\000\000\000\000\002\138\000\000\000\000\006j\006n\003\002\006\178\000\000\000\000\000\000\006\241\000\000\000\000\000\000\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000\000\000\006r\000\000\000\000\000\000\000\000\000\000\004\138\000\000\003*\000\000\000\000\0036\000\000\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\006R\r\218\006^\000\000\000\000\000\000\000\000\003\026\002\202\000\000\000\000\002\138\000\000\000\000\006b\000\000\003\002\000\000\000\000\000\000\000\000\r\230\000\000\006j\006n\000\000\001\218\003\026\002\202\000\000\000\000\002\138\000\000\003\030\000\000\000\000\003\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\218\003*\006r\000\000\0036\000\000\001\198\003\030\004\138\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\003*\004\022\006R\0036\006^\001\198\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\004\006\004\n\006b\000\000\000\000\004\014\000\000\004\022\006R\000\000\006^\006j\006n\000\000\006\178\000\000\000\000\000\000\r\242\000\000\000\000\000\000\006b\000\000\003\026\002\202\000\000\000\000\002\138\000\000\000\000\006j\006n\003\002\006\178\000\000\006r\000\000\000\000\000\000\000\000\000\000\004\138\001\218\000\000\000\000\000\000\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000\000\000\006r\000\000\000\000\000\000\000\000\000\000\004\138\000\000\003*\000\000\000\000\0036\000\000\001\198\000\000\001\210\001\214\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\000\000\004\022\006R\000\000\006^\005\229\001\218\002\142\000\000\000\000\005\229\000\000\000\000\005\229\000\000\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\005\229\000\000\006j\006n\005\229\006\178\005\229\002\178\029\202\004R\000\000\000\000\000\000\002\182\000\000\002\190\0042\004>\005\229\000\000\000\000\000\000\000\000\004J\000\000\005\229\000\000\006r\000\000\000\000\000\000\tR\000\000\004\138\000\000\005\229\000\000\000\000\005\229\000\000\004N\000\000\000\000\000\000\005\229\005\229\000\246\005\233\000\000\000\000\000\000\000\000\005\233\000\000\000\000\005\233\000\000\000\000\000\000\000\000\005\229\005\229\000\000\000\000\005\229\005\233\000\000\000\000\000\000\005\233\000\000\005\233\000\000\b\225\b\225\005\229\005\229\b\225\000\000\005\229\005\229\000\000\b\225\005\233\000\000\000\000\000\000\000\000\019V\000\000\005\233\000\000\b\225\000\000\000\000\000\000\tR\005\229\000\000\b\225\005\233\000\000\000\000\005\233\000\000\000\000\000\000\000\000\005\229\005\233\005\233\000\246\000\000\b\225\000\000\000\000\b\225\b\225\b\225\000\000\000\000\000\000\000\000\000\000\b\225\005\233\005\233\b\225\b\225\005\233\000\000\000\000\b\225\000\000\b\225\b\225\000\000\b\225\000\000\000\000\005\233\005\233\003]\000\000\005\233\005\233\000\000\003]\000\000\b\225\003]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\225\b\225\003]\000\000\005\233\000\000\003]\000\000\003]\000\000\000\000\000\000\000\000\000\000\000\000\005\233\000\000\000\000\000\000\000\000\003]\018\134\000\000\000\000\000\000\b\225\000\000\003]\000\000\000\000\000\000\b\225\000\000\006\165\000\000\000\000\000\000\003]\006\165\000\000\003]\006\165\000\000\000\000\000\000\000\000\003]\003]\003]\000\000\000\000\006\165\000\000\000\000\000\000\006\165\000\000\006\165\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\003]\000\000\000\000\006\165\000\000\000\000\000\000\000\000\000\000\000\000\006\165\003]\003]\021\026\000\000\003]\003]\000\000\000\000\000\000\006\165\000\000\000\000\006\165\000\000\000\000\000\000\000\000\000\000\006\165\006\165\000\246\019\014\003]\007\157\bz\000\000\000\000\000\000\007\157\000\000\000\000\007\157\000\000\000\000\006\165\000\000\000\000\000\000\006\165\000\000\000\000\007\157\000\000\000\000\000\000\007\157\000\000\007\157\000\000\006\165\006\165\024\230\000\000\006\165\006\165\000\000\000\000\000\000\000\000\007\157\000\000\000\000\000\000\006\165\000\000\000\000\007\157\b\246\000\000\000\000\001\217\006\165\000\000\000\000\000\000\001\217\007\157\000\000\001\217\007\157\000\000\000\000\006\165\000\000\000\000\007\157\007\157\000\246\001\217\000\000\000\000\000\000\001\217\000\000\001\217\000\000\000\000\000\000\000\000\000\000\000\000\007\157\000\000\000\000\000\000\007\157\001\217\000\000\000\000\000\000\000\000\000\000\000\000\001\217\000\000\000\000\007\157\007\157\000\000\002\r\007\157\007\157\000\000\001\217\002\r\000\000\001\217\002\r\000\000\000\000\000\000\000\000\001\217\001\217\001\217\000\000\000\000\002\r\007\157\000\000\000\000\002\r\000\000\002\r\000\000\000\000\000\000\000\000\001\217\000\000\000\000\000\000\001\217\000\000\000\000\002\r\000\000\000\000\000\000\000\000\000\000\000\000\002\r\001\217\001\217\000\000\000\000\001\217\001\217\000\000\000\000\000\000\002\r\021&\000\000\002\r\000\000\000\000\000\000\000\000\000\000\002\r\002\r\000\000\006\169\001\217\000\000\000\000\000\000\006\169\001\217\000\000\006\169\000\000\000\000\000\000\000\000\002\r\000\000\000\000\000\000\002\r\006\169\000\000\000\000\000\000\006\169\000\000\006\169\000\000\000\000\000\000\002\r\002\r\000\000\000\000\002\r\002\r\000\000\000\000\006\169\000\000\000\000\000\000\000\000\000\000\002\r\006\169\000\000\000\000\000\000\000\000\000\000\014A\002\r\000\000\000\000\006\169\014A\024\194\006\169\014A\000\000\000\000\000\000\002\r\006\169\006\169\000\246\000\000\000\000\014A\000\000\000\000\000\000\014A\000\000\014A\000\000\000\000\000\000\000\000\006\169\005\141\000\000\000\000\006\169\000\000\000\000\014A\000\000\000\000\000\000\000\000\000\000\000\000\014A\006\169\006\169\000\000\000\000\006\169\006\169\000\000\000\000\000\000\000\000\000\000\000\000\014A\000\000\006\169\000\000\000\000\000\000\014A\014A\000\000\000\000\006\169\000\000\000\000\000\000\r\249\000\000\002\202\r\249\000\000 :\000\000\006\169\014A\000\000 >\000\000\000\000\r\249\000\000\000\000\000\000\000\000\000\000\r\249\000\000\000\000\000\000\014A\014A\002\130\000\000\014A\014A\000\000\000\000\r\249\000\000\000\000\000\000\000\000\000\000\014A\r\249\000\000\000\000\000\000\030\198\000\000\001\n\014A\001\198\000\000\r\249\000\000\004\213\r\249\000\000\000\000\000\000\004\213\014A\r\249\004\213\000\000\000\000\000\000\000\000\000\000\000\000 B\000\000\000\000\004\213\000\000\000\000\000\000\004\213\r\249\004\213\000\000\000\000\r\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\213 F\r\249\r\249\000\000\000\000\r\249\004\213\000\000\000\000\000\000\001}\000\000\000\000\000\000\000\000\001}\004\213\000\000\001}\004\213\000\000\000\000\000\000\r\249\000\000\004\213\002\238\000\000\001}\000\000\001}\000\000\001}\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\004\213\000\000\000\000\000\000\004\213\001}\000\000\000\000\000\000\000\000\000\000\000\000\001}\000\000\000\000\004\213\004\213\000\000\000\249\004\213\004\213\000\000\000\000\000\249\000\000\001}\000\249\000\000\000\000\b\166\000\000\001}\001}\000\246\000\000\000\000\000\249\004\213\000\000\000\000\000\249\000\000\000\249\000\000\000\000\000\000\000\000\001}\004\213\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\249\001}\001}\001}\000\253\001}\001}\000\000\000\000\000\253\000\249\000\000\000\253\000\249\000\000\000\000\000\000\000\000\000\000\000\249\000\249\000\246\000\253\001}\000\000\000\000\000\253\000\000\000\253\000\000\000\000\000\000\000\000\000\000\001}\000\249\000\000\000\000\000\000\000\249\000\253\000\000\000\000\000\000\000\000\000\000\000\000\000\253\000\000\000\000\000\249\000\249\000\000\000\000\000\249\000\249\004\181\000\253\000\000\000\000\000\253\004\181\000\000\000\000\004\181\000\000\000\253\000\253\000\246\000\000\000\000\000\000\000\249\000\000\004\181\000\000\000\000\000\000\004\181\000\000\004\181\000\000\000\253\000\249\001\210\002\134\000\253\000\000\002\138\000\000\000\000\000\000\004\181\000\000\000\000\000\000\000\000\000\253\000\253\004\181\000\000\000\253\000\253\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\004\181\001\250\000\000\000\000\000\000\000\000\004\181\000\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\002\162\002\170\000\253\000\000\000\000\002\182\004\181\002\190\0042\004>\003\026\002\202\000\000\000\000\002\138\024\154\000\000\030r\000\000\003\002\000\000\004\181\004\181\000\000\000\000\004\181\004\181\000\000\000\000\001\218\000\000\000\000\004N\000\000\000\000\000\000\003\030\000\000\000\000\000\000\000\000\000\000\006n\004\181\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\030~\012\130\021\198\001\198\000\000\001\210\001\214\000\000\000\000\002\190\000\000\000\000\004\006\004\n\000\000\000\000\000\000\004\014\024\174\004\022\000\000\000\000\006^\006\157\001\218\002\142\000\000\000\000\006\157\000\000\000\000\006\157\000\000\000\000\006b\000\000\000\000\000\000\020\246\000\000\000\000\006\157\000\000\006j\006n\006\157\000\000\006\157\004\234\005b\004R\000\000\000\000\000\000\002\182\000\000\002\190\0042\004>\006\157\000\000\000\000\000\000\000\000\004J\000\000\006\157\000\000\006r\000\000\005\241\bz\000\000\000\000\004\138\005\241\006\157\000\000\005\241\006\157\000\000\004N\000\000\000\000\000\000\006\157\006\157\000\000\005\241\000\000\000\000\000\000\005\241\000\000\005\241\000\000\000\000\000\000\000\000\000\000\000\000\006\157\000\000\000\000\000\000\006\157\005\241\000\000\000\000\000\000\000\000\000\000\000\000\005\241\b\246\000\000\006\157\006\157\000\000\r\169\006\157\006\157\000\000\000\000\r\169\000\000\005\241\r\169\000\000\000\000\000\000\000\000\005\241\005\241\000\246\000\000\000\000\r\169\006\157\000\000\000\000\r\169\000\000\r\169\000\000\000\000\000\000\000\000\005\241\000\000\000\000\000\000\000\000\000\000\000\000\r\169\000\000\000\000\000\000\000\000\000\000\000\000\r\169\005\241\005\241\000\000\004\173\005\241\005\241\000\000\000\000\004\173\r\169\000\000\004\173\r\169\000\000\000\000\000\000\000\000\000\000\r\169\000\000\000\000\004\173\005\241\000\000\000\000\004\173\000\000\004\173\000\000\000\000\000\000\000\000\000\000\000\000\r\169\011z\000\000\000\000\r\169\004\173\000\000\000\000\000\000\000\000\000\000\000\000\004\173\000\000\000\000\r\169\r\169\000\000\000\000\r\169\r\169\000\000\004\173\000\000\000\000\004\173\000\000\000\000\000\000\000\000\000\000\004\173\000\000\000\000\004\213\000\000\000\000\r\169\000\000\004\213\000\000\000\000\004\213\000\000\000\000\000\000\000\000\004\173\012^\000\000\000\000\004\173\004\213\000\000\000\000\000\000\004\213\000\000\004\213\000\000\000\000\000\000\004\173\004\173\004\165\000\000\004\173\004\173\000\000\004\165\004\213\000\000\004\165\000\000\000\000\000\000\000\000\004\213\000\000\000\000\000\000\000\000\004\165\004Z\004\173\000\000\004\165\000\000\004\165\000\000\004\213\000\000\000\000\000\000\000\000\020~\004\213\002\238\000\000\000\000\004\165\000\000\000\000\000\000\000\000\000\000\000\000\004\165\000\000\000\000\000\000\004\197\004\213\000\000\000\000\000\000\004\197\004\165\000\000\004\197\004\165\000\000\000\000\000\000\000\000\000\000\004\165\004\213\004\213\004\197\000\000\004\213\004\213\004\197\000\000\004\197\000\000\004j\000\000\000\000\000\000\000\000\004\165\000\000\000\000\000\000\004\165\004\197\000\000\004\213\000\000\000\000\000\000\000\000\004\197\000\000\000\000\004\165\004\165\000\000\004\149\004\165\004\165\000\000\004\197\004\149\000\000\004\197\004\149\000\000\000\000\000\000\000\000\004\197\000\000\000\000\000\000\000\000\004\149\004\165\000\000\000\000\004\149\000\000\004\149\000\000\000\000\000\000\000\000\004\197\023f\000\000\000\000\004\197\000\000\000\000\004\149\000\000\000\000\000\000\000\000\000\000\000\000\004\149\004\197\004\197\000\000\004\221\004\197\004\197\000\000\000\000\000\254\004\149\000\000\002\026\004\149\000\000\000\000\000\000\000\000\000\000\004\149\000\000\000\000\021J\004\197\000\000\000\000\b-\000\000\003z\b-\000\000\000\000\000\000\000\000\024^\004\149\000\000\000\000\000\000\004\149\021N\000\000\001\210\001\214\026^\b-\b-\021v\b-\b-\004\149\004\149\000\000\000\000\004\149\004\149\002\158\000\000\000\000\000\000\020\166\001\218\001\222\001\238\000\000\000\000\020\190\000\000\000\000\000\000\b-\001\250\004\149\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\020\198\027\222\000\000\001\254\002\162\002\170\000\000\bA\b-\002\182\bA\002\190\0042\004>\000\000\020\206\022\014\000\000\000\000\004J\004\221\000\000\000\000\b-\000\000\000\000\bA\bA\000\000\bA\bA\000\000\000\000\000\000\000\000\000\000\004N\022\030\000\000\b-\000\000\b-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bA\000\000\006\202\b-\000\000\000\000\b-\b-\000\000\000\000\000\000\b-\000\000\b-\000\000\000\000\018v\b-\b\025\000\000\000\246\b\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bA\000\000\b\025\b\025\000\000\b\025\b\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bA\000\000\bA\000\000\004\213\000\000\000\000\000\000\000\000\004\213\000\000\b\025\004\213\000\000\bA\bA\000\000\000\000\006\210\bA\000\000\000\000\004\213\bA\000\000\bA\004\213\000\000\004\213\bA\bE\b\025\000\000\bE\000\000\000\000\000\000\000\000\000\000\000\000\004\213\000\000\000\000\000\000\000\000\000\000\b\025\004\213\000\000\bE\bE\000\000\bE\bE\000\000\000\000\000\000\000\000\000\000\000\000\004\213\000\000\b\025\000\000\b\025\000\000\004\213\002\238\000\000\000\000\b5\000\000\000\000\b5\bE\000\000\b\025\b\025\000\000\000\000\006\210\b\025\004\213\000\000\000\000\b\025\000\000\b\025\000\000\b5\b5\b\025\b5\b5\000\246\000\000\000\000\004\213\004\213\000\000\000\000\004\213\004\213\000\000\000\000\000\000\000\000\000\000\000\000\bE\000\000\007>\000\000\000\000\b5\000\000\000\000\001\210\001\214\004\213\000\000\000\000\000\000\000\000\024\194\bE\000\000\bE\000\000\000\000\000\000\000\000\000\000\004\018\000\246\000\000\001\218\002\142\001\238\bE\bE\000\000\000\000\006\210\bE\000\000\001\250\000\000\bE\b5\bE\000\000\000\000\000\000\bE\000\000\000\000\000\000\000\000\000\000\001\254\002\162\002\170\000\000\000\000\b5\002\182\b5\002\190\0042\004>\000\000\000\000\004\157\000\000\000\000\004J\000\000\004\157\007.\b5\004\157\000\000\006\210\b5\000\000\000\000\000\000\b5\000\000\b5\004\157\000\000\004N\b5\004\157\004\205\004\157\000\000\000\000\000\000\004\205\000\000\000\000\004\205\000\000\000\000\000\000\000\000\004\157\000\000\000\000\000\000\000\000\004\205\000\000\004\157\000\000\004\205\000\000\004\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\000\000\004\134\004\205\004\138\000\000\004\157\000\000\000\000\000\000\004\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\004\205\000\000\000\000\000\000\000\000\000\000\004\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\004\157\000\000\000\000\004\157\004\157\000\000\000\000\004\205\000\000\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\004\205\004\205\000\000\000\000\004\205\004\205\001\218\002\142\001\238\000\000\023\242\000\000\000\000\000\000\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\004\205\000\000\002\002\000\000\000\000\000\000\015\001\015\001\001\254\002\162\002\170\024\134\000\000\011\002\002\182\000\000\002\190\0042\004>\001\210\001\214\000\000\000\000\000\000\004J\015\001\015\001\015\001\b\142\000\000\000\000\000\000\000\000\000\000\000\000\015\001\000\000\000\000\001\218\002\142\001\238\004N\000\000\000\000\000\000\000\000\000\000\000\000\001\250\015\001\015\001\015\001\000\000\000\000\011\014\015\001\000\000\015\001\015\001\015\001\001\210\001\214\001\254\002\162\002\170\015\001\000\000\000\000\002\182\000\000\002\190\0042\004>\000\000\000\000\000\000\000\000\000\000\004J\001\218\002\142\001\238\015\001\000\000\000\000\000\000\000\000\000\000\000\000\001\250\000\000\000\000\004\221\000\000\000\000\004N\000\000\000\254\000\000\000\000\002\026\000\000\000\000\001\254\002\162\002\170\000\000\000\000\000\000\002\182\021J\002\190\0042\004>\004\221\000\000\003z\000\000\000\000\004J\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\021N\000\000\000\000\000\000\000\000\000\000\000\000\021v\004N\000\000\000\000\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\020\166\001\250\000\000\000\000\022N\000\000\020\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\186\000\000\023\166\000\000\022\198\000\000\002\182\020\198\002\190\0042\004>\001\210\001\214\000\000\000\000\000\000\023\182\000\000\000\000\000\000\000\000\000\000\020\206\022\014\000\000\000\000\004\221\004\221\000\000\000\000\001\218\002\142\001\238\004N\000\000\000\000\000\000\000\000\000\000\000\000\001\250\000\000\000\000\000\000\022\030\000\000\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\001\254\004\158\002\170\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\001\218\002\142\001\238\000\000\000\000\004J\000\000\000\000\000\000\000\000\001\250\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\004N\000\000\001\254\004\170\002\170\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\001\254\005B\002\170\000\000\000\000\004J\002\182\000\000\002\190\0042\004>\001\218\002\142\001\238\000\000\000\000\004J\000\000\000\000\000\000\000\000\001\250\004N\000\000\000\000\000\000\000\000\001\210\001\214\000\000\000\000\000\000\000\000\004N\000\000\001\254\005~\002\170\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\001\218\002\142\001\238\000\000\000\000\004J\000\000\000\000\000\000\000\000\001\250\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\004N\000\000\001\254\005\150\002\170\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\001\254\005\174\002\170\000\000\000\000\004J\002\182\000\000\002\190\0042\004>\001\218\001\222\000\000\000\000\000\000\004J\000\000\000\000\000\000\000\000\000\000\004N\000\000\000\000\000\000\018\138\000\000\000\000\000\000\000\000\000\000\000\000\004N\000\000\002\186\000\000\004R\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\000\000\000\000\000\000\000\000\000\000\004J\000\000\018\146\000\000\000\000\000\000\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\004N\000\000\000\000\000\000\018\226\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\001\254\029\186\002\170\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\001\218\002\142\001\238\000\000\000\000\004J\000\000\000\000\000\000\000\000\001\250\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\004N\000\000\001\254\029\230\002\170\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\001\254\029\254\002\170\000\000\000\000\004J\002\182\000\000\002\190\0042\004>\001\218\002\142\001\238\000\000\000\000\004J\000\000\000\000\000\000\000\000\001\250\004N\000\000\000\000\000\000\000\000\001\210\001\214\000\000\000\000\000\000\000\000\004N\000\000\001\254\030\022\002\170\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\001\218\002\142\001\238\000\000\000\000\004J\000\000\000\000\000\000\000\000\001\250\001\218\002\142\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\004N\000\000\001\254\030:\002\170\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\001\254\030b\002\170\000\000\000\000\004J\002\182\000\000\002\190\0042\004>\001\218\002\142\000\000\000\000\000\000\004J\000\000\000\000\000\000\000\000\000\000\004N\000\000\000\000\000\000\018\242\000\000\001\210\001\214\000\000\000\000\000\000\004N\000\000\002\186\000\000\004R\000\000\001\210\001\214\002\182\000\000\002\190\0042\004>\000\000\001\218\002\142\000\000\000\000\004J\000\000\000\000\000\000\000\000\000\000\000\000\001\218\002\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004N\000\000\000\000\002\186\018\250\029n\001\210\001\214\000\000\002\182\000\000\002\190\0042\004>\002\186\000\000\029n\000\000\000\000\004J\002\182\000\000\002\190\0042\004>\001\218\002\142\000\000\000\000\000\000\004J\000\000\000\000\000\000\001\210\001\214\004N\000\000\000\000\005]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004N\000\000\002\166\005a\004R\000\000\001\218\002\142\002\182\029\134\002\190\0042\004>\000\000\000\000\000\000\000\000\000\000\004J\000\000\029\134\000\000\001\210\001\214\000\000\000\000\000\000\000\000\000\000\000\000\005f\000\000\004R\000\000\000\000\004N\002\182\000\000\002\190\0042\004>\001\218\002\142\000\000\000\000\000\000\004J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004N\000\000\029\206\000\000\004R\000\000\000\000\000\000\002\182\000\000\002\190\0042\004>\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004N")) and lhs = - (8, "\014\r\012\011\n\t\b\007\006\005\004\003\002\001\000\231\231\230\230\229\228\228\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\227\226\226\225\224\224\224\224\224\224\224\224\223\223\223\223\223\223\223\223\222\222\222\221\221\220\219\219\219\218\218\217\217\217\217\217\217\216\216\216\216\216\216\216\216\215\215\215\215\215\215\215\215\214\214\214\214\213\212\211\211\210\210\210\210\209\209\209\209\208\208\208\208\207\207\207\207\206\206\206\205\205\205\205\204\203\203\203\203\203\203\203\202\202\201\201\200\200\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\199\198\198\197\197\196\195\194\193\193\192\192\191\191\191\191\190\190\189\189\188\188\188\188\188\188\187\186\185\185\184\184\183\183\182\181\181\180\180\179\178\178\177\176\175\175\175\174\174\174\173\172\172\172\172\172\172\171\171\171\171\171\171\171\171\171\171\171\171\171\171\171\171\170\170\169\169\169\169\169\169\169\169\169\168\168\167\167\167\166\166\166\165\165\165\165\164\164\163\163\162\162\161\161\160\160\159\159\158\158\157\157\156\156\155\155\154\154\154\153\153\153\153\152\152\151\151\150\150\149\149\149\149\149\148\148\148\148\147\147\146\146\146\145\145\145\144\144\144\144\144\144\144\143\143\143\143\143\143\143\142\142\141\141\140\140\140\140\140\140\139\139\138\138\137\137\136\136\135\135\135\134\133\133\133\132\132\131\131\131\131\131\131\131\131\131\130\130\129\129\128\128\128\128\128\128\128\128\128\128\128\127~}||{{{{zzzzzyxxwwvvvvvvvvvvvvvvuuttsssssssssssssssssssssssssssssssrrqqppoonnmmllkkjjiihhgggggggggggfedcba`_^]\\[[[[[[[[[[ZZZYYYXXXXXWWWWWWWWWVVUUUUUTTSSRQPPOOOOONNMMLLLKKKKKKJJJIIHHGGFFEEDDDCCBBAA@@??>>======<<;;::99888777666555444432111111111111111111100000///////.....................................................................--,,,,,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++++++++++++++++++++++++++++++**)))((((((((((((((((((((((((((((((((((((''&&&&&&&&&&&&&&&&%%$$#######\"\"\"\"!! \031\031\030\029\028\028\028\027\027\026\026\026\026\026\026\026\026\026\026\025\025\024\024\024\024\023\023\022\021\021\021\021\021\020\019\019\018\018\018\017\017\017\016\016\016\016\016\016\015\015") + (8, "\014\r\012\011\n\t\b\007\006\005\004\003\002\001\000\233\233\232\232\231\230\230\229\229\229\229\229\229\229\229\229\229\229\229\229\229\229\229\229\229\229\229\228\228\227\226\225\225\225\225\225\225\225\225\224\224\224\224\224\224\224\224\223\223\223\222\222\221\220\220\220\219\219\218\218\218\218\218\218\217\217\217\217\217\217\217\217\216\216\216\216\216\216\216\216\215\215\215\215\214\213\212\212\211\211\210\210\209\209\209\209\208\208\208\208\207\207\207\206\206\206\206\205\204\204\204\204\204\204\204\203\203\202\202\201\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\199\199\198\198\197\196\195\194\194\193\193\192\192\192\192\191\191\190\190\189\189\189\189\189\189\188\187\186\186\185\185\184\184\183\182\182\181\181\180\179\179\178\177\176\176\176\175\175\175\174\173\173\173\173\173\173\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\171\171\170\170\170\170\170\170\170\170\170\169\169\168\168\168\167\167\167\166\166\166\166\165\165\164\164\163\163\162\162\161\161\160\160\159\159\158\158\157\157\156\156\155\155\155\154\154\154\154\153\153\152\152\151\151\150\150\150\150\150\149\149\149\149\148\148\147\147\147\146\146\146\145\145\145\145\145\145\145\144\144\144\144\144\144\144\143\143\142\142\141\141\141\141\141\141\140\140\139\139\138\138\137\137\136\136\136\135\134\134\134\133\133\132\132\132\132\132\132\132\132\132\131\131\130\130\129\129\129\129\129\129\129\129\129\129\129\128\127~}}||||{{{{{zyyxxwwwwwwwwwwwwwwvvuutttttttttttttttttttttttttttttttssrrqqppoonnmmllkkjjiihhhhhhhhhhhgfedcba`_^]\\\\\\\\\\\\\\\\\\\\[[[ZZZYYYYYXXXXXXXXXWWVVVVVUUTTSRQQPPPPPOONNMMMLLLLLLKKKJJIIHHGGFFEEDDDCCBBAA@@??>>======<<;;::99888777666555444432111111111111111111100000//////////.............................................................................--,,,,,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++++++++++++++++++++++++++++++**)))((((((((((((((((((((((((((((((((((((''&&&&&&&&&&&&&&&&%%$$#######\"\"\"\"!! \031\031\030\029\028\028\028\027\027\026\026\026\026\026\026\026\026\026\026\025\025\024\024\024\024\023\023\022\021\021\021\021\021\020\019\019\018\018\018\017\017\017\016\016\016\016\016\016\015\015") and goto = - ((16, "\000)\001S\000H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\204\000\000\000\000\001\005\000\228\000\026\001\027\000u\000\226\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\0014\000\000\000\000\000\000\000\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\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000>\166\001\138\0000\000\131\000\000\001L\029\214\002\030\001\168\004~\000\000\000\000\000\000\006:\000\000\000\000\000+\000\000\000\000\000\000\000\000\003\140\000\000\002b\000\000\000\000\000\000\000\000\000\000\000$\000\000\000;\004*\002\152\000\000\000\000\003\n\000\000\t\224>\166\000\000\000\188?F\000\000\001R?b\001V>\166\001\144\001\160\000\000\000\000\003f\001\214\006\234\007~\000\198\004*\004r\003\200\002\020\001\236\003\216\001\222\n\162\000\0008\014\003\230\002\218\003\2148\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\228\000\000\004f\002\252\004\252\000\000\000\000\000\000\000\000\005\b\000\000\000\000\003\204\0005\003\246\006\178\bH\000\000\000\000\000\000\004\168\004\196\004\020\003\182\003\196\004\206$f\004\222\005F\001J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\184\000\000\000\000\000\000\004\252\005\190\n\228\004\2008\014\011T\011\176\000\000$\144\011\250$\202%Z\000\000\000i\000\000\000\000\000\000\000\000\005\232G\214\0064\000\000\002D\006J\000\000%\1628\246\001\020\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000%\208\006\026\000\000\000\000\000\000\r@\004\150\000\000+\030\t`\000\000\000\000\007P\000\000\000\000\0036\001\138\000\000\000\000\0036\b\172\0036\000\000\000\000\n\180?\200\000\000\000\000\0064\006\224\000\000\000\000H\022\000\000\006F\000\000\000\000\000\000\006\208\000\000\000\000\007\024\000\000Hl\006F\000\0000\236\r\024\000\000\000\000\000\000\006F\000\000H\172\006F\014\200@2\000\000H\196\006F\000\0007\172\015d\000\000\000\000\000\000\000\000QP\017<\000\000\000\000\000\000\000\000QX\017\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\006\000\000\005\200\007\254\000\000\023\024\005\248\r\164\000\000\000\000\000\000\000\000\006F\000\000\000\000\000\000&4\000\000\000\000\000\000\000\000\000\000\000\000\001\184\b\b\000\000\000\000\000\000\006F\b\1369X\007\254\006l#j\000\000\007\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\000\000\000\000\000\000\000\000\t@9\156\000\000\000\000\b~\006\1529\252\000\000\000\000\000\000:f\bX:\166\000\000\bX\000\000:\240\bX\000\000;\022\005\228\t6\tT\000\000\000\000(\150\000\000\000\000\000\000\000\000\000\000\000\000\bX\000\000\000\000;\\\000\000\bXD\128\000\000\006F\000\000\000\000;\188\000\000\bX\001\240\000\000\000\000\bX\bX\000\000\000\000\bX\000\000\000\000%Z\000\000\000\000\000\000\000\000\bX&2\000\000\000\000\bX\000\000\000\n\th\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\158\000\000\t\016\t.\000\000\"\230\000\000H\242\006F\006F\000\000\000\000\000\000\000\000\000\000\000\000\t2\t:\t\238\012 \t\138\t\170\t\186\006\212\004\242\007\006\003\002\nT\000\000\000\000\006\166\011\160\007\170\003,\nX\012X\000\000\004\184\000\007\007\164\000\"\011\188\000\000\000\0009 \000\000:\192\011f\000\000I\004\006FI\148\006F\000\000\000\176\002\196\000\000\r\018\004\184\000\000\000\000\n\164\000\000\000\000\000\000\000\000\000\000\014\236\004\184\015\214\004\184\000\000\002z\000\000\000\000\003~\000\000\000\000\000\000\012\026\000\000\000\000\000\000\004\184\000\000\000\000\004\184\000\000\nX\005x\000\000\0008\003\196\000\000\0008\000\000\000\000\018\"\004\184\000\000\000\000\000\000\000\000\000\000\000\000\0008\012\160\012\236\0120\011\214&\166\004F\000\000\011,\007\216\rZ\011<\b\022O\018O`\000\000\000\000\000\000\000\000\000\000\003\020\n|\000\000\000\000\000\000\011P\b.\006\136\0008\021T\000\000\004\184\000\000\000\000\000\000\011\250\000\000I\178\006F\rr\011T\bx\r\218\011j\b\192\000\002&\208\bX\0142\011\146\b\228D\204\012|\000\000'0'\206\bXA\172\000\000I\212\006F\006F\012`\000\000\000\000\012h\000\000\000\000\000\000\000\000'\240\012P\000\000?\156\014\166\011\222\b\240<$\bX\015\006\011\236\t\006Oh\000\000O\176\000\000\000\000\015,(6\001\174\000\000\000\000\rNI\242\000\000\006FEF\000\000\006FJ8\006F\000\000\000\000\000\000\000\000\000\000O\204\000\000\000\000\000\000\002\156\015\248\000\000\000\000\000\000\000\000(\186O\228\000\000\000\000\000\000\000\000\000\000\011\222\016\028\000\000\001\015(\220\001\015)\006\001\015\000\000P\026\000\000)\172\001\015\016~\003\002\016\230\000\000\000\000)\238\001\015*R\001\015*\148\001\015*\184\001\015*\198\001\015+\134\001\015+\200\001\015,>\001\015,\128\001\015,\152\001\015,\194\001\015-\144\001\015-\180\001\015-\204\001\015.~\001\015.\134\001\015.\218\001\015/x\001\015/\128\001\015/\204\001\015\tD\0078\003\190;\254'\240\012\216\000\000\005\156I^0><\148\bX\000\000\rJ\012j\000\000\000\000Jx\006F\000\000\bXD\128\000\000J\254\006F\000\000\000\000\016\238\000\000\000\000\017\184\000\000\000\000\000\000\000\0000\138\000\0001\004\000\000\000\000\bXE \000\000K\026\006F\000\000EF\000\000KF\006F\018\004\000\000\000\000\018p\000\000\000\000<\212'\240\012\244\000\0001F\018x\000\000\000\000\018\162\000\000\000\0001\148\000\000\000\000E\184\012\252\000\000Kb\006F\018\196\000\000\000\000K\232\006F\019\142\000\000\000\000\019\240\000\000\000\000\000\000L(\006F\020F\000\000\012T\020^\000\000=4\000\000\bX=\154\000\000\bX=\164\000\000\bX\004\180\000\000\000\000\000\000\000\000\000\000=\222\bX\000\000\0048\005\004\000\000\000\000\000\000\001\015\020\170\000\000\000\000\000\000\021z\000\000\000\000\000\000\000\000\000\000\021\022\000\000\000\000\000\000\001\015\021\214\000\000\021\224\000\000\000\000\000\000\022,\000\000\000\000\000\000\000\000Ph\000\000\000\000\022\160\000\000\000\000\000\0001\236\001\015\022\252\000\000\000\000\000\0002\020\001\015\023X\000\000\000\000\000\00028\001\015\004\214\023\174\000\000\000\0002\222\001\015\024\024\000\000\000\0003 \001\015\024N\000\000\000\0003\198\001\015\000\000\000\000\024\132\000\000\000\0003\234\001\015\024\188\000\000\000\0003\248\001\015\025\148\000\000\000\0004j\001\015\000\0004\156\001\015\000\0005@\000\000\000\000\001\015\000\000\000\000\025\202\000\000\000\000\026\002\000\000\000\000\012\140\000\000\000\000\0264\000\000\026j\000\000\000\000\000\000'\240\rH\000\000?\254\n^\0036\026\160\000\000@l\000\000\000\000\000\000A2\000\000\000\000\027\176\000\000\027\230\000\000\000\000\000\000\000\0005\144\000\000\000\000\000\0005\132\001\0155\182\001\015\000\000\012T\028\024\000\000\000\000\028N\000\0006L\000\000\000\000O`\000\000\000\000\000\000\028\132\000\000\000\000\000\000\000\000\001\015\000\194\012\1606*\000S\000\000\000\000\000\000\001=\tX>J\bX6\140\001\01576\004\0287D\001\015\000\000\000\000\000\000\000\000\028\188\000\000\000\000\000\000\000\000\003\228\004\144\012\1768\004\005\014\000\000\000\000\000\000\000\000\000\000\014&\000\000\000\000\000\0004\196\000\000\001h\000\000\005\208\000\000\r\188\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\003\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\014>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\018\000\000\000\000\t`\n\024\0008\029\148\000\000\r$\tr\r\196\003\186\n2\0008\021\128\004\184\n6\0008\000\000\029\202\000\000\005N\000\000\rD\tx\004\136\000\000\000\000\000\000\000\000\000\000\rj\004\000\011Z\0036\000\219\000\000\000\000\000\000\000\000\000\000E\228\000\000P\144\000\000\t\136\000\000\t\208\000\000\000\000\000\000\000\000\002\004\000\000\000\000\012\232\0036\000\000\017L\018B\0036\019^\0036\0036\000\000\0036\000l\000\000\006\144\000\000\020\024\0036\0036\000\000\022|\0036\0036\n\018\000\000\0302\000\000\000\000\n\022\014V\000\000\030>\006*\000\000\000\000\000\000\000\000\014\"\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\000\000\004*\000\000\000\000\r\150\n\"\011z\0008\000\000\021\152\000\000\004\184\000\000\014\250\000\000\000\000\000\000\000\000\000\000\031B\000\000\001\015\000\000\000\000\022\230\000\000\004\184\000\000\023\"\000\000\004\184\000\000\024 \004\184\000\000\0008\000\000\n(\r\b\003\178\000\000\r\198\r\200\n*\r\240\014\142\026\n\004\184\006@\000\000\n,\014h\014|\006(\006\208\014R\n:\014\168\006\164\b\226\014n\000\000\000\000\b\020\tb\000\000\007p\003P>\170\bX\030\152\000\000\007\156\003\156\000\000\000\000\014$\nN\007\022\000\000@\140\000\000LR\006F\000\000\014\214\014\218\000\000\t\134\000\000\006F\014P\n\\\007\200\014h\000\255\000\000\000\000\000\000\000\000\n^\t\166\000\000\n\130\t\194\000\000\bz=\226\014b\014p\n\170\006J\nP\000\000\n\200\007\n\n\172\000\000\014\130\014\136\n\204\014\196\014\142\028X\004\184\000\000\n\210\0156\000\000\007,\000\000\n\204\000\000\015J\000\000\029z\005\176\015\030\n\242\015Z\000\000\029\254\006\b\015&\000\000\000\000\000{\001\162\n\236\000\000\030\240\004\184\n\252\000\000\000C\000\000\014\222\n\252\b\150\014h\014\254\015$\011&\016\142\000\000\0156\000\r\000\000\000\000\000\000\000\000\001>\011<\015\014Ln\006F\000\000\001\017\011\138\015\208\000\000\000\000\000\000\000\000\000\000\000\000L~\007\190\000\000\011\156\0160\000\000\000\000\000\000\000\000\000\000\000\000Ah\011\000\000\000\011\158\002t\000\000\011\170\011\180\b\020\000\000\004\130.\024\000\000\007J\000\000L\196\006F\006F\000\000\000\000\b\148\000\000\b6\000\000\006P\b\148\b\148\000\000\011\190E\232\006FMB\006F\011Z\000\000\000\000\000\000\000\000\011\\\000\000\000\000\001\194\000\000\b\202\015\154\011\212\016\186\015f\000\000\000\000\006\240\b\222\015\180\000\000\000\000\012\n\016\214\015\128\000\000\000\000 \168\000\000\019\178\000\000(\2267\146\006F\000\000*\000\020h\000\0001\174\000\000\000\000\000\000\b\148\000\000\000\000\011p\015\194\012\026\016\230\015\142\000\000\000\000>x\011\248\015\220\000\000\000\000\000\000A\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\000\000\015\150\0128\031\168\t\024\000\000\015\234\012>\b\128\000\000\016\232\016\160\0122\015\250\000\000\000\000\015\254\012`\b\214\000\000\000\000\007\1448\246\007\222\000\000\000\000\000\000\b\216\015\196\012\136\000\000\015\200\b\216\000\000\016\174\012p\016\014\000\000\000\000\000\000\006F\000\"\001X\007\238\000\000\000\000\000\000\000\000\015\212\012\150\000\000\b\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006F\015\196\012\174\017,\015\210\000\000A\252'\240\001\024\012\182\015\162\001\025\003\170\012\226\016b\000\000\000\000\017\030\031\132\000\000\000\000\031\224\000\000\012\130\000\000\005\164\000\000\000\000\000\000\000\000\000\000\000\000M`\006F\000\000\017\" <\000\000\000\000 D\000\000\001\019\012\244\016\198\000\000\000\000B8Bb\016x\000\000M\136\006F \252\000\000\000\000!\020\000\000\000\000\012\148\000\000\001n\000\000\000\000\000\000\000\000\000\000\000\000B\152\000\000\000\000C\012C\030\016z\000\000M\166\006F!V\000\000\000\000!\198\000\000\000\000\r\012\"\144\r\162\000\000\r\024\r\026\002\208\011J\r,\b\150\rT\016\210\"\186\r\228\000\000\r\\\rd\t@\000\000\014\222F\014\000\000\003\020\000\000\rjC\172C\236\015\236\015\168\016\182\000\000FL5@\000\000\006j\000\000\000\000\006j\000\000\000\000\006j\011\184\000\000\017\172\006j\016\216\"\224\r\250\000\000\006j\000\000\000\000P\222\000\000\000\000\000\000\006j\000\000\000\000\014\016\000\000\020R\t@\014\020\000\000\r\138Ft\014\024\000\000\000\000\000\000\000\000\014 \000\000\000\000\000\128\000\000\006jQ\002\000\000\023\192\006jD\014\000\000\014<\0164\r\204\017V\015\254\000\000D&\014Z\016>\000\000\000\000\000\000#\176\t\138\000\000\000\000\000\000\000\000\000\000\000\000\011\222\014t\000\000\016\000\r\216\014\248\003\198\000\000\016Z\000\000\000\000\000\000\000\000\014\148F\210\000\000\000\000\000\000\000\000\011\222\000\000\000\000\014\230G@\000\000\000\000\000\000\000\000\000\000\0008\004\184\000\000\000\000\bX\000\000M\230\006F\000\000\001\156\000\000\000\000\000\000\000\000\"\254\000\000\000\000\000\000\000\000\000\000\000\000\016\252\000\138\n\026\015\196\004\176\014\012\000\000\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\212\007&\014J\000\000\n\142\017`\017\014\015\026\000\000\000\000\017\002\002\146\003\204\000\000\000\000\000\000\000\000G~\014X\000\000\014h\018\192\000\000\000\000\0036\019\222\000\000\000\000\000\000\000\000\000\000N<\006F\000\000Q`\021V\000\000\000\000\000\000\025(DR\000\000Nl\006F\000\000Qz\026\202\000\000\000\000\000\000\000\000Q\194\027\000\000\000\000\000\000\000\000\000Q\210\027L\000\000\000\000\000\000\000\000N\186\006F\000\000Q\240\027\226\000\000\000\000\000\000\000\000\000\000N\212\006F\000\000Rd\028\162\000\000\000\000\000\000\t\002\000\000\000\000\000\000\006F\000\000\000\000\b\244\017\022\015:\000\000\000\000\017\014\007\140\001\246\000\000\000\000\000\000\000\000\n\172\017`\tB\017 \015D\000\000\000\000\017\020\b2\005.\000\000\000\000\000\000\000\000\004\184\000\000\015P\000\000\000\000\000\000$\012\000\000$^\000\000\000\000\000\000\000\000\000\000\019\128\000\000\000\000\000\000\000\031\000\130\000\000\000\000\000\000\000\000\000\000\007\"\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\006\000\000\000\000\000\000G\190\000\000\006F\000\000\t\146\000\000\000\000\000\000\003|\000\000\000\000\000\000\001r\000\000\000\000\000\000\003\152\000\000\0008\000\000\006b\000\000\004\184\000\000\002\230\000\000\000\000\000\0008>\bX\000\000\000\000\000\160\000\000\000\000\000\000\000\000\003\020\005\028\016J\004\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'N\000\000\015d\000\000\000\000\000\000\000\000\005N\006\228\000\017\0158\000\000\000\000\015|\015n\000\000\000\000\000\000\015\138\025>\000\000\000\000\000\000\000\000"), (16, "\006\238\007\148\002l\002m\001\158\000\149\006w\0056\000\154\007\192\000\241\006\212\006\238\002A\004\151\001\164\005\189\002\181\006\239\007\181\000\149\006y\006\241\000\154\001\157\001\158\002\182\b\014\007\176\000=\b\015\006\242\007\004\006\238\006\241\002l\002m\001\158\006\215\002\208\004+\000\155\005\192\006\242\000\149\001\159\001\175\000\158\001\161\001\162\002\181\006\239\007\003\0044\006\217\006\241\005|\000A\005\194\002\182\002\024\006\243\002B\007\170\006\242\007\004\004\162\004\164\004\166\004\006\0020\005m\002\208\006\243\0024\0047\001\028\002N\0059\0009\001\196\005\195\000\237\006\218\001$\000\241\001\006\007\193\000\244\001\176\002\224\001\177\002\140\006\029\006\243\000\244\001\007\006\244\007\174\005p\000B\002\210\007\243\002m\001\158\007\020\001\021\006\245\002[\006\244\003\131\000\241\001\028\001.\002p\004\169\002\212\000\241\0025\006\245\007\194\001\n\001\184\004\179\001$\007\201\001\028\007\127\005o\007(\006\244\002Y\0026\007\t\002\210\001\167\000s\001\158\000\241\000\237\006\245\b\017\000\241\001\006\0070\0009\004\t\002p\007\n\002\212\000\241\000\237\001,\001\239\000\241\001\006\005o\0009\006\248\001\024\006\247\006\250\007\183\004$\006\255\001\028\007\t\000\244\007\202\004(\006\248\002\\\007\245\006\250\007\001\001\165\006\255\002\213\001\n\002\219\000o\007\n\000\131\004\249\002\224\002\225\007\001\001\196\002\215\001\021\002\029\006\248\007\203\007\002\006\250\001\028\001.\006\255\001\186\001$\006~\001$\007p\006$\006%\007\002\001\187\007\001\001\196\001\165\002\213\002\227\002\219\007\204\007\246\006\219\002\212\000\241\002\225\0065\001\196\002\215\002;\006.\004\193\000\241\007\002\001,\006\238\001\021\002l\002m\001\158\004N\001\021\001\028\001.\002l\002m\001\158\001\028\001.\006\215\0009\002\227\002\181\006\239\007\003\006\029\000\244\006\241\001/\000^\002Z\002\182\0074\0075\004\185\006\217\006\242\007\004\003\219\000<\006\130\0076\0077\006\238\002\208\002l\002m\001\158\001\216\001\158\001\021\000\237\0078\004\193\000\241\000\242\001\028\001\031\004\188\007\223\002\181\006\239\007\003\003\220\006\218\006\241\006\243\001\141\001/\002\182\007F\001\021\004+\003\131\006\242\007\004\000\237\001\028\001\031\000\241\000\242\001\021\002\208\001\021\006\171\0046\0009\001\028\001.\001\028\001.\000\237\007T\000b\000\241\001\006\007\224\001$\0014\000\241\001%\000\134\006\244\001q\006\243\000;\002\210\001;\007%\001\021\003\131\000f\006\245\002o\006\173\001\028\001\031\000?\001\144\002p\005i\002\212\000\241\000\241\001r\001,\002p\001 \002\212\000\241\004O\001\138\006\174\005\172\007\030\006$\006%\006\176\007\t\001$\006\244\006\220\001%\001/\002\210\001/\0071\000\137\005\173\001;\006\245\006-\005\197\007\n\005\196\006.\004\193\002p\004\151\002\212\000\241\006\215\000\243\006\248\003\222\000{\006\250\001,\000\244\006\255\000\182\0019\000\130\0014\000\192\007P\007\t\006\217\0072\007\001\005\192\007D\002\213\007\152\002\219\006\029\0012\0073\001w\002\213\002\225\007\n\001\196\002\215\004\\\001\158\005\194\002\214\007\002\001\196\002\215\006\248\001\021\000\177\006\250\0009\006\218\006\255\001\028\001.\004\165\004\164\004\166\0019\000\244\007\153\002\227\007\001\0013\005\195\002\213\006\238\002\219\002l\002m\001\158\001\021\007\143\002\225\002=\001\196\002\215\001\028\001\031\002L\001\028\007\002\000\244\002\181\006\239\007\003\000\244\007\235\006\241\001\021\003\144\000\136\002\182\000\241\001\006\001\028\001.\006\242\007\004\002\227\002\022\002,\001B\000\153\006\238\002\208\002l\002m\001\158\001/\000\152\0020\006T\001\129\000\189\0024\000\237\001\028\007\236\000\241\000\242\002\181\006\239\007\003\003\021\001\158\006\241\006\243\0020\003\161\002\182\007\011\0024\005\172\001\028\006\242\007\004\0074\0075\0014\006$\006%\001E\002\208\001B\000\197\0076\0077\005\173\006\171\000\237\001/\005\180\000\241\000\242\006&\0066\0078\004\193\0025\006.\004\193\000\210\006\244\001$\006\243\007\219\002\210\001\021\007\007\007\255\002m\001\158\006\245\001\028\001.\0025\003\131\007\227\006\173\002p\0014\002\212\000\241\001E\002N\000\186\003\131\003\131\004T\003\131\002l\002m\001\158\000\165\004\169\002F\006\174\002Y\007\t\002N\006\244\006\176\007\220\002@\002\210\006\199\002N\002Y\001\028\001\028\006\245\000\244\007\228\007\n\004L\002[\002F\002p\000\241\002\212\000\241\004U\000\149\006\248\007\156\002)\006\250\004\248\000\244\006\255\002[\004\130\002\231\000\241\002R\006\166\007\t\002[\001$\007\001\000\241\001(\002\213\003\131\002\219\004b\003{\001\158\006V\004\253\002\225\007\n\001\196\002\215\000\181\002l\002m\001\158\007\002\006\254\007'\006\248\007E\000\187\006\250\000\219\001,\006\255\001\021\000\237\002\181\004?\000\241\001\006\001\028\001.\002\227\007\001\002\\\002\182\002\213\b\000\002\219\002\212\000\241\004\226\000\221\004\133\002\225\002o\001\196\002\215\002\208\002\\\0072\006\238\007\002\002l\002m\001\158\002\\\000\229\004Y\0073\002\212\000\241\001\006\003\131\004O\b\002\b\003\000\191\002\181\b\005\002\227\000\244\003\133\006\241\000\196\002Z\006\238\002\182\002l\002m\001\158\b\022\006\242\b\007\004F\002Z\001/\007\029\000\244\001\021\002\208\b\014\004\176\002\181\b\015\001\028\001\031\004O\006\241\001\021\002\224\003\131\002\182\0042\000o\001\028\001.\006\242\b\023\000\244\002\210\0056\006\243\002N\000\241\002\208\004\177\006[\001\157\001\158\004\215\002\213\003\131\002p\000\244\002\212\000\241\003/\002\224\002\214\003\199\001\196\002\215\000\241\001\006\002\224\005R\006\243\000\209\001\159\0032\002]\001\161\001\162\002[\000\213\002\024\000\241\006\244\007\021\000\232\005\172\002\210\004P\001\157\001\158\0020\002\216\006\245\004+\0024\001/\001\028\004\143\004\193\002p\005\173\002\212\000\241\003\216\005\174\004\250\0046\006\244\003\132\001\159\001\175\002\210\001\161\001\162\002N\b\n\007.\006\245\001\196\000\228\002\213\003\131\002\219\004\134\002p\0014\002\212\000\241\002\225\007\166\001\196\002\215\000\234\007\n\000\149\001@\000\159\002)\0025\b\027\002/\002\\\002O\006\248\000\235\002[\006\250\000\249\000\241\006\255\001\166\000\244\0026\001\176\002\227\001\177\001\200\006_\007\n\007\001\004Q\007\153\002\213\001\167\002\219\003\131\000\241\004C\006\248\004q\002\225\006\250\001\196\002\215\006\255\0033\0034\001\146\007\002\004\133\000o\001$\003\131\002\224\007\001\002\224\001\184\002\213\006\238\002\219\002l\002m\001\158\003\131\005^\002\225\002\227\001\196\002\215\001\167\0035\000\245\000\241\007\002\000\250\002\181\006\239\007\017\002\\\001\128\006\241\000\244\004\169\006\238\002\182\002l\002m\001\158\001\014\006\242\007\004\002\227\000\149\007\231\007<\002)\001\186\002\208\b\014\001\017\002\181\b\015\005\011\001~\001\195\006\241\001\196\001\165\005d\002\182\001\021\005$\001\158\006\202\006\242\b\018\001\028\001.\007\199\006\243\002N\005E\002\208\002\024\001\021\004\199\007\232\001\028\003J\001\158\001\028\001\031\001\186\0020\002/\003\131\005\006\0024\000\244\001\028\001\187\000\244\001\196\001\165\006\243\001#\000\244\001$\002y\003h\001\175\002[\001\161\001\162\000\241\006\244\001\021\002\024\004\133\002\210\002J\001\150\001\028\001.\005\016\006\245\000\149\0020\000\184\002)\000\244\0024\002p\001\028\002\212\000\241\0009\001\153\002/\001$\006\244\0025\001%\001\174\002\210\000\149\005\172\002\028\002)\001;\006\245\007\t\003m\003}\003~\0026\001\021\002p\0009\002\212\000\241\005\173\001\028\001\031\001\021\005\179\007\n\001,\005\012\001D\001\028\001\031\b\021\002\012\002\\\0025\006\248\005I\001/\006\250\004\133\007\151\006\255\001\028\004\181\006\029\001\184\006\178\000\244\0026\0056\007\n\007\001\000\241\005X\002\213\001H\002\219\002\014\001\167\001\028\006\248\000\241\002\225\006\250\001\196\002\215\006\255\004\184\001\021\000\244\007\002\001\021\0019\003\131\001\028\001\031\007\001\001\028\001.\002\213\006\238\002\219\002l\002m\001\158\005\172\006 \002\225\002\227\001\196\002\215\001K\001?\003\129\003\130\007\002\007\200\002\181\006\239\000\244\005\173\001\021\006\241\001\021\005\205\005\244\002\182\001\028\001.\001\028\001.\006\242\007\r\002\227\000\149\001$\006\007\002)\001%\002\208\007:\001\186\001\196\007\165\000\244\001;\001\157\001\158\007\207\001\187\004\151\001\196\001\165\001/\005\245\006;\005\246\001z\004\151\002\021\001$\006\243\0009\001,\004\207\005\168\005\145\001\159\0032\001\143\001\161\001\162\007\154\007\155\006$\006%\004\151\000\149\001B\006\017\002)\0056\002g\0010\000\241\001/\005\247\005\021\005\163\006&\0066\000\241\006.\004\193\006.\004\193\001$\006\244\005\024\001%\003\131\002\210\006\022\004\164\004\166\005\177\001;\006\245\000\241\0019\006*\004\164\004\166\002j\002p\0014\002\212\000\241\001E\001\234\005\030\005\248\0053\004\193\001,\002x\000\244\003\131\0062\004\164\004\166\005\249\005\250\007\016\005\251\001$\001D\003\131\001%\003\131\001\021\001\149\006\029\004\133\001\166\001;\001\028\001.\007\n\000\244\001$\001\232\007\208\001+\001\196\007\154\007\155\001\167\006\248\006<\000\241\006\250\002\135\001,\006\255\001\021\003\131\002l\002m\001\158\0019\001\028\001.\005\181\007\001\006.\004\193\002\213\001,\002\219\000\244\006\029\002\181\005\253\007\145\002\225\005\255\001\196\002\215\006\004\006\014\002\182\000\244\007\002\003U\001B\004\151\007\215\002\138\0068\005\198\001\021\001/\003\131\002\208\001\173\006=\001\028\001.\0019\005\206\002\227\005\017\001\183\001$\006\206\002\144\001%\0069\001\192\001\186\003\131\002\170\007\159\001;\005t\004\193\001/\001\195\000\244\001\196\001\165\0014\002\175\001\191\001E\001\238\003\131\006\161\006\003\001\021\000\241\001,\005\175\007\217\006\153\001\028\001.\007\138\004\164\004\166\003\131\006$\006%\002\000\001\021\001B\0016\006\026\004\193\006\029\001\028\001.\001/\003\019\000\244\002\210\006&\0066\001\254\005\175\004\203\006.\004\193\004,\002\006\005\022\001$\004t\002p\005\175\002\212\000\241\000\244\002l\002m\001\158\004z\0019\000\244\004\137\006$\006%\0014\005.\001B\001E\004\201\004\158\002\181\000\244\007A\001/\002l\002m\001\158\006&\0066\002\182\002/\005;\006.\004\193\002\216\004\026\002N\007\162\001/\002\181\001\021\001$\002\208\003\131\001i\005>\001\028\001.\002\182\002N\006\178\002N\000\244\0014\007!\004\160\001E\002l\002m\001\158\004\194\002\208\000\244\002\213\004u\002\219\000\244\002[\0014\001,\000\241\002\225\002\181\001\196\002\215\000\244\004s\004}\000\244\004\129\002[\002\182\002[\000\241\002\011\000\241\000\244\004\231\004\190\003\131\004\195\006$\006%\002\017\002\208\001B\004\219\002\227\000o\004\251\005\001\005\b\001/\001\021\002\210\003\131\007\141\007\142\005\014\001\028\001.\006.\004\193\002l\002m\001\158\005F\002p\005#\002\212\000\241\003\131\000\244\002\210\001$\0052\005:\001\021\002\181\003\131\002\\\003\131\0014\001\028\001.\001E\002p\002\182\002\212\000\241\007,\004\193\001\021\002\\\005=\002\\\001\021\004\211\001\028\001.\002\208\002\216\001\028\001.\002E\000\244\002\210\000\244\002\"\002l\002m\001\158\005J\000\244\005D\001/\000\244\000\244\000\244\002p\002\216\002\212\000\241\002$\002\181\000\244\003\131\003\131\005Y\005H\002\213\005N\002\219\002\182\005T\000\244\0023\003\131\002\225\004\209\001\196\002\215\000\244\000\244\005j\003\246\002\208\001\244\001\158\002\213\005`\002\219\005n\002\216\005\156\005s\002D\002\225\001/\001\196\002\215\000\244\002\210\002N\002\227\002l\002m\001\158\001\159\002\129\000\237\001\161\001\162\000\241\000\242\002p\005x\002\212\000\241\001\021\002\181\000\244\002\213\002\227\002\219\001\028\001.\005\130\0014\002\182\002\225\004\220\001\196\002\215\002[\004\200\000\244\000\241\000\244\005\188\005\193\000\244\002\208\006\171\002\024\003\131\004j\002G\002\210\002\216\005\233\004\016\003}\003~\0020\004f\002\227\000\244\0024\002f\001\028\002p\000\244\002\212\000\241\006\185\005\136\002i\000\241\002l\002m\001\158\003\131\006\173\003\131\005\147\005\158\002w\002\213\002\134\004\214\001/\005\176\000\244\002\181\001\184\002\225\005\162\001\196\002\215\002\137\006\174\005\183\002\182\000\244\002\216\006\176\002\\\001\167\004r\006\192\000\241\0025\005\200\002\210\003\131\002\208\002l\002m\001\158\002\143\004\146\002\227\001$\003\131\002\162\0026\002p\005\241\002\212\000\241\002\156\002\181\003\131\002\213\002\159\002\219\002\165\004\019\004\024\005\210\002\182\002\225\000\244\001\196\002\215\002\024\001$\005\235\002\025\001Q\004m\000\244\000\244\002\208\005\254\0020\006\011\002\169\000\244\0024\002\216\001\028\006\001\000\244\002\174\006\006\001$\002\227\000\244\001o\001\186\002l\002m\001\158\001,\002\194\001p\002\210\001\187\000\244\001\196\001\165\006\016\002l\002m\001\158\002\181\006\"\003\134\002\213\002p\002\219\002\212\000\241\001,\002\182\006U\002\225\002\181\001\196\002\215\004_\006\028\0025\003\024\006x\000\244\002\182\002\208\0060\003\"\002N\003!\004\015\000\244\002\210\001$\0026\003M\001%\002\208\006@\003Z\002\227\002\216\006G\001;\001\021\002p\000\244\002\212\000\241\000\244\001\028\001.\002l\002m\001\158\002\024\004\252\0019\002.\002[\003|\001,\000\241\003\235\006K\0020\000\244\002\181\001\021\0024\002\213\001\028\002\219\006h\001\028\001.\002\182\003\243\002\225\002\216\001\196\002\215\004\n\0045\003\131\006\144\000\244\002\210\001\021\002\208\004E\006\204\006\149\000\244\001\028\001.\002l\002m\001\158\002\210\002p\006\188\002\212\000\241\002\227\000\244\001/\0019\002\213\000\244\004p\002\181\002p\0025\002\212\000\241\002\225\003\131\001\196\002\215\002\182\006\154\002\\\004H\004R\006\184\003\255\0026\003\131\006\160\001/\000\244\006\168\002\208\002\216\004h\004\168\004y\001\021\003\131\000\244\003\131\002\227\003\131\001\028\001.\002\216\003\131\006\209\004{\001/\002\210\000\244\004\136\002l\002m\001\158\006\146\000\244\000\244\0014\003\131\004\189\002\213\002p\002\219\002\212\000\241\000\244\002\181\004\197\002\225\004\204\001\196\002\215\002\213\003\131\002\219\002\182\001$\0014\006\230\001c\002\225\003\240\001\196\002\215\006\252\000\244\003\131\006\157\002\208\000\244\001B\004\218\002\210\000\244\002\227\002\216\000\244\001/\006\191\002l\002m\001\158\003\131\004\229\001,\002p\002\227\002\212\000\241\006\203\007/\006\207\000\244\006\211\002\181\005\007\005\000\006\216\002l\002m\001\158\005\002\006\238\002\182\002\213\005\005\002\219\0014\005\020\003\232\001}\006\228\002\225\002\181\001\196\002\215\002\208\b\014\005\n\002\216\b\015\007;\002\182\003\131\006\241\000\244\006\235\005\019\007K\006\238\002\210\000\244\003\224\006\242\001$\002\208\007M\001`\002\227\006\249\005\015\005\018\005\"\002p\b\014\002\212\000\241\b\015\002\213\003\131\002\219\006\241\005-\002N\005,\007\005\002\225\000\244\001\196\002\215\006\242\001\021\001,\006\243\0051\003\131\005<\001\028\001.\002\024\003\131\000\237\0028\005G\000\241\000\242\003\131\002\216\002\210\0020\005C\006\253\002\227\0024\002[\001\028\003\131\000\241\000\244\005S\006\243\002p\005M\002\212\000\241\000\244\007\014\002\210\003\131\006\244\002l\002m\001\158\000\244\006\171\003\131\002\213\005O\002\219\006\245\002p\005g\002\212\000\241\002\225\002\181\001\196\002\215\002l\002m\001\158\005[\007@\001/\002\182\002\216\006\244\0025\005f\005a\002\205\b\016\005e\002\181\006\173\005r\006\245\002\208\007\147\001\021\002\227\0026\002\182\007\161\002\216\001\028\001.\002\\\002\218\007\173\006\247\005\209\006\174\0014\002\213\002\208\002\219\006\176\b\020\b\b\006\248\006\183\002\225\006\250\001\196\002\215\006\255\002l\002m\001\158\005w\b\019\005z\002\213\005~\003\150\007\001\006\247\b\024\005\134\005\141\002\225\002\181\001\196\002\215\005\152\002\024\006\248\002\227\002:\006\250\002\182\005\208\006\255\005\201\007\002\0020\002\233\005\202\002\210\0024\001/\001\028\007\001\002\208\005\207\000\237\002\227\005\211\000\241\000\242\005\212\002p\005\243\002\212\000\241\005\236\002\210\005\237\002l\002m\001\158\007\002\002l\002m\001\158\005\242\006\000\006\r\006\t\002p\0014\002\212\000\241\002\181\006\n\006\012\0067\002\181\006\171\006\027\006\031\006!\002\182\0025\006#\002\216\002\182\006/\002\232\006?\006A\006B\003.\006H\006M\002\208\006Q\0026\006c\002\208\006j\006n\006\134\002\216\006\155\002\210\006\179\006\189\006\173\001$\006\237\006\231\001f\006\232\002\213\006\236\002\219\001$\002p\006\251\002\212\000\241\002\225\007\000\001\196\002\215\006\174\007*\007>\007?\007C\006\176\002\213\007\146\002\219\006\180\007\150\001,\007\160\007\164\002\225\007\250\001\196\002\215\000\000\000\000\000\237\000\000\002\227\000\241\000\242\000\000\002\216\000\000\000\000\000\000\000\000\002\210\000\000\000\000\000\000\002\210\000\000\002l\002m\001\158\002\227\000\000\000\000\000\000\002p\000\000\002\212\000\241\002p\000\000\002\212\000\241\002\181\006\171\000\000\002\213\000\000\002\219\000\000\000\000\000\000\002\182\000\000\002\225\000\000\001\196\002\215\0031\000\000\000\000\001$\000\000\000\000\001l\002\208\002l\002m\001\158\002\216\000\000\000\000\000\000\002\216\006\173\000\000\000\000\000\000\000\000\001\021\002\227\002\181\000\000\000\000\000\000\001\028\001.\001\021\000\000\001,\002\182\000\000\006\174\001\028\001.\000\000\003E\006\176\002\213\000\000\002\219\006\177\002\213\002\208\002\219\001$\002\225\000\000\001\196\002\215\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\000\000\000\000\002l\002m\001\158\000\000\002l\002m\001\158\002\210\000\000\000\000\000\000\000\000\002\227\000\000\000\237\002\181\002\227\000\241\000\242\002\181\002p\001/\002\212\000\241\002\182\002l\002m\001\158\002\182\001/\003H\000\000\000\000\000\000\003P\000\000\000\000\002\208\000\000\000\000\002\181\002\208\002l\002m\001\158\002\210\001\021\006\171\001$\002\182\000\000\0014\001\028\001.\002\216\003S\000\000\002\181\002p\004\175\002\212\000\241\002\208\000\000\002\024\000\000\002\182\002V\000\000\000\000\000\000\000\000\003^\000\000\0020\000\000\000\000\006\173\0024\002\208\001\028\000\000\000\000\002\213\000\000\002\219\000\000\000\000\000\000\000\000\001\021\002\225\002\216\001\196\002\215\006\174\001\028\001.\000\000\002\210\006\176\000\000\000\000\002\210\006\187\000\000\000\000\000\000\001/\000\000\000\000\000\000\002p\000\000\002\212\000\241\002p\002\227\002\212\000\241\000\000\002\213\0025\002\219\002\210\000\000\000\000\001$\000\000\002\225\000\000\001\196\002\215\000\000\005\244\000\000\0026\002p\0014\002\212\000\241\002\210\000\000\002l\002m\001\158\002\216\000\000\000\000\000\000\002\216\000\000\001/\001\021\002p\002\227\002\212\000\241\002\181\001\028\001.\000\000\007O\005\245\007\185\005\246\000\000\002\182\000\000\001$\000\000\002\216\005\217\003c\000\000\002\213\000\000\002\219\000\000\002\213\002\208\002\219\004\172\002\225\000\000\001\196\002\215\002\225\002\216\001\196\002\215\001$\002l\002m\001\158\005\247\000\000\001,\000\000\000\000\002\213\000\000\002\219\000\000\000\000\000\000\000\000\002\181\002\225\002\227\001\196\002\215\000\000\002\227\000\000\001/\002\182\002\213\000\000\002\219\001$\000\000\003f\000\000\000\000\002\225\000\000\001\196\002\215\002\208\005\248\000\000\001\021\000\000\002\227\002l\002m\001\158\001\028\001.\005\249\005\250\002\210\005\251\000\000\007P\000\000\002l\002m\001\158\002\181\002\227\000\000\000\000\000\000\002p\000\000\002\212\000\241\002\182\001$\000\000\002\181\005\224\000\000\003l\000\000\000\000\006<\000\000\000\000\002\182\002\208\000\000\001\021\000\000\000\000\003o\000\000\000\000\001\028\001.\000\000\000\000\002\208\002l\002m\001\158\001,\002\216\000\000\002\210\005\253\007\187\001/\005\255\001\021\000\000\006\004\006\014\002\181\000\000\001\028\001.\002p\007R\002\212\000\241\0068\002\182\000\000\000\000\000\000\000\000\000\000\003\137\000\000\000\000\002\213\000\000\002\219\000\000\002\208\000\000\004\174\001\021\002\225\0069\001\196\002\215\000\000\001\028\001.\000\000\002\210\000\000\001/\000\000\002\216\002l\002m\001\158\000\000\000\000\000\000\000\000\002\210\002p\000\000\002\212\000\241\000\000\002\227\000\237\002\181\000\000\000\241\000\242\001/\002p\000\000\002\212\000\241\002\182\000\000\001\021\0014\002\213\000\000\002\219\000\000\001\028\001.\003\147\000\000\002\225\002\208\001\196\002\215\001$\000\000\002\216\007\\\000\000\002\210\000\000\006\171\001/\007P\002l\002m\001\158\000\000\002\216\000\000\000\000\000\000\002p\000\000\002\212\000\241\002\227\000\000\000\000\002\181\000\000\000\000\001,\000\000\000\000\002\213\000\000\002\219\002\182\000\000\000\000\006\173\004\183\002\225\003\141\001\196\002\215\002\213\000\000\002\219\000\000\002\208\001/\000\000\000\000\002\225\002\216\001\196\002\215\006\174\002l\002m\001\158\002\210\006\176\002l\002m\001\158\006\205\002\227\000\000\000\000\000\000\000\000\000\000\002\181\002p\000\000\002\212\000\241\002\181\002\227\0014\000\000\002\182\002\213\000\000\002\219\000\000\002\182\000\000\000\000\000\000\002\225\003\152\001\196\002\215\002\208\002\024\003\154\000\000\002|\002\208\002l\002m\001\158\000\000\000\000\0020\001\021\002\216\000\000\0024\002\210\001\028\001\028\001.\000\000\002\181\002\227\002\024\000\000\000\000\004\127\000\000\000\000\002p\002\182\002\212\000\241\0020\000\000\002\024\000\000\0024\004\224\001\028\003\158\000\000\002\213\002\208\003\150\0020\000\000\000\000\000\000\0024\002\225\001\028\001\196\002\215\001$\000\000\000\000\000\000\000\000\0025\000\000\000\000\002\210\002\216\002l\002m\001\158\002\210\000\000\000\000\000\000\000\000\000\000\0026\001/\002p\002\227\002\212\000\241\002\181\002p\0025\002\212\000\241\000\000\000\000\000\000\000\000\002\182\000\000\000\000\000\000\002\213\0025\002\219\0026\000\000\000\000\003\166\000\000\002\225\002\208\001\196\002\215\0014\002\210\000\000\0026\000\000\002\216\002l\002m\001\158\000\000\002\216\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\000\000\000\000\002\181\002\227\000\000\000\000\000\000\000\000\000\000\001$\000\000\002\182\001%\000\000\000\000\002\213\000\000\003\150\000\000\001;\002\213\003\172\003\150\002\225\002\208\001\196\002\215\000\000\002\225\002\216\001\196\002\215\000\000\002l\002m\001\158\001\021\001,\000\000\000\000\002\210\000\000\001\028\001.\000\000\000\000\001{\000\000\002\181\002\227\000\000\000\000\000\000\002p\002\227\002\212\000\241\002\182\002\213\000\000\003\150\000\000\000\000\000\000\000\000\000\000\002\225\003\178\001\196\002\215\002\208\000\000\000\000\000\000\000\000\000\000\002l\002m\001\158\002\024\000\000\000\000\004\239\0019\000\000\000\000\002\210\002\216\000\000\0020\000\000\002\181\002\227\0024\000\000\001\028\000\000\000\000\001/\002p\002\182\002\212\000\241\000\000\000\000\000\000\003\185\000\000\000\000\002\024\000\000\000\000\004\243\002\208\001\021\000\000\002\213\000\000\003\150\0020\001\028\001.\000\000\0024\002\225\001\028\001\196\002\215\004\187\002l\002m\001\158\002\210\002\216\000\000\000\000\000\000\0025\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002p\000\000\002\212\000\241\000\000\002\227\0026\000\000\002\182\000\000\000\000\002l\002m\001\158\003\190\000\000\000\000\002\213\000\000\003\150\000\000\002\208\0025\000\000\001B\002\225\002\181\001\196\002\215\000\000\002\210\001/\000\000\000\000\002\216\002\182\0026\000\000\002l\002m\001\158\003\195\000\000\002p\000\000\002\212\000\241\000\000\002\208\000\000\000\000\002\227\000\237\002\181\000\000\000\241\000\242\000\000\000\000\000\000\000\000\0014\002\182\002\213\001\127\003\150\002l\002m\001\158\000\000\000\000\002\225\003\202\001\196\002\215\002\208\000\000\002\216\000\000\000\000\000\000\002\181\000\000\002\210\000\000\006\171\000\000\000\000\000\000\000\000\002\182\002\024\000\000\000\000\004\246\000\000\002p\002\227\002\212\000\241\003\207\0020\000\000\002\208\000\000\0024\002\213\001\028\002\219\000\000\002\210\000\000\000\000\000\000\002\225\006\173\001\196\002\215\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\001$\006\238\002\216\007j\000\000\006\174\000\000\000\000\000\000\002\210\006\176\000\000\002\227\000\000\006\224\000\000\b\014\000\000\000\000\b\015\000\000\0025\002p\006\241\002\212\000\241\000\000\000\000\001,\002\216\000\000\002\213\006\242\002\219\000\000\0026\000\000\002\210\000\000\002\225\000\000\001\196\002\215\000\000\000\000\000\000\002l\002m\001\158\000\000\002p\000\000\002\212\000\241\000\000\000\000\002\216\000\000\002\213\000\000\002\219\002\181\006\243\000\000\000\000\002\227\002\225\000\000\001\196\002\215\002\182\000\000\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\003\212\000\000\000\000\002\208\002\216\002\213\000\000\003\150\002\181\000\000\000\000\000\000\002\227\002\225\000\000\001\196\002\215\002\182\006\244\000\000\000\000\002l\002m\001\158\000\000\001\021\000\000\003\227\006\245\000\000\002\208\001\028\001.\002\213\000\000\003\150\002\181\000\000\000\000\002\227\000\000\002\225\000\000\001\196\002\215\002\182\002l\002m\001\158\000\000\b\025\000\000\000\000\000\000\000\000\003\230\000\000\000\000\002\208\000\000\000\000\002\181\000\000\000\000\000\000\002\210\000\000\002\227\000\000\006\247\002\182\000\000\000\000\002l\002m\001\158\003\236\000\000\002p\006\248\002\212\000\241\006\250\002\208\000\000\006\255\000\000\001/\002\181\000\000\000\000\000\000\002\210\000\000\000\000\007\001\000\000\002\182\000\000\000\000\002l\002m\001\158\003\238\000\000\002p\000\000\002\212\000\241\000\000\002\208\000\000\002\216\000\000\007\002\002\181\000\000\0014\000\000\000\000\002\210\000\000\000\000\000\000\002\182\000\000\000\000\000\000\002\024\001$\003\248\005\004\007g\002p\000\000\002\212\000\241\002\208\0020\002\216\000\000\002\213\0024\003\150\001\028\002\210\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\000\000\000\000\001$\001,\002p\007m\002\212\000\241\000\000\000\000\000\000\000\000\000\000\002\216\002\213\000\000\003\150\000\000\002\210\000\000\000\000\002\227\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\001,\002p\0025\002\212\000\241\000\000\000\000\000\000\002\216\000\000\001$\000\000\002\213\007s\003\150\002\210\0026\000\000\002\227\000\000\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\000\000\000\000\002\216\000\000\002\213\001,\002\219\000\000\000\000\000\000\000\000\000\000\002\225\002\227\001\196\002\215\000\000\001\021\000\000\002l\002m\001\158\000\000\001\028\001.\000\000\000\000\000\000\000\000\002\216\000\000\002\213\000\000\002\219\002\181\000\000\000\000\000\000\002\227\002\225\000\000\001\196\002\215\002\182\001\021\000\000\002l\002m\001\158\004\001\001\028\001.\001$\000\000\000\000\007|\002\208\000\000\002\213\000\000\002\219\002\181\000\000\000\000\000\000\002\227\002\225\000\000\001\196\002\215\002\182\002l\002m\001\158\000\000\000\000\004\004\000\000\000\000\001/\001,\000\000\001\021\002\208\000\000\000\000\002\181\000\000\001\028\001.\000\000\000\000\002\227\000\000\000\000\002\182\000\000\000\000\002l\002m\001\158\004\018\000\000\000\000\000\000\000\000\001/\000\000\002\208\0014\000\000\000\000\000\000\002\181\000\000\000\000\000\000\000\000\002\210\000\000\000\000\000\000\002\182\000\000\000\000\002l\002m\001\158\004\021\000\000\000\000\002p\000\000\002\212\000\241\002\208\0014\000\000\000\000\000\000\002\181\000\000\000\000\000\000\001/\002\210\000\000\000\000\001$\002\182\000\000\007\134\000\000\002l\002m\001\158\000\000\001\021\002p\004\031\002\212\000\241\002\208\001\028\001.\002\216\000\000\000\000\002\181\000\000\002\210\000\000\000\000\000\000\0014\000\000\001,\002\182\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\004:\000\000\000\000\002\208\000\000\002\216\000\000\002\213\000\000\002\219\002\210\000\000\000\000\000\000\000\000\002\225\000\000\001\196\002\215\002\024\000\000\000\000\005Q\002p\000\000\002\212\000\241\000\000\000\000\0020\002\216\000\000\001/\0024\002\213\001\028\002\219\002\210\000\000\000\000\000\000\002\227\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\000\000\000\000\002\216\000\000\002\213\000\000\002\219\0014\000\000\000\000\002\210\001\021\002\225\002\227\001\196\002\215\000\000\001\028\001.\002l\002m\001\158\0025\002p\000\000\002\212\000\241\000\000\000\000\002\216\000\000\002\213\000\000\002\219\002\181\000\000\0026\000\000\002\227\002\225\000\000\001\196\002\215\002\182\000\000\000\000\002l\002m\001\158\004w\005\244\000\000\000\000\000\000\000\000\000\000\002\208\002\216\002\213\000\000\004\"\002\181\000\000\000\000\000\000\002\227\002\225\000\000\001\196\002\215\002\182\000\000\000\000\001/\000\000\000\000\004\132\000\000\000\000\005\245\007\167\005\246\000\000\002\208\000\000\000\000\002\213\000\000\004=\000\000\000\000\000\000\002\227\000\000\002\225\000\000\001\196\002\215\002l\002m\001\158\000\000\000\000\0014\000\000\003J\001\158\000\000\000\000\002\024\000\000\005\247\005]\002\181\000\000\000\000\000\000\000\000\002\210\0020\002\227\000\000\002\182\0024\000\000\001\028\003h\001\175\004\192\001\161\001\162\002p\000\000\002\212\000\241\002\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\210\005\248\000\000\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\005\249\005\250\002p\005\251\002\212\000\241\000\000\000\000\002\181\002\216\000\000\0025\000\000\003m\003}\003~\000\000\002\182\000\000\002\024\000\000\000\000\005c\005\028\000\000\0026\000\000\000\000\006<\0020\002\208\000\000\000\000\0024\000\000\001\028\002\216\000\000\002\213\000\000\002\219\002\210\000\000\000\000\000\000\000\000\002\225\001\184\001\196\002\215\000\000\000\000\005\253\000\000\002p\005\255\002\212\000\241\006\004\006\014\001\167\000\000\000\000\000\241\000\000\002\213\000\000\002\219\0068\000\000\000\000\000\000\002\227\002\225\000\000\001\196\002\215\0025\000\000\001\157\001\158\000\000\000\000\000\000\000\000\000\000\000\000\0069\002\216\000\000\000\000\0026\002\210\000\000\000\000\003\129\004\198\000\000\000\000\002\227\001\159\001\175\000\000\001\161\001\162\002p\000\000\002\212\000\241\000\000\000\000\002l\002m\001\158\000\000\000\000\000\000\002\213\000\000\002\219\000\000\000\000\000\000\001\186\004\233\002\225\002\181\001\196\002\215\000\000\000\000\001\187\000\000\001\196\001\165\002\182\000\000\000\000\000\000\002\216\002\024\006P\000\000\005l\001\176\000\000\001\177\002\140\002\208\000\000\0020\002\227\000\000\000\000\0024\000\000\001\028\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\002\219\000\000\002\181\000\000\000\000\000\000\002\225\001\184\001\196\002\215\000\000\002\182\000\000\000\000\000\000\000\000\000\000\006S\000\000\000\000\001\167\000\000\000\000\000\241\002\208\000\000\000\000\000\000\0025\000\000\000\000\004\t\002\227\002l\002m\001\158\000\000\002l\002m\001\158\002\210\000\000\0026\000\000\000\000\000\000\000\000\000\000\002\181\000\000\000\000\000\000\002\181\002p\000\000\002\212\000\241\002\182\000\000\000\000\000\000\002\182\002\024\006b\000\000\006\002\000\000\006e\000\000\000\000\002\208\000\000\0020\000\000\002\208\000\000\0024\000\000\001\028\000\000\000\000\000\000\000\000\001\186\000\000\000\000\002\210\002\216\000\000\000\000\000\000\001\187\000\000\001\196\001\165\001$\000\000\000\000\005\221\002p\000\000\002\212\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\002\219\000\000\0025\000\000\000\000\001,\002\225\000\000\001\196\002\215\000\000\002l\002m\001\158\002\210\002\216\0026\000\000\002\210\000\000\000\000\000\000\000\000\002l\002m\001\158\002\181\002p\000\000\002\212\000\241\002p\002\227\002\212\000\241\002\182\000\000\000\000\002\181\000\000\000\000\006r\000\000\000\000\002\213\000\000\002\219\002\182\002\208\000\000\000\000\005\223\002\225\006u\001\196\002\215\002l\002m\001\158\000\000\002\208\002\216\000\000\000\000\000\000\002\216\000\000\000\000\000\000\000\000\000\000\002\181\000\000\000\000\000\000\000\000\000\000\000\000\002\227\000\000\002\182\000\000\001\021\000\000\000\000\000\000\006\138\000\000\001\028\005\226\002\213\000\000\002\219\002\208\002\213\000\000\002\219\000\000\002\225\000\000\001\196\002\215\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002\210\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\210\002p\002\227\002\212\000\241\002\181\002\227\000\000\000\000\000\000\000\000\000\000\000\000\002p\002\182\002\212\000\241\000\000\000\000\000\000\006\141\000\000\005\227\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\000\000\000\000\002\210\000\000\002\216\000\000\005\173\000\000\005\232\000\000\005\229\000\000\000\000\000\000\000\000\002p\002\216\002\212\000\241\000\000\000\000\0014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\002\219\000\000\000\000\000\000\000\000\000\000\002\225\000\000\001\196\002\215\002\213\000\000\002\219\000\000\002\216\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\002\210\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\002\227\000\000\000\000\000\000\002p\000\000\002\212\000\241\002\181\000\000\000\000\002\213\002\227\002\219\000\000\003J\001\158\002\182\000\000\002\225\000\000\001\196\002\215\006\145\000\000\000\000\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\003J\001\158\003h\001\175\002\216\001\161\001\162\000\000\000\000\000\000\001$\002\227\000\000\001%\000\000\001\157\001\158\000\000\000\000\000\000\001;\003h\001\175\000\000\001\161\001\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\002\219\001\159\001\175\001,\001\161\001\162\002\225\000\000\001\196\002\215\003m\003}\003~\000\000\001\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\210\000\000\007$\000\000\000\000\000\000\003m\003}\003~\002\227\000\000\001\157\001\158\002p\000\000\002\212\000\241\000\000\000\000\000\000\000\000\001\184\001\176\000\000\001\177\002\140\0019\000\000\000\000\000\000\000\000\000\000\001\159\001\160\001\167\001\161\001\162\000\241\000\000\000\000\001\184\000\000\000\000\006\238\000\000\000\000\000\000\002\216\000\000\000\000\000\000\000\000\000\000\001\167\000\000\001\184\000\241\001\021\000\000\000\000\000\000\006\239\000\000\001\028\001.\006\241\000\000\000\000\001\167\003\129\006\156\000\241\000\000\000\000\006\242\000\000\002\213\000\000\002\219\004\t\000\000\000\000\000\000\000\000\002\225\000\000\001\196\002\215\003\129\006\190\000\000\002l\002m\001\158\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\006\243\001\187\002\181\001\196\001\165\001\166\002\227\000\000\001B\000\000\000\000\002\182\001\186\000\000\000\000\001/\000\000\007\177\001\167\001\253\001\187\000\241\001\196\001\165\002\208\000\000\000\000\001\186\002l\002m\001\158\000\000\002l\002m\001\158\001\187\006\244\001\196\001\165\000\000\000\000\000\000\000\000\002\181\000\000\0014\006\245\002\181\001E\000\000\000\000\000\000\002\182\002l\002m\001\158\002\182\000\000\007\179\000\000\000\000\000\000\000\000\000\000\000\000\002\208\000\000\000\000\002\181\002\208\000\000\000\000\006\246\000\000\000\000\000\000\000\000\002\182\000\000\000\000\000\000\001\186\000\000\001\157\001\158\000\000\002\210\006\247\000\000\001\195\002\208\001\196\001\165\000\000\000\000\000\000\000\000\006\248\000\000\002p\006\250\002\212\000\241\006\255\001\159\001\175\000\000\001\161\001\162\000\000\000\000\000\000\000\000\007\001\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\210\000\000\000\000\000\000\002\210\007\002\002\216\000\000\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\002p\000\000\002\212\000\241\001\176\000\000\001\177\001\229\002\210\000\000\000\000\001\157\001\158\000\000\000\000\000\000\000\000\000\000\002\213\000\000\002\219\002p\000\000\002\212\000\241\000\000\002\225\000\000\001\196\002\215\002\216\000\000\001\159\001\175\002\216\001\161\001\162\001\184\000\000\000\000\000\000\000\000\001\226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\167\000\000\002\227\000\241\001$\002\216\000\000\001%\000\000\002\213\001q\002\219\000\000\002\213\001;\004\234\000\000\002\225\000\000\001\196\002\215\002\225\000\000\001\196\002\215\000\000\001\176\001$\001\177\001\229\001%\001r\001,\001q\002\213\000\000\004\208\001;\001\136\000\000\000\000\000\000\002\225\002\227\001\196\002\215\000\000\002\227\000\000\000\000\000\000\000\000\000\000\000\000\001r\001,\000\000\000\000\000\000\001\184\000\000\001s\000\000\001\186\000\000\000\000\000\000\000\000\002\227\001\157\001\158\001\187\001\167\001\196\001\165\000\241\000\000\001$\0019\000\000\001%\000\000\000\000\001q\000\000\000\000\000\000\001;\000\000\000\000\001\159\001\175\000\000\001\161\001\162\001w\000\000\000\000\000\000\000\000\001\231\0019\000\000\000\000\001r\001,\000\000\000\000\000\000\001\021\000\000\001\134\000\000\000\000\000\000\001\028\001.\000\000\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\002m\001\158\000\000\000\000\000\000\001\021\000\000\001\176\001\186\001\177\001\229\001\028\001.\000\000\002\181\000\000\001\187\000\000\001\196\001\165\000\000\001\157\001\158\002\182\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\208\001B\000\000\000\000\001\184\001w\001\159\001\175\001/\001\161\001\162\000\000\001\129\000\000\000\000\000\000\000\000\001\167\000\000\001\021\000\241\000\000\000\000\000\000\001B\001\028\001.\000\000\000\000\000\000\000\000\001/\000\000\001\157\001\158\001\129\000\000\000\000\0014\000\000\000\000\001E\000\000\000\000\000\000\006\238\000\000\000\000\000\000\000\000\001\176\000\000\001\177\002\140\001\159\001\175\000\000\001\161\001\162\000\000\000\000\0014\002\210\b\005\001E\000\000\000\000\006\241\000\000\000\000\000\000\000\000\000\000\000\000\001B\002p\006\242\002\212\000\241\000\000\001\186\001/\000\000\001\184\000\000\001\129\000\000\000\000\001\187\000\000\001\196\001\165\000\000\000\000\000\000\000\000\001\167\000\000\001\176\000\241\001\177\002\149\000\000\000\000\000\000\000\000\006\243\004\005\000\000\002\216\000\000\0014\001\157\001\158\001E\000\000\000\000\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\157\001\158\001\184\000\000\001\159\001\175\000\000\001\161\001\162\002\213\000\000\004e\000\000\006\244\000\000\001\167\000\000\002\225\000\241\001\196\002\215\001\159\001\175\006\245\001\161\001\162\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\002l\002m\001\158\000\000\001\187\000\000\001\196\001\165\000\000\002\227\000\000\000\000\b\006\002\158\001\176\002\181\001\177\002\149\000\000\000\000\000\000\000\000\000\000\000\000\002\182\000\000\000\000\000\000\000\000\000\000\006\247\001\176\000\000\001\177\003:\000\000\000\000\002\208\000\000\000\000\006\248\000\000\000\000\006\250\001\186\000\000\006\255\001\184\000\000\001\157\001\158\000\000\001\187\000\000\001\196\001\165\007\001\000\000\000o\000\000\001\167\000\000\000\000\000\241\001\184\000\000\002l\002m\001\158\000\000\001\159\001\194\000\000\001\161\001\162\007\002\000\000\001\167\000\000\000\000\000\241\002\181\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\002\182\000\000\002\155\000\000\001$\000\000\000\000\005\221\002\181\002\210\000\000\000\000\000\000\002\208\002l\002m\001\158\002\182\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\000\000\000\000\002\181\002\208\000\000\001,\001\186\000\000\000\000\000\000\000\000\002\182\000\000\000\000\001\187\000\000\001\196\001\165\000\000\000\000\000\000\000\000\000\000\001\186\002\208\000\000\000\000\000\000\000\000\002\216\001\166\001\187\000\000\001\196\001\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\167\000\000\000\000\000\241\000\000\002\210\000\000\000\000\005\223\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\003\223\002p\000\000\002\212\000\241\002\210\002\225\000\000\001\196\002\215\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\001\021\000\000\000\000\002\181\002\210\000\000\001\028\005\226\000\000\000\000\002\227\000\000\002\182\002\216\000\000\000\000\000\000\002p\000\000\002\212\000\241\002l\002m\001\158\001\186\002\208\000\000\000\000\000\000\000\000\002\216\000\000\001\195\000\000\001\196\001\165\002\181\000\000\001$\000\000\000\000\005\221\002\213\000\000\003\135\002\182\000\000\000\000\000\000\000\000\002\225\002\216\001\196\002\215\000\000\000\000\000\000\000\000\002\208\002\213\000\000\002\221\005\227\000\000\000\000\000\000\001,\002\225\000\000\001\196\002\215\002l\002m\001\158\000\000\000\000\002\227\005\173\000\000\005\231\002\213\005\229\002\223\000\000\000\000\000\000\002\181\002\210\002\225\000\000\001\196\002\215\0014\002\227\000\000\002\182\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\002l\002m\001\158\000\000\002\208\000\000\000\000\000\000\005\223\000\000\002\227\000\000\000\000\000\000\000\000\002\181\002\210\000\000\002l\002m\001\158\000\000\000\000\000\000\002\182\002l\002m\001\158\000\000\002p\002\216\002\212\000\241\002\181\000\000\000\000\000\000\002\208\000\000\001\021\002\181\000\000\002\182\000\000\000\000\001\028\005\226\000\000\000\000\002\182\000\000\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\002\213\000\000\002\228\002\208\002\216\000\000\000\000\002\210\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\000\000\000\000\001$\000\000\002p\0017\002\212\000\241\000\000\000\000\000\000\000\000\0018\000\000\000\000\000\000\000\000\002\213\002\227\002\235\000\000\000\000\000\000\000\000\002\210\002\225\005\227\001\196\002\215\000\000\001,\000\000\000\000\000\000\000\000\000\000\000\000\002p\002\216\002\212\000\241\005\173\002\210\005\230\000\000\005\229\002l\002m\001\158\002\210\000\000\002\227\000\000\000\000\000\000\002p\0014\002\212\000\241\000\000\000\000\002\181\002p\000\000\002\212\000\241\000\000\002\213\000\000\002\237\002\182\002\216\000\000\000\000\000\000\002\225\0019\001\196\002\215\002l\002m\001\158\000\000\002\208\000\000\000\000\000\000\000\000\000\000\002\216\000\000\000\000\000\000\000\000\002\181\000\000\002\216\000\000\000\000\000\000\002\213\002\227\002\239\002\182\000\000\000\000\000\000\001\021\002\225\000\000\001\196\002\215\000\000\001\028\001.\000\000\002\208\000\000\002\213\000\000\002\241\000\000\000\000\000\000\000\000\002\213\002\225\002\243\001\196\002\215\000\000\000\000\000\000\002\225\002\227\001\196\002\215\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\002\210\000\000\000\000\000\000\000\000\000\000\000\000\002\227\002\181\000\000\000\000\000\000\000\000\002p\002\227\002\212\000\241\002\182\000\000\000\000\000\000\000\000\000\000\000\000\001/\000\000\002l\002m\001\158\000\000\002\208\000\000\000\000\002\210\000\000\000\000\000\000\000\000\002l\002m\001\158\002\181\000\000\000\000\000\000\000\000\002p\002\216\002\212\000\241\002\182\000\000\000\000\002\181\0014\000\000\000\000\000\000\000\000\002l\002m\001\158\002\182\002\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\208\002\213\000\000\002\245\000\000\002\216\000\000\000\000\002\182\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002\210\000\000\000\000\000\000\002\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\002\213\002\227\002\247\000\000\000\000\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\210\002p\002\216\002\212\000\241\000\000\002\227\000\000\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\000\000\000\000\000\000\002\210\000\000\000\000\000\000\002l\002m\001\158\000\000\000\000\000\000\002\213\000\000\002\249\002p\002\216\002\212\000\241\000\000\002\225\002\181\001\196\002\215\002l\002m\001\158\000\000\002\216\000\000\002\182\000\000\000\000\000\000\000\000\000\000\002l\002m\001\158\002\181\000\000\000\000\000\000\002\208\000\000\002\213\002\227\002\251\002\182\002\216\000\000\002\181\000\000\002\225\000\000\001\196\002\215\002\213\000\000\002\253\002\182\002\208\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\000\000\002\213\002\227\002\255\000\000\001$\000\000\000\000\001%\002\225\000\000\001\196\002\215\000\000\002\227\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\002\210\000\000\000\000\000\000\000\000\001,\000\000\002\227\000\000\000\000\005\166\000\000\000\000\002p\000\000\002\212\000\241\000\000\002\210\000\000\002l\002m\001\158\000\000\002l\002m\001\158\000\000\000\000\000\000\002\210\002p\000\000\002\212\000\241\002\181\000\000\000\000\000\000\002\181\000\000\000\000\000\000\002p\002\182\002\212\000\241\002\216\002\182\000\000\000\000\0019\000\000\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\002\208\000\000\000\000\000\000\002\216\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\216\003\001\000\000\000\000\002\181\001\021\000\000\002\225\000\000\001\196\002\215\001\028\001.\002\182\000\000\000\000\000\000\002\213\000\000\003\003\000\000\000\000\000\000\000\000\000\000\002\225\002\208\001\196\002\215\002\213\000\000\003\005\000\000\002\227\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\002\210\000\000\000\000\000\000\002\210\000\000\000\000\000\000\000\000\002\227\000\000\000\000\000\000\002p\000\000\002\212\000\241\002p\001B\002\212\000\241\002\227\000\000\000\000\000\000\001/\002l\002m\001\158\005\171\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\181\000\000\000\000\000\000\002\181\002\210\002\216\000\000\000\000\002\182\002\216\000\000\000\000\002\182\0014\000\000\000\000\001E\002p\000\000\002\212\000\241\002\208\000\000\000\000\000\000\002\208\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\002\213\000\000\003\007\000\000\002\213\000\000\003\t\002\181\002\225\000\000\001\196\002\215\002\225\000\000\001\196\002\215\002\182\002\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\000\000\002\227\000\000\000\000\000\000\002\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\003\011\002\210\001\157\001\158\000\000\002\210\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\002p\000\000\002\212\000\241\000\000\001\159\001\175\000\000\001\161\001\162\000\000\000\000\000\000\000\000\002\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\157\001\158\000\000\002\210\000\000\000\000\000\000\000\000\002\216\003/\000\000\000\000\002\216\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\001\159\0032\000\000\001\161\001\162\000\000\001\176\000\000\001\177\003&\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\003\r\000\000\002\213\000\000\003\015\000\000\002\225\000\000\001\196\002\215\002\225\002\216\001\196\002\215\000\000\000o\000\000\001$\000\000\000\000\001R\001\184\001\157\001\158\000\000\000\000\000\000\001S\000\000\000\000\000\000\000\000\002\227\000\000\001\167\000\000\002\227\000\241\000\000\000\000\002\213\000\000\003\017\001\159\001\175\001,\001\161\001\162\002\225\000\000\001\196\002\215\000\000\000\000\000\000\001\157\001\158\000\000\000\000\001\166\000\000\000\000\000\000\000\000\003Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\167\003T\002\227\000\241\001\159\0032\000\000\001\161\001\162\000\000\000\000\000\000\0033\0036\000\000\001\176\000\000\001\177\002\149\0019\000\000\000\000\001\157\001\158\000\000\001\186\000\000\000\000\000\000\000\000\000\000\003Q\000\000\001\187\000\000\001\196\001\165\0035\000\000\000\000\003T\000\000\001$\001\159\0032\005\221\001\161\001\162\001\184\000\000\001\021\000\000\000\000\000\000\000\000\000\000\001\028\001.\000\000\000\000\000\000\001\167\000\000\001\186\000\241\002l\002m\001\158\000\000\000\000\001,\001\195\000\000\001\196\001\165\000\000\000\000\000\000\000\000\000\000\002\181\001\166\000\000\000\000\000\000\002l\002m\001\158\000\000\002\182\000\000\000\000\000\000\0038\001\167\000\000\000\000\000\241\000\000\000\000\002\181\000\000\002\208\002l\002m\001\158\000\000\000\000\000\000\002\182\000\000\000\000\001/\000\000\000\000\000\000\005\223\000\000\002\181\000\000\001\166\000\000\002\208\000\000\001\186\000\000\000\000\002\182\000\000\000\000\000\000\003U\001\187\001\167\001\196\001\165\000\241\000\000\000\000\000\000\002\208\000\000\0014\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\000\000\003W\001\028\005\226\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\002\210\001\195\000\000\001\196\001\165\000\000\003U\000\000\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\000\000\000\000\002\210\000\000\002l\002m\001\158\000\000\000\000\003V\000\000\000\000\000\000\000\000\001\186\002p\000\000\002\212\000\241\002\181\002\210\000\000\001\195\000\000\001\196\001\165\000\000\005\227\002\182\002\216\000\000\000\000\000\000\002p\000\000\002\212\000\241\002l\002m\001\158\000\000\002\208\005\173\000\000\005\228\000\000\005\229\000\000\000\000\002\216\000\000\000\000\002\181\000\000\000\000\000\000\000\000\0014\002\213\000\000\003\170\002\182\000\000\000\000\000\000\000\000\002\225\002\216\001\196\002\215\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\002\213\000\000\003\176\000\000\000\000\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\000\000\002\227\000\000\000\000\000\000\002\213\000\000\003\182\000\000\000\000\000\000\000\000\002\210\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002\227\000\000\000\000\000\000\002p\000\000\002\212\000\241\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\227\000\000\000\000\000\000\000\000\002\181\002\210\000\000\002l\002m\001\158\000\000\000\000\000\000\002\182\002l\002m\001\158\000\000\002p\002\216\002\212\000\241\002\181\000\000\000\000\000\000\002\208\000\000\000\000\002\181\000\000\002\182\000\000\000\000\000\000\000\000\000\000\000\000\002\182\000\000\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\002\213\000\000\003\188\002\208\002\216\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\227\003\193\000\000\000\000\002\181\000\000\002\210\002\225\000\000\001\196\002\215\000\000\000\000\002\182\002l\002m\001\158\000\000\000\000\002p\000\000\002\212\000\241\000\000\002\210\000\000\002\208\000\000\000\000\002\181\000\000\002\210\000\000\002\227\002l\002m\001\158\002p\002\182\002\212\000\241\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\000\000\000\000\002\208\000\000\002\216\000\000\000\000\000\000\000\000\004L\000\000\000\000\000\000\000\000\000\000\000\000\004U\000\000\000\000\000\000\000\000\000\000\002\216\000\000\000\000\000\000\000\000\000\000\000\000\002\216\000\000\000\000\000\000\002\213\000\000\003\198\000\000\000\000\000\000\002\210\004V\002\225\000\000\001\196\002\215\000\000\000\000\002l\002m\001\158\000\000\002\213\002p\003\205\002\212\000\241\000\000\000\000\002\213\002\225\003\210\001\196\002\215\000\000\002\210\000\000\002\225\002\227\001\196\002\215\000\000\003\219\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\002l\002m\001\158\002o\002\227\002\216\000\000\001\157\001\158\000\000\000\000\002\227\000\000\000\000\000\000\002\181\004Y\000\000\002\212\000\241\001\006\000\000\000\000\000\000\002\182\002l\002m\001\158\001\159\001\175\002\216\001\161\001\162\000\000\002\213\000\000\003\215\002\208\000\000\000\000\002\181\000\000\002\225\000\000\001\196\002\215\000\000\000\000\000\000\002\182\000\000\000\000\000\000\000\000\000\000\004O\000\000\000\000\000\000\002\213\000\000\003\218\002\208\000\000\000\000\002o\000\000\002\225\002\227\001\196\002\215\000\000\001\176\000\000\001\177\002\140\000\000\000\000\002p\002\213\002\212\000\241\000\000\002l\002m\001\158\000\000\002\214\000\000\001\196\002\215\000\000\000\000\002\227\000\000\000\000\000\000\000\000\002\181\002\210\000\000\001\244\001\158\000\000\000\000\001\184\000\000\002\182\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\003\221\000\000\001\167\000\000\002\208\000\241\001\159\002\129\002\210\001\161\001\162\000\000\000\000\004\b\000\000\000\000\002l\002m\001\158\000\000\000\000\002p\000\000\002\212\000\241\002\213\000\000\000\000\000\000\000\000\002\216\002\181\000\000\002\214\000\000\001\196\002\215\000\000\000\000\000\000\002\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\003}\003~\000\000\002\208\000\000\002\216\000\000\000\000\000\000\002\213\000\000\004\012\000\000\000\000\000\000\001\186\002\210\002\225\000\000\001\196\002\215\000\000\000\000\001\187\000\000\001\196\001\165\000\000\000\000\002p\000\000\002\212\000\241\001\184\002\213\000\000\004\014\000\000\000\000\000\000\000\000\000\000\002\225\002\227\001\196\002\215\001\167\000\000\000\000\000\241\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\002l\002m\001\158\000\000\000\000\002\216\000\000\002\210\002\181\000\000\002\227\000\000\000\000\000\000\000\000\002\181\000\000\002\182\000\000\004\023\002p\000\000\002\212\000\241\002\182\000\000\000\000\000\000\000\000\000\000\002\208\000\000\000\000\000\000\002\213\000\000\004&\002\208\000\000\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\001$\000\000\000\000\001%\001\186\000\000\001\130\002\216\000\000\000\000\001;\000\000\001\187\001$\001\196\001\165\001a\000\000\000\000\000\000\000\000\002\227\000\000\001b\000\000\000\000\000\000\001\132\001,\000\000\000\000\000\000\000\000\005\166\000\000\000\000\002\213\000\000\004/\000\000\000\000\001,\000\000\000\000\002\225\002\210\001\196\002\215\000\000\002l\002m\001\158\002\210\000\000\002l\002m\001\158\000\000\002p\000\000\002\212\000\241\000\000\000\000\002\181\002p\000\000\002\212\000\241\000\000\002\227\000\000\000\000\002\182\0019\000\000\000\000\000\000\004\216\001\157\001\158\000\000\000\000\000\000\000\000\000\000\002\208\0019\000\000\000\000\000\000\001w\002\216\000\000\000\000\000\000\000\000\000\000\000\000\002\216\001\159\001\175\000\000\001\161\001\162\001\021\000\000\000\000\000\000\000\000\000\000\001\028\001.\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\002\213\000\000\0041\001\028\001.\000\000\000\000\002\213\002\225\0043\001\196\002\215\000\000\000\000\000\000\002\225\000\000\001\196\002\215\000\000\000\000\000\000\000\000\001\176\000\000\001\177\007\239\002\210\007\241\000\000\001\157\001\158\002o\000\000\002\227\000\000\000\000\000\000\000\000\001B\002p\002\227\002\212\000\241\000\000\002p\001/\002\212\000\241\000\000\005\220\001\159\001\175\000\000\001\161\001\162\001\184\001$\000\000\001/\001%\000\000\000\000\001\130\000\000\001$\000\000\001;\001%\001\167\000\000\001q\000\241\000\000\002\216\001;\0014\000\000\001$\001E\000\000\001%\000\000\000\000\001\132\001,\000\000\000\000\001;\0014\000\000\000\000\001v\001,\000\000\001\176\000\000\001\177\007\024\001\157\001\158\000\000\000\000\002\213\000\000\004A\001,\000\000\002\213\000\000\000\000\002\225\000\000\001\196\002\215\000\000\002\214\000\000\001\196\002\215\001\159\001\175\000\000\001\161\001\162\000\000\000\000\000\000\001\184\000\000\000\000\0019\001\186\001\157\001\158\000\000\000\000\002\227\000\000\0019\001\187\001\167\001\196\001\165\000\241\000\000\000\000\000\000\001w\000\000\000\000\000\000\0019\000\000\001\159\001\175\001w\001\161\001\162\000\000\000\000\000\000\001\021\000\000\001\176\000\000\001\177\001\233\001\028\001.\001\021\000\000\000\000\000\000\000\000\000\000\001\028\001.\000\000\000\000\000\000\001\157\001\158\001\021\000\000\000\000\000\000\000\000\000\000\001\028\001.\000\000\000\000\000\000\000\000\000\000\000\000\001\184\001\176\000\000\001\177\001\221\001\159\001\175\001\186\001\161\001\162\000\000\000\000\000\000\001\167\000\000\001\187\000\241\001\196\001\165\000\000\001B\000\000\000\000\000\000\000\000\000\000\000\000\001/\001B\000\000\000\000\001\129\000\000\000\000\001\184\001/\000\000\001\157\001\158\001\129\000\000\001B\000\000\000\000\000\000\000\000\000\000\001\167\001/\001\176\000\241\001\177\001\218\000\000\000\000\000\000\000\000\0014\001\159\001\175\001E\001\161\001\162\000\000\000\000\0014\000\000\000\000\001E\001\157\001\158\000\000\000\000\000\000\000\000\000\000\001\186\000\000\0014\000\000\000\000\002!\001\184\000\000\001\187\000\000\001\196\001\165\000\000\001$\001\159\001\175\001%\001\161\001\162\001\167\000\000\000\000\000\241\001;\000\000\000\000\001\176\000\000\001\177\001\179\001\157\001\158\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001,\001\187\000\000\001\196\001\165\000\000\000\000\000\000\001\157\001\158\001\159\001\175\000\000\001\161\001\162\000\000\000\000\001\176\001\184\001\177\001\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\159\001\175\001\167\001\161\001\162\000\241\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\001\157\001\158\000\000\0019\000\000\000\000\001\187\001\184\001\196\001\165\000\000\001\176\000\000\001\177\001\185\000\000\000\000\000\000\000\000\000\000\001\167\001\159\001\175\000\241\001\161\001\162\000\000\000\000\000\000\000\000\001\176\000\000\001\177\001\217\001\021\000\000\000\000\000\000\000\000\000\000\001\028\001.\000\000\000\000\001\184\000\000\000\000\000\000\001\157\001\158\000\000\001\186\000\000\000\000\000\000\000\000\000\000\001\167\000\000\001\187\000\241\001\196\001\165\001\184\000\000\001\176\000\000\001\177\001\205\001\159\001\175\000\000\001\161\001\162\000\000\000\000\001\167\000\000\000\000\000\241\000\000\001\157\001\158\001\186\000\000\000\000\000\000\000\000\000\000\001B\003F\001\187\000\000\001\196\001\165\000\000\001/\000\000\001\184\000\000\001\157\001\158\001\159\0032\000\000\001\161\001\162\000\000\000\000\000\000\000\000\001\167\000\000\001\176\000\241\001\177\001\213\000\000\000\000\000\000\001\186\001\159\001\175\000\000\001\161\001\162\0014\000\000\001\187\002#\001\196\001\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\184\001\187\000\000\001\196\001\165\000\000\000\000\000\000\000\000\000\000\001\157\001\158\000\000\001\167\000\000\000\000\000\241\000\000\000\000\001\176\001$\001\177\002\171\001%\000\000\000\000\000\000\000\000\001\186\000\000\001;\001\159\001\175\001\166\001\161\001\162\001\187\000\000\001\196\001\165\000\000\000\000\001\157\001\158\000\000\000\000\001\167\000\000\001,\000\241\000\000\003d\001\184\000\000\000\000\000\000\000\000\000\000\003I\005&\003g\000\000\000\000\001\159\0032\001\167\001\161\001\162\000\241\000\000\000\000\000\000\000\000\000\000\007\172\001\176\001\186\001\177\003\029\000\000\000\000\000\000\000\000\0035\001\187\000\000\001\196\001\165\000\000\000\000\001\157\001\158\000\000\000\000\0019\000\000\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\184\001\186\000\000\001\159\001\175\000\000\001\161\001\162\000\000\001\195\000\000\001\196\001\165\001\167\000\000\000\000\000\241\001\021\000\000\000\000\001\186\000\000\000\000\001\028\001.\000\000\000\000\000\000\001\187\000\000\001\196\001\165\001\166\001\157\001\158\000\000\000\000\000\000\001\157\001\158\000\000\000\000\000\000\000\000\000\000\001\167\000\000\001\176\000\241\001\177\003r\000\000\000\000\000\000\001\159\001\175\000\000\001\161\001\162\001\159\001\175\000\000\001\161\001\162\000\000\000\000\005\244\001\157\001\158\000\000\000\000\000\000\001B\000\000\000\000\000\000\001\186\000\000\000\000\001/\001\184\000\000\003U\005/\001\187\000\000\001\196\001\165\001\159\001\175\000\000\001\161\001\162\001\167\000\000\005\245\000\241\005\246\001\176\000\000\001\177\003u\000\000\001\176\000\000\001\177\003x\000\000\001\186\0014\000\000\000\000\001E\000\000\000\000\000\000\001\195\000\000\001\196\001\165\000\000\001\157\001\158\000\000\000\000\000\000\000\000\005\247\000\000\000\000\000\000\001\184\001\176\000\000\001\177\003\128\001\184\000\000\000\000\000\000\000\000\000\000\001\159\001\175\001\167\001\161\001\162\000\241\000\000\001\167\000\000\001$\000\241\000\000\005\221\000\000\001\186\000\000\000\000\000\000\000\000\000\000\005\248\000\000\001\187\001\184\001\196\001\165\000\000\001\157\001\158\000\000\005\249\005\250\001$\005\251\000\000\001%\001\167\001,\000\000\000\241\000\000\000\000\001;\000\000\001\176\000\000\001\177\004-\001\159\001\175\000\000\001\161\001\162\000\000\000\000\000\000\000\000\000\000\006:\000\000\001,\000\000\001<\000\000\000\000\001\186\000\000\000\000\000\000\000\000\001\186\007\128\000\000\001\187\000\000\001\196\001\165\001\184\001\187\000\000\001\196\001\165\005\253\005\223\000\000\005\255\000\000\000\000\006\004\006\014\001\167\000\000\001\176\000\241\001\177\005\026\000\000\000\000\0068\001\186\000\000\000\000\000\000\000\000\000\000\000\000\0019\001\187\000\000\001\196\001\165\000\000\001$\000\000\001\021\001%\000\000\0069\000\000\000\000\001\028\005\226\001;\000\000\000\000\001\184\001$\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\001;\001\021\001\167\000\000\001,\000\241\001<\001\028\001.\000\000\000\000\000\000\001\157\001\158\000\000\007v\000\000\001\186\001,\000\000\001<\000\000\000\000\000\000\000\000\001\187\000\000\001\196\001\165\007V\000\000\000\000\000\000\001\159\0032\000\000\001\161\001\162\000\000\000\000\005\227\001$\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\0019\001;\000\000\000\000\000\000\005\173\001B\005\240\000\000\005\229\000\000\001\157\001\158\001/\0019\001\186\000\000\001T\000\000\001,\0014\001<\000\000\001\187\000\000\001\196\001\165\000\000\000\000\000\000\001I\001\021\001\159\0032\000\000\001\161\001\162\001\028\001.\000\000\000\000\000\000\000\000\0014\001$\001\021\001E\001%\000\000\000\000\000\000\001\028\001.\000\000\001;\000\000\000\000\000\000\000\000\000\000\001\166\000\000\000\000\000\000\000\000\0019\001\157\001\158\000\000\000\000\000\000\000\000\001,\001\167\001<\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\001B\001\159\0032\001$\001\161\001\162\001%\001/\000\000\000\000\001\021\001T\000\000\001;\001B\000\000\001\028\001.\000\000\000\000\000\000\001/\000\000\001\166\003\249\001T\000\000\000\000\000\000\000\000\000\000\001,\0019\000\000\000\000\000\000\001\167\0014\000\000\000\241\001E\000\000\005&\000\000\003\252\000\000\000\000\000\000\000\000\000\000\001\186\0014\000\000\000\000\001E\000\000\000\000\005)\001\195\000\000\001\196\001\165\000\000\001\021\000\000\001B\000\000\000\000\000\000\001\028\001.\000\000\001/\003\249\000\000\000\000\001T\0019\001\166\001\157\001\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\167\000\000\003\251\000\241\000\000\000\000\000\000\000\000\001\186\001\159\0032\0014\001\161\001\162\001E\000\000\001\195\001\021\001\196\001\165\000\000\000\000\001$\001\028\001.\001%\000\000\001B\000\000\000\000\000\000\000\000\001;\000\000\001/\000\000\000\000\003\249\001T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\244\000\000\000\000\000\000\001,\000\000\000\000\000\000\000\000\000\000\001$\003\250\000\000\001%\000\000\005&\000\000\001\186\0014\000\000\001;\001E\000\000\000\000\000\000\001\195\001B\001\196\001\165\005\245\005\155\005\246\000\000\001/\000\000\000\000\000\000\005/\001,\000\000\001\166\000\000\000\000\001\157\001\158\000\000\000\000\000\000\000\000\002\151\0019\000\000\000\000\001\167\000\000\000\000\000\241\000\000\000\000\000\000\000\000\005\247\000\000\0014\001\159\0032\001E\001\161\001\162\000\000\000\000\000\000\000\000\001\157\001\158\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\0019\000\000\000\000\001\028\001.\000\000\003\249\006v\000\000\000\000\001\159\0032\005\248\001\161\001\162\000\000\000\000\001$\000\000\000\000\001%\000\000\005\249\005\250\000\000\005\251\003\254\001;\000\000\000\000\000\000\001\021\001\186\000\000\000\000\000\000\000\000\001\028\001.\000\000\001\195\000\000\001\196\001\165\001$\001,\000\000\001%\000\000\000\000\005\252\000\000\001B\000\000\001;\000\000\005&\001\166\000\000\001/\000\000\000\000\000\000\005/\000\000\000\000\000\000\000\000\000\000\000\000\001\167\006s\001,\000\241\005\253\000\000\000\000\005\255\000\000\000\000\006\004\006\014\000\000\005&\000\000\000\000\001B\001\166\000\000\0014\0068\0019\001E\001/\000\000\001\157\001\158\002\154\006\129\000\000\001\167\000\000\000\000\000\241\000\000\000\000\000\000\006\225\000\000\0069\000\000\001$\000\000\006\142\001%\000\000\001\159\0032\0019\001\161\001\162\001;\001\021\0014\000\000\000\000\001E\000\000\001\028\001.\000\000\000\000\000\000\001\186\000\000\000\000\000\000\003U\000\000\001,\000\000\001\195\000\000\001\196\001\165\000\000\000\000\000\000\000\000\001\021\005&\000\000\000\000\000\000\000\000\001\028\001.\000\000\006\227\000\000\000\000\000\000\000\000\001\186\000\000\006\139\000\000\000\000\000\000\000\000\000\000\001\195\000\000\001\196\001\165\001\157\001\158\001B\000\000\000\000\000\000\000\000\000\000\000\000\001/\0019\000\000\000\000\005/\000\000\000\000\000\000\000\000\001\166\000\000\000\000\001\159\0032\000\000\001\161\001\162\000\000\000\000\000\000\001B\000\000\001\167\001\157\001\158\000\241\000\000\001/\000\000\000\000\0014\005/\001\021\001E\000\000\000\000\000\000\000\000\001\028\001.\001\157\001\158\000\000\000\000\001\159\0032\000\000\001\161\001\162\000\000\000\000\000\000\001\157\001\158\000\000\000\000\000\000\0014\000\000\003U\001E\001\159\0032\000\000\001\161\001\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\159\0032\000\000\001\161\001\162\000\000\000\000\000\000\001$\000\000\000\000\001%\001\186\000\000\001B\000\000\001\166\000\000\001;\000\000\001\195\001/\001\196\001\165\000\000\005/\000\000\000\000\000\000\001\167\000\000\001$\000\241\000\000\001%\000\000\001,\000\000\001<\000\000\000\000\001;\000\000\000\000\000\000\000\000\000\000\007a\001\166\000\000\000\000\0014\000\000\000\000\001E\000\000\000\000\000\000\000\000\001,\000\000\001\167\001\157\001\158\000\241\001\166\006\169\000\000\000\000\000\000\003(\000\000\000\000\000\000\000\000\000\000\000\000\001\166\001\167\000\000\000\000\000\241\0019\001\159\0032\000\000\001\161\001\162\000\000\000\000\001\167\000\000\001\186\000\241\000\000\000\000\000\000\000\000\006\169\000\000\001\195\000\000\001\196\001\165\000\000\0019\000\000\000\000\000\000\000\000\000\000\001$\000\000\001\021\001%\006\225\006\182\000\000\000\000\001\028\001.\001;\000\000\000\000\001\186\000\000\000\000\006\225\000\000\000\000\001$\000\000\001\195\001%\001\196\001\165\001\021\000\000\000\000\001,\001;\001\186\001\028\001.\000\000\000\000\000\000\000\000\006\181\001\195\003<\001\196\001\165\001\186\000\000\000\000\000\000\000\000\001,\000\000\001\166\001\195\000\000\001\196\001\165\000\000\006\226\000\000\001B\003A\000\000\000\000\000\000\001\167\000\000\001/\000\241\000\000\006\234\001T\000\000\000\000\000\000\000\000\000\000\0019\000\000\001$\000\000\000\000\001%\001B\000\000\000\000\000\000\000\000\000\000\001;\001/\000\000\000\000\000\000\001\208\000\000\0019\0014\000\000\000\000\001E\001$\003\253\001$\001%\000\000\001%\001,\001\021\000\000\000\000\001;\000\000\001;\001\028\001.\000\000\000\000\003_\000\000\0014\000\000\001$\001E\000\000\001%\000\000\001\021\001\186\001,\000\000\001,\001;\001\028\001.\000\000\001\195\000\000\001\196\001\165\004\154\000\000\000\000\000\000\000\000\002l\002m\001\158\000\000\000\000\001,\000\000\000\000\0019\004\157\006\164\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\000\003\219\001/\000\000\000\000\001$\001\208\0019\001%\0019\000\000\000\000\000\000\000\000\001B\001;\001\021\000\000\000\000\000\000\000\000\001/\001\028\001.\000\000\002\191\006\175\000\000\0019\000\000\000\000\000\000\0014\001,\000\000\001E\000\000\000\000\001\021\000\000\001\021\000\000\006\238\000\000\001\028\001.\001\028\001.\000\000\000\000\000\000\0014\000\000\000\000\001E\000\000\000\000\000\000\000\000\001\021\006\239\000\000\000\000\000\000\006\241\001\028\001.\000\000\000\000\000\000\000\000\001B\000\000\006\242\000\000\000\000\002o\000\000\001/\0019\000\000\000\000\002\191\000\000\000\000\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\001B\000\000\001B\000\000\006\238\000\000\000\000\001/\000\000\001/\006\243\000\000\000\000\005\184\000\000\0014\005\187\001\021\001E\000\000\000\000\001B\006\239\001\028\001.\000\000\006\241\000\000\001/\000\000\000\000\000\000\005\171\000\000\003\222\006\242\000\000\0014\000\000\0014\004\161\000\000\001E\000\000\000\000\001$\006\244\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\001;\006\245\000\000\0014\002\213\000\000\001E\000\000\000\000\000\000\006\243\000\000\002\214\000\000\001\196\002\215\000\000\001B\001,\000\000\000\000\000\000\001$\000\000\001/\001%\000\000\007\006\005\184\004\154\000\000\006\210\001;\000\000\001$\000\000\000\000\001%\000\000\000\000\000\000\000\000\006\247\007J\001;\000\000\006\244\000\000\000\000\000\000\001,\000\000\006\248\000\000\0014\006\250\006\245\001E\006\255\000\000\000\000\000\000\001,\000\000\0019\000\000\001$\000\000\007\001\001%\000\000\000\000\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\000\000\000\000\007\015\000\000\000\000\000\000\000\000\007\002\000\000\000\000\000\000\000\000\007\211\000\000\001,\001\021\0019\006\247\000\000\000\000\000\000\001\028\001.\000\000\000\000\000\000\000\000\006\248\0019\001$\006\250\000\000\001%\006\255\000\000\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\007\001\000\000\000\000\000\000\001\021\000\000\000\000\000\000\000\000\000\000\001\028\001.\000\000\000\000\001,\000\000\001\021\0019\001$\007\002\000\000\001%\001\028\001.\000\000\000\000\000\000\001B\001;\000\000\001$\000\000\000\000\001%\001/\000\000\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\000\000\000\000\001,\000\000\001\021\000\000\000\000\000\000\000\000\001$\001\028\001.\001%\000\000\001,\001B\0019\000\000\001$\001;\0014\001%\001/\004\161\000\000\000\000\007\212\001B\001;\000\000\000\000\000\000\000\000\000\000\001/\000\000\000\000\001,\001\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001,\001\021\0019\000\000\000\000\000\000\0014\001\028\001.\001E\001\157\001\158\000\000\001B\0019\000\000\000\000\000\000\0014\000\000\001/\001E\000\000\000\000\001C\000\000\000\000\000\000\000\000\000\000\000\000\001\159\003,\001\021\001\161\001\162\000\000\0019\000\000\001\028\001.\000\000\000\000\000\000\001$\001\021\0019\001%\000\000\000\000\0014\001\028\001.\001E\001;\000\000\001B\000\000\000\000\001$\000\000\000\000\001%\001/\000\000\000\000\000\000\001M\001\021\001;\000\000\000\000\001,\000\000\001\028\001.\001$\001\021\000\000\001%\000\000\000\000\000\000\001\028\001.\000\000\001;\001,\001B\000\000\000\000\001$\000\000\0014\001%\001/\001E\000\000\000\000\001W\001B\001;\000\000\000\000\001,\000\000\000\000\001/\001\166\000\000\000\000\001\\\000\000\000\000\000\000\000\000\000\000\000\000\0019\001,\000\000\001\167\000\000\001B\000\241\0014\001$\000\000\001E\001%\001/\000\000\001B\0019\001\252\000\000\001;\0014\000\000\001/\001E\000\000\000\000\002&\000\000\000\000\000\000\000\000\000\000\001\021\0019\000\000\000\000\000\000\001,\001\028\001.\000\000\001$\000\000\0014\001%\000\000\001E\001\021\0019\000\000\000\000\001;\0014\001\028\001.\001E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001\186\000\000\001,\001\028\001.\000\000\000\000\000\000\001\195\000\000\001\196\001\165\001\021\000\000\000\000\000\000\0019\000\000\001\028\001.\001B\000\000\000\000\000\000\000\000\000\000\000\000\001/\000\000\000\000\000\000\002(\000\000\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\000\001$\001/\000\000\001%\000\000\002\131\001\021\0019\000\000\000\000\001;\001B\001\028\001.\001$\000\000\0014\001%\001/\001E\000\000\000\000\002\153\000\000\001;\000\000\001B\000\000\001,\000\000\000\000\0014\000\000\001/\001E\000\000\001$\002\188\001\021\001%\000\000\000\000\001,\000\000\001\028\001.\001;\000\000\0014\000\000\001$\001E\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\001;\001B\000\000\0014\001,\000\000\001E\000\000\001/\000\000\000\000\000\000\002\193\000\000\0019\000\000\000\000\000\000\001,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\000\000\000\000\001B\000\000\000\000\000\000\000\000\0014\000\000\001/\001E\000\000\000\000\003$\001\021\000\000\000\000\000\000\000\000\0019\001\028\001.\000\000\000\000\000\000\000\000\001$\000\000\001\021\001%\000\000\000\000\000\000\0019\001\028\001.\001;\000\000\000\000\0014\000\000\000\000\001E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001,\000\000\001\028\001.\001$\000\000\000\000\001%\000\000\000\000\001\021\000\000\000\000\000\000\001;\001B\001\028\001.\000\000\000\000\000\000\000\000\001/\000\000\000\000\001$\003*\000\000\001%\001B\000\000\000\000\001,\000\000\000\000\001;\001/\000\000\000\000\001$\003>\000\000\001%\000\000\000\000\000\000\0019\001$\000\000\001;\001%\001B\0014\001,\000\000\001E\000\000\001;\001/\000\000\000\000\000\000\003C\000\000\000\000\001B\0014\001,\000\000\001E\000\000\000\000\001/\000\000\000\000\001,\003\\\001\021\0019\000\000\000\000\000\000\001$\001\028\001.\001%\000\000\000\000\0014\000\000\000\000\001E\001;\000\000\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\0014\000\000\000\000\001E\000\000\000\000\000\000\001\021\001,\000\000\000\000\0019\000\000\001\028\001.\000\000\000\000\000\000\000\000\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\001B\000\000\000\000\000\000\001\028\001.\000\000\001/\000\000\000\000\000\000\003a\001\021\001$\000\000\000\000\001%\000\000\001\028\001.\001\021\000\000\000\000\001;\0019\000\000\001\028\001.\001$\000\000\000\000\001%\001B\000\000\000\000\000\000\000\000\0014\001;\001/\001E\001,\000\000\003j\000\000\000\000\000\000\000\000\001$\000\000\000\000\001%\000\000\001B\000\000\001\021\001,\000\000\001;\000\000\001/\001\028\001.\001$\005(\000\000\001%\001B\000\000\0014\000\000\000\000\001E\001;\001/\001B\001,\000\000\005\132\000\000\000\000\000\000\001/\000\000\000\000\000\000\005\144\0019\000\000\000\000\0014\001,\000\000\001E\000\000\001$\000\000\000\000\001%\000\000\000\000\000\000\0019\000\000\0014\001;\000\000\001E\000\000\000\000\001B\000\000\0014\000\000\000\000\001E\000\000\001/\001\021\000\000\000\000\005\170\0019\001,\001\028\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\0019\001$\001\028\001.\001%\000\000\000\000\000\000\000\000\000\000\0014\001;\000\000\001E\000\000\000\000\001\021\000\000\000\000\000\000\000\000\000\000\001\028\001.\000\000\001$\000\000\000\000\001%\001,\000\000\001\021\0019\000\000\000\000\001;\001B\001\028\001.\000\000\000\000\000\000\000\000\001/\000\000\000\000\000\000\005\186\000\000\000\000\000\000\001B\000\000\001,\000\000\000\000\000\000\000\000\001/\000\000\000\000\000\000\006^\001\021\001$\000\000\000\000\001%\000\000\001\028\001.\001B\000\000\0014\001;\0019\001E\001$\001/\000\000\001%\000\000\006p\000\000\000\000\000\000\001B\001;\0014\000\000\000\000\001E\001,\001/\000\000\000\000\000\000\006\136\000\000\0019\002l\002m\001\158\000\000\000\000\001,\001\021\000\000\0014\000\000\000\000\001E\001\028\001.\000\000\000\000\000\000\000\000\001B\000\000\000\000\000\000\000\000\0014\004]\001/\001E\000\000\000\000\007\027\001\021\000\000\000\000\000\000\000\000\000\000\001\028\001.\0019\002l\002m\001\158\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\000\000\0014\000\000\000\000\001E\000\000\000\000\001B\000\000\002n\000\000\000\000\000\000\002\176\001/\001\021\000\000\000\000\007X\000\000\000\000\001\028\001.\000\000\000\000\002l\002m\001\158\001\021\000\000\000\000\001B\000\000\000\000\001\028\001.\000\000\000\000\001/\002l\002m\001\158\007c\000\000\0014\002o\000\000\001E\000\000\002\178\000\000\002l\002m\001\158\000\000\000\000\000\000\000\000\002p\000\000\002\212\000\241\000\000\002\200\000\000\000\000\000\000\000\000\0014\000\000\001B\001E\000\000\000\000\000\000\002\211\000\000\001/\002l\002m\001\158\007x\000\000\001B\002o\000\000\000\000\000\000\002o\000\000\001/\000\000\000\000\000\000\007\130\000\000\000\000\002p\000\000\002\212\000\241\002p\002\226\002\212\000\241\000\000\000\000\0014\000\000\000\000\001E\000\000\000\000\000\000\000\000\000\000\000\000\002l\002m\001\158\0014\002\213\000\000\001E\002o\000\000\000\000\000\000\000\000\002\214\000\000\001\196\002\215\000\000\000\000\000\000\000\000\002p\002o\002\212\000\241\003\163\000\000\000\000\000\000\001$\000\000\000\000\001%\000\000\002o\002p\000\000\002\212\000\241\001;\000\000\000\000\000\000\000\000\002\213\000\000\000\000\002p\002\213\002\212\000\241\000\000\002\214\000\000\001\196\002\215\002\214\001,\001\196\002\215\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\001$\000\000\000\000\005\221\000\000\000\000\002p\000\000\002\212\000\241\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\001$\000\000\000\000\005\221\000\000\000\000\002\214\000\000\001\196\002\215\001,\000\000\002\213\000\000\002o\000\000\000\000\0019\000\000\000\000\002\214\000\000\001\196\002\215\002\213\000\000\000\000\002p\001,\002\212\000\241\000\000\002\214\000\000\001\196\002\215\000\000\000\000\000\000\001$\000\000\000\000\001g\001$\000\000\000\000\001m\001$\001\021\001h\007]\002\213\000\000\001n\001\028\001.\005\223\007^\000\000\002\214\001$\001\196\002\215\007h\000\000\000\000\000\000\001,\000\000\000\000\007i\001,\000\000\000\000\005\223\001,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\001,\000\000\002\213\000\000\000\000\001\028\005\226\000\000\001$\000\000\002\214\007n\001\196\002\215\000\000\001B\001$\001\021\007o\007t\000\000\000\000\001/\001\028\005\226\0019\007u\000\000\000\000\0019\000\000\001$\000\000\0019\007}\000\000\001,\000\000\000\000\000\000\000\000\007~\000\000\000\000\001,\000\000\0019\000\000\000\000\000\000\000\000\000\000\0014\000\000\000\000\004\156\001\021\000\000\000\000\001,\001\021\005\227\001\028\001.\001\021\000\000\001\028\001.\000\000\000\000\001\028\001.\000\000\000\000\000\000\000\000\005\173\001\021\006\196\005\227\005\229\000\000\0019\001\028\001.\000\000\000\000\000\000\000\000\001$\0019\0014\007\135\000\000\005\173\000\000\006\222\000\000\005\229\007\136\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\000\000\0014\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001,\001/\001\028\001.\001\021\001/\000\000\000\000\000\000\001/\001\028\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001/\000\000\000\000\001\028\001.\000\000\000\000\000\000\000\000\0014\000\000\000\000\000\000\0014\000\000\000\000\000\000\0014\000\000\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\000\000\000\000\000\000\0014\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\001/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001/\000\000\001\028\001.\000\000\000\000\000\000\0014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0014")) + ((16, "\001\254\001\141\000\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\0013\001F\000)\001?\002$\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\003\000\000\000\000\000\000\000\000\000\000\000\237\000\000\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?\242\000\000\000\000\000\000\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\028\000s\002t\001\208\000\000\002\2188\178\000>\002\232\000\027\000\000\000\000\000\000\000\002\000\000\000\000\000,\000\000\000\000\000\000\000\000\002\014\000\000\001\138\000\000\000\000\000\000\000\000\000\000\001\"\000\000\001\200\002\218\b \000\000\000\000\002\248\000\000\t\144@\028\000\000\005\212@l\000\000\bj@\188\t\028@\028\002b\002\248\000\000\000\000\003\002\004:\000\168\001\180\003\000\002\218\004,\000\130\004\176\000n\003T\004\\\011\026\000\000\005\174\003b\004d\003t9H\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\244\000\000\003\216\004l\005L\000\000\000\000\000\000\000\000\004\136\000\000\000\000\004\138\000\159\004\194\006\012\007\150\000\000\000\000\000\000\005\014\005(\006>\004.\004\216\006f$2\005\128\006\146\001\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\170\000\000\000\000\000\000\005\166\006\194\011\130\n\002\005\174\005\134\011\220\000\000$\142\012&$\182%Z%\200\000\000\001\001\000\000\000\000\000\000\000\000\006\172H\252\006\194\000\000\0002\006\230\000\000\000\1869\192\000\187\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002J\006l\000\000\000\000\000\000\0006\011~\000\000\000\212\012\140\000\000\000\000\rp\000\000\000\000\004\212\000o\000\000\000\000\004\212\014\200\004\212\000\000\000\000\014\182@\216\000\000\000\000\005@\002\026\000\000\000\000I\"\000\000\006*\000\000\000\000\000\000\006\136\000\000\000\000\006\232\000\000I\134\006*\000\000\br\018>\000\000\000\000\000\000\006*\000\000I\180\006*\019\160A\012\000\000J\012\006*\000\000\027\"\023\140\000\000\000\000\000\000\000\000 \014\023\150\000\000\000\000\000\000\000\000\"\142\026\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\210\000\000\006\220\007\178\000\000\007\002\007*\015@\000\000\000\000\000\000\000\000\006*\000\000\000\000\000\000%\240\000\000\000\000\000\000\000\000\000\000\000\000\000\r\007\202\000\000\000\000\000\000\006*\b\b:\018\007\140\007\138\020\238\000\000\006d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\000\000\000\000\000\000\000\000\b\226:H\000\000\000\000\b\026\007\144:\196\000\000\000\000\000\000;\n\003\172;\020\000\000\003\172\000\000;\204\003\172\000\000;\214#\244\b\192\b\214\000\000\000\000J\n\000\000\000\000\000\000\000\000\000\000\000\000\003\172\000\000\000\000<\016\000\000\003\172F\146\000\000\006*\000\000\000\000<\026\000\000\003\172\001\b\000\000\000\000\003\172\003\172\000\000\000\000\003\172\000\000\000\000%\200\000\000\000\000\000\000\000\000\003\172&<\000\000\000\000\003\172\000\000\000\205\t\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\170\000\000\b\200\b\254\000\000F*\000\000J<\006*\006*\000\000\000\000\000\000\000\000\000\000\000\000\t\022\t\"\t\232\012\128\tF\tN\tr\007\200\006\140\007\216\000%\n\006\000\000\000\000\bJ\b\246\007\226\001\220\t\172\n\132\000\000\002\142\001F\002\200\0030\011\020\000\000\000\0000\206\000\0009\016\n\232\000\000J\146\006*J\250\006*\000\000\005\130\005p\000\000\012\188\002\142\000\000\000\000\n\028\000\000\000\000\000\000\000\000\000\000\016\170\002\142\019\236\002\142\000\000\002\164\000\000\000\000\003\152\000\000\000\000\000\000\011z\000\000\000\000\000\000\002\142\000\000\000\000\002\142\000\000\t\172\007L\000\000\000\232\004\216\000\000\000\232\000\000\000\000\021T\002\142\000\000\000\000\000\000\000\000\000\000\000\000\000\232\012\214\012\204\r0\0118\011\012&b\020\002\000\000\n\142\007\236\r\202\n\156\b\\\n\196\030z\000\000\000\000\000\000\000\000\000\000\001\238\nv\000\000\000\000\000\000\n\166\b\132\007\236\000\232\021\202\000\000\002\142\000\000\000\000\000\000\012&\000\000K\018\006*\014 \n\168\b\160\014l\n\172\b\248\014\150&\226\003\172\014\132\n\184\t\bF\200\011\196\000\000'.'r\003\172F\142\000\000K*\006*\006*\011\162\000\000\000\000\011\166\000\000\000\000\000\000\000\000'\224\011\154\000\000AD\014\218\011T\t\018<\210\003\172\015\210\011X\t\028$f\000\000E\178\000\000\000\000\015\234'\232\001\004\000\000\000\000\012\200Kz\000\000\006*Gv\000\000\006*K\132\006*\000\000\000\000\000\000\000\000\000\000P\198\000\000\000\000\000\000\004\014\016@\000\000\000\000\000\000\000\000(\\P\208\000\000\000\000\000\000\000\000\000\000\011^\016X\000\000\000`(\130\000`(\242\000`\000\000P\222\000\000)\146\000`\016\140\006\158\016\164\000\000\000\000)\234\000`*B\000`*L\000`*\158\000`*\166\000`+t\000`+\150\000`,0\000`,d\000`,l\000`- \000`-X\000`-|\000`-\238\000`.H\000`.R\000`.\248\000`/\002\000`/T\000`/\250\000`\t>\003\026\004\164<\220'\224\012F\000\0000\030L\0160~=\"\003\172\000\000\012\182\011\222\000\000\000\000Lp\006*\000\000\003\172F\146\000\000L\138\006*\000\000\000\000\017\168\000\000\000\000\017\244\000\000\000\000\000\000\000\0000\\\000\0000\250\000\000\000\000\003\172G\028\000\000L\216\006*\000\000Gv\000\000L\240\006*\018\012\000\000\000\000\018X\000\000\000\000=\156'\224\012f\000\0001v\018b\000\000\000\000\018z\000\000\000\0001\210\000\000\000\000G\136\012h\000\000M@\006*\018\174\000\000\000\000M\142\006*\018\198\000\000\000\000\019\248\000\000\000\000\000\000M\168\006*\020,\000\000\011\158\020D\000\000=\226\000\000\003\172=\236\000\000\003\172>,\000\000\003\172\005~\000\000\000\000\000\000\000\000\000\000>\172\003\172\000\000\0066\006\144\000\000\000\000\000\000\000`\020\152\000\000\000\000\000\000\020\248\000\000\000\000\000\000\000\000\000\000\021\006\000\000\000\000\000\000\000`\021\172\000\000\021\254\000\000\000\000\000\000\022\022\000\000\000\000\000\000\000\000Q\"\000\000\000\000\022R\000\000\000\000\000\0002\018\000`\022\232\000\000\000\000\000\00024\000`\023L\000\000\000\000\000\0002\134\000`\004@\023\226\000\000\000\0002\168\000`\023\236\000\000\000\0003\012\000`\0248\000\000\000\0003\174\000`\000\000\000\000\024P\000\000\000\0004\016\000`\024\156\000\000\000\00044\000`\025\n\000\000\000\0004\134\000`\000\0004\170\000`\000\000\nZ\000\000\000\000\000`\000\000\000\000\025n\000\000\000\000\025\186\000\000\000\000\011\210\000\000\000\000\025\228\000\000\026Z\000\000\000\000\000\000'\224\012\166\000\000A\178\017H\004\212\026\182\000\000A\192\000\000\000\000\000\000B\002\000\000\000\000\026\190\000\000\027r\000\000\000\000\000\000\000\0005\134\000\000\000\000\000\0005\158\000`5\210\000`\000\000\011\158\027\210\000\000\000\000\028@\000\0006D\000\000\000\000\030z\000\000\000\000\000\000\028H\000\000\000\000\000\000\000\000\000`6\140\000`\005\004\000\000\000\242>\236>\246\003\1726\164\000`\003\1727X\000`7f\002N7~\000`\000\000\000\000\000\000\011\252\000\000\000\000\000\000\028\160\000\000\000\000\000\000\000\000\000\236\011\252\000\000\028\168\000\000\000\000\000\000\000\000\004&\011\252\000\000\rH\000\000\000\000\000\000>\254\000\000\000O\000\000\001\252\000\000\012\222\000\000\007h\000\000\000\000\000\000\000\000\000\000\000\000\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\000\rN\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005h\011\252\000\000\000\000\000\000\000\000\000\000\005t\011\252\000\000\000\000\tV\b\212\000\232\029\\\000\000\012N\tv\012\224\001\214\t\218\000\232\023\006\002\142\011T\000\232\000\000\029\192\000\000\003p\000\000\012b\t\140\007\024\000\000\000\000\000\000\000\000\000\000\012x\007\128\019(\004\212\000&\000\000\000\000\000\000\000\000\000\000(\026\000\000=\182\000\000\t\212\000\000\t\228\000\000\000\000\000\000\000\000\002\158\000\000\000\000\019\176\004\212\000\000\0210\021\228\004\212\026\138\004\212\004\212\000\000\004\212\rt\000\000\015|\000\000\028Z\004\212\004\212\000\000 $\004\212\004\212\n:\000\000\030*\000\000\000\000\n@\rx\000\000\030\130\006\174\000\000\000\000\000\000\000\000\rX\000\000\000\000\000\000\000\000\000`\000\000\000\000\000\000\000\000\000\000\005\136\011\252\000\000\000\000\012\184\nl\011\170\000\232\000\000\023\194\000\000\002\142\000\000\014\026\000\000\000\000\000\000\000\000\000\000\030^\000\000\000`\000\000\000\000\025T\000\000\002\142\000\000\026\196\000\000\002\142\000\000\028\n\002\142\000\000\000\232\000\000\nn\011\184\001\002\000\000\012\208\012\226\n\134\r\n\r\210\028\174\002\142\007\184\000\000\n\176\r\196\r\224\005Z\t\244\r\166\n\224\r\248\006\202\n\020\r\208\000\000\000\000\0074\n\030\000\000\007\\\003\142?\190\003\172\030\222\000\000\b\160\001h\000\000\000\000\r\136\n\228\b\172\000\000BT\000\000M\246\006*\000\000\014H\014b\000\000\n\142\000\000\006*\r\214\n\254\007r\r\252\001z\000\000\000\000\000\000\000\000\011\000\n\150\000\000\011\026\011J\000\000\007\0063\004\r\250\014\000\011L\005\150\011\242\000\000\011T\bd\011\248\000\000\014\012\014N\011\166\014\150\r\210\031\154\002\142\000\000\011\214\0156\000\000\tb\000\000\012\014\000\000\015>\000\000\031\234\007P\0158\011\222\015\136\000\000!4\007\170\015T\000\000\000\000\000\252\007\246\012L\000\000\"\002\002\142\012N\000\000\005\018\000\000\015\028\012\012\b~\r\252\015T\015^\012\018\016\224\000\000\015\138\006B\000\000\000\000\000\000\000\000\000\217\012(\015\\N&\006*\000\000\002\214\0120\016 \000\000\000\000\000\000\000\000\000\000\000\000N\128\bF\000\000\0128\016x\000\000\000\000\000\000\000\000\000\000\000\000B\172\012f\000\000\012B\0032\000\000\012D\012v\b\026\000\000\005\"G\182\000\000\003<\000\000N\154\006*\006*\000\000\000\000\b\182\000\000\nD\000\000\005R\b\182\b\182\000\000\012\134H\016\006*N\172\006*\012\226\000\000\000\000\000\000\000\000\r(\000\000\000\000\005`\000\000\t4\015\216\012\194\016\248\015\158\000\000\000\000\bB\tZ\015\228\000\000\000\000\012\198\017\004\015\182\000\000\000\000\003D\000\000\027|\000\000\028\2408`\006*\000\000Q\028\029f\000\000Q.\000\000\000\000\000\000\b\182\000\000\000\000\r<\015\248\012\246\017\026\015\190\000\000\000\000Qv\r\\\016\002\000\000\000\000\000\000B\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rl\000\000\015\188\r\022#\022\t\172\000\000\016\020\r&\004\222\000\000\017\026\016\198\r\138\016 \000\000\000\000\016&\rb\005\158\000\000\000\000\b\1329\192\004`\000\000\000\000\000\000\t\212\015\234\rd\000\000\015\240\t\212\000\000\016\220\014\004\016>\000\000\000\000\000\000\006*\002\\\003\188\006\002\000\000\000\000\000\000\000\000\016\002\r\208\000\000\006\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006*\015\240\r\218\017\\\016\004\000\000C<'\224\001\005\r\220\015\214\002&\000n\r\226\016\150\000\000\000\000\017T\031x\000\000\000\000\031\220\000\000\014\b\000\000\000\170\000\000\000\000\000\000\000\000\000\000\000\000N\198\006*\000\000\017V\031\228\000\000\000\000 D\000\000\001\138\r\228\017\000\000\000\000\000C\168C\162\016\182\000\000O\020\006* \152\000\000\000\000 \244\000\000\000\000\014\018\000\000\006\228\000\000\000\000\000\000\000\000\000\000\000\000C\208\000\000\000\000D.D^\016\188\000\000Od\006*!\148\000\000\000\000!\224\000\000\000\000\r\238\"D\0140\000\000\r\242\014\006\000\189\n*\014\b\tz\014\022\017\018!n\014j\000\000\014\026\0146\n\188\000\000\021\214H>\000\000\002h\000\000\014\134D8D\158\024\184\015\230\024\248\000\000\002\148\nZ\000\000\n|\000\000\000\000\n|\000\000\000\000\n|\011\006\000\000\025\138\n|\017 \"\232\014\188\000\000\n|\000\000\000\000R\000\000\000\000\000\000\000\n|\000\000\000\000\014\230\000\000\028p\012F\015\b\000\000\014\138H\162\015*\000\000\000\000\000\000\000\000\015:\000\000\000\000\005|\000\000\n|R@\000\000\029\182\n|D\248\000\000\015<\016x\014\204\017\158\016D\000\000EP\015J\016\130\000\000\000\000\000\000+\128\tF\000\000\000\000\000\000\000\000\000\000\000\000\011^\015^\000\000\016@\014\234\012\130\002`\000\000\016\150\000\000\000\000\000\000\000\000\015\1381<\000\000\000\000\000\000\011^\000\000\000\000\000\000\000\000\015\1784\002\000\000\000\000\000\000\000\000\000\000\000\232\002\142\000\000\000\000\003\172\000\000O\158\006*\000\000\006\170\000\000\000\000\000\000\000\000#V\000\000\000\000\000\000\000\000\000\000\000\000\017D\r\230\n\030\015\234\004*\014\236\000\000\003\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\002\006\172\015\020\000\000\b\168\017\172\017X\015\190\000\000\000\000\017L\015R\003\240\000\000\000\000\000\000\000\000.\144\015@\000\000\015b\r\026\000\000\000\000\004\212\016\016\000\000\000\000\000\000\000\000\000\000O\184\006*\000\000&\142\031H\000\000\000\000\000\000!\160E\134\000\000O\248\006*\000\000,\148!\190\000\000\000\000\000\000\000\000.v\"\174\000\000\000\000\000\000\000\000:\192$\138\000\000\000\000\000\000\000\000Pv\006*\000\000RH'\128\000\000\000\000\000\000\000\000\000\000P\144\006*\000\000R`'\152\000\000\000\000\000\000\b\224\000\000\000\000\000\000\006*\000\000\000\000\b\248\017\\\015\194\000\000\000\000\017Z\000\127\002x\000\000\000\000\000\000\000\000\t\128\017\172\t:\017j\015\248\000\000\000\000\017^\000\224\006\180\000\000\000\000\000\000\000\000\002\142\000\000\015\254\000\000\000\000\000\000#\140\000\000#\192\000\000\000\000\000\000\000\000\000\0008Z\000\000\000\000\000\000\0112\000\149\000\000\000\000\000\000\000\000\000\000\002R\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\000H\226\000\000\006*\000\000\n\206\000\000\000\000\000\000\000\218\000\000\000\000\000\000\006\022\000\000\000\000\000\000\001\160\000\000\000\232\000\000\001&\000\000\002\142\000\000\006t\000\000\000\000\000\0008\226\003\172\000\000\000\000\000^\000\000\000\000\000\000\000\000\001\238\004\130\016\146\003d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\254\000\000\016\000\000\000\000\000\000\000\000\000\005\024\006\162\004 %\152\000\000\000\000\016\012E\190\000\000\000\000\000\000\016\030F\b\000\000\000\000\000\000\000\000"), (16, "\007\001\000=\002r\002s\001\159\000\237\007\196\000\237\000\241\000\242\000\241\001\007\007\171\000\149\004X\007\176\002.\002\187\007\002\007\022\001\165\001\b\007\004\000s\001\159\002S\002\188\000\149\001\022\000\159\002.\007\005\007\023\000\237\001\029\001 \000\241\001\007\006\190\002\214\000A\000\237\000o\001\022\000\241\000\242\001\011\001\240\000\149\001\029\001 \000\154\000^\007(\002Q\001%\002`\001%\001&\000\241\001p\001r\007\006\000b\001\142\001<\007\026\001q\006\192\b\007\002s\001\159\001\011\000\244\006\190\007\001\006g\002r\002s\001\159\000f\001\022\001s\001-\000\155\001-\006\193\001\029\001 \001\139\005\191\006\195\002\187\007\002\007\022\006\239\000\237\007\004\007\007\000\241\001\007\002\188\002\216\006n\006\192\005\192\007\005\007\023\007\b\005\216\000\149\0009\007P\002.\002\214\002v\001\145\002\218\000\241\002a\001!\004=\006\193\001%\007\174\007\175\001&\006\195\0009\001r\001:\006\218\001:\001<\007\027\004Y\001%\007\006\000{\0018\b\t\007\026\000\130\004\169\006A\004\211\0019\001x\003\137\007\028\001s\001-\002r\002s\001\159\001\217\001\159\001\137\0013\007\011\001\025\001\022\007\r\001\022\001-\007\018\001\029\001\029\001/\001\029\001/\000\149\002K\007\007\000\158\007\020\003\225\002\216\002\219\002F\002\225\001\166\b\n\007\b\002\218\000\241\002\231\007\185\001\197\002\221\002v\004G\002\218\000\241\007\021\004\180\004\182\004\184\001:\003\137\007\001\003\226\002r\002s\001\159\007\227\0009\007\194\007\239\007\027\006r\001:\003\137\002\233\006i\001x\001C\002\187\007\002\007\022\002^\007;\007\004\0010\007\028\0010\002\188\001\130\002G\001\022\000\136\007\005\007\023\002^\007\011\001\029\001/\007\r\005I\002\214\007\018\000\241\001\022\007\251\000\149\007\240\000\184\002.\001\029\001/\007\020\001\029\002u\002\219\0015\002\225\0015\001F\007\168\005\128\004@\002\231\007\006\001\197\002\221\002v\007\026\002\218\000\241\007\021\004f\001\159\005\012\002\029\002\230\007\001\007\252\002r\002s\001\159\004.\000\244\0079\0025\001C\005\016\004Z\0029\002\233\001\029\000\153\0010\002\187\007\002\007\201\001\130\000<\007\004\007\007\007\174\007\175\002\188\002\216\003\228\0010\007\247\007\005\007\023\007\b\007\228\002\027\001\197\002S\000;\002\214\002v\005\130\002\218\000\241\006A\004\211\007\219\0015\001%\005I\001F\001&\000\241\002\219\001r\004@\002:\004;\001<\007\027\0015\002\220\007\006\001\197\002\221\007\248\006\138\002_\002`\002\230\002;\000\241\000\244\0009\007\028\001s\001-\002r\002s\001\159\002_\006\140\001t\002\029\007\011\004[\007\190\007\r\000\237\001\022\007\018\000\241\000\242\0025\004\148\001\029\001/\0029\007\007\001\029\007\020\003\225\002\216\002\219\0060\002\225\000\152\000\149\007\b\002!\002.\002\231\003\137\001\197\002\221\002v\000?\002\218\000\241\007\021\005L\000\186\001\197\001:\003\137\007\001\006\194\002r\002s\001\159\001\022\002a\007\029\002^\007\027\003\137\001\029\001 \002\233\007<\001x\002:\002\187\007\002\007\022\003P\001\159\007\004\000\244\007\028\004\151\002\188\006\231\002K\001\022\002;\007\005\007\023\000B\007\011\001\029\001/\007\r\007\203\002\214\007\018\003n\001\176\000\237\001\162\001\163\000\241\000\242\001%\000\243\007\020\005\240\002u\002\219\006\234\002\225\b\019\002s\001\159\004\169\007\017\002\231\007\006\001\197\002\221\002v\007Z\002\218\000\241\007\021\006\236\003\137\007\172\000\131\002B\007\001\001-\002r\002s\001\159\001\029\007\220\001@\005e\001C\003s\003\131\003\132\002\233\0067\0068\0010\002\187\007\002\007\022\001\130\0048\007\004\007\007\006\237\000\244\002\188\002\216\003\228\007\173\006H\007\005\007\023\007\b\006A\004\211\004\183\004\182\004\184\002\214\002v\005\208\002\218\000\241\001\185\001\022\002\230\0015\005\242\000\134\001F\001\029\001/\002\219\006\185\002_\000\137\001\168\000\177\007\027\000\241\002\220\007\006\001\197\002\221\000\244\007\031\005\211\000\237\007E\001\022\000\241\001\007\007\001\007\028\001\022\001\029\001 \0024\001\022\0060\001\029\001 \005\213\007\011\001\029\005\245\007\r\b\"\000\165\007\018\b#\003\135\003\136\b\020\007\004\002\218\000\241\007\007\004\152\007\020\007F\002\216\002\219\007\005\002\225\005\214\002\"\007\b\000\181\007G\002\231\003\137\001\197\002\221\002v\000\244\002\218\000\241\007\021\001\187\002E\007\001\000\244\002r\002s\001\159\001\029\001\188\004O\001\197\001\166\005\191\000\187\007\027\007\006\b\022\b\023\002\233\002\187\b\025\005\246\003\027\001\159\007\004\001\158\001\159\005\192\002\188\007\028\000\191\005\199\005\187\007\005\b\027\004\151\005\192\000\196\005\251\007\011\005\248\002\214\007\r\004\225\002S\007\018\001\160\0038\0009\001\162\001\163\007\007\0015\0014\000\149\007\020\006\026\002.\002\219\003\150\002\225\007\b\000\241\001\007\007\006\007Y\002\231\0071\001\197\002\221\0067\0068\005\011\005I\007\021\002`\000\241\007\001\000\241\002r\002s\001\159\b*\b%\003\205\004:\006@\000\241\001\007\004\169\006A\004\211\b\"\002\233\002\187\b#\000\209\007F\003\167\007\004\007\007\001\184\007\n\002\188\002\216\000\182\007G\001A\007\005\b+\007\b\002\029\007\011\004,\007)\007\r\002\214\002v\007\018\002\218\000\241\0025\000\192\003\222\001\167\0029\000\197\001\029\007\020\002S\000\210\003\129\001\159\b\030\002r\002s\001\159\001\168\002a\007\006\000\241\006)\004\182\004\184\007B\000\219\001\197\007\021\004@\002\187\000\149\007\028\006$\002.\002r\002s\001\159\002W\002\188\001\022\002`\007\011\002\230\000\241\007\r\001\029\001/\007\018\004\229\002:\004{\002\214\000\244\000\221\003[\007\007\004\130\007\020\004\235\002\216\002\219\001%\002\225\002;\007\147\007\b\004\233\005\131\002\231\000\244\001\197\002\221\002v\000\244\002\218\000\241\007\021\000\244\001\022\007\001\001\187\002r\002s\001\159\001\029\001 \004.\b/\001\196\001-\001\197\001\166\000\244\001\022\000\213\002\233\002\187\007\002\007%\001\029\001/\007\004\001\022\002a\005\030\002\188\007\028\0021\001\029\001 \007\005\007\023\000\149\000\189\002\216\000\154\007\011\0025\002\214\007\r\000\244\0029\007\018\001\029\005\130\002@\005\215\002v\000\241\002\218\000\241\005\r\007\020\001\154\002u\002\219\005X\002\225\004<\006\238\005\191\007\006\001\029\002\231\000\228\001\197\002\221\002v\005\143\002\218\000\241\007\021\005\211\000\244\007\001\005\192\002r\002s\001\159\005\193\004\151\002\222\007\243\003\137\005\191\002:\006\234\001\022\005\213\b\"\002\233\002\187\b#\001\029\001/\0009\007\004\007\007\004\169\005\192\002\188\002\216\006\236\005\198\006\145\007\005\b&\007\b\000\234\004@\002\219\005\214\004\232\002\214\002v\004@\002\218\000\241\002\231\007\244\001\197\002\221\000\241\002\230\006\007\004@\007\255\000\249\003\137\002\230\002\219\006\237\001%\007\027\001%\001&\007\006\001&\002\220\002\230\001\197\002\221\001<\003\137\001<\002\233\003\137\002S\007\028\0010\006=\004\182\004\184\006\b\006N\006\t\003\139\b\000\007\011\001\022\001-\007\r\001-\000\229\007\018\001\029\001/\0025\006\149\001|\001\147\0029\007\007\001\029\007\020\002b\002\216\002\219\002`\002\225\0015\000\241\007\b\000\232\001\015\002\231\006\n\001\197\002\221\002v\0009\002\218\000\241\007\021\005I\001%\007\001\000\241\002r\002s\001\159\003\138\001\018\004\169\b)\000\235\004^\001:\005#\001:\0072\001$\002\233\002\187\007\002\002:\004\217\000\245\007\004\007\186\001E\006\011\002\188\007\028\003\137\001I\004\187\007\005\007!\000\250\000\244\006\012\006\r\007\011\006\014\002\214\007\r\006\234\001\022\007\018\001\022\002a\001\129\002S\001\029\001/\001\029\001/\007\001\007\020\000\244\007\173\002\219\006\236\002\225\006E\004\182\004\184\007\006\006O\002\231\005(\001\197\002\221\004\151\007N\b\025\001\197\007\021\003\137\007\004\002T\000\244\001L\002`\001%\003\137\000\241\001&\007\005\002\237\001\127\006\237\006\016\000\244\001<\006\018\002\233\000\237\006\023\006!\000\241\001\007\001C\007\007\001C\000\244\005q\002\216\006K\0010\001\022\0010\001-\007\b\001{\006P\001\029\001/\000\244\007\006\002v\001%\002\218\000\241\007\132\001%\004\151\006L\001S\004\161\004\211\0060\002S\001\144\001%\001T\004Y\001&\001\151\007$\0015\001\175\0015\001\128\001<\001F\002a\0057\001\159\001-\001\235\005w\007U\001-\007\028\007\007\003\137\000\244\005\025\001:\002\127\0009\001-\002`\007\011\007\b\000\241\007\r\005|\002\017\007\018\000\241\0010\007\163\005F\004\211\0024\002\019\004\194\001\150\007\020\0060\002\026\002\219\005+\002\225\005\182\002m\b\026\000\241\001\022\002\231\001%\001\197\002\221\001&\001\029\001/\001\233\007\021\001:\002\029\001<\004\195\002O\000\244\007\n\001\022\000\244\001:\001%\0025\003\137\001\029\001 \0029\007\011\001\029\002\233\007\r\001-\0024\007\018\0063\005\\\001%\002a\001\022\001&\005\164\001\029\001\022\007\020\001\029\001/\001<\000\244\001\029\001/\0060\001\022\0067\0068\002p\000\244\001C\001\029\001/\002S\000\244\001\174\007\021\0010\001-\000\244\001\193\0069\006I\001\022\002:\007\182\006A\004\211\002~\001\029\001/\001\192\001:\001%\005\191\0009\001&\0060\002;\004\169\003\137\004\135\002\141\001<\002`\001\239\007\165\000\241\0015\005\192\005\200\001F\002\029\005\224\0010\002L\0067\0068\0010\003\137\001C\001-\0025\001\022\001E\001:\0029\0010\001\029\001\029\001/\0069\006I\005\135\004\211\000\244\006A\004\211\002\005\007\179\0060\001\022\002r\002s\001\159\0015\002\144\001\029\001/\0015\007h\007\158\004\182\004\184\002\150\000\244\001\022\002\187\0015\002\176\003\137\001F\001\029\001/\002\181\002\003\002\188\002a\001:\000\244\002:\0051\004\245\005\217\0067\0068\005k\004\221\001C\002\214\005\194\003\025\001\029\002\011\002;\0010\002r\002s\001\159\0069\006I\001\022\005\225\004\134\006A\004\211\003\137\001\029\001/\001\022\002r\002s\001\159\0010\002S\001\029\001/\0067\0068\004\140\003\225\001C\003\137\000\244\004\219\002\187\0015\003\137\0010\001F\004\155\000\244\0069\006I\002\188\004\212\000\244\006A\004\211\004\133\004 \000\244\004\143\006\022\007d\002`\000o\002\214\000\241\002r\002s\001\159\002\216\005\194\002r\002s\001\159\002\016\000\244\0015\0067\0068\001F\002\022\001C\002v\004\176\002\218\000\241\002\187\000\244\0010\005\194\004g\004\178\007\161\007\162\002J\002\188\005\031\006A\004\211\002'\003\137\007\235\000\237\000\244\003\137\000\241\000\242\006\172\002\214\002r\002s\001\159\005$\002u\000\244\005\196\002\222\005)\000\241\0015\006\221\000o\001F\007\212\002\187\002a\002v\002\216\002\218\000\241\0024\006-\004\211\002\188\004\208\006\190\002)\004\213\002\029\0075\002v\002\030\002\218\000\241\0028\002\219\002\214\002\225\0025\007\237\000\244\002I\0029\002\231\001\029\001\197\002\221\004t\000\244\004\238\005\014\002r\002s\001\159\003\227\006\192\002u\001%\007@\004\211\001)\002\216\005\020\005A\002\222\006\180\002\187\005N\000\241\002v\002\233\002\218\000\241\006\193\002v\002\188\002\218\000\241\006\195\002\219\004p\004\250\006\211\005\027\003\137\001-\002:\002\220\002\214\001\197\002\221\000\244\007\213\002\219\000\244\002\225\002r\002s\001\159\002\216\002;\002\231\006\204\001\197\002\221\000\241\002l\005!\002\222\0056\002S\002\187\002v\002o\002\218\000\241\000\244\000\244\002}\002\140\002\188\002\143\005E\005M\006\197\007\214\004\227\002\149\002\233\000\244\007\221\001\029\002\219\002\214\001\249\001\159\005P\002\219\004\147\002\225\002\220\002`\001\197\002\221\000\241\002\231\002\222\001\197\002\221\002\168\000\244\002\216\002\162\002S\002\165\001\160\002\135\005Q\001\162\001\163\002S\005W\002\171\001\022\002v\005[\002\218\000\241\003\137\001\029\001/\003\137\002\233\007\222\000\244\002\219\000\244\002\225\002r\002s\001\159\004\239\003\137\002\231\002`\001\197\002\221\000\241\005\015\000\244\000\244\002`\001%\002\187\000\241\001,\002\216\007\223\002\222\004\022\003\131\003\132\002\188\000\244\002a\002\175\005a\002\180\004\218\002v\002\233\002\218\000\241\003\137\003\137\002\214\002r\002s\001\159\007\224\001-\002r\002s\001\159\002\200\0010\003\137\002\219\000\244\002\225\005g\002\187\000\244\001\185\005s\002\231\002\187\001\197\002\221\006\225\002\188\005Y\003\140\002\222\005]\002\188\001\168\002a\003\030\000\241\004~\004\132\003(\002\214\002a\005l\0015\005\134\002\214\003'\005\139\002S\002\233\001%\003S\003`\002r\002s\001\159\003\130\003\241\005\149\002\219\000\244\002\225\005\155\004\025\004\030\002\216\005\166\002\231\002\187\001\197\002\221\005\177\005\195\005}\005\129\003\137\007\016\002\188\002v\002`\002\218\000\241\000\241\003\249\000\244\001\022\005\175\004w\000\244\004?\002\214\001\029\001/\001%\002\233\001%\001\187\005\181\004R\002\029\004\\\004r\0023\002\216\001\188\005\202\001\197\001\166\002\216\0025\003\137\000\244\002\222\0029\000\244\001\029\002v\004\139\002\218\000\241\003\137\002v\004\141\002\218\000\241\000\244\004\187\004\154\004\207\000\244\002r\002s\001\159\000\244\004\197\005\219\003\137\005\229\000\244\000\244\006\197\002\219\002a\002\225\003\137\002\187\004\215\0010\005\207\002\231\002\222\001\197\002\221\002\216\002\188\002\222\001\022\002:\004\222\003\137\004i\005\254\001\029\001/\000\244\007c\002v\002\214\002\218\000\241\004\237\002;\000\244\002r\002s\001\159\002\233\006\020\0015\002\219\004\248\004\129\005\026\005\212\002\219\006\025\002\225\002\231\002\187\001\197\002\221\005\019\002\231\005\252\001\197\002\221\005\021\002\188\007D\001\022\002\222\001\022\000\244\004\021\000\244\001\029\001/\001\029\001/\006\004\002\214\002r\002s\001\159\002\233\006#\006/\006\017\0010\002\233\003\137\005\024\003\137\002r\002s\001\159\002\187\003\137\000\244\002\219\002\216\004z\006\030\001\158\001\159\002\188\005'\002\231\002\187\001\197\002\221\004\016\003\137\002v\000\244\002\218\000\241\002\188\002\214\007d\005\029\005&\000\244\004\005\001\160\001\176\001%\001\162\001\163\001j\002\214\0010\005\"\0010\002\233\001%\002r\002s\001\159\004\203\006C\003\137\005%\002\216\0055\006S\006Z\002\222\004\012\006^\006{\002\187\000\244\000\244\001-\006\163\002v\006\223\002\218\000\241\002\188\005@\0011\0065\004\206\006h\003\246\006\168\006\207\001\177\006\139\001\178\002\146\002\214\005?\006\173\002\219\006\203\002\225\007H\007I\002\216\003\137\005D\002\231\006\165\001\197\002\221\007J\007K\002\222\006\179\005O\002\216\002v\001%\002\218\000\241\001&\007L\004\211\005Z\001\185\003\137\005V\001<\002v\000\244\002\218\000\241\005f\002\233\000\244\000\244\006\176\001\168\000\244\000\244\000\241\002\219\003\137\002\225\000\244\001-\000\244\001%\004\015\002\231\002\222\001\197\002\221\006\187\001\022\006\228\000\244\000\244\002\216\003\137\001\029\001/\002\222\001\022\000\244\005`\000\244\003\137\003\137\001\029\001/\002v\007X\002\218\000\241\003\137\002\233\006\210\004\187\002\219\000\244\002\225\002r\002s\001\159\003\137\005b\002\231\006\249\001\197\002\221\002\219\001:\002\225\002r\002s\001\159\002\187\006\222\002\231\001\187\001\197\002\221\007\015\007C\002\222\002\188\003\137\001\188\002\187\001\197\001\166\003\238\005z\002\233\006\226\0010\005n\002\188\002\214\000\244\001%\000\244\001\022\007O\0010\002\233\003\137\003\230\001\029\001/\002\214\006\230\003\137\002\219\003\137\002\225\002r\002s\001\159\006\235\006\247\002\231\005y\001\197\002\221\007_\0015\006\254\002r\002s\001\159\002\187\001\022\005t\000\244\0017\005x\007\012\001\029\001/\002\188\003\137\007a\002\187\003\137\003\137\002\211\005\133\002\233\000\244\000\244\003\137\002\188\002\214\002r\002s\001\159\001C\002\224\007\024\003\137\002\216\007H\007I\0010\002\214\002r\002s\001\159\002\187\000\244\007J\007K\002\216\002v\005\228\002\218\000\241\002\188\007\"\005\138\002\187\007L\004\211\002\239\007T\002v\007\167\002\218\000\241\002\188\002\214\000\244\005\141\0010\0015\002\238\005\145\001~\005\153\004\199\005\160\005\171\002\214\005\227\005\220\001\022\005\221\002\222\000\244\005\226\005\230\001\029\001/\007\181\007f\002\216\007\193\b\028\005\231\002\222\006\006\005\255\006\000\b'\004\202\006\005\006\019\002\216\002v\006 \002\218\000\241\b,\006\028\006\029\006\031\002\219\006J\002\225\006.\002v\0062\002\218\000\241\002\231\0064\001\197\002\221\002\219\0066\003\156\006B\006R\002\216\006T\001%\002\231\006U\001\197\002\221\006[\006`\002\222\006d\006v\002\216\002v\0010\002\218\000\241\006}\002\233\002\029\006\129\002\222\002=\006\153\006\174\002v\006\198\002\218\000\241\0025\002\233\006\208\007\000\0029\006\250\001\029\006\251\006\255\002\219\007\014\002\225\007\019\002r\002s\001\159\007d\002\231\002\222\001\197\002\221\002\219\007>\002\225\007R\007S\007W\007\166\002\187\002\231\002\222\001\197\002\221\007\170\007\180\007\184\b\014\002\188\000\000\000\000\000\000\000\000\000\000\0034\002\233\000\000\000\000\002\219\002:\002\225\002\214\002r\002s\001\159\000\000\002\231\002\233\001\197\002\221\002\219\000\000\002\225\002;\002r\002s\001\159\002\187\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\002\188\000\000\000\000\002\187\001\022\000\000\0037\002\233\000\000\000\000\001\029\001/\002\188\002\214\000\000\000\000\000\000\000\000\003K\002\233\000\000\001%\000\000\000\000\001R\002\214\002r\002s\001\159\000\000\000\000\002r\002s\001\159\000\000\000\000\000\000\000\000\002\216\000\000\000\000\002\187\000\000\002r\002s\001\159\002\187\000\000\000\000\001-\002\188\002v\000\000\002\218\000\241\002\188\003N\000\000\002\187\000\000\000\000\003V\000\000\002\214\000\000\000\000\0010\002\188\002\214\002r\002s\001\159\000\000\003Y\000\000\000\000\002\216\000\000\000\000\000\000\002\214\002r\002s\001\159\002\187\002\222\000\000\000\000\002\216\002v\000\000\002\218\000\241\002\188\000\000\000\000\002\187\003\252\000\000\003d\000\000\002v\000\000\002\218\000\241\002\188\002\214\000\000\000\000\000\000\000\000\003i\000\000\000\000\002\219\000\000\002\225\000\000\002\214\000\000\000\000\000\000\002\231\002\222\001\197\002\221\002\216\001\022\000\000\000\000\000\000\002\216\000\000\001\029\001/\002\222\000\000\000\000\001%\002v\000\000\002\218\000\241\002\216\002v\000\000\002\218\000\241\000\000\002\233\000\000\000\000\002\219\000\000\002\225\000\000\002v\000\000\002\218\000\241\002\231\000\000\001\197\002\221\002\219\000\000\002\225\000\000\000\000\002\216\000\000\000\000\002\231\002\222\001\197\002\221\000\000\000\000\002\222\000\000\000\000\002\216\002v\000\000\002\218\000\241\000\000\002\233\000\000\0010\002\222\000\000\000\000\000\000\002v\000\000\002\218\000\241\001%\002\233\000\000\001d\002\219\000\000\002\225\000\000\001%\002\219\000\000\002\225\002\231\000\000\001\197\002\221\000\000\002\231\002\222\001\197\002\221\002\219\0015\002\225\000\000\000\000\000\000\000\000\001-\002\231\002\222\001\197\002\221\000\000\000\000\000\000\002r\002s\001\159\002\233\000\000\002r\002s\001\159\002\233\000\000\001\022\002\219\000\000\002\225\000\000\002\187\001\029\001/\000\000\002\231\002\233\001\197\002\221\002\219\002\188\002\225\002r\002s\001\159\004V\003l\002\231\000\000\001\197\002\221\000\000\004_\002\214\002r\002s\001\159\002\187\000\000\000\000\000\000\000\000\002\233\000\000\000\000\000\000\002\188\000\000\000\000\002\187\000\000\000\000\003r\000\000\002\233\000\000\000\000\004l\002\188\002\214\000\000\000\000\000\000\000\000\003u\000\000\001\022\000\000\0010\000\000\000\000\002\214\001\029\001/\001\022\000\000\002r\002s\001\159\000\000\001\029\001/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\187\000\000\000\000\002\029\000\000\002\216\002?\000\000\004\164\002\188\002u\000\000\000\000\0025\000\000\003\143\000\000\0029\002v\001\029\002\218\000\241\002\214\004c\000\000\002\218\000\241\001\007\000\000\001\158\001\159\002\216\000\000\002r\002s\001\159\000\000\0010\000\000\000\000\002r\002s\001\159\002\216\002v\0010\002\218\000\241\002\187\000\000\001\160\001\161\002\222\001\162\001\163\002\187\002v\002\188\002\218\000\241\000\000\002:\004Y\003\147\002\188\000\000\000\000\000\000\0015\001%\002\214\000\000\000\000\000\000\003\153\002;\004\186\002\214\002\222\000\000\000\000\002\219\000\000\002\225\000\000\002\216\002\219\000\000\000\000\002\231\002\222\001\197\002\221\000\000\002\220\000\000\001\197\002\221\002v\000\000\002\218\000\241\000\000\000\000\000\000\000\000\000\000\002\219\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\231\002\233\001\197\002\221\002\219\000\000\002\225\000\000\002r\002s\001\159\000\000\002\231\001\167\001\197\002\221\000\000\002\222\002\216\000\000\000\000\000\000\000\000\002\187\000\000\002\216\001\168\002\233\000\000\000\241\000\000\002v\002\188\002\218\000\241\000\000\000\000\000\000\002v\002\233\002\218\000\241\003\158\000\000\001%\002\214\002\219\000\000\002\225\002r\002s\001\159\000\000\000\000\002\231\000\000\001\197\002\221\000\000\000\000\001\022\002r\002s\001\159\002\187\002\222\001\029\001/\002\029\000\000\000\000\002[\002\222\002\188\000\000\000\000\002\187\000\000\0025\000\000\000\000\002\233\0029\003\160\001\029\002\188\002\214\000\000\000\000\001\187\000\000\002r\002s\001\159\002\219\003\164\002\225\001\196\002\214\001\197\001\166\002\219\002\231\003\156\001\197\002\221\002\187\000\000\002\216\002\231\000\000\001\197\002\221\000\000\000\000\002\188\000\000\000\000\000\000\000\000\000\000\002v\0010\002\218\000\241\003\172\002:\002\029\002\214\002\233\002\130\000\000\000\000\000\000\000\000\000\000\002\233\0025\000\000\000\000\002;\0029\000\237\001\029\000\000\000\241\000\242\000\000\000\000\002\216\001\022\000\000\000\000\004\193\000\000\002\222\001\029\001/\000\000\000\000\000\000\002\216\002v\000\000\002\218\000\241\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\002v\006\190\002\218\000\241\000\000\000\000\000\000\002\187\000\000\000\000\002\219\002:\003\156\000\000\000\000\000\000\002\188\002\216\002\231\000\000\001\197\002\221\002\222\000\000\000\000\002;\003\178\000\000\000\000\002\214\002v\006\192\002\218\000\241\002\222\000\000\000\000\000\000\0010\000\000\000\000\000\000\002r\002s\001\159\002\233\000\000\000\000\000\000\006\193\000\000\002\219\000\000\003\156\006\195\000\000\000\000\002\187\006\202\002\231\000\000\001\197\002\221\002\219\002\222\003\156\002\188\000\000\000\000\004\190\000\000\002\231\000\000\001\197\002\221\000\000\003\184\000\000\000\000\002\214\000\000\000\000\001%\000\000\000\000\001a\002\233\001%\000\000\000\000\001g\000\000\002\216\002\219\000\000\003\156\000\000\000\000\002\233\000\000\000\000\002\231\000\000\001\197\002\221\002v\000\000\002\218\000\241\000\000\001-\002\029\000\000\000\000\004\145\001-\000\000\002r\002s\001\159\000\000\0025\002r\002s\001\159\0029\000\000\001\029\002\233\000\000\000\000\000\000\002\187\000\000\000\000\000\000\000\000\002\187\000\000\002\222\000\000\002\188\002\216\000\000\000\000\000\000\002\188\003\191\000\000\000\000\000\000\000\000\003\196\000\000\002\214\002v\000\000\002\218\000\241\002\214\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\002\219\002:\003\156\000\000\002r\002s\001\159\002\187\002\231\000\000\001\197\002\221\000\000\000\000\000\000\002;\002\188\000\000\000\000\002\187\001\022\002\222\003\201\000\000\000\000\001\022\001\029\001/\002\188\002\214\000\000\001\029\001/\000\000\000\000\002\233\000\000\002\029\003\208\000\000\004\243\002\214\002r\002s\001\159\000\000\000\000\0025\000\000\002\216\002\219\0029\003\156\001\029\002\216\000\000\000\000\002\187\002\231\000\000\001\197\002\221\002v\000\000\002\218\000\241\002\188\002v\000\000\002\218\000\241\000\000\000\000\000\000\000\000\000\000\003\213\000\000\000\000\002\214\000\000\000\000\0010\000\000\000\000\002\233\000\000\0010\000\000\000\000\000\000\000\000\002\216\000\000\000\000\002:\002\222\002r\002s\001\159\000\000\002\222\000\000\000\000\002\216\002v\000\000\002\218\000\241\002;\000\000\000\000\002\187\0015\000\000\000\000\000\000\002v\0015\002\218\000\241\002\188\000\000\000\000\000\000\002\219\000\000\002\225\000\000\000\000\002\219\003\218\002\225\002\231\002\214\001\197\002\221\000\000\002\231\002\222\001\197\002\221\002\216\000\000\000\000\000\000\000\000\002r\002s\001\159\000\000\002\222\000\000\000\000\000\000\002v\000\000\002\218\000\241\000\000\002\233\000\000\002\187\000\000\000\000\002\233\000\000\000\000\002\219\000\237\002\225\002\188\000\241\000\242\000\000\000\000\002\231\000\000\001\197\002\221\002\219\003\233\003\156\000\000\002\214\002r\002s\001\159\002\231\002\222\001\197\002\221\000\000\000\000\000\000\000\000\000\000\002\216\000\000\000\000\002\187\000\237\006\190\002\233\000\241\000\242\002r\002s\001\159\002\188\002v\000\000\002\218\000\241\000\000\002\233\000\000\000\000\002\219\003\236\003\156\002\187\002\214\000\000\000\000\000\000\002\231\000\000\001\197\002\221\002\188\000\000\006\192\000\000\006\190\000\000\003\242\000\000\002\029\000\000\000\000\005\002\000\000\002\214\002\222\000\000\000\000\002\216\0025\000\000\006\193\000\000\0029\002\233\001\029\006\195\000\000\000\000\000\000\006\199\002v\000\000\002\218\000\241\006\192\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\002\219\000\237\003\156\000\000\000\241\000\242\000\000\002\187\002\231\006\193\001\197\002\221\002\216\000\000\006\195\000\000\002\188\000\000\006\196\000\000\000\000\002\222\003\244\002:\001%\002v\000\000\002\218\000\241\002\214\000\000\000\000\000\000\002\216\006\190\002\233\000\000\002;\002r\002s\001\159\000\000\002r\002s\001\159\000\000\002v\000\000\002\218\000\241\002\219\000\000\003\156\002\187\000\000\000\000\000\000\002\187\002\231\002\222\001\197\002\221\002\188\000\000\006\192\000\000\002\188\000\000\003\254\000\000\000\000\000\000\004\007\000\000\000\000\002\214\000\000\000\000\001%\002\214\002\222\001m\006\193\000\000\000\000\002\233\000\000\006\195\002\219\000\000\003\156\006\206\002\216\000\000\000\000\000\000\002\231\000\000\001\197\002\221\001%\000\000\000\000\001b\000\000\002v\001-\002\218\000\241\002\219\001c\002\225\000\000\000\000\000\000\000\000\000\000\002\231\000\000\001\197\002\221\000\000\000\000\002\233\000\000\000\000\000\000\000\000\001-\000\000\001\022\000\000\002r\002s\001\159\000\000\001\029\001/\002\216\002\222\000\000\000\000\002\216\000\000\002\233\001%\000\000\002\187\005\236\002\029\000\000\002v\005\006\002\218\000\241\002v\002\188\002\218\000\241\0025\000\000\000\000\004\n\0029\000\000\001\029\000\000\000\000\002\219\002\214\002\225\000\000\000\000\001-\000\000\001:\002\231\000\000\001\197\002\221\002r\002s\001\159\000\000\001\022\002\222\000\000\000\000\000\000\002\222\001\029\001/\0010\000\000\000\000\002\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\233\002\188\000\000\001\022\002:\000\000\000\000\004\024\000\000\001\029\001/\002\219\000\000\002\225\002\214\002\219\000\000\002\225\002;\002\231\004\192\001\197\002\221\002\231\000\000\001\197\002\221\000\000\000\000\002\216\000\000\000\000\002r\002s\001\159\000\000\002r\002s\001\159\000\000\000\000\000\000\002v\0010\002\218\000\241\002\233\002\187\001\022\000\000\002\233\002\187\000\000\001%\001\029\001/\002\188\000\000\000\000\000\000\002\188\000\000\004\027\000\000\000\000\0010\000\000\000\000\000\000\002\214\004%\000\000\000\000\002\214\0015\000\000\002\222\002\216\000\000\000\000\002r\002s\001\159\000\000\002r\002s\001\159\000\000\000\000\000\000\002v\000\000\002\218\000\241\000\000\002\187\0015\000\000\000\000\002\187\000\000\000\000\000\000\000\000\002\188\002\219\000\000\002\225\002\188\002\029\0010\000\000\005\t\002\231\004C\001\197\002\221\002\214\004K\0025\000\000\002\214\000\000\0029\002\222\001\029\000\000\000\000\001%\000\000\000\000\005\240\002\216\000\000\000\000\000\000\002\216\000\000\000\000\000\000\002\233\0015\000\000\000\000\000\000\002v\000\000\002\218\000\241\002v\000\000\002\218\000\241\002\219\000\000\002\225\001-\000\000\000\000\001\022\000\000\002\231\000\000\001\197\002\221\001\029\001/\002:\000\000\000\237\000\000\000\000\000\241\000\242\002r\002s\001\159\000\000\000\000\002\222\002\216\002;\000\000\002\222\002\216\000\000\000\000\001%\002\233\002\187\005\243\002\029\000\000\002v\005\023\002\218\000\241\002v\002\188\002\218\000\241\0025\006\190\005\242\004\137\0029\000\000\001\029\002\219\000\000\002\225\002\214\002\219\000\000\004(\001-\002\231\000\000\001\197\002\221\002\231\0010\001\197\002\221\002r\002s\001\159\002\222\000\000\000\000\000\000\002\222\006\192\000\000\001\022\000\000\000\000\000\000\000\000\002\187\001\029\005\245\000\000\002\233\000\000\000\000\000\000\002\233\002\188\002:\006\193\000\000\004\201\000\000\004\150\006\195\002\219\000\000\004F\006\224\002\219\002\214\004N\002;\002\231\000\000\001\197\002\221\002\231\000\000\001\197\002\221\000\000\000\000\002\216\000\000\000\000\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002v\000\000\002\218\000\241\002\233\002\187\001\022\000\000\002\233\005\246\000\000\000\000\001\029\001/\002\188\000\000\000\000\001\158\001\159\000\000\004\210\000\000\000\000\000\000\005\192\000\000\005\250\002\214\005\248\000\000\002r\002s\001\159\000\000\002\222\003P\001\159\002\216\001\160\001\176\0015\001\162\001\163\000\000\000\000\000\237\000\000\000\000\000\241\000\242\002v\000\000\002\218\000\241\002t\000\000\003n\001\176\000\000\001\162\001\163\000\000\004\252\002\219\000\000\002\225\000\000\000\000\0010\000\000\000\000\002\231\000\000\001\197\002\221\000\000\000\000\000\000\006\190\000\000\002r\002s\001\159\001\177\002\222\001\178\002\146\000\000\000\000\000\000\002\216\000\000\000\000\000\000\000\000\002\187\000\000\000\000\002\233\0015\003s\003\131\003\132\002v\002\188\002\218\000\241\000\000\006\192\000\000\005/\000\000\000\000\002\219\000\000\002\225\001\185\002\214\000\000\000\000\000\000\002\231\000\000\001\197\002\221\000\000\006\193\000\000\000\000\001\168\002u\006\195\000\241\000\000\001\185\006\243\000\000\002\222\000\000\000\000\004\015\001%\000\000\002v\007p\002\218\000\241\001\168\002\233\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\000\000\002\219\000\000\002\225\001-\000\000\000\000\002\187\000\000\002\231\000\000\001\197\002\221\000\000\000\000\002\216\002\188\003\135\004\216\000\000\000\000\000\000\006c\000\000\000\000\000\000\000\000\001\187\002v\002\214\002\218\000\241\000\000\000\000\000\000\001\188\002\233\001\197\001\166\000\000\000\000\002\219\002r\002s\001\159\001\187\002r\002s\001\159\002\220\000\000\001\197\002\221\001\188\000\000\001\197\001\166\002\187\000\000\000\000\000\000\002\187\002\222\000\000\000\000\000\000\002\188\000\000\000\000\000\000\002\188\000\000\006f\000\000\000\000\001%\006u\000\000\001h\002\214\000\000\000\000\001\022\002\214\000\000\001i\001%\000\000\001\029\001/\000\000\002\219\002\216\002\225\002r\002s\001\159\000\000\000\000\002\231\000\000\001\197\002\221\001-\000\000\002v\000\000\002\218\000\241\002\187\000\000\000\000\000\000\002\029\000\000\000\000\005d\000\000\002\188\000\000\000\000\000\000\000\000\0025\006x\000\000\002\233\0029\000\000\001\029\000\000\002\214\000\000\000\000\000\000\000\000\002r\002s\001\159\002\222\000\000\000\000\002\216\000\000\0010\000\000\002\216\000\000\000\000\000\000\001:\002\187\000\000\002\029\000\000\002v\005p\002\218\000\241\002v\002\188\002\218\000\241\0025\000\000\000\000\006\133\0029\002\219\001\029\002\225\002:\000\000\002\214\000\000\0015\002\231\000\000\001\197\002\221\000\000\001\022\002r\002s\001\159\002;\000\000\001\029\001/\002\222\000\000\000\000\001\022\002\222\002\216\000\000\000\000\002\187\001\029\001/\000\000\000\000\000\000\002\233\000\000\000\000\002\188\002v\000\000\002\218\000\241\002:\006\136\000\000\000\000\000\000\000\000\000\000\002\219\002\214\002\225\000\000\002\219\000\000\002\225\002;\002\231\000\000\001\197\002\221\002\231\000\000\001\197\002\221\000\000\000\000\002\216\000\000\000\000\000\000\000\000\002\222\000\000\0010\003P\001\159\000\000\000\000\000\000\002v\000\000\002\218\000\241\002\233\0010\000\000\000\000\002\233\000\000\000\000\000\000\000\000\002r\002s\001\159\003n\001\176\000\000\001\162\001\163\002\219\000\000\002\225\000\000\0015\000\000\001%\002\187\002\231\007~\001\197\002\221\002\216\002\222\000\000\004\205\002\188\000\000\000\000\000\000\000\000\001%\006\157\000\000\007{\002v\000\000\002\218\000\241\002\214\002r\002s\001\159\000\000\001-\002\233\000\000\000\000\000\000\003s\003\131\003\132\002\219\000\000\002\225\002\187\000\000\000\000\002\029\001-\002\231\005v\001\197\002\221\002\188\000\000\000\000\000\000\0025\002\222\006\160\000\000\0029\000\000\001\029\000\000\000\000\002\214\000\000\000\000\000\000\000\000\000\000\001\185\000\000\000\000\000\000\002\233\000\000\000\000\002r\002s\001\159\000\000\000\000\000\000\001\168\000\000\002\219\000\241\002\225\000\000\002\216\000\000\000\000\002\187\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\002\188\002v\002:\002\218\000\241\000\000\006\164\000\000\001\022\000\000\000\000\000\000\000\000\002\214\001\029\001/\002;\003\135\006\175\002\233\000\000\001%\000\000\001\022\001n\000\000\002\216\000\000\000\000\001\029\001/\001o\000\000\000\000\000\000\002\222\000\000\001%\000\000\002v\007\129\002\218\000\241\000\000\000\000\001\187\000\000\002\029\000\000\001-\005\127\000\000\000\000\001\188\000\000\001\197\001\166\0025\000\000\003P\001\159\0029\000\000\001\029\002\219\001-\002\225\000\000\000\000\000\000\0010\000\000\002\231\002\222\001\197\002\221\002\216\000\000\000\000\000\000\003n\001\176\000\000\001\162\001\163\0010\000\000\000\000\000\000\002v\000\000\002\218\000\241\000\000\000\000\000\000\001:\000\000\000\000\002\233\000\000\0015\002\219\000\000\002\225\002:\000\000\000\000\000\000\000\000\002\231\000\000\001\197\002\221\001\158\001\159\0015\000\000\000\000\002;\000\000\000\000\000\000\002\222\003s\003\131\003\132\001\022\000\000\000\000\000\000\000\000\000\000\001\029\001/\001\160\001\176\002\233\001\162\001\163\002r\002s\001\159\001\022\000\000\000\000\000\000\000\000\000\000\001\029\001/\000\000\002\219\000\000\002\225\002\187\000\000\000\000\001\185\0078\002\231\000\000\001\197\002\221\002\188\000\000\002r\002s\001\159\000\000\007\197\001\168\000\000\000\000\000\241\000\000\000\000\002\214\000\000\000\000\001\177\002\187\001\178\002\146\000\000\002\029\000\000\002\233\006\021\0010\002\188\000\000\000\000\001\158\001\159\0025\007\199\000\000\000\000\0029\000\000\001\029\000\000\002\214\000\000\0010\003\135\006\209\000\000\000\000\000\000\000\000\000\000\001\185\001\160\001\176\000\000\001\162\001\163\000\000\0015\000\000\000\000\002r\002s\001\159\001\168\000\000\000\000\000\241\000\000\000\000\000\000\000\000\001\187\000\000\0015\004\015\002\187\000\000\002\216\000\000\001\188\002:\001\197\001\166\000\000\002\188\000\000\002r\002s\001\159\000\000\002v\000\000\002\218\000\241\002;\000\000\001\177\002\214\001\178\001\201\000\000\000\000\000\000\002\216\000\000\000\000\002r\002s\001\159\000\000\002\182\000\000\001%\000\000\000\000\007\135\002v\000\000\002\218\000\241\000\000\002\187\000\000\000o\002\222\000\000\001\187\001\158\001\159\001\185\002\188\000\000\000\000\000\000\001\188\000\000\001\197\001\166\000\000\000\000\001-\000\000\001\168\002\214\000\000\000\241\000\000\000\000\001\160\001\176\002\222\001\162\001\163\002\219\000\000\002\225\000\000\000\000\001\246\000\000\002\216\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002v\000\000\002\218\000\241\000\000\000\000\002\219\000\000\002\225\000\000\000\000\000\000\000\000\002u\002\231\002\233\001\197\002\221\000\000\000\000\001\177\000\000\001\178\001\230\000\000\000\000\002v\000\000\002\218\000\241\000\000\000\000\001\187\002\216\002\222\000\000\001\158\001\159\000\000\000\000\001\188\002\233\001\197\001\166\000\000\001\022\002v\000\000\002\218\000\241\000\000\001\029\001/\001\185\000\000\000\000\000\000\001\160\001\176\000\000\001\162\001\163\000\000\002\219\007\001\004\253\001\168\001\242\000\000\000\241\000\000\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\b\"\002\222\000\000\b#\000\000\000\000\000\000\007\004\000\000\000\000\002\219\000\000\001\158\001\159\000\000\000\000\007\005\000\000\002\220\002\233\001\197\002\221\000\000\001\177\000\000\001\178\001\230\000\000\0010\000\000\002\219\000\000\004\226\001\160\001\176\000\000\001\162\001\163\002\231\001%\001\197\002\221\001&\001\227\000\000\001r\000\000\007\006\000\000\001<\001\187\000\000\000\000\000\000\000\000\000\000\001\185\000\000\001\188\0015\001\197\001\166\000\000\000\000\000\000\002\233\001s\001-\000\000\001\168\001\158\001\159\000\241\001\135\000\000\000\000\000\000\000\000\001\177\000\000\001\178\001\230\000\000\007\007\000\000\000\000\000\000\000\000\002r\002s\001\159\001\160\001\176\007\b\001\162\001\163\000\000\000\000\000\000\000\000\000\000\001\232\000\000\002\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\185\002\188\000\000\001:\b$\000\000\000\000\001%\000\000\000\000\007q\000\000\000\000\001\168\002\214\000\000\000\241\007r\000\000\000\000\001x\001\187\000\000\007\n\000\000\001\177\000\000\001\178\001\230\001\188\000\000\001\197\001\166\007\011\001\022\001-\007\r\000\000\000\000\007\018\001\029\001/\001\158\001\159\000\000\000\000\000\000\000\000\000\000\007\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\185\000\000\000\000\000\000\000\000\001\160\001\176\000\000\001\162\001\163\007\021\000\000\000\000\001\168\000\000\000\000\000\241\000\000\001\187\002\216\000\000\000\000\001\158\001\159\001:\000\000\001\188\000\000\001\197\001\166\000\000\001C\002v\000\000\002\218\000\241\000\000\000\000\0010\000\000\000\000\000\000\001\130\001\160\001\176\000\000\001\162\001\163\000\000\000\000\001\177\000\000\001\178\002\146\000\000\001\022\001\158\001\159\000\000\000\000\000\000\001\029\001/\000\000\000\000\000\000\002\222\000\000\000\000\0015\001%\000\000\001F\007\144\000\000\000\000\001\187\001\160\001\176\000\000\001\162\001\163\001%\001\185\001\188\007\154\001\197\001\166\001\177\000\000\001\178\002\155\000\000\000\000\000\000\002\219\001\168\004o\001-\000\241\000\000\000\000\000\000\002\231\000\000\001\197\002\221\004\011\000\000\000\000\001-\001\158\001\159\000\000\002r\002s\001\159\0010\000\000\000\000\000\000\001\185\001\177\000\000\001\178\002\155\000\000\000\000\000\000\002\187\002\233\000\000\001\160\001\176\001\168\001\162\001\163\000\241\002\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\0015\000\000\001&\002\214\000\000\000\000\000\000\001\185\000\000\001<\000\000\001\187\000\000\000\000\000\000\000\000\000\000\000\000\002\164\001\188\001\168\001\197\001\166\000\241\002r\002s\001\159\001-\001\022\001\177\000\000\001\178\003@\000\000\001\029\001/\000\000\000\000\004\172\002\187\001\022\000\000\000\000\002r\002s\001\159\001\029\001/\002\188\001\187\000\000\000\000\002\161\004\175\000\000\000\000\000o\001\188\002\187\001\197\001\166\002\214\001\185\000\000\000\000\000\000\002\216\002\188\000\000\000\000\000\000\000\000\000\000\000\000\001:\001\168\000\000\000\000\000\241\002v\002\214\002\218\000\241\001\187\000\000\000\000\000\000\000\000\000\000\000\000\0010\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\002r\002s\001\159\0010\000\000\000\000\001\022\000\000\000\000\000\000\000\000\000\000\001\029\001/\002\222\002\187\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\002\188\002\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\002\214\002v\001\187\002\218\000\241\000\000\002\219\002\216\003\229\000\000\001\188\000\000\001\197\001\166\002\231\000\000\001\197\002\221\000\000\000\000\002v\000\000\002\218\000\241\001C\000\000\000\000\000\000\000\000\000\000\000\000\0010\000\000\000\000\000\000\002\222\000\000\000\000\000\000\000\000\000\000\002\233\000\000\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\000\000\000\000\002\187\000\000\000\000\000\000\0015\002\216\002\219\004\179\003\141\002\188\000\000\000\000\000\000\000\000\002\231\000\000\001\197\002\221\002v\000\000\002\218\000\241\002\214\000\000\000\000\002\219\000\000\002\227\000\000\002r\002s\001\159\000\000\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\002\233\000\000\000\000\002\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\002\188\000\000\000\000\000\000\000\000\000\000\000\000\002\233\000\000\000\000\000\000\000\000\000\000\002\214\000\000\000\000\000\000\000\000\000\000\000\000\002r\002s\001\159\000\000\000\000\002r\002s\001\159\002\219\000\000\002\229\000\000\002\216\000\000\000\000\002\187\002\231\000\000\001\197\002\221\002\187\000\000\000\000\000\000\002\188\002v\000\000\002\218\000\241\002\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\214\000\000\000\000\000\000\000\000\002\214\002\233\000\000\000\000\002r\002s\001\159\000\000\002r\002s\001\159\000\000\000\000\000\000\002\216\000\000\000\000\002\222\000\000\002\187\000\000\000\000\000\000\002\187\000\000\000\000\000\000\002v\002\188\002\218\000\241\000\000\002\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\214\000\000\000\000\000\000\002\214\002\219\000\000\002\234\000\000\000\000\000\000\000\000\000\000\002\231\000\000\001\197\002\221\002\216\000\000\000\000\002\222\000\000\002\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002v\000\000\002\218\000\241\000\000\002v\000\000\002\218\000\241\000\000\002\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\219\000\000\002\241\000\000\000\000\000\000\000\000\000\000\002\231\000\000\001\197\002\221\000\000\000\000\002\216\002\222\000\000\000\000\002\216\000\000\002\222\002r\002s\001\159\000\000\007\001\000\000\002v\000\000\002\218\000\241\002v\000\000\002\218\000\241\002\233\002\187\000\000\002r\002s\001\159\000\000\000\000\007\002\002\219\002\188\002\243\007\004\000\000\002\219\000\000\002\245\002\231\002\187\001\197\002\221\007\005\002\231\002\214\001\197\002\221\002\222\002\188\000\000\000\000\002\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\214\000\000\000\000\000\000\002\233\000\000\000\000\000\000\000\000\002\233\000\000\000\000\007\006\000\000\000\000\002\219\000\000\002\247\000\000\002\219\000\000\002\249\000\000\002\231\000\000\001\197\002\221\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002r\002s\001\159\000\000\000\000\000\000\002\216\000\000\007\007\000\000\002\233\000\000\000\000\000\000\002\233\002\187\000\000\000\000\007\b\002v\000\000\002\218\000\241\002\216\002\188\000\000\002r\002s\001\159\000\000\002r\002s\001\159\000\000\000\000\000\000\002v\002\214\002\218\000\241\000\000\002\187\000\000\000\000\007\t\002\187\000\000\000\000\000\000\000\000\002\188\000\000\000\000\002\222\002\188\000\000\000\000\000\000\001%\007\n\000\000\007|\000\000\002\214\000\000\000\000\000\000\002\214\007}\007\011\002\222\000\000\007\r\000\000\000\000\007\018\000\000\000\000\000\000\000\000\000\000\000\000\002\219\000\000\002\251\007\020\001-\000\000\000\000\000\000\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\000\000\002\219\002\216\002\253\000\000\000\000\007\021\000\000\000\000\002\231\000\000\001\197\002\221\000\000\000\000\002v\000\000\002\218\000\241\002\233\000\000\000\000\002r\002s\001\159\000\000\000\000\000\000\002\216\000\000\000\000\000\000\002\216\000\000\000\000\001:\002\233\002\187\000\000\000\000\000\000\002v\000\000\002\218\000\241\002v\002\188\002\218\000\241\002\222\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\000\000\002\214\000\000\000\000\000\000\000\000\000\000\002\187\001\022\000\000\002r\002s\001\159\000\000\001\029\001/\002\188\002\222\000\000\000\000\002\219\002\222\002\255\000\000\000\000\002\187\000\000\000\000\002\231\002\214\001\197\002\221\000\000\000\000\002\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\214\003\001\000\000\002\219\000\000\003\003\000\000\002\231\002\233\001\197\002\221\002\231\000\000\001\197\002\221\000\000\000\000\002\216\000\000\000\000\002r\002s\001\159\0010\000\000\000\000\000\000\000\000\000\000\000\000\002v\000\000\002\218\000\241\002\233\002\187\000\000\000\000\002\233\000\000\000\000\000\000\000\000\000\000\002\188\002\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\002\214\002v\000\000\002\218\000\241\000\000\002\216\002\222\002r\002s\001\159\000\000\000\000\002r\002s\001\159\000\000\000\000\000\000\002v\000\000\002\218\000\241\002\187\000\000\000\000\000\000\000\000\002\187\000\000\000\000\000\000\002\188\000\000\000\000\002\222\002\219\002\188\003\005\001%\000\000\000\000\007\130\000\000\002\231\002\214\001\197\002\221\000\000\007\131\002\214\000\000\001%\002\222\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\001<\002\216\002\219\000\000\003\007\001-\000\000\000\000\000\000\002\233\002\231\000\000\001\197\002\221\002v\000\000\002\218\000\241\001-\000\000\002\219\000\000\003\t\000\000\000\000\000\000\000\000\000\000\002\231\004\172\001\197\002\221\000\000\000\000\002r\002s\001\159\002\233\000\000\002r\002s\001\159\000\000\000\000\007^\000\000\002\216\000\000\002\222\002\187\000\000\002\216\001:\000\000\002\187\002\233\000\000\000\000\002\188\002v\000\000\002\218\000\241\002\188\002v\001:\002\218\000\241\000\000\000\000\000\000\002\214\000\000\000\000\000\000\000\000\002\214\002\219\000\000\003\011\002r\002s\001\159\001\022\000\000\002\231\000\000\001\197\002\221\001\029\001/\000\000\000\000\002\222\000\000\002\187\001\022\000\000\002\222\000\000\000\000\000\000\001\029\001/\002\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\233\000\000\000\000\000\000\000\000\002\214\000\000\000\000\000\000\000\000\002\219\000\000\003\r\000\000\000\000\002\219\000\000\003\015\002\231\000\000\001\197\002\221\002\216\002\231\000\000\001\197\002\221\002\216\000\000\000\000\000\000\000\000\000\000\0010\000\000\002v\000\000\002\218\000\241\001C\002v\000\000\002\218\000\241\000\000\002\233\0010\000\000\000\000\000\000\002\233\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\002\187\000\000\002\216\002\222\001\158\001\159\000\000\000\000\002\222\002\188\000\000\0015\000\000\0035\004\179\002v\000\000\002\218\000\241\000\000\000\000\000\000\002\214\000\000\000\000\001\160\0038\000\000\001\162\001\163\000\000\000\000\002\219\000\000\003\017\001\158\001\159\002\219\000\000\003\019\002\231\000\000\001\197\002\221\0035\002\231\000\000\001\197\002\221\002\222\000\000\000\000\001\158\001\159\000\000\000\000\001\160\0038\000\000\001\162\001\163\000\000\000\000\000\000\000\000\000\000\000\000\002\233\000\000\000\000\000\000\000\000\002\233\001\160\001\176\000\000\001\162\001\163\002\219\000\000\003\021\000\000\000\000\000\000\000\000\002\216\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002v\001%\002\218\000\241\001&\001\167\000\000\000\000\000\000\000\000\000\000\001<\000\000\000\000\000\000\002\233\001\158\001\159\001\168\000\000\001\177\000\241\001\178\003,\000\000\000\000\000\000\000\000\000\000\001-\0039\003:\000\000\000\000\002\222\000\000\001\167\001\160\001\176\000\000\001\162\001\163\000\000\000\000\000\000\000\000\007\001\000o\000\000\001\168\000\000\000\000\000\241\001\185\000\000\003;\000\000\000\000\000\000\000\000\000\000\0039\003<\002\219\007\002\003\023\001\168\000\000\007\004\000\241\000\000\002\231\000\000\001\197\002\221\000\000\001:\007\005\001\158\001\159\000\000\001\187\001\177\000\000\001\178\002\155\003;\003W\000\000\001\196\000\000\001\197\001\166\000\000\000\000\000\000\003Z\000\000\002\233\001\160\0038\000\000\001\162\001\163\000\000\000\000\000\000\001\022\007\006\000\000\000\000\000\000\001\187\001\029\001/\001\185\000\000\000\000\000\000\000\000\001\196\000\000\001\197\001\166\001\158\001\159\000\000\000\000\001\168\001\187\000\000\000\241\000\000\003W\000\000\000\000\000\000\001\188\000\000\001\197\001\166\000\000\003Z\000\000\007\007\001\160\0038\000\000\001\162\001\163\000\000\000\000\000\000\000\000\007\b\002r\002s\001\159\000\000\000\000\003>\000\000\001C\000\000\000\000\000\000\000\000\000\000\000\000\0010\002\187\000\000\002r\002s\001\159\000\000\000\000\001\167\000\000\002\188\007\025\000\000\000\000\000\000\000\000\000\000\000\000\002\187\000\000\000\000\001\168\001\187\002\214\000\241\000\000\007\n\002\188\000\000\000\000\001\188\0015\001\197\001\166\002&\000\000\007\011\000\000\000\000\007\r\002\214\000\000\007\018\000\000\002r\002s\001\159\000\000\000\000\000\000\000\000\000\000\007\020\000\000\001\167\000\000\000\000\000\000\003[\002\187\000\000\002r\002s\001\159\000\000\000\000\000\000\001\168\002\188\000\000\000\241\007\021\000\000\000\000\000\000\000\000\002\187\000\000\000\000\003]\000\000\002\214\000\000\000\000\001\187\002\188\002\216\000\000\000\000\000\000\000\000\000\000\001\196\000\000\001\197\001\166\000\000\000\000\002\214\002v\000\000\002\218\000\241\002\216\003[\006\007\000\000\000\000\000\000\000\000\000\000\002r\002s\001\159\000\000\000\000\002v\000\000\002\218\000\241\000\000\000\000\000\000\000\000\000\000\003\\\002\187\000\000\000\000\000\000\001\187\000\000\000\000\002\222\006\b\002\188\006\t\000\000\001\196\000\000\001\197\001\166\000\000\000\000\002\216\000\000\000\000\000\000\002\214\000\000\002\222\000\000\000\000\000\000\000\000\000\000\000\000\002v\000\000\002\218\000\241\002\216\002\219\000\000\003\176\000\000\000\000\006\n\000\000\000\000\002\231\000\000\001\197\002\221\002v\000\000\002\218\000\241\000\000\002\219\000\000\003\182\000\000\000\000\000\000\000\000\000\000\002\231\000\000\001\197\002\221\002\222\002r\002s\001\159\000\000\000\000\002\233\000\000\000\000\000\000\000\000\006\011\000\000\000\000\000\000\000\000\002\187\002\222\000\000\000\000\002\216\006\012\006\r\002\233\006\014\002\188\000\000\000\000\000\000\002\219\000\000\003\188\000\000\002v\000\000\002\218\000\241\002\231\002\214\001\197\002\221\007\001\000\000\000\000\000\000\000\000\002\219\000\000\003\194\006M\002r\002s\001\159\000\000\002\231\000\000\001\197\002\221\000\000\007\002\000\000\000\000\000\000\007\004\002\233\002\187\000\000\002\222\002r\002s\001\159\000\000\007\005\006\016\002\188\000\000\006\018\000\000\000\000\006\023\006!\002\233\000\000\002\187\000\000\000\000\000\000\002\214\000\000\006K\000\000\000\000\002\188\000\000\000\000\000\000\002\219\000\000\003\199\000\000\000\000\002\216\000\000\007\006\002\231\002\214\001\197\002\221\006L\002r\002s\001\159\000\000\000\000\002v\000\000\002\218\000\241\000\000\000\000\000\000\000\000\000\000\000\000\002\187\000\000\000\000\002r\002s\001\159\000\000\002\233\000\000\002\188\000\000\000\000\000\000\000\000\000\000\007\007\000\000\000\000\002\187\000\000\000\000\000\000\002\214\000\000\002\222\007\b\002\216\002\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002v\002\214\002\218\000\241\000\000\002\216\000\000\000\000\000\000\000\000\000\000\000\000\007#\000\000\002\219\000\000\003\204\000\000\002v\000\000\002\218\000\241\002\231\000\000\001\197\002\221\000\000\007\n\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\000\000\007\011\000\000\000\000\007\r\000\000\000\000\007\018\000\000\000\000\002\216\000\000\000\000\002\233\000\000\000\000\002\222\007\020\000\000\000\000\000\000\000\000\000\000\002v\000\000\002\218\000\241\002\219\002\216\003\211\000\000\000\000\000\000\000\000\000\000\002\231\007\021\001\197\002\221\001\158\001\159\002v\000\000\002\218\000\241\002\219\000\000\003\216\000\000\000\000\002r\002s\001\159\002\231\000\000\001\197\002\221\002\222\000\000\000\000\001\160\001\176\002\233\001\162\001\163\002\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\188\002\222\002r\002s\001\159\000\000\002\233\000\000\000\000\000\000\000\000\000\000\002\219\002\214\003\221\000\000\000\000\002\187\000\000\000\000\002\231\000\000\001\197\002\221\000\000\000\000\002\188\000\000\000\000\000\000\002\219\001\177\003\224\001\178\002\146\000\000\000\000\000\000\002\231\002\214\001\197\002\221\000\000\000\000\000\000\000\000\000\000\002\233\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\249\001\159\000\000\000\000\001\185\002\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\216\001\168\000\000\000\000\000\241\001\160\002\135\000\000\001\162\001\163\000\000\000\000\004\014\002v\000\000\002\218\000\241\000\000\000\000\002r\002s\001\159\000\000\000\000\000\000\000\000\002\216\000\000\000\000\000\000\000\000\002r\002s\001\159\002\187\000\000\000\000\000\000\000\000\002v\000\000\002\218\000\241\002\188\000\000\000\000\002\187\002\222\000\000\004\022\003\131\003\132\000\000\000\000\000\000\002\188\002\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\187\000\000\000\000\000\000\002\214\000\000\000\000\000\000\001\188\002\222\001\197\001\166\002\219\000\000\004\018\000\000\000\000\000\000\000\000\001\185\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\168\000\000\000\000\000\241\000\000\000\000\002\219\000\000\004\020\000\000\000\000\000\000\000\000\000\000\002\231\002\233\001\197\002\221\000\000\000\000\000\000\000\000\000\000\002\216\000\000\002r\002s\001\159\000\000\000\000\000\000\004\029\002r\002s\001\159\002\216\002v\000\000\002\218\000\241\002\187\002\233\000\000\000\000\002r\002s\001\159\002\187\002v\002\188\002\218\000\241\000\000\000\000\000\000\000\000\002\188\000\000\000\000\002\187\000\000\000\000\002\214\001\187\000\000\000\000\000\000\000\000\002\188\002\214\002\222\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\000\000\000\000\002\214\002\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\219\000\000\004*\000\000\000\000\000\000\000\000\000\000\002\231\000\000\001\197\002\221\002\219\000\000\0042\000\000\000\000\000\000\000\000\000\000\002\231\000\000\001\197\002\221\000\000\000\000\002\216\000\000\000\000\000\000\000\000\000\000\000\000\002\216\000\000\002\233\000\000\000\000\000\000\002v\000\000\002\218\000\241\000\000\000\000\002\216\002v\002\233\002\218\000\241\000\000\000\000\000\000\006\007\000\000\000\000\000\000\000\000\002v\000\000\002\218\000\241\000\000\000\000\000\000\000\000\001%\000\000\000\000\001&\000\000\000\000\001\131\002\222\000\000\000\000\001<\000\000\000\000\000\000\002\222\000\000\006\b\007\205\006\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\001\133\001-\000\000\000\000\006\007\000\000\005\185\000\000\000\000\002\219\000\000\0045\000\000\000\000\000\000\000\000\002\219\002\231\0047\001\197\002\221\000\000\006\n\000\000\002\231\000\000\001\197\002\221\002\219\000\000\0049\001\158\001\159\006\b\007\187\006\t\002\231\000\000\001\197\002\221\000\000\000\000\000\000\000\000\002\233\000\000\000\000\000\000\001:\000\000\000\000\002\233\001\160\001\176\000\000\001\162\001\163\006\011\000\000\000\000\000\000\001%\000\000\002\233\001&\001x\006\n\006\012\006\r\000\000\006\014\001<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\022\000\000\000\000\001\158\001\159\000\000\001\029\001/\000\000\000\000\001-\000\000\000\000\000\000\000\000\000\000\006O\000\000\001\177\000\000\001\178\b\003\006\011\b\005\001\160\001\176\000\000\001\162\001\163\000\000\000\000\000\000\006\012\006\r\000\000\006\014\000\000\000\000\000\000\000\000\006\016\007\207\000\000\006\018\000\000\000\000\006\023\006!\000\000\000\000\000\000\001\185\000\000\000\000\000\000\001C\006K\001:\000\000\000\000\006O\000\000\0010\000\000\001\168\000\000\005\239\000\241\000\000\001\177\001%\001\178\007,\001&\000\000\006L\001\131\000\000\000\000\001%\001<\000\000\001&\000\000\006\016\001r\000\000\006\018\001\022\001<\006\023\006!\000\000\0015\001\029\001/\001F\001\133\001-\000\000\006K\000\000\001\185\000\000\001\158\001\159\001w\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\168\000\000\000\000\000\241\006L\000\000\000\000\000\000\000\000\000\000\001\160\001\176\001\187\001\162\001\163\000\000\001\158\001\159\000\000\000\000\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\001C\000\000\001:\000\000\000\000\000\000\000\000\0010\000\000\001\160\001\176\001:\001\162\001\163\000\000\000\000\000\000\000\000\000\000\001x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\177\001x\001\178\001\234\000\000\000\000\001\022\000\000\001\187\000\000\000\000\0015\001\029\001/\002(\001\022\001\188\000\000\001\197\001\166\000\000\001\029\001/\001\158\001\159\000\000\000\000\001\177\001%\001\178\001\222\007\136\000\000\001\185\000\000\000\000\000\000\000\000\007\137\000\000\000\000\000\000\000\000\000\000\001\160\001\176\001\168\001\162\001\163\000\241\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\001\158\001\159\001\185\001C\000\000\001\158\001\159\000\000\000\000\000\000\0010\000\000\001C\000\000\001\130\001\168\000\000\000\000\000\241\0010\000\000\001\160\001\176\001\130\001\162\001\163\001\160\001\176\000\000\001\162\001\163\001\177\000\000\001\178\001\219\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\001F\001:\000\000\000\000\000\000\000\000\0015\001\187\000\000\001F\000\000\000\000\000\000\000\000\000\000\001\188\000\000\001\197\001\166\000\000\001\185\000\000\001\177\000\000\001\178\001\180\000\000\001\177\000\000\001\178\001\183\000\000\001\022\001\168\001\187\000\000\000\241\000\000\001\029\001/\000\000\000\000\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\158\001\159\001\185\000\000\000\000\001\158\001\159\001\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\168\000\000\000\000\000\241\000\000\001\168\001\160\001\176\000\241\001\162\001\163\001\160\001\176\000\000\001\162\001\163\000\000\000\000\000\000\001\158\001\159\000\000\000\000\000\000\001\158\001\159\0010\000\000\001\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\188\000\000\001\197\001\166\001\160\001\176\000\000\001\162\001\163\001\160\001\176\000\000\001\162\001\163\000\000\001\177\000\000\001\178\001\186\000\000\001\177\0015\001\178\001\218\000\000\000\000\000\000\001\187\000\000\000\000\000\000\000\000\001\187\000\000\000\000\001\188\000\000\001\197\001\166\000\000\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\001\185\001\177\000\000\001\178\001\206\001\185\001\177\000\000\001\178\001\214\000\000\000\000\000\000\001\168\000\000\000\000\000\241\000\000\001\168\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\158\001\159\001\185\000\000\000\000\001\158\001\159\001\185\000\000\000\000\000\000\000\000\000\000\000\000\003L\001\168\000\000\000\000\000\241\000\000\001\168\001\160\001\176\000\241\001\162\001\163\001\160\0038\000\000\001\162\001\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\158\001\159\000\000\000\000\001\187\000\000\000\000\000\000\000\000\001\187\000\000\000\000\001\188\000\000\001\197\001\166\000\000\001\188\000\000\001\197\001\166\001\160\001\176\000\000\001\162\001\163\001\177\000\000\001\178\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\187\000\000\000\000\000\000\000\000\001\187\000\000\000\000\001\188\000\000\001\197\001\166\000\000\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\001\185\000\000\001\158\001\159\000\000\001\167\000\000\001\177\000\000\001\178\003#\003j\000\000\001\168\000\000\000\000\000\241\000\000\001\168\000\000\003m\000\241\001%\001\160\0038\001&\001\162\001\163\000\000\000\000\003O\000\000\001<\000\000\000\000\000\000\000\000\001\158\001\159\000\000\001\185\000\000\001\158\001\159\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\000\000\001\168\000\000\003;\000\241\000\000\001\160\001\176\000\000\001\162\001\163\001\160\001\176\000\000\001\162\001\163\000\000\000\000\000\000\000\000\000\000\000\000\001\158\001\159\001\187\000\000\000\000\000\000\000\000\001\187\000\000\000\000\001\188\000\000\001\197\001\166\000\000\001\196\000\000\001\197\001\166\000\000\000\000\001\160\001\176\001:\001\162\001\163\000\000\001\167\000\000\001\177\000\000\001\178\003x\000\000\001\177\000\000\001\178\003{\000\000\000\000\001\168\000\000\001\187\000\241\000\000\000\000\000\000\000\000\000\000\000\000\001\188\000\000\001\197\001\166\001\022\000\000\000\000\000\000\000\000\000\000\001\029\001/\001\185\000\000\001\158\001\159\001\177\001\185\001\178\003~\000\000\000\000\000\000\000\000\000\000\001\168\000\000\003[\000\241\000\000\001\168\000\000\000\000\000\241\000\000\001\160\001\176\000\000\001\162\001\163\000\000\000\000\000\000\000\000\000\000\000\000\001\158\001\159\000\000\001\185\000\000\001\158\001\159\001\187\002r\002s\001\159\000\000\000\000\001C\000\000\001\196\001\168\001\197\001\166\000\241\0010\001\160\001\176\000\000\001\162\001\163\001\160\001\176\000\000\001\162\001\163\000\000\004V\000\000\001\177\000\000\001\178\003\134\000\000\004_\000\000\000\000\001\187\000\000\000\000\000\000\000\000\001\187\000\000\000\000\001\188\0015\001\197\001\166\004\174\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\000\000\004`\000\000\001\177\001\185\001\178\0043\000\000\001\177\000\000\001\178\0040\000\000\000\000\000\000\000\000\001\187\001\168\000\000\000\000\000\241\000\000\000\000\000\000\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\185\000\000\000\000\000\000\000\000\001\185\001\158\001\159\000\000\002u\000\000\000\000\000\000\001\168\000\000\000\000\000\241\000\000\001\168\000\000\000\000\000\241\004c\000\000\002\218\000\241\001\007\001\160\001\176\000\000\001\162\001\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001&\000\000\001\187\000\000\000\000\000\000\000\000\001<\000\000\000\000\001\188\000\000\001\197\001\166\000\000\000\000\000\000\000\000\001%\004Y\000\000\001&\000\000\000\000\000\000\001-\000\000\000\000\001<\000\000\001\177\000\000\001\178\005-\001\187\000\000\0059\000\000\000\000\001\187\000\000\000\000\001\188\002\219\001\197\001\166\001-\001\188\001=\001\197\001\166\002\220\007\192\001\197\002\221\000\000\000\000\007\148\001%\000\000\000\000\001&\000\000\001\185\000\000\000\000\000\000\000\000\001<\000\000\000\000\000\000\001:\000\000\000\000\000\000\001\168\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\001=\000\000\000\000\000\000\000\000\001:\000\000\000\000\000\000\007\138\001%\000\000\000\000\001&\000\000\001\022\000\000\000\000\000\000\000\000\001<\001\029\001/\000\000\001%\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\001<\000\000\001\022\000\000\001-\000\000\001=\000\000\001\029\001/\000\000\001:\000\000\000\000\000\000\007j\001%\001\187\001-\001&\001=\000\000\000\000\000\000\000\000\001\188\001<\001\197\001\166\001J\000\000\000\000\000\000\000\000\000\000\000\000\001C\001\158\001\159\000\000\000\000\000\000\001\022\0010\001-\000\000\001=\005B\001\029\001/\000\000\001:\000\000\000\000\000\000\001[\000\000\001C\001\160\0038\000\000\001\162\001\163\000\000\0010\001:\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\001F\000\000\000\000\000\000\000\000\001\022\000\000\000\000\000\000\000\000\000\000\001\029\001/\000\000\001:\001\158\001\159\000\000\0015\001\022\001C\001F\001\158\001\159\000\000\001\029\001/\0010\000\000\000\000\000\000\001U\000\000\000\000\000\000\000\000\001\160\0038\000\000\001\162\001\163\000\000\000\000\001\160\0038\001\022\001\162\001\163\000\000\000\000\000\000\001\029\001/\000\000\000\000\001\158\001\159\000\000\0015\001\167\001C\001F\000\000\000\000\000\000\000\000\000\000\0010\000\000\000\000\000\000\001U\001\168\000\000\001C\000\241\001\160\0038\000\000\001\162\001\163\0010\000\000\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\001C\001F\000\000\001%\000\000\000\000\001&\0010\000\000\003\255\000\000\001U\0015\001<\001\167\001F\000\000\000\000\000\000\000\000\000\000\001\167\000\000\000\000\000\000\000\000\000\000\001\168\000\000\004\002\000\241\001-\000\000\000\000\001\168\001\187\000\000\000\241\0015\000\000\000\000\001F\0059\001\196\000\000\001\197\001\166\001%\006\007\000\000\001&\000\000\000\000\000\000\001\167\000\000\000\000\001<\005<\000\000\000\000\000\000\000\000\000\000\003\255\000\000\000\000\001\168\000\000\000\000\000\241\003\255\000\000\000\000\000\000\001-\000\000\006\b\001:\006\t\000\000\000\000\000\000\000\000\004\001\000\000\0059\000\000\000\000\000\000\001\187\004\000\000\000\000\000\000\000\000\000\000\000\001\187\001\196\000\000\001\197\001\166\005\174\000\000\003\255\001\196\000\000\001\197\001\166\001\022\006\n\000\000\001\158\001\159\000\000\001\029\001/\000\000\000\000\000\000\000\000\000\000\001:\000\000\004\004\000\000\000\000\000\000\000\000\000\000\001\187\000\000\000\000\001\160\0038\000\000\001\162\001\163\001\196\000\000\001\197\001\166\000\000\000\000\000\000\006\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\022\000\000\006\012\006\r\000\000\006\014\001\029\001/\000\000\000\000\000\000\001C\000\000\001\158\001\159\000\000\000\000\001%\0010\000\000\001&\000\000\005B\000\000\000\000\000\000\000\000\001<\000\000\000\000\006\015\006\137\000\000\000\000\001\160\0038\000\000\001\162\001\163\000\000\001%\000\000\000\000\001&\000\000\001-\000\000\000\000\000\000\0015\001<\000\000\001F\000\000\006\016\001C\0059\006\018\001\167\000\000\006\023\006!\0010\000\000\000\000\000\000\005B\000\000\001-\000\000\006K\001\168\006\134\000\000\000\241\000\000\000\000\000\000\000\000\0059\001\158\001\159\000\000\000\000\000\000\001\158\001\159\000\000\000\000\006L\000\000\000\000\001:\0015\000\000\006\148\001F\000\000\006\161\000\000\000\000\001\160\0038\000\000\001\162\001\163\001\160\0038\006\244\001\162\001\163\001%\001\167\000\000\001&\001:\000\000\000\000\000\000\000\000\000\000\001<\000\000\001\022\000\000\001\168\000\000\000\000\000\241\001\029\001/\000\000\000\000\000\000\001\187\000\000\001\158\001\159\000\000\001-\000\000\000\000\001\196\000\000\001\197\001\166\001\022\000\000\000\000\000\000\0059\000\000\001\029\001/\000\000\000\000\000\000\001\160\0038\006\246\001\162\001\163\003[\000\000\000\000\000\000\006\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001C\001\167\000\000\001\158\001\159\000\000\001\167\0010\001:\000\000\001\187\005B\000\000\000\000\001\168\000\000\000\000\000\241\001\196\001\168\001\197\001\166\000\241\001C\001\160\0038\000\000\001\162\001\163\000\000\0010\000\000\000\000\000\000\005B\000\000\000\000\000\000\0015\001\022\000\000\001F\000\000\000\000\000\000\001\029\001/\001\158\001\159\000\000\000\000\003[\000\000\000\000\000\000\000\000\006\188\001\167\000\000\000\000\000\000\0015\000\000\000\000\001F\000\000\000\000\000\000\001\160\0038\001\168\001\162\001\163\000\241\000\000\000\000\000\000\001\187\000\000\000\000\000\000\001%\001\187\000\000\001&\001\196\000\000\001\197\001\166\000\000\001\196\001<\001\197\001\166\001C\002r\002s\001\159\000\000\007\001\000\000\0010\001\167\000\000\000\000\005B\006\201\006\188\000\000\001-\000\000\001=\000\000\000\000\b\"\001\168\000\000\b#\000\241\002\184\007u\007\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\005\000\000\0015\001\187\000\000\001F\007\001\000\000\000\000\000\000\000\000\001\196\000\000\001\197\001\166\000\000\001\167\000\000\000\000\000\000\000\000\b\"\006\244\000\000\b#\000\000\001:\006\200\007\004\001\168\000\000\007\006\000\241\001%\000\000\000\000\001&\007\005\000\000\000\000\000\000\000\000\000\000\001<\000\000\000\000\000\000\000\000\001\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\196\001\022\001\197\001\166\000\000\001-\000\000\001\029\001/\002u\006\244\007\007\007\006\000\000\000\000\000\000\001\255\006\245\000\000\000\000\000\000\007\b\002v\000\000\002\218\000\241\000\000\001%\000\000\001%\001&\000\000\001&\000\000\000\000\000\000\001\187\001<\000\000\001<\000\000\000\000\000\000\b(\001\196\000\000\001\197\001\166\007\007\001\158\001\159\000\000\001:\000\000\000\000\001-\001C\001-\007\b\000\000\000\000\006\253\007\n\0010\000\000\000\000\002\157\001U\003.\000\000\001\160\0038\007\011\001\162\001\163\007\r\000\000\000\000\007\018\000\000\b-\000\000\000\000\001\022\000\000\002\219\000\000\000\000\007\020\001\029\001/\000\000\000\000\002\220\0015\001\197\002\221\001F\001%\007\n\000\000\001&\001:\000\000\001:\000\000\000\000\007\021\001<\007\011\000\000\000\000\007\r\000\000\000\000\007\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\020\001-\000\000\000\000\000\000\000\000\000\000\000\000\001\022\000\000\001\022\000\000\003B\001C\001\029\001/\001\029\001/\001%\007\021\0010\001&\000\000\001\167\002\002\000\000\000\000\001%\001<\000\000\001&\000\000\000\000\000\000\000\000\000\000\001\168\001<\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\001:\000\000\001%\0015\000\000\001&\001F\001-\000\000\003G\000\000\000\000\001<\000\000\000\000\001C\000\000\001C\003e\000\000\000\000\000\000\0010\000\000\0010\004\003\002\160\000\000\001\209\000\000\001-\001\022\000\000\000\000\000\000\005\185\000\000\001\029\001/\000\000\000\000\000\000\000\000\000\000\000\000\001:\000\000\001%\000\000\000\000\001&\001\187\000\000\0015\001:\0015\001F\001<\001F\001\196\000\000\001\197\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001&\000\000\001-\001\022\001:\000\000\000\000\001<\000\000\001\029\001/\000\000\001\022\001C\000\000\000\000\000\000\000\000\001\029\001/\0010\000\000\000\000\000\000\001\209\001-\000\000\000\000\000\000\000\000\006\183\000\000\000\000\000\000\000\000\001\022\000\000\000\000\000\000\000\000\000\000\001\029\001/\000\000\000\000\000\000\000\000\001%\000\000\001:\001&\0015\000\000\000\000\001F\000\000\000\000\001<\001C\000\000\000\000\000\000\000\000\000\000\000\000\0010\000\000\001C\000\000\002\197\000\000\000\000\001:\000\000\0010\001-\000\000\000\000\002\197\001%\001\022\000\000\001&\000\000\000\000\000\000\001\029\001/\000\000\001<\001C\000\000\001%\000\000\000\000\001&\0015\0010\000\000\001F\000\000\005\190\001<\001\022\000\000\0015\000\000\001-\001F\001\029\001/\001%\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\001-\001<\001:\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\001F\000\000\000\000\000\000\001C\000\000\000\000\000\000\001-\000\000\000\000\0010\000\000\000\000\000\000\005\203\000\000\000\000\005\206\007\231\000\000\000\000\001\022\001:\000\000\000\000\000\000\001C\001\029\001/\001%\000\000\000\000\001&\0010\000\000\001:\000\000\005\190\000\000\001<\000\000\0015\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\001\022\001:\001&\000\000\001-\000\000\001\029\001/\000\000\001<\000\000\0015\000\000\001\022\001F\000\000\000\000\000\000\000\000\001\029\001/\000\000\000\000\001C\000\000\000\000\000\000\001-\000\000\000\000\0010\000\000\001\022\000\000\005\203\001\158\001\159\006\229\001\029\001/\000\000\000\000\000\000\001%\000\000\000\000\001&\000\000\000\000\000\000\000\000\001:\000\000\001<\000\000\001C\001\160\001\195\000\000\001\162\001\163\0015\0010\000\000\001F\000\000\007\232\001%\001C\000\000\001&\001-\000\000\000\000\001:\0010\000\000\001<\000\000\001\146\000\000\000\000\001\022\000\000\000\000\000\000\000\000\001C\001\029\001/\000\000\000\000\000\000\0015\0010\001-\001F\000\000\001D\000\000\000\000\000\000\000\000\000\000\000\000\001\022\0015\000\000\000\000\001F\001%\001\029\001/\001&\000\000\000\000\000\000\000\000\001:\000\000\001<\000\000\000\000\000\000\000\000\0015\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\001\167\000\000\000\000\001C\001-\000\000\000\000\000\000\001:\000\000\0010\000\000\000\000\001\168\001N\001\022\000\241\000\000\000\000\000\000\000\000\001\029\001/\000\000\000\000\000\000\001C\000\000\001%\000\000\000\000\001&\000\000\0010\000\000\000\000\000\000\001X\001<\001\022\001%\0015\000\000\001&\001F\001\029\001/\000\000\000\000\000\000\001<\001:\001%\000\000\000\000\001&\001-\000\000\000\000\000\000\000\000\000\000\001<\000\000\0015\000\000\000\000\001F\001-\000\000\001C\000\000\000\000\000\000\000\000\000\000\001\187\0010\000\000\000\000\001-\001]\001\022\000\000\001\196\000\000\001\197\001\166\001\029\001/\000\000\000\000\001%\000\000\001C\001&\000\000\001%\000\000\000\000\001&\0010\001<\001:\000\000\002\001\000\000\001<\0015\000\000\000\000\001F\000\000\000\000\000\000\001:\000\000\000\000\000\000\000\000\001-\000\000\000\000\000\000\000\000\001-\000\000\001:\000\000\000\000\000\000\000\000\0015\000\000\001\022\001F\000\000\001C\000\000\000\000\001\029\001/\000\000\000\000\0010\000\000\001\022\000\000\002+\000\000\000\000\000\000\001\029\001/\000\000\000\000\000\000\000\000\001\022\000\000\001\158\001\159\000\000\000\000\001\029\001/\000\000\001:\000\000\000\000\000\000\000\000\001:\000\000\000\000\0015\000\000\000\000\001F\000\000\000\000\001\160\0032\000\000\001\162\001\163\000\000\000\000\000\000\001C\000\000\000\000\000\000\000\000\000\000\000\000\0010\000\000\001\022\000\000\002-\001C\000\000\001\022\001\029\001/\000\000\000\000\0010\001\029\001/\000\000\002\137\001C\000\000\001%\000\000\000\000\001&\000\000\0010\000\000\000\000\000\000\002\159\001<\000\000\0015\001%\000\000\001F\001&\000\000\000\000\000\000\000\000\000\000\000\000\001<\0015\000\000\000\000\001F\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\001C\001F\000\000\001-\000\000\001C\001\167\0010\000\000\000\000\000\000\002\194\0010\000\000\001%\000\000\002\199\001&\000\000\001\168\000\000\000\000\000\241\000\000\001<\000\000\001%\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\001<\001:\0015\000\000\000\000\001F\001-\0015\000\000\000\000\001F\000\000\000\000\000\000\001:\000\000\000\000\000\000\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\001\022\001&\000\000\000\000\000\000\000\000\001\029\001/\001<\000\000\000\000\000\000\000\000\001\022\001\187\000\000\000\000\000\000\000\000\001\029\001/\001:\001\196\000\000\001\197\001\166\001-\000\000\000\000\000\000\000\000\000\000\000\000\001:\000\000\000\000\000\000\001%\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\001<\000\000\000\000\001%\000\000\001\022\001&\000\000\001C\000\000\000\000\001\029\001/\001<\000\000\0010\000\000\001\022\001-\003*\000\000\001C\000\000\001\029\001/\000\000\001:\000\000\0010\000\000\000\000\001-\0030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001&\0015\000\000\000\000\001F\000\000\000\000\001<\000\000\000\000\000\000\000\000\001\022\000\000\0015\001C\000\000\001F\001\029\001/\001:\001%\0010\000\000\001&\001-\003D\001C\000\000\000\000\000\000\001<\000\000\001:\0010\000\000\000\000\000\000\003I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\001\022\000\000\0015\000\000\000\000\001F\001\029\001/\000\000\000\000\000\000\000\000\000\000\001\022\0015\001%\001C\001F\001&\001\029\001/\001:\000\000\0010\000\000\001<\000\000\003b\001%\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\001%\001<\000\000\001&\000\000\000\000\001-\000\000\001:\000\000\001<\000\000\000\000\001%\000\000\001\022\001&\0015\001C\001-\001F\001\029\001/\001<\000\000\0010\000\000\000\000\001-\003g\000\000\001C\000\000\000\000\000\000\000\000\000\000\000\000\0010\001\022\000\000\001-\003p\000\000\000\000\001\029\001/\000\000\000\000\000\000\000\000\000\000\001%\001:\000\000\001&\0015\000\000\000\000\001F\000\000\000\000\001<\000\000\000\000\000\000\001:\000\000\000\000\0015\001C\000\000\001F\000\000\000\000\001:\000\000\0010\000\000\000\000\001-\005;\000\000\000\000\001\022\000\000\000\000\000\000\001:\000\000\001\029\001/\001%\000\000\001C\001&\000\000\001\022\000\000\000\000\000\000\0010\001<\001\029\001/\005\151\001\022\000\000\0015\000\000\000\000\001F\001\029\001/\000\000\000\000\000\000\000\000\000\000\001\022\001-\001%\000\000\000\000\001&\001\029\001/\001:\000\000\000\000\000\000\001<\0015\000\000\001%\001F\000\000\001&\000\000\001C\000\000\000\000\000\000\000\000\001<\000\000\0010\000\000\000\000\001-\005\163\000\000\001C\000\000\000\000\000\000\000\000\000\000\001\022\0010\000\000\001C\001-\005\189\001\029\001/\001%\001:\0010\001&\000\000\000\000\005\205\000\000\001C\000\000\001<\0015\000\000\000\000\001F\0010\000\000\000\000\000\000\006q\000\000\000\000\000\000\000\000\0015\000\000\000\000\001F\001-\000\000\001:\000\000\001\022\0015\000\000\000\000\001F\000\000\001\029\001/\000\000\000\000\000\000\001:\000\000\000\000\0015\001C\000\000\001F\000\000\000\000\000\000\000\000\0010\000\000\000\000\000\000\006\131\000\000\000\000\001\022\000\000\001%\000\000\000\000\001&\001\029\001/\000\000\000\000\000\000\000\000\001<\001\022\001:\001%\000\000\000\000\001&\001\029\001/\000\000\000\000\000\000\0015\001<\001C\001F\000\000\000\000\001-\000\000\000\000\0010\002r\002s\001\159\006\155\000\000\002r\002s\001\159\000\000\001-\000\000\001\022\002r\002s\001\159\000\000\000\000\001\029\001/\000\000\000\000\001C\000\000\000\000\002\206\000\000\000\000\000\000\0010\002\217\0015\000\000\007/\001F\001C\000\000\002\232\000\000\000\000\000\000\000\000\0010\000\000\001:\000\000\007l\002r\002s\001\159\000\000\000\000\001%\000\000\000\000\005\240\000\000\001:\000\000\000\000\0015\001%\000\000\001F\005\240\000\000\000\000\001C\000\000\000\000\000\000\003\169\000\000\0015\0010\001\022\001F\000\000\007w\000\000\001-\001\029\001/\000\000\000\000\000\000\000\000\000\000\001\022\001-\000\000\000\000\000\000\000\000\001\029\001/\000\000\001%\000\000\000\000\005\240\002u\000\000\000\000\000\000\0015\002u\000\000\001F\000\000\000\000\000\000\000\000\002u\002v\000\000\002\218\000\241\000\000\002v\000\000\002\218\000\241\000\000\000\000\001-\002v\005\242\002\218\000\241\001C\000\000\000\000\000\000\000\000\000\000\005\242\0010\000\000\000\000\000\000\007\140\000\000\001C\000\000\000\000\000\000\002u\000\000\000\000\0010\000\000\000\000\000\000\007\150\000\000\000\000\000\000\001\022\000\000\002v\000\000\002\218\000\241\001\029\005\245\001%\001\022\0015\005\240\000\000\001F\005\242\001\029\005\245\000\000\000\000\002\219\000\000\000\000\000\000\0015\002\219\000\000\001F\002\220\000\000\001\197\002\221\002\219\002\220\000\000\001\197\002\221\001-\000\000\000\000\002\220\001%\001\197\002\221\005\240\001%\001\022\000\000\007\145\000\000\000\000\000\000\001\029\005\245\000\000\007\146\000\000\001%\000\000\000\000\007\155\000\000\000\000\005\246\000\000\000\000\002\219\007\156\000\000\001-\000\000\000\000\005\246\001-\002\220\000\000\001\197\002\221\005\192\000\000\005\249\000\000\005\248\000\000\005\242\001-\000\000\005\192\000\000\005\247\000\000\005\248\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\000\000\000\000\005\246\000\000\000\000\000\000\000\000\000\000\000\000\001\022\005\242\000\000\000\000\000\000\001:\001\029\005\245\005\192\000\000\006\003\000\000\005\248\000\000\000\000\000\000\000\000\001:\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\022\000\000\000\000\000\000\001\022\000\000\001\029\005\245\000\000\000\000\001\029\001/\000\000\000\000\000\000\000\000\001\022\000\000\000\000\000\000\000\000\000\000\001\029\001/\000\000\000\000\000\000\000\000\000\000\000\000\005\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\005\192\000\000\006\215\000\000\005\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\005\246\000\000\000\000\000\000\0010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\192\0010\006\241\000\000\005\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\000\000\0015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015")) and semantic_action = [| @@ -1464,9 +1522,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4000 "parsing/parser.mly" +# 4103 "parsing/parser.mly" ( "+" ) -# 1470 "parsing/parser.ml" +# 1528 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1489,9 +1547,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4001 "parsing/parser.mly" +# 4104 "parsing/parser.mly" ( "+." ) -# 1495 "parsing/parser.ml" +# 1553 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1514,9 +1572,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = -# 3507 "parsing/parser.mly" +# 3610 "parsing/parser.mly" ( _1 ) -# 1520 "parsing/parser.ml" +# 1578 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1561,24 +1619,24 @@ module Tables = struct let _endpos = _endpos_tyvar_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3510 "parsing/parser.mly" +# 3613 "parsing/parser.mly" ( Ptyp_alias(ty, tyvar) ) -# 1567 "parsing/parser.ml" +# 1625 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_tyvar_, _startpos_ty_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1576 "parsing/parser.ml" +# 1634 "parsing/parser.ml" in -# 3512 "parsing/parser.mly" +# 3615 "parsing/parser.mly" ( _1 ) -# 1582 "parsing/parser.ml" +# 1640 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1624,30 +1682,30 @@ module Tables = struct let _v : (let_binding) = let attrs2 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 1630 "parsing/parser.ml" +# 1688 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 1639 "parsing/parser.ml" +# 1697 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2731 "parsing/parser.mly" +# 2830 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklb ~loc:_sloc false body attrs ) -# 1651 "parsing/parser.ml" +# 1709 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1670,9 +1728,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3873 "parsing/parser.mly" +# 3976 "parsing/parser.mly" ( _1 ) -# 1676 "parsing/parser.ml" +# 1734 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1695,9 +1753,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3874 "parsing/parser.mly" +# 3977 "parsing/parser.mly" ( Lident _1 ) -# 1701 "parsing/parser.ml" +# 1759 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1734,9 +1792,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = -# 3603 "parsing/parser.mly" +# 3706 "parsing/parser.mly" ( _2 ) -# 1740 "parsing/parser.ml" +# 1798 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1799,11 +1857,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 1807 "parsing/parser.ml" +# 1865 "parsing/parser.ml" in let _3 = @@ -1811,24 +1869,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 1817 "parsing/parser.ml" +# 1875 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 1823 "parsing/parser.ml" +# 1881 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3605 "parsing/parser.mly" +# 3708 "parsing/parser.mly" ( wrap_typ_attrs ~loc:_sloc (reloc_typ ~loc:_sloc _4) _3 ) -# 1832 "parsing/parser.ml" +# 1890 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1859,24 +1917,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3608 "parsing/parser.mly" +# 3711 "parsing/parser.mly" ( Ptyp_var _2 ) -# 1865 "parsing/parser.ml" +# 1923 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1874 "parsing/parser.ml" +# 1932 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 1880 "parsing/parser.ml" +# 1938 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1900,23 +1958,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3610 "parsing/parser.mly" +# 3713 "parsing/parser.mly" ( Ptyp_any ) -# 1906 "parsing/parser.ml" +# 1964 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1914 "parsing/parser.ml" +# 1972 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 1920 "parsing/parser.ml" +# 1978 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1945,35 +2003,35 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 1951 "parsing/parser.ml" +# 2009 "parsing/parser.ml" in let tys = -# 3655 "parsing/parser.mly" +# 3758 "parsing/parser.mly" ( [] ) -# 1957 "parsing/parser.ml" +# 2015 "parsing/parser.ml" in -# 3613 "parsing/parser.mly" +# 3716 "parsing/parser.mly" ( Ptyp_constr(tid, tys) ) -# 1962 "parsing/parser.ml" +# 2020 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1971 "parsing/parser.ml" +# 2029 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 1977 "parsing/parser.ml" +# 2035 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2009,20 +2067,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2015 "parsing/parser.ml" +# 2073 "parsing/parser.ml" in let tys = -# 3657 "parsing/parser.mly" +# 3760 "parsing/parser.mly" ( [ty] ) -# 2021 "parsing/parser.ml" +# 2079 "parsing/parser.ml" in -# 3613 "parsing/parser.mly" +# 3716 "parsing/parser.mly" ( Ptyp_constr(tid, tys) ) -# 2026 "parsing/parser.ml" +# 2084 "parsing/parser.ml" in let _startpos__1_ = _startpos_ty_ in @@ -2030,15 +2088,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2036 "parsing/parser.ml" +# 2094 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2042 "parsing/parser.ml" +# 2100 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2089,9 +2147,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2095 "parsing/parser.ml" +# 2153 "parsing/parser.ml" in let tys = @@ -2099,24 +2157,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2103 "parsing/parser.ml" +# 2161 "parsing/parser.ml" in -# 1129 "parsing/parser.mly" +# 1179 "parsing/parser.mly" ( xs ) -# 2108 "parsing/parser.ml" +# 2166 "parsing/parser.ml" in -# 3659 "parsing/parser.mly" +# 3762 "parsing/parser.mly" ( tys ) -# 2114 "parsing/parser.ml" +# 2172 "parsing/parser.ml" in -# 3613 "parsing/parser.mly" +# 3716 "parsing/parser.mly" ( Ptyp_constr(tid, tys) ) -# 2120 "parsing/parser.ml" +# 2178 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2124,15 +2182,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2130 "parsing/parser.ml" +# 2188 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2136 "parsing/parser.ml" +# 2194 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2170,24 +2228,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3615 "parsing/parser.mly" +# 3718 "parsing/parser.mly" ( let (f, c) = _2 in Ptyp_object (f, c) ) -# 2176 "parsing/parser.ml" +# 2234 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2185 "parsing/parser.ml" +# 2243 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2191 "parsing/parser.ml" +# 2249 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2218,24 +2276,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3617 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( Ptyp_object ([], Closed) ) -# 2224 "parsing/parser.ml" +# 2282 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2233 "parsing/parser.ml" +# 2291 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2239 "parsing/parser.ml" +# 2297 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2271,20 +2329,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2277 "parsing/parser.ml" +# 2335 "parsing/parser.ml" in let tys = -# 3655 "parsing/parser.mly" +# 3758 "parsing/parser.mly" ( [] ) -# 2283 "parsing/parser.ml" +# 2341 "parsing/parser.ml" in -# 3621 "parsing/parser.mly" +# 3724 "parsing/parser.mly" ( Ptyp_class(cid, tys) ) -# 2288 "parsing/parser.ml" +# 2346 "parsing/parser.ml" in let _startpos__1_ = _startpos__2_ in @@ -2292,15 +2350,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2298 "parsing/parser.ml" +# 2356 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2304 "parsing/parser.ml" +# 2362 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2343,20 +2401,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2349 "parsing/parser.ml" +# 2407 "parsing/parser.ml" in let tys = -# 3657 "parsing/parser.mly" +# 3760 "parsing/parser.mly" ( [ty] ) -# 2355 "parsing/parser.ml" +# 2413 "parsing/parser.ml" in -# 3621 "parsing/parser.mly" +# 3724 "parsing/parser.mly" ( Ptyp_class(cid, tys) ) -# 2360 "parsing/parser.ml" +# 2418 "parsing/parser.ml" in let _startpos__1_ = _startpos_ty_ in @@ -2364,15 +2422,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2370 "parsing/parser.ml" +# 2428 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2376 "parsing/parser.ml" +# 2434 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2430,9 +2488,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2436 "parsing/parser.ml" +# 2494 "parsing/parser.ml" in let tys = @@ -2440,24 +2498,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2444 "parsing/parser.ml" +# 2502 "parsing/parser.ml" in -# 1129 "parsing/parser.mly" +# 1179 "parsing/parser.mly" ( xs ) -# 2449 "parsing/parser.ml" +# 2507 "parsing/parser.ml" in -# 3659 "parsing/parser.mly" +# 3762 "parsing/parser.mly" ( tys ) -# 2455 "parsing/parser.ml" +# 2513 "parsing/parser.ml" in -# 3621 "parsing/parser.mly" +# 3724 "parsing/parser.mly" ( Ptyp_class(cid, tys) ) -# 2461 "parsing/parser.ml" +# 2519 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2465,15 +2523,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2471 "parsing/parser.ml" +# 2529 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2477 "parsing/parser.ml" +# 2535 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2511,24 +2569,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3624 "parsing/parser.mly" +# 3727 "parsing/parser.mly" ( Ptyp_variant([_2], Closed, None) ) -# 2517 "parsing/parser.ml" +# 2575 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2526 "parsing/parser.ml" +# 2584 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2532 "parsing/parser.ml" +# 2590 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2578,24 +2636,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2582 "parsing/parser.ml" +# 2640 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 2587 "parsing/parser.ml" +# 2645 "parsing/parser.ml" in -# 3669 "parsing/parser.mly" +# 3772 "parsing/parser.mly" ( _1 ) -# 2593 "parsing/parser.ml" +# 2651 "parsing/parser.ml" in -# 3626 "parsing/parser.mly" +# 3729 "parsing/parser.mly" ( Ptyp_variant(_3, Closed, None) ) -# 2599 "parsing/parser.ml" +# 2657 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -2603,15 +2661,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2609 "parsing/parser.ml" +# 2667 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2615 "parsing/parser.ml" +# 2673 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2668,24 +2726,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2672 "parsing/parser.ml" +# 2730 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 2677 "parsing/parser.ml" +# 2735 "parsing/parser.ml" in -# 3669 "parsing/parser.mly" +# 3772 "parsing/parser.mly" ( _1 ) -# 2683 "parsing/parser.ml" +# 2741 "parsing/parser.ml" in -# 3628 "parsing/parser.mly" +# 3731 "parsing/parser.mly" ( Ptyp_variant(_2 :: _4, Closed, None) ) -# 2689 "parsing/parser.ml" +# 2747 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -2693,15 +2751,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2699 "parsing/parser.ml" +# 2757 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2705 "parsing/parser.ml" +# 2763 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2751,24 +2809,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2755 "parsing/parser.ml" +# 2813 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 2760 "parsing/parser.ml" +# 2818 "parsing/parser.ml" in -# 3669 "parsing/parser.mly" +# 3772 "parsing/parser.mly" ( _1 ) -# 2766 "parsing/parser.ml" +# 2824 "parsing/parser.ml" in -# 3630 "parsing/parser.mly" +# 3733 "parsing/parser.mly" ( Ptyp_variant(_3, Open, None) ) -# 2772 "parsing/parser.ml" +# 2830 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -2776,15 +2834,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2782 "parsing/parser.ml" +# 2840 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2788 "parsing/parser.ml" +# 2846 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2815,24 +2873,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3632 "parsing/parser.mly" +# 3735 "parsing/parser.mly" ( Ptyp_variant([], Open, None) ) -# 2821 "parsing/parser.ml" +# 2879 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2830 "parsing/parser.ml" +# 2888 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2836 "parsing/parser.ml" +# 2894 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2882,24 +2940,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2886 "parsing/parser.ml" +# 2944 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 2891 "parsing/parser.ml" +# 2949 "parsing/parser.ml" in -# 3669 "parsing/parser.mly" +# 3772 "parsing/parser.mly" ( _1 ) -# 2897 "parsing/parser.ml" +# 2955 "parsing/parser.ml" in -# 3634 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Ptyp_variant(_3, Closed, Some []) ) -# 2903 "parsing/parser.ml" +# 2961 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -2907,15 +2965,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2913 "parsing/parser.ml" +# 2971 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 2919 "parsing/parser.ml" +# 2977 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2980,18 +3038,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2984 "parsing/parser.ml" +# 3042 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 2989 "parsing/parser.ml" +# 3047 "parsing/parser.ml" in -# 3697 "parsing/parser.mly" +# 3800 "parsing/parser.mly" ( _1 ) -# 2995 "parsing/parser.ml" +# 3053 "parsing/parser.ml" in let _3 = @@ -2999,24 +3057,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 3003 "parsing/parser.ml" +# 3061 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 3008 "parsing/parser.ml" +# 3066 "parsing/parser.ml" in -# 3669 "parsing/parser.mly" +# 3772 "parsing/parser.mly" ( _1 ) -# 3014 "parsing/parser.ml" +# 3072 "parsing/parser.ml" in -# 3636 "parsing/parser.mly" +# 3739 "parsing/parser.mly" ( Ptyp_variant(_3, Closed, Some _5) ) -# 3020 "parsing/parser.ml" +# 3078 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -3024,15 +3082,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 3030 "parsing/parser.ml" +# 3088 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 3036 "parsing/parser.ml" +# 3094 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3056,23 +3114,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3638 "parsing/parser.mly" +# 3741 "parsing/parser.mly" ( Ptyp_extension _1 ) -# 3062 "parsing/parser.ml" +# 3120 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 3070 "parsing/parser.ml" +# 3128 "parsing/parser.ml" in -# 3640 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 3076 "parsing/parser.ml" +# 3134 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3096,23 +3154,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (string Asttypes.loc) = let _1 = let _1 = -# 4069 "parsing/parser.mly" +# 4172 "parsing/parser.mly" ( _1 ) -# 3102 "parsing/parser.ml" +# 3160 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 997 "parsing/parser.mly" +# 1047 "parsing/parser.mly" ( mkloc _1 (make_loc _sloc) ) -# 3110 "parsing/parser.ml" +# 3168 "parsing/parser.ml" in -# 4071 "parsing/parser.mly" +# 4174 "parsing/parser.mly" ( _1 ) -# 3116 "parsing/parser.ml" +# 3174 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3150,24 +3208,51 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (string Asttypes.loc) = let _1 = let _1 = -# 4070 "parsing/parser.mly" +# 4173 "parsing/parser.mly" ( _1 ^ "." ^ _3.txt ) -# 3156 "parsing/parser.ml" +# 3214 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 997 "parsing/parser.mly" +# 1047 "parsing/parser.mly" ( mkloc _1 (make_loc _sloc) ) -# 3165 "parsing/parser.ml" +# 3223 "parsing/parser.ml" in -# 4071 "parsing/parser.mly" +# 4174 "parsing/parser.mly" ( _1 ) -# 3171 "parsing/parser.ml" +# 3229 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : (Parsetree.payload) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.payload) = +# 4229 "parsing/parser.mly" + ( Builtin_attributes.mark_payload_attrs_used _1; + _1 + ) +# 3256 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3214,9 +3299,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 4075 "parsing/parser.mly" - ( Builtin_attributes.mk_internal ~loc:(make_loc _sloc) _2 _3 ) -# 3220 "parsing/parser.ml" +# 4178 "parsing/parser.mly" + ( mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 3305 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3239,9 +3324,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.class_expr) = -# 1959 "parsing/parser.mly" +# 2009 "parsing/parser.mly" ( _1 ) -# 3245 "parsing/parser.ml" +# 3330 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3280,18 +3365,18 @@ module Tables = struct let _v : (Parsetree.class_expr) = let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 3286 "parsing/parser.ml" +# 3371 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1961 "parsing/parser.mly" +# 2011 "parsing/parser.mly" ( wrap_class_attrs ~loc:_sloc _3 _2 ) -# 3295 "parsing/parser.ml" +# 3380 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3331,9 +3416,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1963 "parsing/parser.mly" +# 2013 "parsing/parser.mly" ( class_of_let_bindings ~loc:_sloc _1 _3 ) -# 3337 "parsing/parser.ml" +# 3422 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3396,34 +3481,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 3402 "parsing/parser.ml" +# 3487 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 3411 "parsing/parser.ml" +# 3496 "parsing/parser.ml" in let _3 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 3417 "parsing/parser.ml" +# 3502 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1965 "parsing/parser.mly" +# 2015 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkclass ~loc:_sloc ~attrs:_4 (Pcl_open(od, _7)) ) -# 3427 "parsing/parser.ml" +# 3512 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3493,34 +3578,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 3499 "parsing/parser.ml" +# 3584 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 3508 "parsing/parser.ml" +# 3593 "parsing/parser.ml" in let _3 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 3514 "parsing/parser.ml" +# 3599 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1965 "parsing/parser.mly" +# 2015 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkclass ~loc:_sloc ~attrs:_4 (Pcl_open(od, _7)) ) -# 3524 "parsing/parser.ml" +# 3609 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3550,9 +3635,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 1969 "parsing/parser.mly" +# 2019 "parsing/parser.mly" ( Cl.attr _1 _2 ) -# 3556 "parsing/parser.ml" +# 3641 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3587,18 +3672,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 3591 "parsing/parser.ml" +# 3676 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 3596 "parsing/parser.ml" +# 3681 "parsing/parser.ml" in -# 1972 "parsing/parser.mly" +# 2022 "parsing/parser.mly" ( Pcl_apply(_1, _2) ) -# 3602 "parsing/parser.ml" +# 3687 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -3606,15 +3691,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 3612 "parsing/parser.ml" +# 3697 "parsing/parser.ml" in -# 1975 "parsing/parser.mly" +# 2025 "parsing/parser.mly" ( _1 ) -# 3618 "parsing/parser.ml" +# 3703 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3638,23 +3723,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1974 "parsing/parser.mly" +# 2024 "parsing/parser.mly" ( Pcl_extension _1 ) -# 3644 "parsing/parser.ml" +# 3729 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 3652 "parsing/parser.ml" +# 3737 "parsing/parser.ml" in -# 1975 "parsing/parser.mly" +# 2025 "parsing/parser.mly" ( _1 ) -# 3658 "parsing/parser.ml" +# 3743 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3707,33 +3792,33 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 3713 "parsing/parser.ml" +# 3798 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 3722 "parsing/parser.ml" +# 3807 "parsing/parser.ml" in let _2 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 3728 "parsing/parser.ml" +# 3813 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2024 "parsing/parser.mly" +# 2074 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3737 "parsing/parser.ml" +# 3822 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3793,33 +3878,33 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 3799 "parsing/parser.ml" +# 3884 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _3 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 3808 "parsing/parser.ml" +# 3893 "parsing/parser.ml" in let _2 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 3814 "parsing/parser.ml" +# 3899 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2024 "parsing/parser.mly" +# 2074 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3823 "parsing/parser.ml" +# 3908 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3860,9 +3945,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 3866 "parsing/parser.ml" +# 3951 "parsing/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3870,11 +3955,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2027 "parsing/parser.mly" +# 2077 "parsing/parser.mly" ( let v, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_val v) ~attrs:(attrs@_3) ~docs ) -# 3878 "parsing/parser.ml" +# 3963 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3915,9 +4000,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 3921 "parsing/parser.ml" +# 4006 "parsing/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3925,11 +4010,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2031 "parsing/parser.mly" +# 2081 "parsing/parser.mly" ( let meth, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_method meth) ~attrs:(attrs@_3) ~docs ) -# 3933 "parsing/parser.ml" +# 4018 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3975,28 +4060,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 3981 "parsing/parser.ml" +# 4066 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 3990 "parsing/parser.ml" +# 4075 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2035 "parsing/parser.mly" +# 2085 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 4000 "parsing/parser.ml" +# 4085 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4042,28 +4127,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 4048 "parsing/parser.ml" +# 4133 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 4057 "parsing/parser.ml" +# 4142 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2038 "parsing/parser.mly" +# 2088 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_initializer _3) ~attrs:(_2@_4) ~docs ) -# 4067 "parsing/parser.ml" +# 4152 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4095,9 +4180,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _2 = let _1 = _1_inlined1 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 4101 "parsing/parser.ml" +# 4186 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -4105,10 +4190,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2041 "parsing/parser.mly" +# 2091 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_extension _1) ~attrs:_2 ~docs ) -# 4112 "parsing/parser.ml" +# 4197 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4132,23 +4217,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_field) = let _1 = let _1 = -# 2044 "parsing/parser.mly" +# 2094 "parsing/parser.mly" ( Pcf_attribute _1 ) -# 4138 "parsing/parser.ml" +# 4223 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1018 "parsing/parser.mly" +# 1068 "parsing/parser.mly" ( mkcf ~loc:_sloc _1 ) -# 4146 "parsing/parser.ml" +# 4231 "parsing/parser.ml" in -# 2045 "parsing/parser.mly" +# 2095 "parsing/parser.mly" ( _1 ) -# 4152 "parsing/parser.ml" +# 4237 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4178,9 +4263,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 1939 "parsing/parser.mly" +# 1989 "parsing/parser.mly" ( _2 ) -# 4184 "parsing/parser.ml" +# 4269 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4225,24 +4310,24 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1942 "parsing/parser.mly" +# 1992 "parsing/parser.mly" ( Pcl_constraint(_4, _2) ) -# 4231 "parsing/parser.ml" +# 4316 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4240 "parsing/parser.ml" +# 4325 "parsing/parser.ml" in -# 1945 "parsing/parser.mly" +# 1995 "parsing/parser.mly" ( _1 ) -# 4246 "parsing/parser.ml" +# 4331 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4273,24 +4358,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1944 "parsing/parser.mly" +# 1994 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, _2) ) -# 4279 "parsing/parser.ml" +# 4364 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4288 "parsing/parser.ml" +# 4373 "parsing/parser.ml" in -# 1945 "parsing/parser.mly" +# 1995 "parsing/parser.mly" ( _1 ) -# 4294 "parsing/parser.ml" +# 4379 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4328,24 +4413,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 2000 "parsing/parser.mly" +# 2050 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4334 "parsing/parser.ml" +# 4419 "parsing/parser.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4343 "parsing/parser.ml" +# 4428 "parsing/parser.ml" in -# 2001 "parsing/parser.mly" +# 2051 "parsing/parser.mly" ( _1 ) -# 4349 "parsing/parser.ml" +# 4434 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4376,24 +4461,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 2000 "parsing/parser.mly" +# 2050 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4382 "parsing/parser.ml" +# 4467 "parsing/parser.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4391 "parsing/parser.ml" +# 4476 "parsing/parser.ml" in -# 2001 "parsing/parser.mly" +# 2051 "parsing/parser.mly" ( _1 ) -# 4397 "parsing/parser.ml" +# 4482 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4416,9 +4501,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3863 "parsing/parser.mly" +# 3966 "parsing/parser.mly" ( _1 ) -# 4422 "parsing/parser.ml" +# 4507 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4458,9 +4543,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2009 "parsing/parser.mly" +# 2059 "parsing/parser.mly" ( reloc_pat ~loc:_sloc _2 ) -# 4464 "parsing/parser.ml" +# 4549 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4512,24 +4597,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2011 "parsing/parser.mly" +# 2061 "parsing/parser.mly" ( Ppat_constraint(_2, _4) ) -# 4518 "parsing/parser.ml" +# 4603 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 4527 "parsing/parser.ml" +# 4612 "parsing/parser.ml" in -# 2012 "parsing/parser.mly" +# 2062 "parsing/parser.mly" ( _1 ) -# 4533 "parsing/parser.ml" +# 4618 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4548,9 +4633,9 @@ module Tables = struct let _symbolstartpos = _endpos in let _sloc = (_symbolstartpos, _endpos) in -# 2014 "parsing/parser.mly" +# 2064 "parsing/parser.mly" ( ghpat ~loc:_sloc Ppat_any ) -# 4554 "parsing/parser.ml" +# 4639 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4587,9 +4672,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = -# 2139 "parsing/parser.mly" +# 2189 "parsing/parser.mly" ( _2 ) -# 4593 "parsing/parser.ml" +# 4678 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4606,24 +4691,24 @@ module Tables = struct let _endpos = _startpos in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 2140 "parsing/parser.mly" +# 2190 "parsing/parser.mly" ( Ptyp_any ) -# 4612 "parsing/parser.ml" +# 4697 "parsing/parser.ml" in let _endpos__1_ = _endpos__0_ in let _endpos = _endpos__1_ in let _symbolstartpos = _endpos in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 4621 "parsing/parser.ml" +# 4706 "parsing/parser.ml" in -# 2141 "parsing/parser.mly" +# 2191 "parsing/parser.mly" ( _1 ) -# 4627 "parsing/parser.ml" +# 4712 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4669,28 +4754,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 4675 "parsing/parser.ml" +# 4760 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 4684 "parsing/parser.ml" +# 4769 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2149 "parsing/parser.mly" +# 2199 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_inherit _3) ~attrs:(_2@_4) ~docs ) -# 4694 "parsing/parser.ml" +# 4779 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4748,9 +4833,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _3 : unit = Obj.magic _3 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 4754 "parsing/parser.ml" +# 4839 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let flags : (Asttypes.mutable_flag * Asttypes.virtual_flag) = Obj.magic flags in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -4761,9 +4846,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 4767 "parsing/parser.ml" +# 4852 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined3_ in @@ -4771,44 +4856,44 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let label = let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 4777 "parsing/parser.ml" +# 4862 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 4785 "parsing/parser.ml" +# 4870 "parsing/parser.ml" in -# 2174 "parsing/parser.mly" +# 2224 "parsing/parser.mly" ( let mut, virt = flags in label, mut, virt, ty ) -# 4794 "parsing/parser.ml" +# 4879 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 4802 "parsing/parser.ml" +# 4887 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2152 "parsing/parser.mly" +# 2202 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_val _3) ~attrs:(_2@_4) ~docs ) -# 4812 "parsing/parser.ml" +# 4897 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4866,9 +4951,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 4872 "parsing/parser.ml" +# 4957 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag * Asttypes.virtual_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -4879,53 +4964,53 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _7 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 4885 "parsing/parser.ml" +# 4970 "parsing/parser.ml" in let _endpos__7_ = _endpos__1_inlined4_ in let _6 = let _1 = _1_inlined3 in -# 3473 "parsing/parser.mly" +# 3576 "parsing/parser.mly" ( _1 ) -# 4894 "parsing/parser.ml" +# 4979 "parsing/parser.ml" in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 4902 "parsing/parser.ml" +# 4987 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 4910 "parsing/parser.ml" +# 4995 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 4918 "parsing/parser.ml" +# 5003 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2156 "parsing/parser.mly" +# 2206 "parsing/parser.mly" ( let (p, v) = _3 in let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_method (_4, p, v, _6)) ~attrs:(_2@_7) ~docs ) -# 4929 "parsing/parser.ml" +# 5014 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4971,28 +5056,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 4977 "parsing/parser.ml" +# 5062 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 4986 "parsing/parser.ml" +# 5071 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2160 "parsing/parser.mly" +# 2210 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 4996 "parsing/parser.ml" +# 5081 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5024,9 +5109,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _2 = let _1 = _1_inlined1 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 5030 "parsing/parser.ml" +# 5115 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -5034,10 +5119,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2163 "parsing/parser.mly" +# 2213 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_extension _1) ~attrs:_2 ~docs ) -# 5041 "parsing/parser.ml" +# 5126 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5061,23 +5146,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type_field) = let _1 = let _1 = -# 2166 "parsing/parser.mly" +# 2216 "parsing/parser.mly" ( Pctf_attribute _1 ) -# 5067 "parsing/parser.ml" +# 5152 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1016 "parsing/parser.mly" +# 1066 "parsing/parser.mly" ( mkctf ~loc:_sloc _1 ) -# 5075 "parsing/parser.ml" +# 5160 "parsing/parser.ml" in -# 2167 "parsing/parser.mly" +# 2217 "parsing/parser.mly" ( _1 ) -# 5081 "parsing/parser.ml" +# 5166 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5106,42 +5191,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5112 "parsing/parser.ml" +# 5197 "parsing/parser.ml" in let tys = let tys = -# 2125 "parsing/parser.mly" +# 2175 "parsing/parser.mly" ( [] ) -# 5119 "parsing/parser.ml" +# 5204 "parsing/parser.ml" in -# 2131 "parsing/parser.mly" +# 2181 "parsing/parser.mly" ( tys ) -# 5124 "parsing/parser.ml" +# 5209 "parsing/parser.ml" in -# 2108 "parsing/parser.mly" +# 2158 "parsing/parser.mly" ( Pcty_constr (cid, tys) ) -# 5130 "parsing/parser.ml" +# 5215 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1014 "parsing/parser.mly" +# 1064 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5139 "parsing/parser.ml" +# 5224 "parsing/parser.ml" in -# 2111 "parsing/parser.mly" +# 2161 "parsing/parser.mly" ( _1 ) -# 5145 "parsing/parser.ml" +# 5230 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5192,9 +5277,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5198 "parsing/parser.ml" +# 5283 "parsing/parser.ml" in let tys = @@ -5203,30 +5288,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5207 "parsing/parser.ml" +# 5292 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 5212 "parsing/parser.ml" +# 5297 "parsing/parser.ml" in -# 2127 "parsing/parser.mly" +# 2177 "parsing/parser.mly" ( params ) -# 5218 "parsing/parser.ml" +# 5303 "parsing/parser.ml" in -# 2131 "parsing/parser.mly" +# 2181 "parsing/parser.mly" ( tys ) -# 5224 "parsing/parser.ml" +# 5309 "parsing/parser.ml" in -# 2108 "parsing/parser.mly" +# 2158 "parsing/parser.mly" ( Pcty_constr (cid, tys) ) -# 5230 "parsing/parser.ml" +# 5315 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5234,15 +5319,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1014 "parsing/parser.mly" +# 1064 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5240 "parsing/parser.ml" +# 5325 "parsing/parser.ml" in -# 2111 "parsing/parser.mly" +# 2161 "parsing/parser.mly" ( _1 ) -# 5246 "parsing/parser.ml" +# 5331 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5266,23 +5351,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = let _1 = let _1 = -# 2110 "parsing/parser.mly" +# 2160 "parsing/parser.mly" ( Pcty_extension _1 ) -# 5272 "parsing/parser.ml" +# 5357 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1014 "parsing/parser.mly" +# 1064 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5280 "parsing/parser.ml" +# 5365 "parsing/parser.ml" in -# 2111 "parsing/parser.mly" +# 2161 "parsing/parser.mly" ( _1 ) -# 5286 "parsing/parser.ml" +# 5371 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5339,44 +5424,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5343 "parsing/parser.ml" +# 5428 "parsing/parser.ml" in -# 2145 "parsing/parser.mly" +# 2195 "parsing/parser.mly" ( _1 ) -# 5348 "parsing/parser.ml" +# 5433 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 962 "parsing/parser.mly" +# 1012 "parsing/parser.mly" ( extra_csig _startpos _endpos _1 ) -# 5357 "parsing/parser.ml" +# 5442 "parsing/parser.ml" in -# 2135 "parsing/parser.mly" +# 2185 "parsing/parser.mly" ( Csig.mk _1 _2 ) -# 5363 "parsing/parser.ml" +# 5448 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 5371 "parsing/parser.ml" +# 5456 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2113 "parsing/parser.mly" +# 2163 "parsing/parser.mly" ( mkcty ~loc:_sloc ~attrs:_2 (Pcty_signature _3) ) -# 5380 "parsing/parser.ml" +# 5465 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5433,43 +5518,43 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5437 "parsing/parser.ml" +# 5522 "parsing/parser.ml" in -# 2145 "parsing/parser.mly" +# 2195 "parsing/parser.mly" ( _1 ) -# 5442 "parsing/parser.ml" +# 5527 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 962 "parsing/parser.mly" +# 1012 "parsing/parser.mly" ( extra_csig _startpos _endpos _1 ) -# 5451 "parsing/parser.ml" +# 5536 "parsing/parser.ml" in -# 2135 "parsing/parser.mly" +# 2185 "parsing/parser.mly" ( Csig.mk _1 _2 ) -# 5457 "parsing/parser.ml" +# 5542 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 5465 "parsing/parser.ml" +# 5550 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2115 "parsing/parser.mly" +# 2165 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 5473 "parsing/parser.ml" +# 5558 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5499,9 +5584,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_type) = -# 2117 "parsing/parser.mly" +# 2167 "parsing/parser.mly" ( Cty.attr _1 _2 ) -# 5505 "parsing/parser.ml" +# 5590 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5564,34 +5649,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5570 "parsing/parser.ml" +# 5655 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 5579 "parsing/parser.ml" +# 5664 "parsing/parser.ml" in let _3 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 5585 "parsing/parser.ml" +# 5670 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2119 "parsing/parser.mly" +# 2169 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkcty ~loc:_sloc ~attrs:_4 (Pcty_open(od, _7)) ) -# 5595 "parsing/parser.ml" +# 5680 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5661,34 +5746,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5667 "parsing/parser.ml" +# 5752 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 5676 "parsing/parser.ml" +# 5761 "parsing/parser.ml" in let _3 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 5682 "parsing/parser.ml" +# 5767 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2119 "parsing/parser.mly" +# 2169 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkcty ~loc:_sloc ~attrs:_4 (Pcty_open(od, _7)) ) -# 5692 "parsing/parser.ml" +# 5777 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5725,9 +5810,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.class_expr) = -# 1979 "parsing/parser.mly" +# 2029 "parsing/parser.mly" ( _2 ) -# 5731 "parsing/parser.ml" +# 5816 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5766,9 +5851,9 @@ module Tables = struct let _v : (Parsetree.class_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1981 "parsing/parser.mly" +# 2031 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 5772 "parsing/parser.ml" +# 5857 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5797,42 +5882,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5803 "parsing/parser.ml" +# 5888 "parsing/parser.ml" in let tys = let tys = -# 2125 "parsing/parser.mly" +# 2175 "parsing/parser.mly" ( [] ) -# 5810 "parsing/parser.ml" +# 5895 "parsing/parser.ml" in -# 2131 "parsing/parser.mly" +# 2181 "parsing/parser.mly" ( tys ) -# 5815 "parsing/parser.ml" +# 5900 "parsing/parser.ml" in -# 1984 "parsing/parser.mly" +# 2034 "parsing/parser.mly" ( Pcl_constr(cid, tys) ) -# 5821 "parsing/parser.ml" +# 5906 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5830 "parsing/parser.ml" +# 5915 "parsing/parser.ml" in -# 1991 "parsing/parser.mly" +# 2041 "parsing/parser.mly" ( _1 ) -# 5836 "parsing/parser.ml" +# 5921 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5883,9 +5968,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5889 "parsing/parser.ml" +# 5974 "parsing/parser.ml" in let tys = @@ -5894,30 +5979,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5898 "parsing/parser.ml" +# 5983 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 5903 "parsing/parser.ml" +# 5988 "parsing/parser.ml" in -# 2127 "parsing/parser.mly" +# 2177 "parsing/parser.mly" ( params ) -# 5909 "parsing/parser.ml" +# 5994 "parsing/parser.ml" in -# 2131 "parsing/parser.mly" +# 2181 "parsing/parser.mly" ( tys ) -# 5915 "parsing/parser.ml" +# 6000 "parsing/parser.ml" in -# 1984 "parsing/parser.mly" +# 2034 "parsing/parser.mly" ( Pcl_constr(cid, tys) ) -# 5921 "parsing/parser.ml" +# 6006 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5925,15 +6010,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5931 "parsing/parser.ml" +# 6016 "parsing/parser.ml" in -# 1991 "parsing/parser.mly" +# 2041 "parsing/parser.mly" ( _1 ) -# 5937 "parsing/parser.ml" +# 6022 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5992,43 +6077,43 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5996 "parsing/parser.ml" +# 6081 "parsing/parser.ml" in -# 2018 "parsing/parser.mly" +# 2068 "parsing/parser.mly" ( _1 ) -# 6001 "parsing/parser.ml" +# 6086 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 961 "parsing/parser.mly" +# 1011 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 6010 "parsing/parser.ml" +# 6095 "parsing/parser.ml" in -# 2005 "parsing/parser.mly" +# 2055 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 6016 "parsing/parser.ml" +# 6101 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 6024 "parsing/parser.ml" +# 6109 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1986 "parsing/parser.mly" +# 2036 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 6032 "parsing/parser.ml" +# 6117 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -6036,15 +6121,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6042 "parsing/parser.ml" +# 6127 "parsing/parser.ml" in -# 1991 "parsing/parser.mly" +# 2041 "parsing/parser.mly" ( _1 ) -# 6048 "parsing/parser.ml" +# 6133 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6096,24 +6181,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1988 "parsing/parser.mly" +# 2038 "parsing/parser.mly" ( Pcl_constraint(_2, _4) ) -# 6102 "parsing/parser.ml" +# 6187 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6111 "parsing/parser.ml" +# 6196 "parsing/parser.ml" in -# 1991 "parsing/parser.mly" +# 2041 "parsing/parser.mly" ( _1 ) -# 6117 "parsing/parser.ml" +# 6202 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6168,9 +6253,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1990 "parsing/parser.mly" +# 2040 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 6174 "parsing/parser.ml" +# 6259 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -6178,15 +6263,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1020 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6184 "parsing/parser.ml" +# 6269 "parsing/parser.ml" in -# 1991 "parsing/parser.mly" +# 2041 "parsing/parser.mly" ( _1 ) -# 6190 "parsing/parser.ml" +# 6275 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6243,44 +6328,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 6247 "parsing/parser.ml" +# 6332 "parsing/parser.ml" in -# 2018 "parsing/parser.mly" +# 2068 "parsing/parser.mly" ( _1 ) -# 6252 "parsing/parser.ml" +# 6337 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 961 "parsing/parser.mly" +# 1011 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 6261 "parsing/parser.ml" +# 6346 "parsing/parser.ml" in -# 2005 "parsing/parser.mly" +# 2055 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 6267 "parsing/parser.ml" +# 6352 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 6275 "parsing/parser.ml" +# 6360 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1993 "parsing/parser.mly" +# 2043 "parsing/parser.mly" ( mkclass ~loc:_sloc ~attrs:_2 (Pcl_structure _3) ) -# 6284 "parsing/parser.ml" +# 6369 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6303,9 +6388,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = -# 2096 "parsing/parser.mly" +# 2146 "parsing/parser.mly" ( _1 ) -# 6309 "parsing/parser.ml" +# 6394 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6351,14 +6436,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 6357 "parsing/parser.ml" +# 6442 "parsing/parser.ml" in -# 2102 "parsing/parser.mly" +# 2152 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6362 "parsing/parser.ml" +# 6447 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6366,15 +6451,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1014 "parsing/parser.mly" +# 1064 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6372 "parsing/parser.ml" +# 6457 "parsing/parser.ml" in -# 2103 "parsing/parser.mly" +# 2153 "parsing/parser.mly" ( _1 ) -# 6378 "parsing/parser.ml" +# 6463 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6421,9 +6506,9 @@ module Tables = struct let domain : (Parsetree.core_type) = Obj.magic domain in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 6427 "parsing/parser.ml" +# 6512 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -6431,14 +6516,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 6437 "parsing/parser.ml" +# 6522 "parsing/parser.ml" in -# 2102 "parsing/parser.mly" +# 2152 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6442 "parsing/parser.ml" +# 6527 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6446,15 +6531,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1014 "parsing/parser.mly" +# 1064 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6452 "parsing/parser.ml" +# 6537 "parsing/parser.ml" in -# 2103 "parsing/parser.mly" +# 2153 "parsing/parser.mly" ( _1 ) -# 6458 "parsing/parser.ml" +# 6543 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6493,14 +6578,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 6499 "parsing/parser.ml" +# 6584 "parsing/parser.ml" in -# 2102 "parsing/parser.mly" +# 2152 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6504 "parsing/parser.ml" +# 6589 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_domain_) in @@ -6508,15 +6593,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1014 "parsing/parser.mly" +# 1064 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6514 "parsing/parser.ml" +# 6599 "parsing/parser.ml" in -# 2103 "parsing/parser.mly" +# 2153 "parsing/parser.mly" ( _1 ) -# 6520 "parsing/parser.ml" +# 6605 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6599,9 +6684,9 @@ module Tables = struct let csig : (Parsetree.class_type) = Obj.magic csig in let _8 : unit = Obj.magic _8 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 6605 "parsing/parser.ml" +# 6690 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -6617,9 +6702,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 6623 "parsing/parser.ml" +# 6708 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -6629,24 +6714,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 6635 "parsing/parser.ml" +# 6720 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 6643 "parsing/parser.ml" +# 6728 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2241 "parsing/parser.mly" +# 2291 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -6654,19 +6739,19 @@ module Tables = struct ext, Ci.mk id csig ~virt ~params ~attrs ~loc ~docs ) -# 6658 "parsing/parser.ml" +# 6743 "parsing/parser.ml" in -# 1198 "parsing/parser.mly" +# 1248 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 6664 "parsing/parser.ml" +# 6749 "parsing/parser.ml" in -# 2229 "parsing/parser.mly" +# 2279 "parsing/parser.mly" ( _1 ) -# 6670 "parsing/parser.ml" +# 6755 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6689,9 +6774,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3860 "parsing/parser.mly" +# 3963 "parsing/parser.mly" ( _1 ) -# 6695 "parsing/parser.ml" +# 6780 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6704,76 +6789,184 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let xs : (Extensions.Comprehensions.clause_binding list) = Obj.magic xs in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Extensions.Comprehensions.clause) = let _2 = + let xs = +# 253 "" + ( List.rev xs ) +# 6813 "parsing/parser.ml" + in + +# 1151 "parsing/parser.mly" + ( xs ) +# 6818 "parsing/parser.ml" + + in + +# 2583 "parsing/parser.mly" + ( Extensions.Comprehensions.For _2 ) +# 6824 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Extensions.Comprehensions.clause) = +# 2585 "parsing/parser.mly" + ( Extensions.Comprehensions.When _2 ) +# 6856 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : (Extensions.Comprehensions.iterator) = Obj.magic _3 in + let _2 : (Parsetree.pattern) = Obj.magic _2 in + let _1 : (Parsetree.attributes) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Extensions.Comprehensions.clause_binding) = let _1 = +# 4195 "parsing/parser.mly" + ( _1 ) +# 6895 "parsing/parser.ml" + in + +# 2566 "parsing/parser.mly" + ( Extensions.Comprehensions.{ pattern = _2 ; iterator = _3 ; attributes = _1 } ) +# 6900 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let _6 : (Parsetree.expression) = Obj.magic _6 in - let _5 : (Asttypes.direction_flag) = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.pattern) = Obj.magic _2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : (string Asttypes.loc option) = Obj.magic _1 in + let _5 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.attributes) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : (Extensions.comprehension_clause) = let _1 = - let _2 = - let _1 = _1_inlined1 in - -# 4092 "parsing/parser.mly" + let _endpos = _endpos__5_ in + let _v : (Extensions.Comprehensions.clause_binding) = let _1 = +# 4195 "parsing/parser.mly" ( _1 ) -# 6765 "parsing/parser.ml" - - in - -# 4105 "parsing/parser.mly" - ( _1, _2 ) -# 6771 "parsing/parser.ml" - - in +# 6953 "parsing/parser.ml" + in + let _endpos = _endpos__5_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + _startpos__2_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in -# 2507 "parsing/parser.mly" - ( Extensions.From_to(_2, _4, _6, _5) ) -# 6777 "parsing/parser.ml" +# 2573 "parsing/parser.mly" + ( Extensions.Comprehensions. + { pattern = _3 + ; iterator = In (mkexp_stack ~loc:_sloc ~kwd_loc:(_loc__2_) _5) + ; attributes = _1 + } + ) +# 6970 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6800,447 +6993,26 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.pattern) = Obj.magic _2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : (string Asttypes.loc option) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Extensions.comprehension_clause) = let _1 = - let _2 = - let _1 = _1_inlined1 in - -# 4092 "parsing/parser.mly" - ( _1 ) -# 6833 "parsing/parser.ml" - - in - -# 4105 "parsing/parser.mly" - ( _1, _2 ) -# 6839 "parsing/parser.ml" - - in - -# 2508 "parsing/parser.mly" - ( Extensions.In(_2, _4) ) -# 6845 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Extensions.comprehension list) = let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 6885 "parsing/parser.ml" - in - -# 1101 "parsing/parser.mly" - ( xs ) -# 6890 "parsing/parser.ml" - - in - -# 2513 "parsing/parser.mly" - ( [({clauses= _2; guard=None} : Extensions.comprehension)] ) -# 6896 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Extensions.comprehension list) = let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 6950 "parsing/parser.ml" - in - -# 1101 "parsing/parser.mly" - ( xs ) -# 6955 "parsing/parser.ml" - - in - -# 2515 "parsing/parser.mly" - ( [({clauses= _2; guard= Some _4} : Extensions.comprehension)] ) -# 6961 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : (Extensions.comprehension list) = Obj.magic _3 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Extensions.comprehension list) = let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 7001 "parsing/parser.ml" - in - -# 1101 "parsing/parser.mly" - ( xs ) -# 7006 "parsing/parser.ml" - - in - -# 2517 "parsing/parser.mly" - ( ({clauses= _2; guard=None} : Extensions.comprehension) :: _3 ) -# 7012 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _5 : (Extensions.comprehension list) = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Extensions.comprehension list) = let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 7066 "parsing/parser.ml" - in - -# 1101 "parsing/parser.mly" - ( xs ) -# 7071 "parsing/parser.ml" - - in - -# 2519 "parsing/parser.mly" - ( ({clauses= _2; guard= Some _4}: Extensions.comprehension) :: _5 ) -# 7077 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Extensions.comprehension list) = let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 7117 "parsing/parser.ml" - in - -# 1101 "parsing/parser.mly" - ( xs ) -# 7122 "parsing/parser.ml" - - in - -# 2513 "parsing/parser.mly" - ( [({clauses= _2; guard=None} : Extensions.comprehension)] ) -# 7128 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _5 : unit = Obj.magic _5 in let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Extensions.comprehension list) = let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 7182 "parsing/parser.ml" - in - -# 1101 "parsing/parser.mly" - ( xs ) -# 7187 "parsing/parser.ml" - - in - -# 2515 "parsing/parser.mly" - ( [({clauses= _2; guard= Some _4} : Extensions.comprehension)] ) -# 7193 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : (Extensions.comprehension list) = Obj.magic _3 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in + let _3 : (Asttypes.direction_flag) = Obj.magic _3 in + let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Extensions.comprehension list) = let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 7233 "parsing/parser.ml" - in - -# 1101 "parsing/parser.mly" - ( xs ) -# 7238 "parsing/parser.ml" - - in - -# 2517 "parsing/parser.mly" - ( ({clauses= _2; guard=None} : Extensions.comprehension) :: _3 ) -# 7244 "parsing/parser.ml" + let _endpos = _endpos__4_ in + let _v : (Extensions.Comprehensions.iterator) = +# 2559 "parsing/parser.mly" + ( Extensions.Comprehensions.Range { start = _2 ; stop = _4 ; direction = _3 } ) +# 7016 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7253,59 +7025,26 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _5 : (Extensions.comprehension list) = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in + let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Extensions.comprehension list) = let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 7298 "parsing/parser.ml" - in - -# 1101 "parsing/parser.mly" - ( xs ) -# 7303 "parsing/parser.ml" - - in - -# 2519 "parsing/parser.mly" - ( ({clauses= _2; guard= Some _4}: Extensions.comprehension) :: _5 ) -# 7309 "parsing/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Extensions.Comprehensions.iterator) = +# 2561 "parsing/parser.mly" + ( Extensions.Comprehensions.In _2 ) +# 7048 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7324,17 +7063,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 767 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * char option) -# 7330 "parsing/parser.ml" +# 7069 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3743 "parsing/parser.mly" +# 3846 "parsing/parser.mly" ( let (n, m) = _1 in Pconst_integer (n, m) ) -# 7338 "parsing/parser.ml" +# 7077 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7353,17 +7092,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 725 "parsing/parser.mly" +# 773 "parsing/parser.mly" (char) -# 7359 "parsing/parser.ml" +# 7098 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3744 "parsing/parser.mly" +# 3847 "parsing/parser.mly" ( Pconst_char _1 ) -# 7367 "parsing/parser.ml" +# 7106 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7382,17 +7121,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 821 "parsing/parser.mly" +# 871 "parsing/parser.mly" (string * Location.t * string option) -# 7388 "parsing/parser.ml" +# 7127 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3745 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( let (s, strloc, d) = _1 in Pconst_string (s, strloc, d) ) -# 7396 "parsing/parser.ml" +# 7135 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7411,17 +7150,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 745 "parsing/parser.mly" +# 794 "parsing/parser.mly" (string * char option) -# 7417 "parsing/parser.ml" +# 7156 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3746 "parsing/parser.mly" +# 3849 "parsing/parser.mly" ( let (f, m) = _1 in Pconst_float (f, m) ) -# 7425 "parsing/parser.ml" +# 7164 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7451,9 +7190,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3817 "parsing/parser.mly" +# 3920 "parsing/parser.mly" ( "[]" ) -# 7457 "parsing/parser.ml" +# 7196 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7483,9 +7222,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3818 "parsing/parser.mly" +# 3921 "parsing/parser.mly" ( "()" ) -# 7489 "parsing/parser.ml" +# 7228 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7508,9 +7247,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3819 "parsing/parser.mly" +# 3922 "parsing/parser.mly" ( "false" ) -# 7514 "parsing/parser.ml" +# 7253 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7533,9 +7272,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3820 "parsing/parser.mly" +# 3923 "parsing/parser.mly" ( "true" ) -# 7539 "parsing/parser.ml" +# 7278 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7554,17 +7293,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 7560 "parsing/parser.ml" +# 7299 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3823 "parsing/parser.mly" +# 3926 "parsing/parser.mly" ( _1 ) -# 7568 "parsing/parser.ml" +# 7307 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7601,14 +7340,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Asttypes.label) = let _1 = -# 3814 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( "::" ) -# 7607 "parsing/parser.ml" +# 7346 "parsing/parser.ml" in -# 3824 "parsing/parser.mly" +# 3927 "parsing/parser.mly" ( _1 ) -# 7612 "parsing/parser.ml" +# 7351 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7631,9 +7370,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3825 "parsing/parser.mly" +# 3928 "parsing/parser.mly" ( _1 ) -# 7637 "parsing/parser.ml" +# 7376 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7656,9 +7395,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3828 "parsing/parser.mly" +# 3931 "parsing/parser.mly" ( _1 ) -# 7662 "parsing/parser.ml" +# 7401 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7709,14 +7448,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = let _3 = -# 3814 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( "::" ) -# 7715 "parsing/parser.ml" +# 7454 "parsing/parser.ml" in -# 3829 "parsing/parser.mly" +# 3932 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 7720 "parsing/parser.ml" +# 7459 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7753,14 +7492,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = let _1 = -# 3814 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( "::" ) -# 7759 "parsing/parser.ml" +# 7498 "parsing/parser.ml" in -# 3830 "parsing/parser.mly" +# 3933 "parsing/parser.mly" ( Lident _1 ) -# 7764 "parsing/parser.ml" +# 7503 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7783,9 +7522,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3831 "parsing/parser.mly" +# 3934 "parsing/parser.mly" ( Lident _1 ) -# 7789 "parsing/parser.ml" +# 7528 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7822,9 +7561,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type * Parsetree.core_type) = -# 2185 "parsing/parser.mly" +# 2235 "parsing/parser.mly" ( _1, _3 ) -# 7828 "parsing/parser.ml" +# 7567 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7851,42 +7590,42 @@ module Tables = struct let xs = let x = let gbl = -# 3948 "parsing/parser.mly" +# 4051 "parsing/parser.mly" ( Nothing ) -# 7857 "parsing/parser.ml" +# 7596 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__0_, _endpos__0_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 7866 "parsing/parser.ml" +# 7605 "parsing/parser.ml" in -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 7872 "parsing/parser.ml" +# 7611 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 7878 "parsing/parser.ml" +# 7617 "parsing/parser.ml" in -# 1105 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( xs ) -# 7884 "parsing/parser.ml" +# 7623 "parsing/parser.ml" in -# 3332 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 7890 "parsing/parser.ml" +# 7629 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7920,42 +7659,42 @@ module Tables = struct let xs = let x = let gbl = -# 3949 "parsing/parser.mly" +# 4052 "parsing/parser.mly" ( Global ) -# 7926 "parsing/parser.ml" +# 7665 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__1_, _startpos__1_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 7935 "parsing/parser.ml" +# 7674 "parsing/parser.ml" in -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 7941 "parsing/parser.ml" +# 7680 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 7947 "parsing/parser.ml" +# 7686 "parsing/parser.ml" in -# 1105 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( xs ) -# 7953 "parsing/parser.ml" +# 7692 "parsing/parser.ml" in -# 3332 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 7959 "parsing/parser.ml" +# 7698 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7989,42 +7728,42 @@ module Tables = struct let xs = let x = let gbl = -# 3950 "parsing/parser.mly" +# 4053 "parsing/parser.mly" ( Nonlocal ) -# 7995 "parsing/parser.ml" +# 7734 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__1_, _startpos__1_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 8004 "parsing/parser.ml" +# 7743 "parsing/parser.ml" in -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 8010 "parsing/parser.ml" +# 7749 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 8016 "parsing/parser.ml" +# 7755 "parsing/parser.ml" in -# 1105 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( xs ) -# 8022 "parsing/parser.ml" +# 7761 "parsing/parser.ml" in -# 3332 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 8028 "parsing/parser.ml" +# 7767 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8066,42 +7805,42 @@ module Tables = struct let x = let _endpos__0_ = _endpos__2_ in let gbl = -# 3948 "parsing/parser.mly" +# 4051 "parsing/parser.mly" ( Nothing ) -# 8072 "parsing/parser.ml" +# 7811 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__0_, _endpos__0_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 8081 "parsing/parser.ml" +# 7820 "parsing/parser.ml" in -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 8087 "parsing/parser.ml" +# 7826 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 8093 "parsing/parser.ml" +# 7832 "parsing/parser.ml" in -# 1105 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( xs ) -# 8099 "parsing/parser.ml" +# 7838 "parsing/parser.ml" in -# 3332 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 8105 "parsing/parser.ml" +# 7844 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8149,42 +7888,42 @@ module Tables = struct let xs = let x = let gbl = -# 3949 "parsing/parser.mly" +# 4052 "parsing/parser.mly" ( Global ) -# 8155 "parsing/parser.ml" +# 7894 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__1_, _startpos__1_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 8164 "parsing/parser.ml" +# 7903 "parsing/parser.ml" in -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 8170 "parsing/parser.ml" +# 7909 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 8176 "parsing/parser.ml" +# 7915 "parsing/parser.ml" in -# 1105 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( xs ) -# 8182 "parsing/parser.ml" +# 7921 "parsing/parser.ml" in -# 3332 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 8188 "parsing/parser.ml" +# 7927 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8232,42 +7971,42 @@ module Tables = struct let xs = let x = let gbl = -# 3950 "parsing/parser.mly" +# 4053 "parsing/parser.mly" ( Nonlocal ) -# 8238 "parsing/parser.ml" +# 7977 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__1_, _startpos__1_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 8247 "parsing/parser.ml" +# 7986 "parsing/parser.ml" in -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 8253 "parsing/parser.ml" +# 7992 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 8259 "parsing/parser.ml" +# 7998 "parsing/parser.ml" in -# 1105 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( xs ) -# 8265 "parsing/parser.ml" +# 8004 "parsing/parser.ml" in -# 3332 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 8271 "parsing/parser.ml" +# 8010 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8304,9 +8043,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.constructor_arguments) = -# 3334 "parsing/parser.mly" +# 3437 "parsing/parser.mly" ( Pcstr_record _2 ) -# 8310 "parsing/parser.ml" +# 8049 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8329,9 +8068,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constructor_declaration list) = -# 3242 "parsing/parser.mly" +# 3345 "parsing/parser.mly" ( [] ) -# 8335 "parsing/parser.ml" +# 8074 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8354,14 +8093,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.constructor_declaration list) = let cs = -# 1190 "parsing/parser.mly" +# 1240 "parsing/parser.mly" ( List.rev xs ) -# 8360 "parsing/parser.ml" +# 8099 "parsing/parser.ml" in -# 3244 "parsing/parser.mly" +# 3347 "parsing/parser.mly" ( cs ) -# 8365 "parsing/parser.ml" +# 8104 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8384,14 +8123,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = -# 3498 "parsing/parser.mly" +# 3601 "parsing/parser.mly" ( _1 ) -# 8390 "parsing/parser.ml" +# 8129 "parsing/parser.ml" in -# 3488 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( _1 ) -# 8395 "parsing/parser.ml" +# 8134 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8421,9 +8160,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = -# 3490 "parsing/parser.mly" +# 3593 "parsing/parser.mly" ( Typ.attr _1 _2 ) -# 8427 "parsing/parser.ml" +# 8166 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8446,9 +8185,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.direction_flag) = -# 3926 "parsing/parser.mly" +# 4029 "parsing/parser.mly" ( Upto ) -# 8452 "parsing/parser.ml" +# 8191 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8471,9 +8210,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.direction_flag) = -# 3927 "parsing/parser.mly" +# 4030 "parsing/parser.mly" ( Downto ) -# 8477 "parsing/parser.ml" +# 8216 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8496,9 +8235,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = -# 2379 "parsing/parser.mly" +# 2429 "parsing/parser.mly" ( _1 ) -# 8502 "parsing/parser.ml" +# 8241 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8576,9 +8315,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 8582 "parsing/parser.ml" +# 8321 "parsing/parser.ml" in let _3 = @@ -8586,21 +8325,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 8592 "parsing/parser.ml" +# 8331 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 8598 "parsing/parser.ml" +# 8337 "parsing/parser.ml" in -# 2414 "parsing/parser.mly" +# 2464 "parsing/parser.mly" ( Pexp_letmodule(_4, _5, _7), _3 ) -# 8604 "parsing/parser.ml" +# 8343 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -8608,10 +8347,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8615 "parsing/parser.ml" +# 8354 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8696,9 +8435,9 @@ module Tables = struct let _3 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 8702 "parsing/parser.ml" +# 8441 "parsing/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -8707,19 +8446,19 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 8713 "parsing/parser.ml" +# 8452 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3306 "parsing/parser.mly" +# 3409 "parsing/parser.mly" ( let vars, args, res = _2 in Te.decl _1 ~vars ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) ) -# 8723 "parsing/parser.ml" +# 8462 "parsing/parser.ml" in let _3 = @@ -8727,21 +8466,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 8733 "parsing/parser.ml" +# 8472 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 8739 "parsing/parser.ml" +# 8478 "parsing/parser.ml" in -# 2416 "parsing/parser.mly" +# 2466 "parsing/parser.mly" ( Pexp_letexception(_4, _6), _3 ) -# 8745 "parsing/parser.ml" +# 8484 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -8749,10 +8488,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8756 "parsing/parser.ml" +# 8495 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8822,28 +8561,28 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 8828 "parsing/parser.ml" +# 8567 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 8834 "parsing/parser.ml" +# 8573 "parsing/parser.ml" in let _3 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 8840 "parsing/parser.ml" +# 8579 "parsing/parser.ml" in -# 2418 "parsing/parser.mly" +# 2468 "parsing/parser.mly" ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in let od = Opn.mk _5 ~override:_3 ~loc:open_loc in Pexp_open(od, _7), _4 ) -# 8847 "parsing/parser.ml" +# 8586 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -8851,10 +8590,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8858 "parsing/parser.ml" +# 8597 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8931,28 +8670,28 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 8937 "parsing/parser.ml" +# 8676 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 8943 "parsing/parser.ml" +# 8682 "parsing/parser.ml" in let _3 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 8949 "parsing/parser.ml" +# 8688 "parsing/parser.ml" in -# 2418 "parsing/parser.mly" +# 2468 "parsing/parser.mly" ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in let od = Opn.mk _5 ~override:_3 ~loc:open_loc in Pexp_open(od, _7), _4 ) -# 8956 "parsing/parser.ml" +# 8695 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -8960,10 +8699,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8967 "parsing/parser.ml" +# 8706 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9012,18 +8751,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 9016 "parsing/parser.ml" +# 8755 "parsing/parser.ml" in -# 1162 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( xs ) -# 9021 "parsing/parser.ml" +# 8760 "parsing/parser.ml" in -# 2789 "parsing/parser.mly" +# 2888 "parsing/parser.mly" ( xs ) -# 9027 "parsing/parser.ml" +# 8766 "parsing/parser.ml" in let _2 = @@ -9031,21 +8770,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9037 "parsing/parser.ml" +# 8776 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9043 "parsing/parser.ml" +# 8782 "parsing/parser.ml" in -# 2422 "parsing/parser.mly" +# 2472 "parsing/parser.mly" ( Pexp_function _3, _2 ) -# 9049 "parsing/parser.ml" +# 8788 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -9053,10 +8792,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9060 "parsing/parser.ml" +# 8799 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9112,22 +8851,22 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9118 "parsing/parser.ml" +# 8857 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9124 "parsing/parser.ml" +# 8863 "parsing/parser.ml" in -# 2424 "parsing/parser.mly" +# 2474 "parsing/parser.mly" ( let (l,o,p) = _3 in Pexp_fun(l, o, p, _4), _2 ) -# 9131 "parsing/parser.ml" +# 8870 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -9135,10 +8874,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9142 "parsing/parser.ml" +# 8881 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9211,33 +8950,33 @@ module Tables = struct let _endpos = _endpos__7_ in let _v : (Parsetree.expression) = let _1 = let _5 = -# 2643 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( xs ) -# 9217 "parsing/parser.ml" +# 8956 "parsing/parser.ml" in let _2 = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9226 "parsing/parser.ml" +# 8965 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9232 "parsing/parser.ml" +# 8971 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2427 "parsing/parser.mly" +# 2477 "parsing/parser.mly" ( (mk_newtypes ~loc:_sloc _5 _7).pexp_desc, _2 ) -# 9241 "parsing/parser.ml" +# 8980 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -9245,10 +8984,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9252 "parsing/parser.ml" +# 8991 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9311,18 +9050,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 9315 "parsing/parser.ml" +# 9054 "parsing/parser.ml" in -# 1162 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( xs ) -# 9320 "parsing/parser.ml" +# 9059 "parsing/parser.ml" in -# 2789 "parsing/parser.mly" +# 2888 "parsing/parser.mly" ( xs ) -# 9326 "parsing/parser.ml" +# 9065 "parsing/parser.ml" in let _2 = @@ -9330,21 +9069,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9336 "parsing/parser.ml" +# 9075 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9342 "parsing/parser.ml" +# 9081 "parsing/parser.ml" in -# 2429 "parsing/parser.mly" +# 2479 "parsing/parser.mly" ( Pexp_match(_3, _5), _2 ) -# 9348 "parsing/parser.ml" +# 9087 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -9352,10 +9091,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9359 "parsing/parser.ml" +# 9098 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9418,18 +9157,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 9422 "parsing/parser.ml" +# 9161 "parsing/parser.ml" in -# 1162 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( xs ) -# 9427 "parsing/parser.ml" +# 9166 "parsing/parser.ml" in -# 2789 "parsing/parser.mly" +# 2888 "parsing/parser.mly" ( xs ) -# 9433 "parsing/parser.ml" +# 9172 "parsing/parser.ml" in let _2 = @@ -9437,21 +9176,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9443 "parsing/parser.ml" +# 9182 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9449 "parsing/parser.ml" +# 9188 "parsing/parser.ml" in -# 2431 "parsing/parser.mly" +# 2481 "parsing/parser.mly" ( Pexp_try(_3, _5), _2 ) -# 9455 "parsing/parser.ml" +# 9194 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -9459,10 +9198,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9466 "parsing/parser.ml" +# 9205 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9525,21 +9264,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9531 "parsing/parser.ml" +# 9270 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9537 "parsing/parser.ml" +# 9276 "parsing/parser.ml" in -# 2433 "parsing/parser.mly" +# 2483 "parsing/parser.mly" ( syntax_error() ) -# 9543 "parsing/parser.ml" +# 9282 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -9547,10 +9286,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9554 "parsing/parser.ml" +# 9293 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9627,21 +9366,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9633 "parsing/parser.ml" +# 9372 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9639 "parsing/parser.ml" +# 9378 "parsing/parser.ml" in -# 2435 "parsing/parser.mly" +# 2485 "parsing/parser.mly" ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) -# 9645 "parsing/parser.ml" +# 9384 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -9649,10 +9388,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9656 "parsing/parser.ml" +# 9395 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9715,21 +9454,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9721 "parsing/parser.ml" +# 9460 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9727 "parsing/parser.ml" +# 9466 "parsing/parser.ml" in -# 2437 "parsing/parser.mly" +# 2487 "parsing/parser.mly" ( Pexp_ifthenelse(_3, _5, None), _2 ) -# 9733 "parsing/parser.ml" +# 9472 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -9737,10 +9476,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9744 "parsing/parser.ml" +# 9483 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9810,21 +9549,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9816 "parsing/parser.ml" +# 9555 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9822 "parsing/parser.ml" +# 9561 "parsing/parser.ml" in -# 2439 "parsing/parser.mly" +# 2489 "parsing/parser.mly" ( Pexp_while(_3, _5), _2 ) -# 9828 "parsing/parser.ml" +# 9567 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -9832,10 +9571,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9839 "parsing/parser.ml" +# 9578 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9933,21 +9672,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 9939 "parsing/parser.ml" +# 9678 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 9945 "parsing/parser.ml" +# 9684 "parsing/parser.ml" in -# 2442 "parsing/parser.mly" +# 2492 "parsing/parser.mly" ( Pexp_for(_3, _5, _7, _6, _9), _2 ) -# 9951 "parsing/parser.ml" +# 9690 "parsing/parser.ml" in let _endpos__1_ = _endpos__10_ in @@ -9955,10 +9694,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9962 "parsing/parser.ml" +# 9701 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10007,21 +9746,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 10013 "parsing/parser.ml" +# 9752 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 10019 "parsing/parser.ml" +# 9758 "parsing/parser.ml" in -# 2444 "parsing/parser.mly" +# 2494 "parsing/parser.mly" ( Pexp_assert _3, _2 ) -# 10025 "parsing/parser.ml" +# 9764 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -10029,10 +9768,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 10036 "parsing/parser.ml" +# 9775 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10081,21 +9820,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 10087 "parsing/parser.ml" +# 9826 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 10093 "parsing/parser.ml" +# 9832 "parsing/parser.ml" in -# 2446 "parsing/parser.mly" +# 2496 "parsing/parser.mly" ( Pexp_lazy _3, _2 ) -# 10099 "parsing/parser.ml" +# 9838 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -10103,10 +9842,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2381 "parsing/parser.mly" +# 2431 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 10110 "parsing/parser.ml" +# 9849 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10141,18 +9880,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 10145 "parsing/parser.ml" +# 9884 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 10150 "parsing/parser.ml" +# 9889 "parsing/parser.ml" in -# 2450 "parsing/parser.mly" +# 2500 "parsing/parser.mly" ( Pexp_apply(_1, _2) ) -# 10156 "parsing/parser.ml" +# 9895 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -10160,15 +9899,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10166 "parsing/parser.ml" +# 9905 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10172 "parsing/parser.ml" +# 9911 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10197,24 +9936,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 10201 "parsing/parser.ml" +# 9940 "parsing/parser.ml" in -# 1129 "parsing/parser.mly" +# 1179 "parsing/parser.mly" ( xs ) -# 10206 "parsing/parser.ml" +# 9945 "parsing/parser.ml" in -# 2816 "parsing/parser.mly" +# 2915 "parsing/parser.mly" ( es ) -# 10212 "parsing/parser.ml" +# 9951 "parsing/parser.ml" in -# 2452 "parsing/parser.mly" +# 2502 "parsing/parser.mly" ( Pexp_tuple(_1) ) -# 10218 "parsing/parser.ml" +# 9957 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in @@ -10222,15 +9961,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10228 "parsing/parser.ml" +# 9967 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10234 "parsing/parser.ml" +# 9973 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10266,15 +10005,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 10272 "parsing/parser.ml" +# 10011 "parsing/parser.ml" in -# 2454 "parsing/parser.mly" +# 2504 "parsing/parser.mly" ( Pexp_construct(_1, Some _2) ) -# 10278 "parsing/parser.ml" +# 10017 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -10282,15 +10021,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10288 "parsing/parser.ml" +# 10027 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10294 "parsing/parser.ml" +# 10033 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10321,24 +10060,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2456 "parsing/parser.mly" +# 2506 "parsing/parser.mly" ( Pexp_variant(_1, Some _2) ) -# 10327 "parsing/parser.ml" +# 10066 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10336 "parsing/parser.ml" +# 10075 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10342 "parsing/parser.ml" +# 10081 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10370,9 +10109,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 757 "parsing/parser.mly" +# 806 "parsing/parser.mly" (string) -# 10376 "parsing/parser.ml" +# 10115 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -10382,24 +10121,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3787 "parsing/parser.mly" +# 3890 "parsing/parser.mly" ( op ) -# 10388 "parsing/parser.ml" +# 10127 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10397 "parsing/parser.ml" +# 10136 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10403 "parsing/parser.ml" +# 10142 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10407,15 +10146,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10413 "parsing/parser.ml" +# 10152 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10419 "parsing/parser.ml" +# 10158 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10447,9 +10186,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 758 "parsing/parser.mly" +# 807 "parsing/parser.mly" (string) -# 10453 "parsing/parser.ml" +# 10192 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -10459,24 +10198,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3788 "parsing/parser.mly" +# 3891 "parsing/parser.mly" ( op ) -# 10465 "parsing/parser.ml" +# 10204 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10474 "parsing/parser.ml" +# 10213 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10480 "parsing/parser.ml" +# 10219 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10484,15 +10223,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10490 "parsing/parser.ml" +# 10229 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10496 "parsing/parser.ml" +# 10235 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10524,9 +10263,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 759 "parsing/parser.mly" +# 808 "parsing/parser.mly" (string) -# 10530 "parsing/parser.ml" +# 10269 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -10536,24 +10275,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3789 "parsing/parser.mly" +# 3892 "parsing/parser.mly" ( op ) -# 10542 "parsing/parser.ml" +# 10281 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10551 "parsing/parser.ml" +# 10290 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10557 "parsing/parser.ml" +# 10296 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10561,15 +10300,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10567 "parsing/parser.ml" +# 10306 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10573 "parsing/parser.ml" +# 10312 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10601,9 +10340,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 760 "parsing/parser.mly" +# 809 "parsing/parser.mly" (string) -# 10607 "parsing/parser.ml" +# 10346 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -10613,24 +10352,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3790 "parsing/parser.mly" +# 3893 "parsing/parser.mly" ( op ) -# 10619 "parsing/parser.ml" +# 10358 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10628 "parsing/parser.ml" +# 10367 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10634 "parsing/parser.ml" +# 10373 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10638,15 +10377,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10644 "parsing/parser.ml" +# 10383 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10650 "parsing/parser.ml" +# 10389 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10678,9 +10417,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 761 "parsing/parser.mly" +# 810 "parsing/parser.mly" (string) -# 10684 "parsing/parser.ml" +# 10423 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -10690,24 +10429,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3791 "parsing/parser.mly" +# 3894 "parsing/parser.mly" ( op ) -# 10696 "parsing/parser.ml" +# 10435 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10705 "parsing/parser.ml" +# 10444 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10711 "parsing/parser.ml" +# 10450 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10715,15 +10454,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10721 "parsing/parser.ml" +# 10460 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10727 "parsing/parser.ml" +# 10466 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10763,23 +10502,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3792 "parsing/parser.mly" +# 3895 "parsing/parser.mly" ("+") -# 10769 "parsing/parser.ml" +# 10508 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10777 "parsing/parser.ml" +# 10516 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10783 "parsing/parser.ml" +# 10522 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10787,15 +10526,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10793 "parsing/parser.ml" +# 10532 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10799 "parsing/parser.ml" +# 10538 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10835,23 +10574,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3793 "parsing/parser.mly" +# 3896 "parsing/parser.mly" ("+.") -# 10841 "parsing/parser.ml" +# 10580 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10849 "parsing/parser.ml" +# 10588 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10855 "parsing/parser.ml" +# 10594 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10859,15 +10598,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10865 "parsing/parser.ml" +# 10604 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10871 "parsing/parser.ml" +# 10610 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10907,23 +10646,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3794 "parsing/parser.mly" +# 3897 "parsing/parser.mly" ("+=") -# 10913 "parsing/parser.ml" +# 10652 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10921 "parsing/parser.ml" +# 10660 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10927 "parsing/parser.ml" +# 10666 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10931,15 +10670,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10937 "parsing/parser.ml" +# 10676 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 10943 "parsing/parser.ml" +# 10682 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10979,23 +10718,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3795 "parsing/parser.mly" +# 3898 "parsing/parser.mly" ("-") -# 10985 "parsing/parser.ml" +# 10724 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10993 "parsing/parser.ml" +# 10732 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10999 "parsing/parser.ml" +# 10738 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11003,15 +10742,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11009 "parsing/parser.ml" +# 10748 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11015 "parsing/parser.ml" +# 10754 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11051,23 +10790,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3796 "parsing/parser.mly" +# 3899 "parsing/parser.mly" ("-.") -# 11057 "parsing/parser.ml" +# 10796 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11065 "parsing/parser.ml" +# 10804 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11071 "parsing/parser.ml" +# 10810 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11075,15 +10814,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11081 "parsing/parser.ml" +# 10820 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11087 "parsing/parser.ml" +# 10826 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11123,23 +10862,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3797 "parsing/parser.mly" +# 3900 "parsing/parser.mly" ("*") -# 11129 "parsing/parser.ml" +# 10868 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11137 "parsing/parser.ml" +# 10876 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11143 "parsing/parser.ml" +# 10882 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11147,15 +10886,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11153 "parsing/parser.ml" +# 10892 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11159 "parsing/parser.ml" +# 10898 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11195,23 +10934,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3798 "parsing/parser.mly" +# 3901 "parsing/parser.mly" ("%") -# 11201 "parsing/parser.ml" +# 10940 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11209 "parsing/parser.ml" +# 10948 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11215 "parsing/parser.ml" +# 10954 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11219,15 +10958,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11225 "parsing/parser.ml" +# 10964 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11231 "parsing/parser.ml" +# 10970 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11267,23 +11006,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3799 "parsing/parser.mly" +# 3902 "parsing/parser.mly" ("=") -# 11273 "parsing/parser.ml" +# 11012 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11281 "parsing/parser.ml" +# 11020 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11287 "parsing/parser.ml" +# 11026 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11291,15 +11030,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11297 "parsing/parser.ml" +# 11036 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11303 "parsing/parser.ml" +# 11042 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11339,23 +11078,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3800 "parsing/parser.mly" +# 3903 "parsing/parser.mly" ("<") -# 11345 "parsing/parser.ml" +# 11084 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11353 "parsing/parser.ml" +# 11092 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11359 "parsing/parser.ml" +# 11098 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11363,15 +11102,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11369 "parsing/parser.ml" +# 11108 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11375 "parsing/parser.ml" +# 11114 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11411,23 +11150,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3801 "parsing/parser.mly" +# 3904 "parsing/parser.mly" (">") -# 11417 "parsing/parser.ml" +# 11156 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11425 "parsing/parser.ml" +# 11164 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11431 "parsing/parser.ml" +# 11170 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11435,15 +11174,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11441 "parsing/parser.ml" +# 11180 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11447 "parsing/parser.ml" +# 11186 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11483,23 +11222,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3802 "parsing/parser.mly" +# 3905 "parsing/parser.mly" ("or") -# 11489 "parsing/parser.ml" +# 11228 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11497 "parsing/parser.ml" +# 11236 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11503 "parsing/parser.ml" +# 11242 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11507,15 +11246,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11513 "parsing/parser.ml" +# 11252 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11519 "parsing/parser.ml" +# 11258 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11555,23 +11294,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3803 "parsing/parser.mly" +# 3906 "parsing/parser.mly" ("||") -# 11561 "parsing/parser.ml" +# 11300 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11569 "parsing/parser.ml" +# 11308 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11575 "parsing/parser.ml" +# 11314 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11579,15 +11318,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11585 "parsing/parser.ml" +# 11324 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11591 "parsing/parser.ml" +# 11330 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11627,23 +11366,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3804 "parsing/parser.mly" +# 3907 "parsing/parser.mly" ("&") -# 11633 "parsing/parser.ml" +# 11372 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11641 "parsing/parser.ml" +# 11380 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11647 "parsing/parser.ml" +# 11386 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11651,15 +11390,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11657 "parsing/parser.ml" +# 11396 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11663 "parsing/parser.ml" +# 11402 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11699,23 +11438,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3805 "parsing/parser.mly" +# 3908 "parsing/parser.mly" ("&&") -# 11705 "parsing/parser.ml" +# 11444 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11713 "parsing/parser.ml" +# 11452 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11719 "parsing/parser.ml" +# 11458 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11723,15 +11462,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11729 "parsing/parser.ml" +# 11468 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11735 "parsing/parser.ml" +# 11474 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11771,23 +11510,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3806 "parsing/parser.mly" +# 3909 "parsing/parser.mly" (":=") -# 11777 "parsing/parser.ml" +# 11516 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 11785 "parsing/parser.ml" +# 11524 "parsing/parser.ml" in -# 2458 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 11791 "parsing/parser.ml" +# 11530 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -11795,15 +11534,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11801 "parsing/parser.ml" +# 11540 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11807 "parsing/parser.ml" +# 11546 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11836,9 +11575,9 @@ module Tables = struct let _1 = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2460 "parsing/parser.mly" +# 2510 "parsing/parser.mly" ( mkuminus ~oploc:_loc__1_ _1 _2 ) -# 11842 "parsing/parser.ml" +# 11581 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -11846,15 +11585,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11852 "parsing/parser.ml" +# 11591 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11858 "parsing/parser.ml" +# 11597 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11887,9 +11626,9 @@ module Tables = struct let _1 = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2462 "parsing/parser.mly" +# 2512 "parsing/parser.mly" ( mkuplus ~oploc:_loc__1_ _1 _2 ) -# 11893 "parsing/parser.ml" +# 11632 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -11897,15 +11636,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11903 "parsing/parser.ml" +# 11642 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2434 "parsing/parser.mly" ( _1 ) -# 11909 "parsing/parser.ml" +# 11648 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11945,9 +11684,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2386 "parsing/parser.mly" +# 2436 "parsing/parser.mly" ( expr_of_let_bindings ~loc:_sloc _1 _3 ) -# 11951 "parsing/parser.ml" +# 11690 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11987,9 +11726,9 @@ module Tables = struct let _3 : unit = Obj.magic _3 in let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in let _1 : ( -# 763 "parsing/parser.mly" +# 812 "parsing/parser.mly" (string) -# 11993 "parsing/parser.ml" +# 11732 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -11999,9 +11738,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 12005 "parsing/parser.ml" +# 11744 "parsing/parser.ml" in let _startpos_pbop_op_ = _startpos__1_ in @@ -12009,13 +11748,13 @@ module Tables = struct let _symbolstartpos = _startpos_pbop_op_ in let _sloc = (_symbolstartpos, _endpos) in -# 2388 "parsing/parser.mly" +# 2438 "parsing/parser.mly" ( let (pbop_pat, pbop_exp, rev_ands) = bindings in let ands = List.rev rev_ands in let pbop_loc = make_loc _sloc in let let_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in mkexp ~loc:_sloc (Pexp_letop{ let_; ands; body}) ) -# 12019 "parsing/parser.ml" +# 11758 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12056,9 +11795,9 @@ module Tables = struct let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2394 "parsing/parser.mly" +# 2444 "parsing/parser.mly" ( mkexp_cons ~loc:_sloc _loc__2_ (ghexp ~loc:_sloc (Pexp_tuple[_1;_3])) ) -# 12062 "parsing/parser.ml" +# 11801 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12091,35 +11830,35 @@ module Tables = struct let _3 : (Parsetree.expression) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 12097 "parsing/parser.ml" +# 11836 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 12106 "parsing/parser.ml" +# 11845 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 12114 "parsing/parser.ml" +# 11853 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2396 "parsing/parser.mly" +# 2446 "parsing/parser.mly" ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) -# 12123 "parsing/parser.ml" +# 11862 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12175,18 +11914,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 12181 "parsing/parser.ml" +# 11920 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2398 "parsing/parser.mly" +# 2448 "parsing/parser.mly" ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) -# 12190 "parsing/parser.ml" +# 11929 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12252,14 +11991,14 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2399 "parsing/parser.mly" +# 2449 "parsing/parser.mly" (Some v) -# 12258 "parsing/parser.ml" +# 11997 "parsing/parser.ml" in -# 2359 "parsing/parser.mly" +# 2409 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 12263 "parsing/parser.ml" +# 12002 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -12267,9 +12006,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2400 "parsing/parser.mly" +# 2450 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 12273 "parsing/parser.ml" +# 12012 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12335,14 +12074,14 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2399 "parsing/parser.mly" +# 2449 "parsing/parser.mly" (Some v) -# 12341 "parsing/parser.ml" +# 12080 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2411 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 12346 "parsing/parser.ml" +# 12085 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -12350,9 +12089,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2400 "parsing/parser.mly" +# 2450 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 12356 "parsing/parser.ml" +# 12095 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12418,14 +12157,14 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2399 "parsing/parser.mly" +# 2449 "parsing/parser.mly" (Some v) -# 12424 "parsing/parser.ml" +# 12163 "parsing/parser.ml" in -# 2363 "parsing/parser.mly" +# 2413 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 12429 "parsing/parser.ml" +# 12168 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -12433,9 +12172,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2400 "parsing/parser.mly" +# 2450 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 12439 "parsing/parser.ml" +# 12178 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12495,9 +12234,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 12501 "parsing/parser.ml" +# 12240 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -12505,31 +12244,31 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2401 "parsing/parser.mly" +# 2451 "parsing/parser.mly" (Some v) -# 12511 "parsing/parser.ml" +# 12250 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 12516 "parsing/parser.ml" +# 12255 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 12522 "parsing/parser.ml" +# 12261 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 12527 "parsing/parser.ml" +# 12266 "parsing/parser.ml" in -# 2359 "parsing/parser.mly" +# 2409 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 12533 "parsing/parser.ml" +# 12272 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -12537,9 +12276,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2402 "parsing/parser.mly" +# 2452 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12543 "parsing/parser.ml" +# 12282 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12611,9 +12350,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 12617 "parsing/parser.ml" +# 12356 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -12623,39 +12362,39 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2401 "parsing/parser.mly" +# 2451 "parsing/parser.mly" (Some v) -# 12629 "parsing/parser.ml" +# 12368 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 12634 "parsing/parser.ml" +# 12373 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 12642 "parsing/parser.ml" +# 12381 "parsing/parser.ml" in # 126 "" ( Some x ) -# 12647 "parsing/parser.ml" +# 12386 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 12653 "parsing/parser.ml" +# 12392 "parsing/parser.ml" in -# 2359 "parsing/parser.mly" +# 2409 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 12659 "parsing/parser.ml" +# 12398 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -12663,9 +12402,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2402 "parsing/parser.mly" +# 2452 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12669 "parsing/parser.ml" +# 12408 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12725,9 +12464,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 12731 "parsing/parser.ml" +# 12470 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -12735,31 +12474,31 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2401 "parsing/parser.mly" +# 2451 "parsing/parser.mly" (Some v) -# 12741 "parsing/parser.ml" +# 12480 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 12746 "parsing/parser.ml" +# 12485 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 12752 "parsing/parser.ml" +# 12491 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 12757 "parsing/parser.ml" +# 12496 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2411 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 12763 "parsing/parser.ml" +# 12502 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -12767,9 +12506,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2402 "parsing/parser.mly" +# 2452 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12773 "parsing/parser.ml" +# 12512 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12841,9 +12580,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 12847 "parsing/parser.ml" +# 12586 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -12853,39 +12592,39 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2401 "parsing/parser.mly" +# 2451 "parsing/parser.mly" (Some v) -# 12859 "parsing/parser.ml" +# 12598 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 12864 "parsing/parser.ml" +# 12603 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 12872 "parsing/parser.ml" +# 12611 "parsing/parser.ml" in # 126 "" ( Some x ) -# 12877 "parsing/parser.ml" +# 12616 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 12883 "parsing/parser.ml" +# 12622 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2411 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 12889 "parsing/parser.ml" +# 12628 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -12893,9 +12632,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2402 "parsing/parser.mly" +# 2452 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12899 "parsing/parser.ml" +# 12638 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12955,9 +12694,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 12961 "parsing/parser.ml" +# 12700 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -12965,31 +12704,31 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2401 "parsing/parser.mly" +# 2451 "parsing/parser.mly" (Some v) -# 12971 "parsing/parser.ml" +# 12710 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 12976 "parsing/parser.ml" +# 12715 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 12982 "parsing/parser.ml" +# 12721 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 12987 "parsing/parser.ml" +# 12726 "parsing/parser.ml" in -# 2363 "parsing/parser.mly" +# 2413 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 12993 "parsing/parser.ml" +# 12732 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -12997,9 +12736,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2402 "parsing/parser.mly" +# 2452 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 13003 "parsing/parser.ml" +# 12742 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13071,9 +12810,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 13077 "parsing/parser.ml" +# 12816 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -13083,39 +12822,39 @@ module Tables = struct let _endpos = _endpos_v_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2401 "parsing/parser.mly" +# 2451 "parsing/parser.mly" (Some v) -# 13089 "parsing/parser.ml" +# 12828 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 13094 "parsing/parser.ml" +# 12833 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 13102 "parsing/parser.ml" +# 12841 "parsing/parser.ml" in # 126 "" ( Some x ) -# 13107 "parsing/parser.ml" +# 12846 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 13113 "parsing/parser.ml" +# 12852 "parsing/parser.ml" in -# 2363 "parsing/parser.mly" +# 2413 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 13119 "parsing/parser.ml" +# 12858 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in @@ -13123,9 +12862,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2402 "parsing/parser.mly" +# 2452 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 13129 "parsing/parser.ml" +# 12868 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13155,9 +12894,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2404 "parsing/parser.mly" +# 2454 "parsing/parser.mly" ( Exp.attr _1 _2 ) -# 13161 "parsing/parser.ml" +# 12900 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13181,9 +12920,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2407 "parsing/parser.mly" +# 2457 "parsing/parser.mly" ( not_expecting _loc__1_ "wildcard \"_\"" ) -# 13187 "parsing/parser.ml" +# 12926 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13217,9 +12956,9 @@ module Tables = struct let _loc__1_ = (_startpos__1_, _endpos__1_) in let _sloc = (_symbolstartpos, _endpos) in -# 2410 "parsing/parser.mly" +# 2460 "parsing/parser.mly" ( mkexp_stack ~loc:_sloc ~kwd_loc:(_loc__1_) _2 ) -# 13223 "parsing/parser.ml" +# 12962 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13235,9 +12974,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (string Asttypes.loc option) = -# 4095 "parsing/parser.mly" +# 4198 "parsing/parser.mly" ( None ) -# 13241 "parsing/parser.ml" +# 12980 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13267,9 +13006,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string Asttypes.loc option) = -# 4096 "parsing/parser.mly" +# 4199 "parsing/parser.mly" ( Some _2 ) -# 13273 "parsing/parser.ml" +# 13012 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13313,9 +13052,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.extension) = -# 4108 "parsing/parser.mly" +# 4211 "parsing/parser.mly" ( (_2, _3) ) -# 13319 "parsing/parser.ml" +# 13058 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13334,9 +13073,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 823 "parsing/parser.mly" +# 873 "parsing/parser.mly" (string * Location.t * string * Location.t * string option) -# 13340 "parsing/parser.ml" +# 13079 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -13345,9 +13084,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 4110 "parsing/parser.mly" +# 4213 "parsing/parser.mly" ( mk_quotedext ~loc:_sloc _1 ) -# 13351 "parsing/parser.ml" +# 13090 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13400,9 +13139,9 @@ module Tables = struct let _v : (Parsetree.extension_constructor) = let attrs = let _1 = _1_inlined3 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 13406 "parsing/parser.ml" +# 13145 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined3_ in @@ -13412,9 +13151,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13418 "parsing/parser.ml" +# 13157 "parsing/parser.ml" in let cid = @@ -13423,19 +13162,19 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13429 "parsing/parser.ml" +# 13168 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3408 "parsing/parser.mly" +# 3511 "parsing/parser.mly" ( let info = symbol_info _endpos in Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 13439 "parsing/parser.ml" +# 13178 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13481,9 +13220,9 @@ module Tables = struct let _v : (Parsetree.extension_constructor) = let attrs = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 13487 "parsing/parser.ml" +# 13226 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined2_ in @@ -13493,9 +13232,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13499 "parsing/parser.ml" +# 13238 "parsing/parser.ml" in let cid = @@ -13503,25 +13242,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13509 "parsing/parser.ml" +# 13248 "parsing/parser.ml" in let _startpos_cid_ = _startpos__1_ in let _1 = -# 3900 "parsing/parser.mly" +# 4003 "parsing/parser.mly" ( () ) -# 13516 "parsing/parser.ml" +# 13255 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos_cid_ in let _sloc = (_symbolstartpos, _endpos) in -# 3408 "parsing/parser.mly" +# 3511 "parsing/parser.mly" ( let info = symbol_info _endpos in Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 13525 "parsing/parser.ml" +# 13264 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13568,10 +13307,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 4083 "parsing/parser.mly" +# 4186 "parsing/parser.mly" ( mark_symbol_docs _sloc; - Builtin_attributes.mk_internal ~loc:(make_loc _sloc) _2 _3 ) -# 13575 "parsing/parser.ml" + mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 13314 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13587,14 +13326,14 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = -# 2125 "parsing/parser.mly" +# 2175 "parsing/parser.mly" ( [] ) -# 13593 "parsing/parser.ml" +# 13332 "parsing/parser.ml" in -# 1950 "parsing/parser.mly" +# 2000 "parsing/parser.mly" ( params ) -# 13598 "parsing/parser.ml" +# 13337 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13635,24 +13374,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 13639 "parsing/parser.ml" +# 13378 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 13644 "parsing/parser.ml" +# 13383 "parsing/parser.ml" in -# 2127 "parsing/parser.mly" +# 2177 "parsing/parser.mly" ( params ) -# 13650 "parsing/parser.ml" +# 13389 "parsing/parser.ml" in -# 1950 "parsing/parser.mly" +# 2000 "parsing/parser.mly" ( params ) -# 13656 "parsing/parser.ml" +# 13395 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13675,9 +13414,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = -# 2761 "parsing/parser.mly" +# 2860 "parsing/parser.mly" ( _1 ) -# 13681 "parsing/parser.ml" +# 13420 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13717,9 +13456,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2763 "parsing/parser.mly" +# 2862 "parsing/parser.mly" ( mkexp_constraint ~loc:_sloc _3 _1 ) -# 13723 "parsing/parser.ml" +# 13462 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13749,9 +13488,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2801 "parsing/parser.mly" +# 2900 "parsing/parser.mly" ( _2 ) -# 13755 "parsing/parser.ml" +# 13494 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13796,24 +13535,24 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2803 "parsing/parser.mly" +# 2902 "parsing/parser.mly" ( Pexp_constraint (_4, _2) ) -# 13802 "parsing/parser.ml" +# 13541 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 13811 "parsing/parser.ml" +# 13550 "parsing/parser.ml" in -# 2804 "parsing/parser.mly" +# 2903 "parsing/parser.mly" ( _1 ) -# 13817 "parsing/parser.ml" +# 13556 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13846,12 +13585,12 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2807 "parsing/parser.mly" +# 2906 "parsing/parser.mly" ( let (l,o,p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) ) -# 13855 "parsing/parser.ml" +# 13594 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13902,17 +13641,17 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _3 = -# 2643 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( xs ) -# 13908 "parsing/parser.ml" +# 13647 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2812 "parsing/parser.mly" +# 2911 "parsing/parser.mly" ( mk_newtypes ~loc:_sloc _3 _5 ) -# 13916 "parsing/parser.ml" +# 13655 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13935,9 +13674,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3524 "parsing/parser.mly" +# 3627 "parsing/parser.mly" ( ty ) -# 13941 "parsing/parser.ml" +# 13680 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13960,9 +13699,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3526 "parsing/parser.mly" +# 3629 "parsing/parser.mly" ( ty ) -# 13966 "parsing/parser.ml" +# 13705 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13993,9 +13732,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Lexing.position * Parsetree.functor_parameter) = let _startpos = _startpos__1_ in -# 1355 "parsing/parser.mly" +# 1405 "parsing/parser.mly" ( _startpos, Unit ) -# 13999 "parsing/parser.ml" +# 13738 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14051,16 +13790,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14057 "parsing/parser.ml" +# 13796 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 1358 "parsing/parser.mly" +# 1408 "parsing/parser.mly" ( _startpos, Named (x, mty) ) -# 14064 "parsing/parser.ml" +# 13803 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14077,9 +13816,9 @@ module Tables = struct let _endpos = _startpos in let _v : (string Asttypes.loc list * Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3310 "parsing/parser.mly" +# 3413 "parsing/parser.mly" ( ([],Pcstr_tuple [],None) ) -# 14083 "parsing/parser.ml" +# 13822 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14110,9 +13849,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (string Asttypes.loc list * Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3311 "parsing/parser.mly" +# 3414 "parsing/parser.mly" ( ([],_2,None) ) -# 14116 "parsing/parser.ml" +# 13855 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14157,9 +13896,9 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (string Asttypes.loc list * Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3313 "parsing/parser.mly" +# 3416 "parsing/parser.mly" ( ([],_2,Some _4) ) -# 14163 "parsing/parser.ml" +# 13902 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14222,24 +13961,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 14226 "parsing/parser.ml" +# 13965 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 14231 "parsing/parser.ml" +# 13970 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 14237 "parsing/parser.ml" +# 13976 "parsing/parser.ml" in -# 3316 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( (_2,_4,Some _6) ) -# 14243 "parsing/parser.ml" +# 13982 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14270,9 +14009,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (string Asttypes.loc list * Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3318 "parsing/parser.mly" +# 3421 "parsing/parser.mly" ( ([],Pcstr_tuple [],Some _2) ) -# 14276 "parsing/parser.ml" +# 14015 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14321,24 +14060,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 14325 "parsing/parser.ml" +# 14064 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 14330 "parsing/parser.ml" +# 14069 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 14336 "parsing/parser.ml" +# 14075 "parsing/parser.ml" in -# 3320 "parsing/parser.mly" +# 3423 "parsing/parser.mly" ( (_2,Pcstr_tuple [],Some _4) ) -# 14342 "parsing/parser.ml" +# 14081 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14387,9 +14126,9 @@ module Tables = struct Parsetree.attributes * Location.t * Docstrings.info) = let attrs = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 14393 "parsing/parser.ml" +# 14132 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined2_ in @@ -14399,23 +14138,23 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14405 "parsing/parser.ml" +# 14144 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3258 "parsing/parser.mly" +# 3361 "parsing/parser.mly" ( let vars, args, res = vars_args_res in let info = symbol_info _endpos in let loc = make_loc _sloc in cid, vars, args, res, attrs, loc, info ) -# 14419 "parsing/parser.ml" +# 14158 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14457,9 +14196,9 @@ module Tables = struct Parsetree.attributes * Location.t * Docstrings.info) = let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 14463 "parsing/parser.ml" +# 14202 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined1_ in @@ -14468,29 +14207,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14474 "parsing/parser.ml" +# 14213 "parsing/parser.ml" in let _startpos_cid_ = _startpos__1_ in let _1 = -# 3900 "parsing/parser.mly" +# 4003 "parsing/parser.mly" ( () ) -# 14481 "parsing/parser.ml" +# 14220 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos_cid_ in let _sloc = (_symbolstartpos, _endpos) in -# 3258 "parsing/parser.mly" +# 3361 "parsing/parser.mly" ( let vars, args, res = vars_args_res in let info = symbol_info _endpos in let loc = make_loc _sloc in cid, vars, args, res, attrs, loc, info ) -# 14494 "parsing/parser.ml" +# 14233 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14561,9 +14300,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 14567 "parsing/parser.ml" +# 14306 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -14576,9 +14315,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 14582 "parsing/parser.ml" +# 14321 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -14587,24 +14326,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 14591 "parsing/parser.ml" +# 14330 "parsing/parser.ml" in -# 1051 "parsing/parser.mly" +# 1101 "parsing/parser.mly" ( xs ) -# 14596 "parsing/parser.ml" +# 14335 "parsing/parser.ml" in -# 3163 "parsing/parser.mly" +# 3266 "parsing/parser.mly" ( _1 ) -# 14602 "parsing/parser.ml" +# 14341 "parsing/parser.ml" in let kind_priv_manifest = -# 3198 "parsing/parser.mly" +# 3301 "parsing/parser.mly" ( _2 ) -# 14608 "parsing/parser.ml" +# 14347 "parsing/parser.ml" in let id = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -14612,29 +14351,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14618 "parsing/parser.ml" +# 14357 "parsing/parser.ml" in let flag = -# 3920 "parsing/parser.mly" +# 4023 "parsing/parser.mly" ( Recursive ) -# 14624 "parsing/parser.ml" +# 14363 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 14631 "parsing/parser.ml" +# 14370 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3135 "parsing/parser.mly" +# 3238 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -14643,7 +14382,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 14647 "parsing/parser.ml" +# 14386 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14720,9 +14459,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined4 : unit = Obj.magic _1_inlined4 in let _1_inlined3 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 14726 "parsing/parser.ml" +# 14465 "parsing/parser.ml" ) = Obj.magic _1_inlined3 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined2 : unit = Obj.magic _1_inlined2 in @@ -14736,9 +14475,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined5 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 14742 "parsing/parser.ml" +# 14481 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined5_ in @@ -14747,24 +14486,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 14751 "parsing/parser.ml" +# 14490 "parsing/parser.ml" in -# 1051 "parsing/parser.mly" +# 1101 "parsing/parser.mly" ( xs ) -# 14756 "parsing/parser.ml" +# 14495 "parsing/parser.ml" in -# 3163 "parsing/parser.mly" +# 3266 "parsing/parser.mly" ( _1 ) -# 14762 "parsing/parser.ml" +# 14501 "parsing/parser.ml" in let kind_priv_manifest = -# 3198 "parsing/parser.mly" +# 3301 "parsing/parser.mly" ( _2 ) -# 14768 "parsing/parser.ml" +# 14507 "parsing/parser.ml" in let id = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -14772,9 +14511,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14778 "parsing/parser.ml" +# 14517 "parsing/parser.ml" in let flag = @@ -14783,24 +14522,24 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3922 "parsing/parser.mly" +# 4025 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 14789 "parsing/parser.ml" +# 14528 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 14797 "parsing/parser.ml" +# 14536 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3135 "parsing/parser.mly" +# 3238 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -14809,7 +14548,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 14813 "parsing/parser.ml" +# 14552 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14873,9 +14612,9 @@ module Tables = struct let xs : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 14879 "parsing/parser.ml" +# 14618 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -14888,9 +14627,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 14894 "parsing/parser.ml" +# 14633 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -14899,18 +14638,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 14903 "parsing/parser.ml" +# 14642 "parsing/parser.ml" in -# 1051 "parsing/parser.mly" +# 1101 "parsing/parser.mly" ( xs ) -# 14908 "parsing/parser.ml" +# 14647 "parsing/parser.ml" in -# 3163 "parsing/parser.mly" +# 3266 "parsing/parser.mly" ( _1 ) -# 14914 "parsing/parser.ml" +# 14653 "parsing/parser.ml" in let id = @@ -14919,29 +14658,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14925 "parsing/parser.ml" +# 14664 "parsing/parser.ml" in let flag = -# 3916 "parsing/parser.mly" +# 4019 "parsing/parser.mly" ( Recursive ) -# 14931 "parsing/parser.ml" +# 14670 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 14938 "parsing/parser.ml" +# 14677 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3135 "parsing/parser.mly" +# 3238 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -14950,7 +14689,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 14954 "parsing/parser.ml" +# 14693 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15020,9 +14759,9 @@ module Tables = struct let xs : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined3 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 15026 "parsing/parser.ml" +# 14765 "parsing/parser.ml" ) = Obj.magic _1_inlined3 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined2 : unit = Obj.magic _1_inlined2 in @@ -15036,9 +14775,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 15042 "parsing/parser.ml" +# 14781 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -15047,18 +14786,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 15051 "parsing/parser.ml" +# 14790 "parsing/parser.ml" in -# 1051 "parsing/parser.mly" +# 1101 "parsing/parser.mly" ( xs ) -# 15056 "parsing/parser.ml" +# 14795 "parsing/parser.ml" in -# 3163 "parsing/parser.mly" +# 3266 "parsing/parser.mly" ( _1 ) -# 15062 "parsing/parser.ml" +# 14801 "parsing/parser.ml" in let id = @@ -15067,29 +14806,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15073 "parsing/parser.ml" +# 14812 "parsing/parser.ml" in let flag = -# 3917 "parsing/parser.mly" +# 4020 "parsing/parser.mly" ( Nonrecursive ) -# 15079 "parsing/parser.ml" +# 14818 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 15086 "parsing/parser.ml" +# 14825 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3135 "parsing/parser.mly" +# 3238 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -15098,7 +14837,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 15102 "parsing/parser.ml" +# 14841 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15117,17 +14856,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 15123 "parsing/parser.ml" +# 14862 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3759 "parsing/parser.mly" +# 3862 "parsing/parser.mly" ( _1 ) -# 15131 "parsing/parser.ml" +# 14870 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15146,17 +14885,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 15152 "parsing/parser.ml" +# 14891 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3760 "parsing/parser.mly" +# 3863 "parsing/parser.mly" ( _1 ) -# 15160 "parsing/parser.ml" +# 14899 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15186,9 +14925,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.structure) = -# 1222 "parsing/parser.mly" +# 1272 "parsing/parser.mly" ( _1 ) -# 15192 "parsing/parser.ml" +# 14931 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15211,9 +14950,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.attribute list) = -# 1598 "parsing/parser.mly" +# 1648 "parsing/parser.mly" ( [] ) -# 15217 "parsing/parser.ml" +# 14956 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15246,9 +14985,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 1600 "parsing/parser.mly" +# 1650 "parsing/parser.mly" ( [include_functor_attr (make_loc _loc)] ) -# 15252 "parsing/parser.ml" +# 14991 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15264,9 +15003,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (string) = -# 3809 "parsing/parser.mly" +# 3912 "parsing/parser.mly" ( "" ) -# 15270 "parsing/parser.ml" +# 15009 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15296,9 +15035,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string) = -# 3810 "parsing/parser.mly" +# 3913 "parsing/parser.mly" ( ";.." ) -# 15302 "parsing/parser.ml" +# 15041 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15328,9 +15067,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.signature) = -# 1229 "parsing/parser.mly" +# 1279 "parsing/parser.mly" ( _1 ) -# 15334 "parsing/parser.ml" +# 15073 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15374,9 +15113,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.extension) = -# 4113 "parsing/parser.mly" +# 4216 "parsing/parser.mly" ( (_2, _3) ) -# 15380 "parsing/parser.ml" +# 15119 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15395,9 +15134,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 825 "parsing/parser.mly" +# 875 "parsing/parser.mly" (string * Location.t * string * Location.t * string option) -# 15401 "parsing/parser.ml" +# 15140 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -15406,9 +15145,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 4115 "parsing/parser.mly" +# 4218 "parsing/parser.mly" ( mk_quotedext ~loc:_sloc _1 ) -# 15412 "parsing/parser.ml" +# 15151 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15454,9 +15193,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _3 : unit = Obj.magic _3 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 15460 "parsing/parser.ml" +# 15199 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Asttypes.mutable_flag * Asttypes.global_flag) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -15465,34 +15204,34 @@ module Tables = struct let _v : (Parsetree.label_declaration) = let _5 = let _1 = _1_inlined3 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 15471 "parsing/parser.ml" +# 15210 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3477 "parsing/parser.mly" +# 3580 "parsing/parser.mly" ( _1 ) -# 15480 "parsing/parser.ml" +# 15219 "parsing/parser.ml" in let _2 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 15488 "parsing/parser.ml" +# 15227 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15496 "parsing/parser.ml" +# 15235 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_inlined1_ in @@ -15504,13 +15243,13 @@ module Tables = struct let _loc__1_ = (_startpos__1_, _endpos__1_) in let _sloc = (_symbolstartpos, _endpos) in -# 3343 "parsing/parser.mly" +# 3446 "parsing/parser.mly" ( let info = symbol_info _endpos in let mut, gbl = _1 in mkld_global_maybe gbl (Type.field _2 _4 ~mut ~attrs:_5 ~loc:(make_loc _sloc) ~info) (make_loc _loc__1_) ) -# 15514 "parsing/parser.ml" +# 15253 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15570,9 +15309,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _3 : unit = Obj.magic _3 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 15576 "parsing/parser.ml" +# 15315 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Asttypes.mutable_flag * Asttypes.global_flag) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -15581,43 +15320,43 @@ module Tables = struct let _v : (Parsetree.label_declaration) = let _7 = let _1 = _1_inlined4 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 15587 "parsing/parser.ml" +# 15326 "parsing/parser.ml" in let _endpos__7_ = _endpos__1_inlined4_ in let _5 = let _1 = _1_inlined3 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 15596 "parsing/parser.ml" +# 15335 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3477 "parsing/parser.mly" +# 3580 "parsing/parser.mly" ( _1 ) -# 15605 "parsing/parser.ml" +# 15344 "parsing/parser.ml" in let _2 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 15613 "parsing/parser.ml" +# 15352 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15621 "parsing/parser.ml" +# 15360 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_inlined1_ in @@ -15629,7 +15368,7 @@ module Tables = struct let _loc__1_ = (_startpos__1_, _endpos__1_) in let _sloc = (_symbolstartpos, _endpos) in -# 3352 "parsing/parser.mly" +# 3455 "parsing/parser.mly" ( let info = match rhs_info _endpos__5_ with | Some _ as info_before_semi -> info_before_semi @@ -15639,7 +15378,7 @@ module Tables = struct mkld_global_maybe gbl (Type.field _2 _4 ~mut ~attrs:(_5 @ _7) ~loc:(make_loc _sloc) ~info) (make_loc _loc__1_) ) -# 15643 "parsing/parser.ml" +# 15382 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15662,9 +15401,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.label_declaration list) = -# 3337 "parsing/parser.mly" +# 3440 "parsing/parser.mly" ( [_1] ) -# 15668 "parsing/parser.ml" +# 15407 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15687,9 +15426,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.label_declaration list) = -# 3338 "parsing/parser.mly" +# 3441 "parsing/parser.mly" ( [_1] ) -# 15693 "parsing/parser.ml" +# 15432 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15719,9 +15458,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.label_declaration list) = -# 3339 "parsing/parser.mly" +# 3442 "parsing/parser.mly" ( _1 :: _2 ) -# 15725 "parsing/parser.ml" +# 15464 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15740,9 +15479,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 15746 "parsing/parser.ml" +# 15485 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -15753,24 +15492,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15759 "parsing/parser.ml" +# 15498 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2336 "parsing/parser.mly" +# 2386 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15768 "parsing/parser.ml" +# 15507 "parsing/parser.ml" in -# 2323 "parsing/parser.mly" +# 2373 "parsing/parser.mly" ( x ) -# 15774 "parsing/parser.ml" +# 15513 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15803,9 +15542,9 @@ module Tables = struct let cty : (Parsetree.core_type) = Obj.magic cty in let _2 : unit = Obj.magic _2 in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 15809 "parsing/parser.ml" +# 15548 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -15816,18 +15555,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15822 "parsing/parser.ml" +# 15561 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2336 "parsing/parser.mly" +# 2386 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15831 "parsing/parser.ml" +# 15570 "parsing/parser.ml" in let _startpos_x_ = _startpos__1_ in @@ -15835,11 +15574,11 @@ module Tables = struct let _symbolstartpos = _startpos_x_ in let _sloc = (_symbolstartpos, _endpos) in -# 2325 "parsing/parser.mly" +# 2375 "parsing/parser.mly" ( let lab, pat = x in lab, mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) ) -# 15843 "parsing/parser.ml" +# 15582 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15886,9 +15625,9 @@ module Tables = struct let xs : (Asttypes.label Asttypes.loc list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 15892 "parsing/parser.ml" +# 15631 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -15900,24 +15639,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 15904 "parsing/parser.ml" +# 15643 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 15909 "parsing/parser.ml" +# 15648 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 15915 "parsing/parser.ml" +# 15654 "parsing/parser.ml" in -# 2329 "parsing/parser.mly" +# 2379 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 15921 "parsing/parser.ml" +# 15660 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_xs_) in @@ -15925,9 +15664,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 15931 "parsing/parser.ml" +# 15670 "parsing/parser.ml" in let _endpos_cty_ = _endpos_ty_ in @@ -15937,18 +15676,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15943 "parsing/parser.ml" +# 15682 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2336 "parsing/parser.mly" +# 2386 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15952 "parsing/parser.ml" +# 15691 "parsing/parser.ml" in let _startpos_x_ = _startpos__1_ in @@ -15956,11 +15695,11 @@ module Tables = struct let _symbolstartpos = _startpos_x_ in let _sloc = (_symbolstartpos, _endpos) in -# 2330 "parsing/parser.mly" +# 2380 "parsing/parser.mly" ( let lab, pat = x in lab, mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) ) -# 15964 "parsing/parser.ml" +# 15703 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15983,9 +15722,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3841 "parsing/parser.mly" +# 3944 "parsing/parser.mly" ( _1 ) -# 15989 "parsing/parser.ml" +# 15728 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16008,9 +15747,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2626 "parsing/parser.mly" +# 2725 "parsing/parser.mly" ( (Nolabel, _1) ) -# 16014 "parsing/parser.ml" +# 15753 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16036,17 +15775,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 768 "parsing/parser.mly" +# 817 "parsing/parser.mly" (string) -# 16042 "parsing/parser.ml" +# 15781 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2628 "parsing/parser.mly" +# 2727 "parsing/parser.mly" ( (Labelled _1, _2) ) -# 16050 "parsing/parser.ml" +# 15789 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16071,9 +15810,9 @@ module Tables = struct }; } = _menhir_stack in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 16077 "parsing/parser.ml" +# 15816 "parsing/parser.ml" ) = Obj.magic label in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -16081,10 +15820,10 @@ module Tables = struct let _endpos = _endpos_label_ in let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2630 "parsing/parser.mly" +# 2729 "parsing/parser.mly" ( let loc = _loc_label_ in (Labelled label, mkexpvar ~loc label) ) -# 16088 "parsing/parser.ml" +# 15827 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16129,9 +15868,9 @@ module Tables = struct let _5 : unit = Obj.magic _5 in let ty : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic ty in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 16135 "parsing/parser.ml" +# 15874 "parsing/parser.ml" ) = Obj.magic label in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in @@ -16141,10 +15880,10 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression) = let _endpos = _endpos__5_ in let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2633 "parsing/parser.mly" +# 2732 "parsing/parser.mly" ( (Labelled label, mkexp_constraint ~loc:(_startpos__2_, _endpos) (mkexpvar ~loc:_loc_label_ label) ty) ) -# 16148 "parsing/parser.ml" +# 15887 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16169,9 +15908,9 @@ module Tables = struct }; } = _menhir_stack in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 16175 "parsing/parser.ml" +# 15914 "parsing/parser.ml" ) = Obj.magic label in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -16179,10 +15918,10 @@ module Tables = struct let _endpos = _endpos_label_ in let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2636 "parsing/parser.mly" +# 2735 "parsing/parser.mly" ( let loc = _loc_label_ in (Optional label, mkexpvar ~loc label) ) -# 16186 "parsing/parser.ml" +# 15925 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16208,17 +15947,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 800 "parsing/parser.mly" +# 850 "parsing/parser.mly" (string) -# 16214 "parsing/parser.ml" +# 15953 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2639 "parsing/parser.mly" +# 2738 "parsing/parser.mly" ( (Optional _1, _2) ) -# 16222 "parsing/parser.ml" +# 15961 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16271,22 +16010,22 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _5 = let _1 = _1_inlined1 in -# 2319 "parsing/parser.mly" +# 2369 "parsing/parser.mly" ( _1 ) -# 16277 "parsing/parser.ml" +# 16016 "parsing/parser.ml" in let _3 = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 16283 "parsing/parser.ml" +# 16022 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_, _endpos__2_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2282 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( (Optional (fst _4), _5, mkpat_local_if _3 (snd _4) _loc__3_) ) -# 16290 "parsing/parser.ml" +# 16029 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16346,22 +16085,22 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _5 = let _1 = _1_inlined2 in -# 2319 "parsing/parser.mly" +# 2369 "parsing/parser.mly" ( _1 ) -# 16352 "parsing/parser.ml" +# 16091 "parsing/parser.ml" in let _3 = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 16358 "parsing/parser.ml" +# 16097 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2282 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( (Optional (fst _4), _5, mkpat_local_if _3 (snd _4) _loc__3_) ) -# 16365 "parsing/parser.ml" +# 16104 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16386,9 +16125,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 16392 "parsing/parser.ml" +# 16131 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -16401,24 +16140,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16407 "parsing/parser.ml" +# 16146 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2336 "parsing/parser.mly" +# 2386 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 16416 "parsing/parser.ml" +# 16155 "parsing/parser.ml" in -# 2284 "parsing/parser.mly" +# 2334 "parsing/parser.mly" ( (Optional (fst _2), None, snd _2) ) -# 16422 "parsing/parser.ml" +# 16161 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16465,9 +16204,9 @@ module Tables = struct let _4 : (Parsetree.pattern) = Obj.magic _4 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 800 "parsing/parser.mly" +# 850 "parsing/parser.mly" (string) -# 16471 "parsing/parser.ml" +# 16210 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -16475,22 +16214,22 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _5 = let _1 = _1_inlined1 in -# 2319 "parsing/parser.mly" +# 2369 "parsing/parser.mly" ( _1 ) -# 16481 "parsing/parser.ml" +# 16220 "parsing/parser.ml" in let _3 = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 16487 "parsing/parser.ml" +# 16226 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_, _endpos__2_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2286 "parsing/parser.mly" +# 2336 "parsing/parser.mly" ( (Optional _1, _5, mkpat_local_if _3 _4 _loc__3_) ) -# 16494 "parsing/parser.ml" +# 16233 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16544,9 +16283,9 @@ module Tables = struct let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 800 "parsing/parser.mly" +# 850 "parsing/parser.mly" (string) -# 16550 "parsing/parser.ml" +# 16289 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -16554,22 +16293,22 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _5 = let _1 = _1_inlined2 in -# 2319 "parsing/parser.mly" +# 2369 "parsing/parser.mly" ( _1 ) -# 16560 "parsing/parser.ml" +# 16299 "parsing/parser.ml" in let _3 = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 16566 "parsing/parser.ml" +# 16305 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2286 "parsing/parser.mly" +# 2336 "parsing/parser.mly" ( (Optional _1, _5, mkpat_local_if _3 _4 _loc__3_) ) -# 16573 "parsing/parser.ml" +# 16312 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16595,17 +16334,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.pattern) = Obj.magic _2 in let _1 : ( -# 800 "parsing/parser.mly" +# 850 "parsing/parser.mly" (string) -# 16601 "parsing/parser.ml" +# 16340 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2288 "parsing/parser.mly" +# 2338 "parsing/parser.mly" ( (Optional _1, None, _2) ) -# 16609 "parsing/parser.ml" +# 16348 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16649,17 +16388,17 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _3 = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 16655 "parsing/parser.ml" +# 16394 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_, _endpos__2_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2290 "parsing/parser.mly" +# 2340 "parsing/parser.mly" ( (Labelled (fst _4), None, mkpat_local_if _3 (snd _4) _loc__3_) ) -# 16663 "parsing/parser.ml" +# 16402 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16710,17 +16449,17 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _3 = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 16716 "parsing/parser.ml" +# 16455 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2290 "parsing/parser.mly" +# 2340 "parsing/parser.mly" ( (Labelled (fst _4), None, mkpat_local_if _3 (snd _4) _loc__3_) ) -# 16724 "parsing/parser.ml" +# 16463 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16745,9 +16484,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 16751 "parsing/parser.ml" +# 16490 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -16760,24 +16499,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16766 "parsing/parser.ml" +# 16505 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2336 "parsing/parser.mly" +# 2386 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 16775 "parsing/parser.ml" +# 16514 "parsing/parser.ml" in -# 2293 "parsing/parser.mly" +# 2343 "parsing/parser.mly" ( (Labelled (fst _2), None, snd _2) ) -# 16781 "parsing/parser.ml" +# 16520 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16803,17 +16542,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.pattern) = Obj.magic _2 in let _1 : ( -# 768 "parsing/parser.mly" +# 817 "parsing/parser.mly" (string) -# 16809 "parsing/parser.ml" +# 16548 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2295 "parsing/parser.mly" +# 2345 "parsing/parser.mly" ( (Labelled _1, None, _2) ) -# 16817 "parsing/parser.ml" +# 16556 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16860,18 +16599,18 @@ module Tables = struct let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 768 "parsing/parser.mly" +# 817 "parsing/parser.mly" (string) -# 16866 "parsing/parser.ml" +# 16605 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2297 "parsing/parser.mly" +# 2347 "parsing/parser.mly" ( (Labelled _1, None, mkpat_stack _4 (make_loc _loc__3_)) ) -# 16875 "parsing/parser.ml" +# 16614 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16894,9 +16633,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2299 "parsing/parser.mly" +# 2349 "parsing/parser.mly" ( (Nolabel, None, _1) ) -# 16900 "parsing/parser.ml" +# 16639 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16941,9 +16680,9 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _loc__2_ = (_startpos__2_, _endpos__2_) in -# 2301 "parsing/parser.mly" +# 2351 "parsing/parser.mly" ( (Nolabel, None, mkpat_stack _3 (make_loc _loc__2_)) ) -# 16947 "parsing/parser.ml" +# 16686 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17011,9 +16750,9 @@ module Tables = struct let pat : (Parsetree.pattern) = Obj.magic pat in let _2 : unit = Obj.magic _2 in let _1 : ( -# 768 "parsing/parser.mly" +# 817 "parsing/parser.mly" (string) -# 17017 "parsing/parser.ml" +# 16756 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -17028,24 +16767,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17032 "parsing/parser.ml" +# 16771 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 17037 "parsing/parser.ml" +# 16776 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 17043 "parsing/parser.ml" +# 16782 "parsing/parser.ml" in -# 2352 "parsing/parser.mly" +# 2402 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 17049 "parsing/parser.ml" +# 16788 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_xs_) in @@ -17053,15 +16792,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 17059 "parsing/parser.ml" +# 16798 "parsing/parser.ml" in -# 2353 "parsing/parser.mly" +# 2403 "parsing/parser.mly" ( Ppat_constraint(pat, cty) ) -# 17065 "parsing/parser.ml" +# 16804 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_pat_) in @@ -17069,21 +16808,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 17075 "parsing/parser.ml" +# 16814 "parsing/parser.ml" in -# 2354 "parsing/parser.mly" +# 2404 "parsing/parser.mly" ( _1 ) -# 17081 "parsing/parser.ml" +# 16820 "parsing/parser.ml" in -# 2303 "parsing/parser.mly" +# 2353 "parsing/parser.mly" ( (Labelled _1, None, _3) ) -# 17087 "parsing/parser.ml" +# 16826 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17158,9 +16897,9 @@ module Tables = struct let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 768 "parsing/parser.mly" +# 817 "parsing/parser.mly" (string) -# 17164 "parsing/parser.ml" +# 16903 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -17175,24 +16914,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17179 "parsing/parser.ml" +# 16918 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 17184 "parsing/parser.ml" +# 16923 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 17190 "parsing/parser.ml" +# 16929 "parsing/parser.ml" in -# 2352 "parsing/parser.mly" +# 2402 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 17196 "parsing/parser.ml" +# 16935 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_xs_) in @@ -17200,15 +16939,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 17206 "parsing/parser.ml" +# 16945 "parsing/parser.ml" in -# 2353 "parsing/parser.mly" +# 2403 "parsing/parser.mly" ( Ppat_constraint(pat, cty) ) -# 17212 "parsing/parser.ml" +# 16951 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_pat_) in @@ -17216,22 +16955,22 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 17222 "parsing/parser.ml" +# 16961 "parsing/parser.ml" in -# 2354 "parsing/parser.mly" +# 2404 "parsing/parser.mly" ( _1 ) -# 17228 "parsing/parser.ml" +# 16967 "parsing/parser.ml" in let _loc__2_ = (_startpos__2_, _endpos__2_) in -# 2305 "parsing/parser.mly" +# 2355 "parsing/parser.mly" ( (Labelled _1, None, mkpat_stack _4 (make_loc _loc__2_)) ) -# 17235 "parsing/parser.ml" +# 16974 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17305,24 +17044,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17309 "parsing/parser.ml" +# 17048 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 17314 "parsing/parser.ml" +# 17053 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 17320 "parsing/parser.ml" +# 17059 "parsing/parser.ml" in -# 2352 "parsing/parser.mly" +# 2402 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 17326 "parsing/parser.ml" +# 17065 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_xs_) in @@ -17330,15 +17069,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 17336 "parsing/parser.ml" +# 17075 "parsing/parser.ml" in -# 2353 "parsing/parser.mly" +# 2403 "parsing/parser.mly" ( Ppat_constraint(pat, cty) ) -# 17342 "parsing/parser.ml" +# 17081 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_pat_) in @@ -17346,21 +17085,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 17352 "parsing/parser.ml" +# 17091 "parsing/parser.ml" in -# 2354 "parsing/parser.mly" +# 2404 "parsing/parser.mly" ( _1 ) -# 17358 "parsing/parser.ml" +# 17097 "parsing/parser.ml" in -# 2307 "parsing/parser.mly" +# 2357 "parsing/parser.mly" ( (Nolabel, None, _2) ) -# 17364 "parsing/parser.ml" +# 17103 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17383,9 +17122,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern * Parsetree.expression * bool) = -# 2698 "parsing/parser.mly" +# 2797 "parsing/parser.mly" ( let p,e = _1 in (p,e,false) ) -# 17389 "parsing/parser.ml" +# 17128 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17411,9 +17150,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 2701 "parsing/parser.mly" +# 2800 "parsing/parser.mly" ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1, true) ) -# 17417 "parsing/parser.ml" +# 17156 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17447,15 +17186,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2646 "parsing/parser.mly" +# 2745 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 17453 "parsing/parser.ml" +# 17192 "parsing/parser.ml" in -# 2650 "parsing/parser.mly" +# 2749 "parsing/parser.mly" ( (_1, _2) ) -# 17459 "parsing/parser.ml" +# 17198 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17503,16 +17242,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2646 "parsing/parser.mly" +# 2745 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 17509 "parsing/parser.ml" +# 17248 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_ in let _1 = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 17516 "parsing/parser.ml" +# 17255 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__5_ in @@ -17523,7 +17262,7 @@ module Tables = struct let _loc__1_ = (_startpos__1_, _endpos__1_) in let _sloc = (_symbolstartpos, _endpos) in -# 2652 "parsing/parser.mly" +# 2751 "parsing/parser.mly" ( let v = _2 in (* PR#7344 *) let t = match _3 with @@ -17545,7 +17284,7 @@ module Tables = struct local_loc) in (pat, exp) ) -# 17549 "parsing/parser.ml" +# 17288 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17601,16 +17340,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2646 "parsing/parser.mly" +# 2745 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 17607 "parsing/parser.ml" +# 17346 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_inlined1_ in let _1 = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 17614 "parsing/parser.ml" +# 17353 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -17620,7 +17359,7 @@ module Tables = struct let _loc__1_ = (_startpos__1_, _endpos__1_) in let _sloc = (_symbolstartpos, _endpos) in -# 2652 "parsing/parser.mly" +# 2751 "parsing/parser.mly" ( let v = _2 in (* PR#7344 *) let t = match _3 with @@ -17642,7 +17381,7 @@ module Tables = struct local_loc) in (pat, exp) ) -# 17646 "parsing/parser.ml" +# 17385 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17713,24 +17452,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17717 "parsing/parser.ml" +# 17456 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 17722 "parsing/parser.ml" +# 17461 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 17728 "parsing/parser.ml" +# 17467 "parsing/parser.ml" in -# 3463 "parsing/parser.mly" +# 3566 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 17734 "parsing/parser.ml" +# 17473 "parsing/parser.ml" in let (_endpos__4_, _startpos__4_) = (_endpos__3_inlined1_, _startpos_xs_) in @@ -17739,16 +17478,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2646 "parsing/parser.mly" +# 2745 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 17745 "parsing/parser.ml" +# 17484 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_ in let _1 = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 17752 "parsing/parser.ml" +# 17491 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__6_ in @@ -17760,7 +17499,7 @@ module Tables = struct let _loc__1_ = (_startpos__1_, _endpos__1_) in let _sloc = (_symbolstartpos, _endpos) in -# 2674 "parsing/parser.mly" +# 2773 "parsing/parser.mly" ( let patloc = (_startpos__2_, _endpos__4_) in let pat = mkpat_local_if _1 @@ -17770,7 +17509,7 @@ module Tables = struct in let exp = mkexp_local_if _1 ~loc:_sloc ~kwd_loc:(_loc__1_) _6 in (pat, exp) ) -# 17774 "parsing/parser.ml" +# 17513 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17848,24 +17587,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17852 "parsing/parser.ml" +# 17591 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 17857 "parsing/parser.ml" +# 17596 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 17863 "parsing/parser.ml" +# 17602 "parsing/parser.ml" in -# 3463 "parsing/parser.mly" +# 3566 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 17869 "parsing/parser.ml" +# 17608 "parsing/parser.ml" in let (_endpos__4_, _startpos__4_) = (_endpos__3_inlined1_, _startpos_xs_) in @@ -17875,16 +17614,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2646 "parsing/parser.mly" +# 2745 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 17881 "parsing/parser.ml" +# 17620 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_inlined1_ in let _1 = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 17888 "parsing/parser.ml" +# 17627 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -17895,7 +17634,7 @@ module Tables = struct let _loc__1_ = (_startpos__1_, _endpos__1_) in let _sloc = (_symbolstartpos, _endpos) in -# 2674 "parsing/parser.mly" +# 2773 "parsing/parser.mly" ( let patloc = (_startpos__2_, _endpos__4_) in let pat = mkpat_local_if _1 @@ -17905,7 +17644,7 @@ module Tables = struct in let exp = mkexp_local_if _1 ~loc:_sloc ~kwd_loc:(_loc__1_) _6 in (pat, exp) ) -# 17909 "parsing/parser.ml" +# 17648 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17977,30 +17716,30 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__8_ in let _v : (Parsetree.pattern * Parsetree.expression) = let _4 = -# 2643 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( xs ) -# 17983 "parsing/parser.ml" +# 17722 "parsing/parser.ml" in let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2646 "parsing/parser.mly" +# 2745 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 17992 "parsing/parser.ml" +# 17731 "parsing/parser.ml" in let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2684 "parsing/parser.mly" +# 2783 "parsing/parser.mly" ( let exp, poly = wrap_type_annotation ~loc:_sloc _4 _6 _8 in let loc = (_startpos__1_, _endpos__6_) in (ghpat ~loc (Ppat_constraint(_1, poly)), exp) ) -# 18004 "parsing/parser.ml" +# 17743 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18037,9 +17776,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2689 "parsing/parser.mly" +# 2788 "parsing/parser.mly" ( (_1, _3) ) -# 18043 "parsing/parser.ml" +# 17782 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18090,10 +17829,10 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2691 "parsing/parser.mly" +# 2790 "parsing/parser.mly" ( let loc = (_startpos__1_, _endpos__3_) in (ghpat ~loc (Ppat_constraint(_1, _3)), _5) ) -# 18097 "parsing/parser.ml" +# 17836 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18135,9 +17874,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2646 "parsing/parser.mly" +# 2745 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 18141 "parsing/parser.ml" +# 17880 "parsing/parser.ml" in let _endpos = _endpos__3_ in @@ -18145,9 +17884,9 @@ module Tables = struct let _loc__1_ = (_startpos__1_, _endpos__1_) in let _sloc = (_symbolstartpos, _endpos) in -# 2694 "parsing/parser.mly" +# 2793 "parsing/parser.mly" ( (_2, mkexp_stack ~loc:_sloc ~kwd_loc:(_loc__1_) _3) ) -# 18151 "parsing/parser.ml" +# 17890 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18208,36 +17947,36 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 18214 "parsing/parser.ml" +# 17953 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 18223 "parsing/parser.ml" +# 17962 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2721 "parsing/parser.mly" +# 2820 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 18235 "parsing/parser.ml" +# 17974 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2810 "parsing/parser.mly" ( _1 ) -# 18241 "parsing/parser.ml" +# 17980 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18267,9 +18006,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (let_bindings) = -# 2712 "parsing/parser.mly" +# 2811 "parsing/parser.mly" ( addlb _1 _2 ) -# 18273 "parsing/parser.ml" +# 18012 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18323,41 +18062,41 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 18329 "parsing/parser.ml" +# 18068 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 18338 "parsing/parser.ml" +# 18077 "parsing/parser.ml" in let ext = -# 4099 "parsing/parser.mly" +# 4202 "parsing/parser.mly" ( None ) -# 18344 "parsing/parser.ml" +# 18083 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2721 "parsing/parser.mly" +# 2820 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 18355 "parsing/parser.ml" +# 18094 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2810 "parsing/parser.mly" ( _1 ) -# 18361 "parsing/parser.ml" +# 18100 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18425,18 +18164,18 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 18431 "parsing/parser.ml" +# 18170 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let attrs1 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 18440 "parsing/parser.ml" +# 18179 "parsing/parser.ml" in let ext = @@ -18445,27 +18184,27 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 4101 "parsing/parser.mly" +# 4204 "parsing/parser.mly" ( not_expecting _loc "extension" ) -# 18451 "parsing/parser.ml" +# 18190 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2721 "parsing/parser.mly" +# 2820 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 18463 "parsing/parser.ml" +# 18202 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2810 "parsing/parser.mly" ( _1 ) -# 18469 "parsing/parser.ml" +# 18208 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18495,9 +18234,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (let_bindings) = -# 2712 "parsing/parser.mly" +# 2811 "parsing/parser.mly" ( addlb _1 _2 ) -# 18501 "parsing/parser.ml" +# 18240 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18520,9 +18259,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2340 "parsing/parser.mly" +# 2390 "parsing/parser.mly" ( _1 ) -# 18526 "parsing/parser.ml" +# 18265 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18560,24 +18299,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2342 "parsing/parser.mly" +# 2392 "parsing/parser.mly" ( Ppat_constraint(_1, _3) ) -# 18566 "parsing/parser.ml" +# 18305 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 18575 "parsing/parser.ml" +# 18314 "parsing/parser.ml" in -# 2343 "parsing/parser.mly" +# 2393 "parsing/parser.mly" ( _1 ) -# 18581 "parsing/parser.ml" +# 18320 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18637,24 +18376,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 18641 "parsing/parser.ml" +# 18380 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 18646 "parsing/parser.ml" +# 18385 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 18652 "parsing/parser.ml" +# 18391 "parsing/parser.ml" in -# 2352 "parsing/parser.mly" +# 2402 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 18658 "parsing/parser.ml" +# 18397 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_xs_) in @@ -18662,15 +18401,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 18668 "parsing/parser.ml" +# 18407 "parsing/parser.ml" in -# 2353 "parsing/parser.mly" +# 2403 "parsing/parser.mly" ( Ppat_constraint(pat, cty) ) -# 18674 "parsing/parser.ml" +# 18413 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ty_, _startpos_pat_) in @@ -18678,21 +18417,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 18684 "parsing/parser.ml" +# 18423 "parsing/parser.ml" in -# 2354 "parsing/parser.mly" +# 2404 "parsing/parser.mly" ( _1 ) -# 18690 "parsing/parser.ml" +# 18429 "parsing/parser.ml" in -# 2345 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1 ) -# 18696 "parsing/parser.ml" +# 18435 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18726,15 +18465,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2646 "parsing/parser.mly" +# 2745 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 18732 "parsing/parser.ml" +# 18471 "parsing/parser.ml" in -# 2738 "parsing/parser.mly" +# 2837 "parsing/parser.mly" ( (pat, exp) ) -# 18738 "parsing/parser.ml" +# 18477 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18760,9 +18499,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 2741 "parsing/parser.mly" +# 2840 "parsing/parser.mly" ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1) ) -# 18766 "parsing/parser.ml" +# 18505 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18813,10 +18552,10 @@ module Tables = struct let _startpos = _startpos_pat_ in let _endpos = _endpos_exp_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2743 "parsing/parser.mly" +# 2842 "parsing/parser.mly" ( let loc = (_startpos_pat_, _endpos_typ_) in (ghpat ~loc (Ppat_constraint(pat, typ)), exp) ) -# 18820 "parsing/parser.ml" +# 18559 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18853,9 +18592,9 @@ module Tables = struct let _startpos = _startpos_pat_ in let _endpos = _endpos_exp_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2746 "parsing/parser.mly" +# 2845 "parsing/parser.mly" ( (pat, exp) ) -# 18859 "parsing/parser.ml" +# 18598 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18878,10 +18617,10 @@ module Tables = struct let _startpos = _startpos_body_ in let _endpos = _endpos_body_ in let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = -# 2750 "parsing/parser.mly" +# 2849 "parsing/parser.mly" ( let let_pat, let_exp = body in let_pat, let_exp, [] ) -# 18885 "parsing/parser.ml" +# 18624 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18913,9 +18652,9 @@ module Tables = struct } = _menhir_stack in let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in let _1 : ( -# 764 "parsing/parser.mly" +# 813 "parsing/parser.mly" (string) -# 18919 "parsing/parser.ml" +# 18658 "parsing/parser.ml" ) = Obj.magic _1 in let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -18926,22 +18665,22 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18932 "parsing/parser.ml" +# 18671 "parsing/parser.ml" in let _endpos = _endpos_body_ in let _symbolstartpos = _startpos_bindings_ in let _sloc = (_symbolstartpos, _endpos) in -# 2753 "parsing/parser.mly" +# 2852 "parsing/parser.mly" ( let let_pat, let_exp, rev_ands = bindings in let pbop_pat, pbop_exp = body in let pbop_loc = make_loc _sloc in let and_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in let_pat, let_exp, and_ :: rev_ands ) -# 18945 "parsing/parser.ml" +# 18684 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18959,7 +18698,7 @@ module Tables = struct let _v : (Parsetree.class_declaration list) = # 211 "" ( [] ) -# 18963 "parsing/parser.ml" +# 18702 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19023,9 +18762,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in let body : (Parsetree.class_expr) = Obj.magic body in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 19029 "parsing/parser.ml" +# 18768 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -19038,9 +18777,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 19044 "parsing/parser.ml" +# 18783 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -19050,24 +18789,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19056 "parsing/parser.ml" +# 18795 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 19064 "parsing/parser.ml" +# 18803 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1928 "parsing/parser.mly" +# 1978 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -19075,13 +18814,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id body ~virt ~params ~attrs ~loc ~text ~docs ) -# 19079 "parsing/parser.ml" +# 18818 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 19085 "parsing/parser.ml" +# 18824 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19099,7 +18838,7 @@ module Tables = struct let _v : (Parsetree.class_description list) = # 211 "" ( [] ) -# 19103 "parsing/parser.ml" +# 18842 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19170,9 +18909,9 @@ module Tables = struct let cty : (Parsetree.class_type) = Obj.magic cty in let _6 : unit = Obj.magic _6 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 19176 "parsing/parser.ml" +# 18915 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -19185,9 +18924,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 19191 "parsing/parser.ml" +# 18930 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -19197,24 +18936,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19203 "parsing/parser.ml" +# 18942 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 19211 "parsing/parser.ml" +# 18950 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2219 "parsing/parser.mly" +# 2269 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -19222,13 +18961,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id cty ~virt ~params ~attrs ~loc ~text ~docs ) -# 19226 "parsing/parser.ml" +# 18965 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 19232 "parsing/parser.ml" +# 18971 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19246,7 +18985,7 @@ module Tables = struct let _v : (Parsetree.class_type_declaration list) = # 211 "" ( [] ) -# 19250 "parsing/parser.ml" +# 18989 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19317,9 +19056,9 @@ module Tables = struct let csig : (Parsetree.class_type) = Obj.magic csig in let _6 : unit = Obj.magic _6 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 19323 "parsing/parser.ml" +# 19062 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -19332,9 +19071,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 19338 "parsing/parser.ml" +# 19077 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -19344,24 +19083,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19350 "parsing/parser.ml" +# 19089 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 19358 "parsing/parser.ml" +# 19097 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2258 "parsing/parser.mly" +# 2308 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -19369,13 +19108,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id csig ~virt ~params ~attrs ~loc ~text ~docs ) -# 19373 "parsing/parser.ml" +# 19112 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 19379 "parsing/parser.ml" +# 19118 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19393,7 +19132,7 @@ module Tables = struct let _v : (Parsetree.module_binding list) = # 211 "" ( [] ) -# 19397 "parsing/parser.ml" +# 19136 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19454,9 +19193,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 19460 "parsing/parser.ml" +# 19199 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -19466,24 +19205,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19472 "parsing/parser.ml" +# 19211 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 19480 "parsing/parser.ml" +# 19219 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1583 "parsing/parser.mly" +# 1633 "parsing/parser.mly" ( let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in @@ -19491,13 +19230,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Mb.mk name body ~attrs ~loc ~text ~docs ) -# 19495 "parsing/parser.ml" +# 19234 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 19501 "parsing/parser.ml" +# 19240 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19515,7 +19254,7 @@ module Tables = struct let _v : (Parsetree.module_declaration list) = # 211 "" ( [] ) -# 19519 "parsing/parser.ml" +# 19258 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19583,9 +19322,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 19589 "parsing/parser.ml" +# 19328 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -19595,24 +19334,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19601 "parsing/parser.ml" +# 19340 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 19609 "parsing/parser.ml" +# 19348 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1869 "parsing/parser.mly" +# 1919 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let docs = symbol_docs _sloc in @@ -19620,13 +19359,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Md.mk name mty ~attrs ~loc ~text ~docs ) -# 19624 "parsing/parser.ml" +# 19363 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 19630 "parsing/parser.ml" +# 19369 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19644,7 +19383,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 211 "" ( [] ) -# 19648 "parsing/parser.ml" +# 19387 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19676,7 +19415,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 213 "" ( x :: xs ) -# 19680 "parsing/parser.ml" +# 19419 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19694,7 +19433,7 @@ module Tables = struct let _v : (Parsetree.type_declaration list) = # 211 "" ( [] ) -# 19698 "parsing/parser.ml" +# 19437 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19759,9 +19498,9 @@ module Tables = struct let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs_inlined1 in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 19765 "parsing/parser.ml" +# 19504 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -19774,9 +19513,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 19780 "parsing/parser.ml" +# 19519 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -19785,18 +19524,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 19789 "parsing/parser.ml" +# 19528 "parsing/parser.ml" in -# 1051 "parsing/parser.mly" +# 1101 "parsing/parser.mly" ( xs ) -# 19794 "parsing/parser.ml" +# 19533 "parsing/parser.ml" in -# 3163 "parsing/parser.mly" +# 3266 "parsing/parser.mly" ( _1 ) -# 19800 "parsing/parser.ml" +# 19539 "parsing/parser.ml" in let id = @@ -19805,24 +19544,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19811 "parsing/parser.ml" +# 19550 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 19819 "parsing/parser.ml" +# 19558 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3152 "parsing/parser.mly" +# 3255 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -19831,13 +19570,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text ) -# 19835 "parsing/parser.ml" +# 19574 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 19841 "parsing/parser.ml" +# 19580 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19855,7 +19594,7 @@ module Tables = struct let _v : (Parsetree.type_declaration list) = # 211 "" ( [] ) -# 19859 "parsing/parser.ml" +# 19598 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19927,9 +19666,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 19933 "parsing/parser.ml" +# 19672 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -19942,9 +19681,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 19948 "parsing/parser.ml" +# 19687 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -19953,24 +19692,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 19957 "parsing/parser.ml" +# 19696 "parsing/parser.ml" in -# 1051 "parsing/parser.mly" +# 1101 "parsing/parser.mly" ( xs ) -# 19962 "parsing/parser.ml" +# 19701 "parsing/parser.ml" in -# 3163 "parsing/parser.mly" +# 3266 "parsing/parser.mly" ( _1 ) -# 19968 "parsing/parser.ml" +# 19707 "parsing/parser.ml" in let kind_priv_manifest = -# 3198 "parsing/parser.mly" +# 3301 "parsing/parser.mly" ( _2 ) -# 19974 "parsing/parser.ml" +# 19713 "parsing/parser.ml" in let id = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -19978,24 +19717,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19984 "parsing/parser.ml" +# 19723 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 19992 "parsing/parser.ml" +# 19731 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3152 "parsing/parser.mly" +# 3255 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -20004,13 +19743,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text ) -# 20008 "parsing/parser.ml" +# 19747 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20014 "parsing/parser.ml" +# 19753 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20028,7 +19767,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 211 "" ( [] ) -# 20032 "parsing/parser.ml" +# 19771 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20060,7 +19799,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 213 "" ( x :: xs ) -# 20064 "parsing/parser.ml" +# 19803 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20078,7 +19817,7 @@ module Tables = struct let _v : (Parsetree.signature_item list list) = # 211 "" ( [] ) -# 20082 "parsing/parser.ml" +# 19821 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20111,21 +19850,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 977 "parsing/parser.mly" +# 1027 "parsing/parser.mly" ( text_sig _startpos ) -# 20117 "parsing/parser.ml" +# 19856 "parsing/parser.ml" in -# 1728 "parsing/parser.mly" +# 1778 "parsing/parser.mly" ( _1 ) -# 20123 "parsing/parser.ml" +# 19862 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20129 "parsing/parser.ml" +# 19868 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20158,21 +19897,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 975 "parsing/parser.mly" +# 1025 "parsing/parser.mly" ( text_sig _startpos @ [_1] ) -# 20164 "parsing/parser.ml" +# 19903 "parsing/parser.ml" in -# 1728 "parsing/parser.mly" +# 1778 "parsing/parser.mly" ( _1 ) -# 20170 "parsing/parser.ml" +# 19909 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20176 "parsing/parser.ml" +# 19915 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20190,7 +19929,7 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = # 211 "" ( [] ) -# 20194 "parsing/parser.ml" +# 19933 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20223,40 +19962,40 @@ module Tables = struct let _1 = let ys = let items = -# 1037 "parsing/parser.mly" +# 1087 "parsing/parser.mly" ( [] ) -# 20229 "parsing/parser.ml" +# 19968 "parsing/parser.ml" in -# 1466 "parsing/parser.mly" +# 1516 "parsing/parser.mly" ( items ) -# 20234 "parsing/parser.ml" +# 19973 "parsing/parser.ml" in let xs = let _startpos = _startpos__1_ in -# 973 "parsing/parser.mly" +# 1023 "parsing/parser.mly" ( text_str _startpos ) -# 20242 "parsing/parser.ml" +# 19981 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 20248 "parsing/parser.ml" +# 19987 "parsing/parser.ml" in -# 1482 "parsing/parser.mly" +# 1532 "parsing/parser.mly" ( _1 ) -# 20254 "parsing/parser.ml" +# 19993 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20260 "parsing/parser.ml" +# 19999 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20308,70 +20047,70 @@ module Tables = struct let _1 = let _1 = let attrs = -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 20314 "parsing/parser.ml" +# 20053 "parsing/parser.ml" in -# 1473 "parsing/parser.mly" +# 1523 "parsing/parser.mly" ( mkstrexp e attrs ) -# 20319 "parsing/parser.ml" +# 20058 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 971 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 20327 "parsing/parser.ml" +# 20066 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 990 "parsing/parser.mly" +# 1040 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 20337 "parsing/parser.ml" +# 20076 "parsing/parser.ml" in -# 1039 "parsing/parser.mly" +# 1089 "parsing/parser.mly" ( x ) -# 20343 "parsing/parser.ml" +# 20082 "parsing/parser.ml" in -# 1466 "parsing/parser.mly" +# 1516 "parsing/parser.mly" ( items ) -# 20349 "parsing/parser.ml" +# 20088 "parsing/parser.ml" in let xs = let _startpos = _startpos__1_ in -# 973 "parsing/parser.mly" +# 1023 "parsing/parser.mly" ( text_str _startpos ) -# 20357 "parsing/parser.ml" +# 20096 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 20363 "parsing/parser.ml" +# 20102 "parsing/parser.ml" in -# 1482 "parsing/parser.mly" +# 1532 "parsing/parser.mly" ( _1 ) -# 20369 "parsing/parser.ml" +# 20108 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20375 "parsing/parser.ml" +# 20114 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20404,21 +20143,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 971 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 20410 "parsing/parser.ml" +# 20149 "parsing/parser.ml" in -# 1482 "parsing/parser.mly" +# 1532 "parsing/parser.mly" ( _1 ) -# 20416 "parsing/parser.ml" +# 20155 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20422 "parsing/parser.ml" +# 20161 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20436,7 +20175,7 @@ module Tables = struct let _v : (Parsetree.class_type_field list list) = # 211 "" ( [] ) -# 20440 "parsing/parser.ml" +# 20179 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20468,15 +20207,15 @@ module Tables = struct let _v : (Parsetree.class_type_field list list) = let x = let _startpos = _startpos__1_ in -# 985 "parsing/parser.mly" +# 1035 "parsing/parser.mly" ( text_csig _startpos @ [_1] ) -# 20474 "parsing/parser.ml" +# 20213 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20480 "parsing/parser.ml" +# 20219 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20494,7 +20233,7 @@ module Tables = struct let _v : (Parsetree.class_field list list) = # 211 "" ( [] ) -# 20498 "parsing/parser.ml" +# 20237 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20526,15 +20265,15 @@ module Tables = struct let _v : (Parsetree.class_field list list) = let x = let _startpos = _startpos__1_ in -# 983 "parsing/parser.mly" +# 1033 "parsing/parser.mly" ( text_cstr _startpos @ [_1] ) -# 20532 "parsing/parser.ml" +# 20271 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20538 "parsing/parser.ml" +# 20277 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20552,7 +20291,7 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = # 211 "" ( [] ) -# 20556 "parsing/parser.ml" +# 20295 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20584,15 +20323,15 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = let x = let _startpos = _startpos__1_ in -# 971 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 20590 "parsing/parser.ml" +# 20329 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20596 "parsing/parser.ml" +# 20335 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20610,7 +20349,7 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase list list) = # 211 "" ( [] ) -# 20614 "parsing/parser.ml" +# 20353 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20643,32 +20382,32 @@ module Tables = struct let _1 = let x = let _1 = -# 1037 "parsing/parser.mly" +# 1087 "parsing/parser.mly" ( [] ) -# 20649 "parsing/parser.ml" +# 20388 "parsing/parser.ml" in -# 1269 "parsing/parser.mly" +# 1319 "parsing/parser.mly" ( _1 ) -# 20654 "parsing/parser.ml" +# 20393 "parsing/parser.ml" in # 183 "" ( x ) -# 20660 "parsing/parser.ml" +# 20399 "parsing/parser.ml" in -# 1281 "parsing/parser.mly" +# 1331 "parsing/parser.mly" ( _1 ) -# 20666 "parsing/parser.ml" +# 20405 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20672 "parsing/parser.ml" +# 20411 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20720,58 +20459,58 @@ module Tables = struct let _1 = let _1 = let attrs = -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 20726 "parsing/parser.ml" +# 20465 "parsing/parser.ml" in -# 1473 "parsing/parser.mly" +# 1523 "parsing/parser.mly" ( mkstrexp e attrs ) -# 20731 "parsing/parser.ml" +# 20470 "parsing/parser.ml" in -# 981 "parsing/parser.mly" +# 1031 "parsing/parser.mly" ( Ptop_def [_1] ) -# 20737 "parsing/parser.ml" +# 20476 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 979 "parsing/parser.mly" +# 1029 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 20745 "parsing/parser.ml" +# 20484 "parsing/parser.ml" in -# 1039 "parsing/parser.mly" +# 1089 "parsing/parser.mly" ( x ) -# 20751 "parsing/parser.ml" +# 20490 "parsing/parser.ml" in -# 1269 "parsing/parser.mly" +# 1319 "parsing/parser.mly" ( _1 ) -# 20757 "parsing/parser.ml" +# 20496 "parsing/parser.ml" in # 183 "" ( x ) -# 20763 "parsing/parser.ml" +# 20502 "parsing/parser.ml" in -# 1281 "parsing/parser.mly" +# 1331 "parsing/parser.mly" ( _1 ) -# 20769 "parsing/parser.ml" +# 20508 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20775 "parsing/parser.ml" +# 20514 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20803,27 +20542,27 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase list list) = let x = let _1 = let _1 = -# 981 "parsing/parser.mly" +# 1031 "parsing/parser.mly" ( Ptop_def [_1] ) -# 20809 "parsing/parser.ml" +# 20548 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 979 "parsing/parser.mly" +# 1029 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 20815 "parsing/parser.ml" +# 20554 "parsing/parser.ml" in -# 1281 "parsing/parser.mly" +# 1331 "parsing/parser.mly" ( _1 ) -# 20821 "parsing/parser.ml" +# 20560 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20827 "parsing/parser.ml" +# 20566 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20858,29 +20597,29 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 990 "parsing/parser.mly" +# 1040 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 20865 "parsing/parser.ml" +# 20604 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 979 "parsing/parser.mly" +# 1029 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 20872 "parsing/parser.ml" +# 20611 "parsing/parser.ml" in -# 1281 "parsing/parser.mly" +# 1331 "parsing/parser.mly" ( _1 ) -# 20878 "parsing/parser.ml" +# 20617 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 20884 "parsing/parser.ml" +# 20623 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20919,7 +20658,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.pattern) list * unit option) = let _2 = # 124 "" ( None ) -# 20923 "parsing/parser.ml" +# 20662 "parsing/parser.ml" in let x = let label = @@ -20927,9 +20666,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 20933 "parsing/parser.ml" +# 20672 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -20937,7 +20676,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 3038 "parsing/parser.mly" +# 3141 "parsing/parser.mly" ( let constraint_loc, label, pat = match opat with | None -> @@ -20951,13 +20690,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 20955 "parsing/parser.ml" +# 20694 "parsing/parser.ml" in -# 1206 "parsing/parser.mly" +# 1256 "parsing/parser.mly" ( [x], None ) -# 20961 "parsing/parser.ml" +# 20700 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21003,7 +20742,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.pattern) list * unit option) = let _2 = # 126 "" ( Some x ) -# 21007 "parsing/parser.ml" +# 20746 "parsing/parser.ml" in let x = let label = @@ -21011,9 +20750,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21017 "parsing/parser.ml" +# 20756 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -21021,7 +20760,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 3038 "parsing/parser.mly" +# 3141 "parsing/parser.mly" ( let constraint_loc, label, pat = match opat with | None -> @@ -21035,13 +20774,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 21039 "parsing/parser.ml" +# 20778 "parsing/parser.ml" in -# 1206 "parsing/parser.mly" +# 1256 "parsing/parser.mly" ( [x], None ) -# 21045 "parsing/parser.ml" +# 20784 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21104,9 +20843,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21110 "parsing/parser.ml" +# 20849 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -21114,7 +20853,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 3038 "parsing/parser.mly" +# 3141 "parsing/parser.mly" ( let constraint_loc, label, pat = match opat with | None -> @@ -21128,13 +20867,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 21132 "parsing/parser.ml" +# 20871 "parsing/parser.ml" in -# 1208 "parsing/parser.mly" +# 1258 "parsing/parser.mly" ( [x], Some y ) -# 21138 "parsing/parser.ml" +# 20877 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21190,9 +20929,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21196 "parsing/parser.ml" +# 20935 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -21200,7 +20939,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 3038 "parsing/parser.mly" +# 3141 "parsing/parser.mly" ( let constraint_loc, label, pat = match opat with | None -> @@ -21214,14 +20953,14 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 21218 "parsing/parser.ml" +# 20957 "parsing/parser.ml" in -# 1212 "parsing/parser.mly" +# 1262 "parsing/parser.mly" ( let xs, y = tail in x :: xs, y ) -# 21225 "parsing/parser.ml" +# 20964 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21244,9 +20983,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = -# 2775 "parsing/parser.mly" +# 2874 "parsing/parser.mly" ( _1 ) -# 21250 "parsing/parser.ml" +# 20989 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21286,9 +21025,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2777 "parsing/parser.mly" +# 2876 "parsing/parser.mly" ( wrap_exp_stack (mkexp_constraint ~loc:_sloc _3 _1) (make_loc _sloc) ) -# 21292 "parsing/parser.ml" +# 21031 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21318,9 +21057,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2781 "parsing/parser.mly" +# 2880 "parsing/parser.mly" ( _2 ) -# 21324 "parsing/parser.ml" +# 21063 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21353,9 +21092,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2783 "parsing/parser.mly" +# 2882 "parsing/parser.mly" ( let (l, o, p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) ) -# 21359 "parsing/parser.ml" +# 21098 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21406,17 +21145,17 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _3 = -# 2643 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( xs ) -# 21412 "parsing/parser.ml" +# 21151 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2785 "parsing/parser.mly" +# 2884 "parsing/parser.mly" ( mk_newtypes ~loc:_sloc _3 _5 ) -# 21420 "parsing/parser.ml" +# 21159 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21453,9 +21192,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.case) = -# 2793 "parsing/parser.mly" +# 2892 "parsing/parser.mly" ( Exp.case _1 _3 ) -# 21459 "parsing/parser.ml" +# 21198 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21506,9 +21245,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.case) = -# 2795 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( Exp.case _1 ~guard:_3 _5 ) -# 21512 "parsing/parser.ml" +# 21251 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21546,9 +21285,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.case) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2797 "parsing/parser.mly" +# 2896 "parsing/parser.mly" ( Exp.case _1 (Exp.unreachable ~loc:(make_loc _loc__3_) ()) ) -# 21552 "parsing/parser.ml" +# 21291 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21609,9 +21348,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 21615 "parsing/parser.ml" +# 21354 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -21620,49 +21359,49 @@ module Tables = struct let _6 = let _1 = _1_inlined3 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 21626 "parsing/parser.ml" +# 21365 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 21635 "parsing/parser.ml" +# 21374 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3477 "parsing/parser.mly" +# 3580 "parsing/parser.mly" ( _1 ) -# 21644 "parsing/parser.ml" +# 21383 "parsing/parser.ml" in let _1 = let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 21651 "parsing/parser.ml" +# 21390 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21659 "parsing/parser.ml" +# 21398 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3722 "parsing/parser.mly" +# 3825 "parsing/parser.mly" ( let info = match rhs_info _endpos__4_ with | Some _ as info_before_semi -> info_before_semi @@ -21670,13 +21409,13 @@ module Tables = struct in let attrs = add_info_attrs info (_4 @ _6) in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 21674 "parsing/parser.ml" +# 21413 "parsing/parser.ml" in -# 3703 "parsing/parser.mly" +# 3806 "parsing/parser.mly" ( let (f, c) = tail in (head :: f, c) ) -# 21680 "parsing/parser.ml" +# 21419 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21717,15 +21456,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3733 "parsing/parser.mly" +# 3836 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 21723 "parsing/parser.ml" +# 21462 "parsing/parser.ml" in -# 3703 "parsing/parser.mly" +# 3806 "parsing/parser.mly" ( let (f, c) = tail in (head :: f, c) ) -# 21729 "parsing/parser.ml" +# 21468 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21779,9 +21518,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 21785 "parsing/parser.ml" +# 21524 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -21790,49 +21529,49 @@ module Tables = struct let _6 = let _1 = _1_inlined3 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 21796 "parsing/parser.ml" +# 21535 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 21805 "parsing/parser.ml" +# 21544 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3477 "parsing/parser.mly" +# 3580 "parsing/parser.mly" ( _1 ) -# 21814 "parsing/parser.ml" +# 21553 "parsing/parser.ml" in let _1 = let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 21821 "parsing/parser.ml" +# 21560 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21829 "parsing/parser.ml" +# 21568 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3722 "parsing/parser.mly" +# 3825 "parsing/parser.mly" ( let info = match rhs_info _endpos__4_ with | Some _ as info_before_semi -> info_before_semi @@ -21840,13 +21579,13 @@ module Tables = struct in let attrs = add_info_attrs info (_4 @ _6) in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 21844 "parsing/parser.ml" +# 21583 "parsing/parser.ml" in -# 3706 "parsing/parser.mly" +# 3809 "parsing/parser.mly" ( [head], Closed ) -# 21850 "parsing/parser.ml" +# 21589 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21880,15 +21619,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3733 "parsing/parser.mly" +# 3836 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 21886 "parsing/parser.ml" +# 21625 "parsing/parser.ml" in -# 3706 "parsing/parser.mly" +# 3809 "parsing/parser.mly" ( [head], Closed ) -# 21892 "parsing/parser.ml" +# 21631 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21928,9 +21667,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 21934 "parsing/parser.ml" +# 21673 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -21939,50 +21678,50 @@ module Tables = struct let _4 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 21945 "parsing/parser.ml" +# 21684 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3477 "parsing/parser.mly" +# 3580 "parsing/parser.mly" ( _1 ) -# 21954 "parsing/parser.ml" +# 21693 "parsing/parser.ml" in let _1 = let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 21961 "parsing/parser.ml" +# 21700 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21969 "parsing/parser.ml" +# 21708 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3715 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _4 in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 21980 "parsing/parser.ml" +# 21719 "parsing/parser.ml" in -# 3709 "parsing/parser.mly" +# 3812 "parsing/parser.mly" ( [head], Closed ) -# 21986 "parsing/parser.ml" +# 21725 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22009,15 +21748,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3733 "parsing/parser.mly" +# 3836 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 22015 "parsing/parser.ml" +# 21754 "parsing/parser.ml" in -# 3709 "parsing/parser.mly" +# 3812 "parsing/parser.mly" ( [head], Closed ) -# 22021 "parsing/parser.ml" +# 21760 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22040,9 +21779,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.object_field list * Asttypes.closed_flag) = -# 3711 "parsing/parser.mly" +# 3814 "parsing/parser.mly" ( [], Open ) -# 22046 "parsing/parser.ml" +# 21785 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22087,9 +21826,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22093 "parsing/parser.ml" +# 21832 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let private_ : (Asttypes.private_flag) = Obj.magic private_ in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -22101,41 +21840,41 @@ module Tables = struct Parsetree.attributes) = let ty = let _1 = _1_inlined2 in -# 3473 "parsing/parser.mly" +# 3576 "parsing/parser.mly" ( _1 ) -# 22107 "parsing/parser.ml" +# 21846 "parsing/parser.ml" in let label = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 22115 "parsing/parser.ml" +# 21854 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22123 "parsing/parser.ml" +# 21862 "parsing/parser.ml" in let attrs = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 22129 "parsing/parser.ml" +# 21868 "parsing/parser.ml" in let _1 = -# 3989 "parsing/parser.mly" +# 4092 "parsing/parser.mly" ( Fresh ) -# 22134 "parsing/parser.ml" +# 21873 "parsing/parser.ml" in -# 2066 "parsing/parser.mly" +# 2116 "parsing/parser.mly" ( (label, private_, Cfk_virtual ty), attrs ) -# 22139 "parsing/parser.ml" +# 21878 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22173,9 +21912,9 @@ module Tables = struct } = _menhir_stack in let _5 : (Parsetree.expression) = Obj.magic _5 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22179 "parsing/parser.ml" +# 21918 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -22187,36 +21926,36 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 22193 "parsing/parser.ml" +# 21932 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22201 "parsing/parser.ml" +# 21940 "parsing/parser.ml" in let _2 = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 22207 "parsing/parser.ml" +# 21946 "parsing/parser.ml" in let _1 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 22212 "parsing/parser.ml" +# 21951 "parsing/parser.ml" in -# 2068 "parsing/parser.mly" +# 2118 "parsing/parser.mly" ( let e = _5 in let loc = Location.(e.pexp_loc.loc_start, e.pexp_loc.loc_end) in (_4, _3, Cfk_concrete (_1, ghexp ~loc (Pexp_poly (e, None)))), _2 ) -# 22220 "parsing/parser.ml" +# 21959 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22260,9 +21999,9 @@ module Tables = struct } = _menhir_stack in let _5 : (Parsetree.expression) = Obj.magic _5 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22266 "parsing/parser.ml" +# 22005 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -22275,39 +22014,39 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 22281 "parsing/parser.ml" +# 22020 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22289 "parsing/parser.ml" +# 22028 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 22297 "parsing/parser.ml" +# 22036 "parsing/parser.ml" in let _1 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 22303 "parsing/parser.ml" +# 22042 "parsing/parser.ml" in -# 2068 "parsing/parser.mly" +# 2118 "parsing/parser.mly" ( let e = _5 in let loc = Location.(e.pexp_loc.loc_start, e.pexp_loc.loc_end) in (_4, _3, Cfk_concrete (_1, ghexp ~loc (Pexp_poly (e, None)))), _2 ) -# 22311 "parsing/parser.ml" +# 22050 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22366,9 +22105,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22372 "parsing/parser.ml" +# 22111 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -22380,45 +22119,45 @@ module Tables = struct Parsetree.attributes) = let _6 = let _1 = _1_inlined2 in -# 3473 "parsing/parser.mly" +# 3576 "parsing/parser.mly" ( _1 ) -# 22386 "parsing/parser.ml" +# 22125 "parsing/parser.ml" in let _startpos__6_ = _startpos__1_inlined2_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 22395 "parsing/parser.ml" +# 22134 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22403 "parsing/parser.ml" +# 22142 "parsing/parser.ml" in let _2 = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 22409 "parsing/parser.ml" +# 22148 "parsing/parser.ml" in let _1 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 22414 "parsing/parser.ml" +# 22153 "parsing/parser.ml" in -# 2074 "parsing/parser.mly" +# 2124 "parsing/parser.mly" ( let poly_exp = let loc = (_startpos__6_, _endpos__8_) in ghexp ~loc (Pexp_poly(_8, Some _6)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 22422 "parsing/parser.ml" +# 22161 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22483,9 +22222,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22489 "parsing/parser.ml" +# 22228 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -22498,48 +22237,48 @@ module Tables = struct Parsetree.attributes) = let _6 = let _1 = _1_inlined3 in -# 3473 "parsing/parser.mly" +# 3576 "parsing/parser.mly" ( _1 ) -# 22504 "parsing/parser.ml" +# 22243 "parsing/parser.ml" in let _startpos__6_ = _startpos__1_inlined3_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 22513 "parsing/parser.ml" +# 22252 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22521 "parsing/parser.ml" +# 22260 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 22529 "parsing/parser.ml" +# 22268 "parsing/parser.ml" in let _1 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 22535 "parsing/parser.ml" +# 22274 "parsing/parser.ml" in -# 2074 "parsing/parser.mly" +# 2124 "parsing/parser.mly" ( let poly_exp = let loc = (_startpos__6_, _endpos__8_) in ghexp ~loc (Pexp_poly(_8, Some _6)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 22543 "parsing/parser.ml" +# 22282 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22619,9 +22358,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22625 "parsing/parser.ml" +# 22364 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -22631,38 +22370,38 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Asttypes.private_flag * Parsetree.class_field_kind) * Parsetree.attributes) = let _7 = -# 2643 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( xs ) -# 22637 "parsing/parser.ml" +# 22376 "parsing/parser.ml" in let _startpos__7_ = _startpos_xs_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 22645 "parsing/parser.ml" +# 22384 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22653 "parsing/parser.ml" +# 22392 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined1_ in let _2 = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 22660 "parsing/parser.ml" +# 22399 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in let _1 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 22666 "parsing/parser.ml" +# 22405 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__11_ in @@ -22678,7 +22417,7 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 2080 "parsing/parser.mly" +# 2130 "parsing/parser.mly" ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in let poly_exp = let exp, poly = @@ -22689,7 +22428,7 @@ module Tables = struct ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 22693 "parsing/parser.ml" +# 22432 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22775,9 +22514,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22781 "parsing/parser.ml" +# 22520 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -22788,41 +22527,41 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Asttypes.private_flag * Parsetree.class_field_kind) * Parsetree.attributes) = let _7 = -# 2643 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( xs ) -# 22794 "parsing/parser.ml" +# 22533 "parsing/parser.ml" in let _startpos__7_ = _startpos_xs_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 22802 "parsing/parser.ml" +# 22541 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22810 "parsing/parser.ml" +# 22549 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 22819 "parsing/parser.ml" +# 22558 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _1 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 22826 "parsing/parser.ml" +# 22565 "parsing/parser.ml" in let _endpos = _endpos__11_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -22837,7 +22576,7 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 2080 "parsing/parser.mly" +# 2130 "parsing/parser.mly" ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in let poly_exp = let exp, poly = @@ -22848,7 +22587,7 @@ module Tables = struct ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 22852 "parsing/parser.ml" +# 22591 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22867,17 +22606,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22873 "parsing/parser.ml" +# 22612 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 22881 "parsing/parser.ml" +# 22620 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22908,9 +22647,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 22914 "parsing/parser.ml" +# 22653 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -22918,9 +22657,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 22924 "parsing/parser.ml" +# 22663 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22939,17 +22678,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 22945 "parsing/parser.ml" +# 22684 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 22953 "parsing/parser.ml" +# 22692 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22980,9 +22719,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 22986 "parsing/parser.ml" +# 22725 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -22990,9 +22729,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 22996 "parsing/parser.ml" +# 22735 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23015,14 +22754,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = let _1 = -# 3872 "parsing/parser.mly" +# 3975 "parsing/parser.mly" ( _1 ) -# 23021 "parsing/parser.ml" +# 22760 "parsing/parser.ml" in -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 23026 "parsing/parser.ml" +# 22765 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23060,20 +22799,20 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Longident.t) = let _1 = let _1 = -# 3814 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( "::" ) -# 23066 "parsing/parser.ml" +# 22805 "parsing/parser.ml" in -# 3872 "parsing/parser.mly" +# 3975 "parsing/parser.mly" ( _1 ) -# 23071 "parsing/parser.ml" +# 22810 "parsing/parser.ml" in -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 23077 "parsing/parser.ml" +# 22816 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23096,14 +22835,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = let _1 = -# 3872 "parsing/parser.mly" +# 3975 "parsing/parser.mly" ( _1 ) -# 23102 "parsing/parser.ml" +# 22841 "parsing/parser.ml" in -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 23107 "parsing/parser.ml" +# 22846 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23142,15 +22881,15 @@ module Tables = struct let _v : (Longident.t) = let _3 = let _1 = _1_inlined1 in -# 3872 "parsing/parser.mly" +# 3975 "parsing/parser.mly" ( _1 ) -# 23148 "parsing/parser.ml" +# 22887 "parsing/parser.ml" in -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 23154 "parsing/parser.ml" +# 22893 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23202,20 +22941,20 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Longident.t) = let _3 = let _1 = -# 3814 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( "::" ) -# 23208 "parsing/parser.ml" +# 22947 "parsing/parser.ml" in -# 3872 "parsing/parser.mly" +# 3975 "parsing/parser.mly" ( _1 ) -# 23213 "parsing/parser.ml" +# 22952 "parsing/parser.ml" in -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 23219 "parsing/parser.ml" +# 22958 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23254,15 +22993,15 @@ module Tables = struct let _v : (Longident.t) = let _3 = let _1 = _1_inlined1 in -# 3872 "parsing/parser.mly" +# 3975 "parsing/parser.mly" ( _1 ) -# 23260 "parsing/parser.ml" +# 22999 "parsing/parser.ml" in -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 23266 "parsing/parser.ml" +# 23005 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23285,9 +23024,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 23291 "parsing/parser.ml" +# 23030 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23324,9 +23063,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 23330 "parsing/parser.ml" +# 23069 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23345,17 +23084,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 23351 "parsing/parser.ml" +# 23090 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 23359 "parsing/parser.ml" +# 23098 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23386,9 +23125,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 23392 "parsing/parser.ml" +# 23131 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -23396,9 +23135,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 23402 "parsing/parser.ml" +# 23141 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23417,17 +23156,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 23423 "parsing/parser.ml" +# 23162 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 23431 "parsing/parser.ml" +# 23170 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23458,9 +23197,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 23464 "parsing/parser.ml" +# 23203 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -23468,9 +23207,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 23474 "parsing/parser.ml" +# 23213 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23493,9 +23232,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3834 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Lident _1 ) -# 23499 "parsing/parser.ml" +# 23238 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23532,9 +23271,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3835 "parsing/parser.mly" +# 3938 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 23538 "parsing/parser.ml" +# 23277 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23557,9 +23296,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3850 "parsing/parser.mly" +# 3953 "parsing/parser.mly" ( _1 ) -# 23563 "parsing/parser.ml" +# 23302 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23606,9 +23345,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3852 "parsing/parser.mly" +# 3955 "parsing/parser.mly" ( lapply ~loc:_sloc _1 _3 ) -# 23612 "parsing/parser.ml" +# 23351 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23646,9 +23385,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3854 "parsing/parser.mly" +# 3957 "parsing/parser.mly" ( expecting _loc__3_ "module path" ) -# 23652 "parsing/parser.ml" +# 23391 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23671,9 +23410,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3847 "parsing/parser.mly" +# 3950 "parsing/parser.mly" ( _1 ) -# 23677 "parsing/parser.ml" +# 23416 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23703,9 +23442,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = -# 1542 "parsing/parser.mly" +# 1592 "parsing/parser.mly" ( me ) -# 23709 "parsing/parser.ml" +# 23448 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23750,24 +23489,24 @@ module Tables = struct let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1545 "parsing/parser.mly" +# 1595 "parsing/parser.mly" ( Pmod_constraint(me, mty) ) -# 23756 "parsing/parser.ml" +# 23495 "parsing/parser.ml" in let _endpos__1_ = _endpos_me_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1010 "parsing/parser.mly" +# 1060 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 23765 "parsing/parser.ml" +# 23504 "parsing/parser.ml" in -# 1549 "parsing/parser.mly" +# 1599 "parsing/parser.mly" ( _1 ) -# 23771 "parsing/parser.ml" +# 23510 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23798,25 +23537,25 @@ module Tables = struct let _endpos = _endpos_body_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1547 "parsing/parser.mly" +# 1597 "parsing/parser.mly" ( let (_, arg) = arg_and_pos in Pmod_functor(arg, body) ) -# 23805 "parsing/parser.ml" +# 23544 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_body_, _startpos_arg_and_pos_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1010 "parsing/parser.mly" +# 1060 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 23814 "parsing/parser.ml" +# 23553 "parsing/parser.ml" in -# 1549 "parsing/parser.mly" +# 1599 "parsing/parser.mly" ( _1 ) -# 23820 "parsing/parser.ml" +# 23559 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23846,9 +23585,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_mty_ in let _v : (Parsetree.module_type) = -# 1795 "parsing/parser.mly" +# 1845 "parsing/parser.mly" ( mty ) -# 23852 "parsing/parser.ml" +# 23591 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23879,25 +23618,25 @@ module Tables = struct let _endpos = _endpos_body_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1798 "parsing/parser.mly" +# 1848 "parsing/parser.mly" ( let (_, arg) = arg_and_pos in Pmty_functor(arg, body) ) -# 23886 "parsing/parser.ml" +# 23625 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_body_, _startpos_arg_and_pos_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1012 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 23895 "parsing/parser.ml" +# 23634 "parsing/parser.ml" in -# 1801 "parsing/parser.mly" +# 1851 "parsing/parser.mly" ( _1 ) -# 23901 "parsing/parser.ml" +# 23640 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23943,18 +23682,18 @@ module Tables = struct let _v : (Parsetree.module_expr) = let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 23949 "parsing/parser.ml" +# 23688 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1381 "parsing/parser.mly" +# 1431 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_structure s) ) -# 23958 "parsing/parser.ml" +# 23697 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24000,17 +23739,17 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 24006 "parsing/parser.ml" +# 23745 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1383 "parsing/parser.mly" +# 1433 "parsing/parser.mly" ( unclosed "struct" _loc__1_ "end" _loc__4_ ) -# 24014 "parsing/parser.ml" +# 23753 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24063,30 +23802,30 @@ module Tables = struct let _v : (Parsetree.module_expr) = let args = let _1 = _1_inlined2 in -# 1347 "parsing/parser.mly" +# 1397 "parsing/parser.mly" ( _1 ) -# 24069 "parsing/parser.ml" +# 23808 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 24077 "parsing/parser.ml" +# 23816 "parsing/parser.ml" in let _endpos = _endpos_me_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1385 "parsing/parser.mly" +# 1435 "parsing/parser.mly" ( wrap_mod_attrs ~loc:_sloc attrs ( List.fold_left (fun acc (startpos, arg) -> mkmod ~loc:(startpos, _endpos) (Pmod_functor (arg, acc)) ) me args ) ) -# 24090 "parsing/parser.ml" +# 23829 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24109,9 +23848,9 @@ module Tables = struct let _startpos = _startpos_me_ in let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = -# 1391 "parsing/parser.mly" +# 1441 "parsing/parser.mly" ( me ) -# 24115 "parsing/parser.ml" +# 23854 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24141,9 +23880,9 @@ module Tables = struct let _startpos = _startpos_me_ in let _endpos = _endpos_attr_ in let _v : (Parsetree.module_expr) = -# 1393 "parsing/parser.mly" +# 1443 "parsing/parser.mly" ( Mod.attr me attr ) -# 24147 "parsing/parser.ml" +# 23886 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24172,30 +23911,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 24178 "parsing/parser.ml" +# 23917 "parsing/parser.ml" in -# 1397 "parsing/parser.mly" +# 1447 "parsing/parser.mly" ( Pmod_ident x ) -# 24184 "parsing/parser.ml" +# 23923 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1010 "parsing/parser.mly" +# 1060 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 24193 "parsing/parser.ml" +# 23932 "parsing/parser.ml" in -# 1409 "parsing/parser.mly" +# 1459 "parsing/parser.mly" ( _1 ) -# 24199 "parsing/parser.ml" +# 23938 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24226,24 +23965,24 @@ module Tables = struct let _endpos = _endpos_me2_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1400 "parsing/parser.mly" +# 1450 "parsing/parser.mly" ( Pmod_apply(me1, me2) ) -# 24232 "parsing/parser.ml" +# 23971 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_me2_, _startpos_me1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1010 "parsing/parser.mly" +# 1060 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 24241 "parsing/parser.ml" +# 23980 "parsing/parser.ml" in -# 1409 "parsing/parser.mly" +# 1459 "parsing/parser.mly" ( _1 ) -# 24247 "parsing/parser.ml" +# 23986 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24285,10 +24024,10 @@ module Tables = struct let _symbolstartpos = _startpos_me1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1403 "parsing/parser.mly" +# 1453 "parsing/parser.mly" ( (* TODO review mkmod location *) Pmod_apply(me1, mkmod ~loc:_sloc (Pmod_structure [])) ) -# 24292 "parsing/parser.ml" +# 24031 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me1_) in @@ -24296,15 +24035,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1010 "parsing/parser.mly" +# 1060 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 24302 "parsing/parser.ml" +# 24041 "parsing/parser.ml" in -# 1409 "parsing/parser.mly" +# 1459 "parsing/parser.mly" ( _1 ) -# 24308 "parsing/parser.ml" +# 24047 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24328,24 +24067,24 @@ module Tables = struct let _endpos = _endpos_ex_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1407 "parsing/parser.mly" +# 1457 "parsing/parser.mly" ( Pmod_extension ex ) -# 24334 "parsing/parser.ml" +# 24073 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ex_, _startpos_ex_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1010 "parsing/parser.mly" +# 1060 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 24343 "parsing/parser.ml" +# 24082 "parsing/parser.ml" in -# 1409 "parsing/parser.mly" +# 1459 "parsing/parser.mly" ( _1 ) -# 24349 "parsing/parser.ml" +# 24088 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24364,17 +24103,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let x : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 24370 "parsing/parser.ml" +# 24109 "parsing/parser.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (string option) = -# 1364 "parsing/parser.mly" +# 1414 "parsing/parser.mly" ( Some x ) -# 24378 "parsing/parser.ml" +# 24117 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24397,9 +24136,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string option) = -# 1367 "parsing/parser.mly" +# 1417 "parsing/parser.mly" ( None ) -# 24403 "parsing/parser.ml" +# 24142 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24457,9 +24196,9 @@ module Tables = struct let _1_inlined3 : (Longident.t) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 24463 "parsing/parser.ml" +# 24202 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let ext : (string Asttypes.loc option) = Obj.magic ext in @@ -24470,9 +24209,9 @@ module Tables = struct let _v : (Parsetree.module_substitution * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 24476 "parsing/parser.ml" +# 24215 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -24482,9 +24221,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 24488 "parsing/parser.ml" +# 24227 "parsing/parser.ml" in let uid = @@ -24493,31 +24232,31 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 24499 "parsing/parser.ml" +# 24238 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 24507 "parsing/parser.ml" +# 24246 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1831 "parsing/parser.mly" +# 1881 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Ms.mk uid body ~attrs ~loc ~docs, ext ) -# 24521 "parsing/parser.ml" +# 24260 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24568,9 +24307,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 24574 "parsing/parser.ml" +# 24313 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : (string Asttypes.loc option) = Obj.magic _2 in @@ -24584,24 +24323,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 24590 "parsing/parser.ml" +# 24329 "parsing/parser.ml" in let _3 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 24598 "parsing/parser.ml" +# 24337 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in -# 1838 "parsing/parser.mly" +# 1888 "parsing/parser.mly" ( expecting _loc__6_ "module path" ) -# 24605 "parsing/parser.ml" +# 24344 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24647,18 +24386,18 @@ module Tables = struct let _v : (Parsetree.module_type) = let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 24653 "parsing/parser.ml" +# 24392 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1681 "parsing/parser.mly" +# 1731 "parsing/parser.mly" ( mkmty ~loc:_sloc ~attrs (Pmty_signature s) ) -# 24662 "parsing/parser.ml" +# 24401 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24704,17 +24443,17 @@ module Tables = struct let _v : (Parsetree.module_type) = let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 24710 "parsing/parser.ml" +# 24449 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1683 "parsing/parser.mly" +# 1733 "parsing/parser.mly" ( unclosed "sig" _loc__1_ "end" _loc__4_ ) -# 24718 "parsing/parser.ml" +# 24457 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24767,30 +24506,30 @@ module Tables = struct let _v : (Parsetree.module_type) = let args = let _1 = _1_inlined2 in -# 1347 "parsing/parser.mly" +# 1397 "parsing/parser.mly" ( _1 ) -# 24773 "parsing/parser.ml" +# 24512 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 24781 "parsing/parser.ml" +# 24520 "parsing/parser.ml" in let _endpos = _endpos_mty_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1687 "parsing/parser.mly" +# 1737 "parsing/parser.mly" ( wrap_mty_attrs ~loc:_sloc attrs ( List.fold_left (fun acc (startpos, arg) -> mkmty ~loc:(startpos, _endpos) (Pmty_functor (arg, acc)) ) mty args ) ) -# 24794 "parsing/parser.ml" +# 24533 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24843,18 +24582,18 @@ module Tables = struct let _v : (Parsetree.module_type) = let _4 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 24849 "parsing/parser.ml" +# 24588 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1693 "parsing/parser.mly" +# 1743 "parsing/parser.mly" ( mkmty ~loc:_sloc ~attrs:_4 (Pmty_typeof _5) ) -# 24858 "parsing/parser.ml" +# 24597 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24891,9 +24630,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.module_type) = -# 1695 "parsing/parser.mly" +# 1745 "parsing/parser.mly" ( _2 ) -# 24897 "parsing/parser.ml" +# 24636 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24932,9 +24671,9 @@ module Tables = struct let _v : (Parsetree.module_type) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1697 "parsing/parser.mly" +# 1747 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 24938 "parsing/parser.ml" +# 24677 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24964,9 +24703,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.module_type) = -# 1699 "parsing/parser.mly" +# 1749 "parsing/parser.mly" ( Mty.attr _1 _2 ) -# 24970 "parsing/parser.ml" +# 24709 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24995,30 +24734,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 25001 "parsing/parser.ml" +# 24740 "parsing/parser.ml" in -# 1702 "parsing/parser.mly" +# 1752 "parsing/parser.mly" ( Pmty_ident _1 ) -# 25007 "parsing/parser.ml" +# 24746 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1012 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 25016 "parsing/parser.ml" +# 24755 "parsing/parser.ml" in -# 1713 "parsing/parser.mly" +# 1763 "parsing/parser.mly" ( _1 ) -# 25022 "parsing/parser.ml" +# 24761 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25056,24 +24795,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1705 "parsing/parser.mly" +# 1755 "parsing/parser.mly" ( Pmty_functor(Named (mknoloc None, _1), _3) ) -# 25062 "parsing/parser.ml" +# 24801 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1012 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 25071 "parsing/parser.ml" +# 24810 "parsing/parser.ml" in -# 1713 "parsing/parser.mly" +# 1763 "parsing/parser.mly" ( _1 ) -# 25077 "parsing/parser.ml" +# 24816 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25115,18 +24854,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 25119 "parsing/parser.ml" +# 24858 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 25124 "parsing/parser.ml" +# 24863 "parsing/parser.ml" in -# 1707 "parsing/parser.mly" +# 1757 "parsing/parser.mly" ( Pmty_with(_1, _3) ) -# 25130 "parsing/parser.ml" +# 24869 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -25134,15 +24873,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1012 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 25140 "parsing/parser.ml" +# 24879 "parsing/parser.ml" in -# 1713 "parsing/parser.mly" +# 1763 "parsing/parser.mly" ( _1 ) -# 25146 "parsing/parser.ml" +# 24885 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25166,23 +24905,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1711 "parsing/parser.mly" +# 1761 "parsing/parser.mly" ( Pmty_extension _1 ) -# 25172 "parsing/parser.ml" +# 24911 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1012 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 25180 "parsing/parser.ml" +# 24919 "parsing/parser.ml" in -# 1713 "parsing/parser.mly" +# 1763 "parsing/parser.mly" ( _1 ) -# 25186 "parsing/parser.ml" +# 24925 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25249,9 +24988,9 @@ module Tables = struct let _v : (Parsetree.module_type_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 25255 "parsing/parser.ml" +# 24994 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -25261,31 +25000,31 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 25267 "parsing/parser.ml" +# 25006 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 25275 "parsing/parser.ml" +# 25014 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1627 "parsing/parser.mly" +# 1677 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Mtd.mk id ?typ ~attrs ~loc ~docs, ext ) -# 25289 "parsing/parser.ml" +# 25028 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25359,9 +25098,9 @@ module Tables = struct let _v : (Parsetree.module_type_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 25365 "parsing/parser.ml" +# 25104 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -25371,31 +25110,31 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 25377 "parsing/parser.ml" +# 25116 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 25385 "parsing/parser.ml" +# 25124 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1887 "parsing/parser.mly" +# 1937 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Mtd.mk id ~typ ~attrs ~loc ~docs, ext ) -# 25399 "parsing/parser.ml" +# 25138 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25418,9 +25157,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3857 "parsing/parser.mly" +# 3960 "parsing/parser.mly" ( _1 ) -# 25424 "parsing/parser.ml" +# 25163 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25436,9 +25175,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.mutable_flag) = -# 3938 "parsing/parser.mly" +# 4041 "parsing/parser.mly" ( Immutable ) -# 25442 "parsing/parser.ml" +# 25181 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25461,9 +25200,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag) = -# 3939 "parsing/parser.mly" +# 4042 "parsing/parser.mly" ( Mutable ) -# 25467 "parsing/parser.ml" +# 25206 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25479,9 +25218,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.mutable_flag * Asttypes.global_flag) = -# 3942 "parsing/parser.mly" +# 4045 "parsing/parser.mly" ( Immutable, Nothing ) -# 25485 "parsing/parser.ml" +# 25224 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25504,9 +25243,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.global_flag) = -# 3943 "parsing/parser.mly" +# 4046 "parsing/parser.mly" ( Mutable, Nothing ) -# 25510 "parsing/parser.ml" +# 25249 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25529,9 +25268,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.global_flag) = -# 3944 "parsing/parser.mly" +# 4047 "parsing/parser.mly" ( Immutable, Global ) -# 25535 "parsing/parser.ml" +# 25274 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25554,9 +25293,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.global_flag) = -# 3945 "parsing/parser.mly" +# 4048 "parsing/parser.mly" ( Immutable, Nonlocal ) -# 25560 "parsing/parser.ml" +# 25299 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25572,9 +25311,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3958 "parsing/parser.mly" +# 4061 "parsing/parser.mly" ( Immutable, Concrete ) -# 25578 "parsing/parser.ml" +# 25317 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25597,9 +25336,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3960 "parsing/parser.mly" +# 4063 "parsing/parser.mly" ( Mutable, Concrete ) -# 25603 "parsing/parser.ml" +# 25342 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25622,9 +25361,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3962 "parsing/parser.mly" +# 4065 "parsing/parser.mly" ( Immutable, Virtual ) -# 25628 "parsing/parser.ml" +# 25367 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25654,9 +25393,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3965 "parsing/parser.mly" +# 4068 "parsing/parser.mly" ( Mutable, Virtual ) -# 25660 "parsing/parser.ml" +# 25399 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25686,9 +25425,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3965 "parsing/parser.mly" +# 4068 "parsing/parser.mly" ( Mutable, Virtual ) -# 25692 "parsing/parser.ml" +# 25431 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25718,9 +25457,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3909 "parsing/parser.mly" +# 4012 "parsing/parser.mly" ( _2 ) -# 25724 "parsing/parser.ml" +# 25463 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25739,9 +25478,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 25745 "parsing/parser.ml" +# 25484 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -25751,15 +25490,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 25757 "parsing/parser.ml" +# 25496 "parsing/parser.ml" in # 221 "" ( [ x ] ) -# 25763 "parsing/parser.ml" +# 25502 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25785,9 +25524,9 @@ module Tables = struct } = _menhir_stack in let xs : (string Asttypes.loc list) = Obj.magic xs in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 25791 "parsing/parser.ml" +# 25530 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -25797,15 +25536,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 25803 "parsing/parser.ml" +# 25542 "parsing/parser.ml" in # 223 "" ( x :: xs ) -# 25809 "parsing/parser.ml" +# 25548 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25824,22 +25563,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let s : ( -# 821 "parsing/parser.mly" +# 871 "parsing/parser.mly" (string * Location.t * string option) -# 25830 "parsing/parser.ml" +# 25569 "parsing/parser.ml" ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : (string list) = let x = -# 3905 "parsing/parser.mly" +# 4008 "parsing/parser.mly" ( let body, _, _ = s in body ) -# 25838 "parsing/parser.ml" +# 25577 "parsing/parser.ml" in # 221 "" ( [ x ] ) -# 25843 "parsing/parser.ml" +# 25582 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25865,22 +25604,22 @@ module Tables = struct } = _menhir_stack in let xs : (string list) = Obj.magic xs in let s : ( -# 821 "parsing/parser.mly" +# 871 "parsing/parser.mly" (string * Location.t * string option) -# 25871 "parsing/parser.ml" +# 25610 "parsing/parser.ml" ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_s_ in let _endpos = _endpos_xs_ in let _v : (string list) = let x = -# 3905 "parsing/parser.mly" +# 4008 "parsing/parser.mly" ( let body, _, _ = s in body ) -# 25879 "parsing/parser.ml" +# 25618 "parsing/parser.ml" in # 223 "" ( x :: xs ) -# 25884 "parsing/parser.ml" +# 25623 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25903,14 +25642,14 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3934 "parsing/parser.mly" +# 4037 "parsing/parser.mly" ( Public ) -# 25909 "parsing/parser.ml" +# 25648 "parsing/parser.ml" in -# 3172 "parsing/parser.mly" +# 3275 "parsing/parser.mly" ( (Ptype_abstract, priv, Some ty) ) -# 25914 "parsing/parser.ml" +# 25653 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25940,14 +25679,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3935 "parsing/parser.mly" +# 4038 "parsing/parser.mly" ( Private ) -# 25946 "parsing/parser.ml" +# 25685 "parsing/parser.ml" in -# 3172 "parsing/parser.mly" +# 3275 "parsing/parser.mly" ( (Ptype_abstract, priv, Some ty) ) -# 25951 "parsing/parser.ml" +# 25690 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25970,26 +25709,26 @@ module Tables = struct let _startpos = _startpos_cs_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3934 "parsing/parser.mly" +# 4037 "parsing/parser.mly" ( Public ) -# 25976 "parsing/parser.ml" +# 25715 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 25982 "parsing/parser.ml" +# 25721 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 25987 "parsing/parser.ml" +# 25726 "parsing/parser.ml" in -# 3176 "parsing/parser.mly" +# 3279 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 25993 "parsing/parser.ml" +# 25732 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26019,26 +25758,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3935 "parsing/parser.mly" +# 4038 "parsing/parser.mly" ( Private ) -# 26025 "parsing/parser.ml" +# 25764 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 26031 "parsing/parser.ml" +# 25770 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26036 "parsing/parser.ml" +# 25775 "parsing/parser.ml" in -# 3176 "parsing/parser.mly" +# 3279 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 26042 "parsing/parser.ml" +# 25781 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26075,33 +25814,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3934 "parsing/parser.mly" +# 4037 "parsing/parser.mly" ( Public ) -# 26081 "parsing/parser.ml" +# 25820 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 26088 "parsing/parser.ml" +# 25827 "parsing/parser.ml" in # 126 "" ( Some x ) -# 26093 "parsing/parser.ml" +# 25832 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26099 "parsing/parser.ml" +# 25838 "parsing/parser.ml" in -# 3176 "parsing/parser.mly" +# 3279 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 26105 "parsing/parser.ml" +# 25844 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26145,33 +25884,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3935 "parsing/parser.mly" +# 4038 "parsing/parser.mly" ( Private ) -# 26151 "parsing/parser.ml" +# 25890 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 26158 "parsing/parser.ml" +# 25897 "parsing/parser.ml" in # 126 "" ( Some x ) -# 26163 "parsing/parser.ml" +# 25902 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26169 "parsing/parser.ml" +# 25908 "parsing/parser.ml" in -# 3176 "parsing/parser.mly" +# 3279 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 26175 "parsing/parser.ml" +# 25914 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26194,26 +25933,26 @@ module Tables = struct let _startpos = _startpos__3_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3934 "parsing/parser.mly" +# 4037 "parsing/parser.mly" ( Public ) -# 26200 "parsing/parser.ml" +# 25939 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 26206 "parsing/parser.ml" +# 25945 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26211 "parsing/parser.ml" +# 25950 "parsing/parser.ml" in -# 3180 "parsing/parser.mly" +# 3283 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 26217 "parsing/parser.ml" +# 25956 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26243,26 +25982,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3935 "parsing/parser.mly" +# 4038 "parsing/parser.mly" ( Private ) -# 26249 "parsing/parser.ml" +# 25988 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 26255 "parsing/parser.ml" +# 25994 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26260 "parsing/parser.ml" +# 25999 "parsing/parser.ml" in -# 3180 "parsing/parser.mly" +# 3283 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 26266 "parsing/parser.ml" +# 26005 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26299,33 +26038,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3934 "parsing/parser.mly" +# 4037 "parsing/parser.mly" ( Public ) -# 26305 "parsing/parser.ml" +# 26044 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 26312 "parsing/parser.ml" +# 26051 "parsing/parser.ml" in # 126 "" ( Some x ) -# 26317 "parsing/parser.ml" +# 26056 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26323 "parsing/parser.ml" +# 26062 "parsing/parser.ml" in -# 3180 "parsing/parser.mly" +# 3283 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 26329 "parsing/parser.ml" +# 26068 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26369,33 +26108,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3935 "parsing/parser.mly" +# 4038 "parsing/parser.mly" ( Private ) -# 26375 "parsing/parser.ml" +# 26114 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 26382 "parsing/parser.ml" +# 26121 "parsing/parser.ml" in # 126 "" ( Some x ) -# 26387 "parsing/parser.ml" +# 26126 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26393 "parsing/parser.ml" +# 26132 "parsing/parser.ml" in -# 3180 "parsing/parser.mly" +# 3283 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 26399 "parsing/parser.ml" +# 26138 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26432,26 +26171,26 @@ module Tables = struct let _startpos = _startpos__3_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3934 "parsing/parser.mly" +# 4037 "parsing/parser.mly" ( Public ) -# 26438 "parsing/parser.ml" +# 26177 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 26444 "parsing/parser.ml" +# 26183 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26449 "parsing/parser.ml" +# 26188 "parsing/parser.ml" in -# 3184 "parsing/parser.mly" +# 3287 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 26455 "parsing/parser.ml" +# 26194 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26495,26 +26234,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3935 "parsing/parser.mly" +# 4038 "parsing/parser.mly" ( Private ) -# 26501 "parsing/parser.ml" +# 26240 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 26507 "parsing/parser.ml" +# 26246 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26512 "parsing/parser.ml" +# 26251 "parsing/parser.ml" in -# 3184 "parsing/parser.mly" +# 3287 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 26518 "parsing/parser.ml" +# 26257 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26565,33 +26304,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3934 "parsing/parser.mly" +# 4037 "parsing/parser.mly" ( Public ) -# 26571 "parsing/parser.ml" +# 26310 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 26578 "parsing/parser.ml" +# 26317 "parsing/parser.ml" in # 126 "" ( Some x ) -# 26583 "parsing/parser.ml" +# 26322 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26589 "parsing/parser.ml" +# 26328 "parsing/parser.ml" in -# 3184 "parsing/parser.mly" +# 3287 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 26595 "parsing/parser.ml" +# 26334 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26649,33 +26388,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3935 "parsing/parser.mly" +# 4038 "parsing/parser.mly" ( Private ) -# 26655 "parsing/parser.ml" +# 26394 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 26662 "parsing/parser.ml" +# 26401 "parsing/parser.ml" in # 126 "" ( Some x ) -# 26667 "parsing/parser.ml" +# 26406 "parsing/parser.ml" in -# 3188 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( _1 ) -# 26673 "parsing/parser.ml" +# 26412 "parsing/parser.ml" in -# 3184 "parsing/parser.mly" +# 3287 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 26679 "parsing/parser.ml" +# 26418 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26728,37 +26467,37 @@ module Tables = struct let _v : (Parsetree.open_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined2 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 26734 "parsing/parser.ml" +# 26473 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 26743 "parsing/parser.ml" +# 26482 "parsing/parser.ml" in let override = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 26749 "parsing/parser.ml" +# 26488 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1646 "parsing/parser.mly" +# 1696 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk me ~override ~attrs ~loc ~docs, ext ) -# 26762 "parsing/parser.ml" +# 26501 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26818,37 +26557,37 @@ module Tables = struct let _v : (Parsetree.open_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 26824 "parsing/parser.ml" +# 26563 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let attrs1 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 26833 "parsing/parser.ml" +# 26572 "parsing/parser.ml" in let override = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 26839 "parsing/parser.ml" +# 26578 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1646 "parsing/parser.mly" +# 1696 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk me ~override ~attrs ~loc ~docs, ext ) -# 26852 "parsing/parser.ml" +# 26591 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26901,9 +26640,9 @@ module Tables = struct let _v : (Parsetree.open_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 26907 "parsing/parser.ml" +# 26646 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -26913,36 +26652,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 26919 "parsing/parser.ml" +# 26658 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 26927 "parsing/parser.ml" +# 26666 "parsing/parser.ml" in let override = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 26933 "parsing/parser.ml" +# 26672 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1661 "parsing/parser.mly" +# 1711 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk id ~override ~attrs ~loc ~docs, ext ) -# 26946 "parsing/parser.ml" +# 26685 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27002,9 +26741,9 @@ module Tables = struct let _v : (Parsetree.open_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 27008 "parsing/parser.ml" +# 26747 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -27014,36 +26753,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 27020 "parsing/parser.ml" +# 26759 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined2 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 27028 "parsing/parser.ml" +# 26767 "parsing/parser.ml" in let override = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 27034 "parsing/parser.ml" +# 26773 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1661 "parsing/parser.mly" +# 1711 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk id ~override ~attrs ~loc ~docs, ext ) -# 27047 "parsing/parser.ml" +# 26786 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27062,17 +26801,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 807 "parsing/parser.mly" +# 857 "parsing/parser.mly" (string) -# 27068 "parsing/parser.ml" +# 26807 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3773 "parsing/parser.mly" +# 3876 "parsing/parser.mly" ( _1 ) -# 27076 "parsing/parser.ml" +# 26815 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27091,17 +26830,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 763 "parsing/parser.mly" +# 812 "parsing/parser.mly" (string) -# 27097 "parsing/parser.ml" +# 26836 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3774 "parsing/parser.mly" +# 3877 "parsing/parser.mly" ( _1 ) -# 27105 "parsing/parser.ml" +# 26844 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27120,17 +26859,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 764 "parsing/parser.mly" +# 813 "parsing/parser.mly" (string) -# 27126 "parsing/parser.ml" +# 26865 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3775 "parsing/parser.mly" +# 3878 "parsing/parser.mly" ( _1 ) -# 27134 "parsing/parser.ml" +# 26873 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27170,17 +26909,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 27176 "parsing/parser.ml" +# 26915 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3776 "parsing/parser.mly" +# 3879 "parsing/parser.mly" ( "."^ _1 ^"(" ^ _3 ^ ")" ) -# 27184 "parsing/parser.ml" +# 26923 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27227,17 +26966,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 27233 "parsing/parser.ml" +# 26972 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3777 "parsing/parser.mly" +# 3880 "parsing/parser.mly" ( "."^ _1 ^ "(" ^ _3 ^ ")<-" ) -# 27241 "parsing/parser.ml" +# 26980 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27277,17 +27016,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 27283 "parsing/parser.ml" +# 27022 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3778 "parsing/parser.mly" +# 3881 "parsing/parser.mly" ( "."^ _1 ^"[" ^ _3 ^ "]" ) -# 27291 "parsing/parser.ml" +# 27030 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27334,17 +27073,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 27340 "parsing/parser.ml" +# 27079 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3779 "parsing/parser.mly" +# 3882 "parsing/parser.mly" ( "."^ _1 ^ "[" ^ _3 ^ "]<-" ) -# 27348 "parsing/parser.ml" +# 27087 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27384,17 +27123,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 27390 "parsing/parser.ml" +# 27129 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3780 "parsing/parser.mly" +# 3883 "parsing/parser.mly" ( "."^ _1 ^"{" ^ _3 ^ "}" ) -# 27398 "parsing/parser.ml" +# 27137 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27441,17 +27180,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 27447 "parsing/parser.ml" +# 27186 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3781 "parsing/parser.mly" +# 3884 "parsing/parser.mly" ( "."^ _1 ^ "{" ^ _3 ^ "}<-" ) -# 27455 "parsing/parser.ml" +# 27194 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27470,17 +27209,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 818 "parsing/parser.mly" +# 868 "parsing/parser.mly" (string) -# 27476 "parsing/parser.ml" +# 27215 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3782 "parsing/parser.mly" +# 3885 "parsing/parser.mly" ( _1 ) -# 27484 "parsing/parser.ml" +# 27223 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27503,9 +27242,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3783 "parsing/parser.mly" +# 3886 "parsing/parser.mly" ( "!" ) -# 27509 "parsing/parser.ml" +# 27248 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27524,22 +27263,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 757 "parsing/parser.mly" +# 806 "parsing/parser.mly" (string) -# 27530 "parsing/parser.ml" +# 27269 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3787 "parsing/parser.mly" +# 3890 "parsing/parser.mly" ( op ) -# 27538 "parsing/parser.ml" +# 27277 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27543 "parsing/parser.ml" +# 27282 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27558,22 +27297,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 758 "parsing/parser.mly" +# 807 "parsing/parser.mly" (string) -# 27564 "parsing/parser.ml" +# 27303 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3788 "parsing/parser.mly" +# 3891 "parsing/parser.mly" ( op ) -# 27572 "parsing/parser.ml" +# 27311 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27577 "parsing/parser.ml" +# 27316 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27592,22 +27331,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 759 "parsing/parser.mly" +# 808 "parsing/parser.mly" (string) -# 27598 "parsing/parser.ml" +# 27337 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3789 "parsing/parser.mly" +# 3892 "parsing/parser.mly" ( op ) -# 27606 "parsing/parser.ml" +# 27345 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27611 "parsing/parser.ml" +# 27350 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27626,22 +27365,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 760 "parsing/parser.mly" +# 809 "parsing/parser.mly" (string) -# 27632 "parsing/parser.ml" +# 27371 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3790 "parsing/parser.mly" +# 3893 "parsing/parser.mly" ( op ) -# 27640 "parsing/parser.ml" +# 27379 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27645 "parsing/parser.ml" +# 27384 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27660,22 +27399,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 761 "parsing/parser.mly" +# 810 "parsing/parser.mly" (string) -# 27666 "parsing/parser.ml" +# 27405 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3791 "parsing/parser.mly" +# 3894 "parsing/parser.mly" ( op ) -# 27674 "parsing/parser.ml" +# 27413 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27679 "parsing/parser.ml" +# 27418 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27698,14 +27437,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3792 "parsing/parser.mly" +# 3895 "parsing/parser.mly" ("+") -# 27704 "parsing/parser.ml" +# 27443 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27709 "parsing/parser.ml" +# 27448 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27728,14 +27467,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3793 "parsing/parser.mly" +# 3896 "parsing/parser.mly" ("+.") -# 27734 "parsing/parser.ml" +# 27473 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27739 "parsing/parser.ml" +# 27478 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27758,14 +27497,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3794 "parsing/parser.mly" +# 3897 "parsing/parser.mly" ("+=") -# 27764 "parsing/parser.ml" +# 27503 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27769 "parsing/parser.ml" +# 27508 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27788,14 +27527,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3795 "parsing/parser.mly" +# 3898 "parsing/parser.mly" ("-") -# 27794 "parsing/parser.ml" +# 27533 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27799 "parsing/parser.ml" +# 27538 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27818,14 +27557,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3796 "parsing/parser.mly" +# 3899 "parsing/parser.mly" ("-.") -# 27824 "parsing/parser.ml" +# 27563 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27829 "parsing/parser.ml" +# 27568 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27848,14 +27587,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3797 "parsing/parser.mly" +# 3900 "parsing/parser.mly" ("*") -# 27854 "parsing/parser.ml" +# 27593 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27859 "parsing/parser.ml" +# 27598 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27878,14 +27617,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3798 "parsing/parser.mly" +# 3901 "parsing/parser.mly" ("%") -# 27884 "parsing/parser.ml" +# 27623 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27889 "parsing/parser.ml" +# 27628 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27908,14 +27647,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3799 "parsing/parser.mly" +# 3902 "parsing/parser.mly" ("=") -# 27914 "parsing/parser.ml" +# 27653 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27919 "parsing/parser.ml" +# 27658 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27938,14 +27677,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3800 "parsing/parser.mly" +# 3903 "parsing/parser.mly" ("<") -# 27944 "parsing/parser.ml" +# 27683 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27949 "parsing/parser.ml" +# 27688 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27968,14 +27707,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3801 "parsing/parser.mly" +# 3904 "parsing/parser.mly" (">") -# 27974 "parsing/parser.ml" +# 27713 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 27979 "parsing/parser.ml" +# 27718 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27998,14 +27737,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3802 "parsing/parser.mly" +# 3905 "parsing/parser.mly" ("or") -# 28004 "parsing/parser.ml" +# 27743 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 28009 "parsing/parser.ml" +# 27748 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28028,14 +27767,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3803 "parsing/parser.mly" +# 3906 "parsing/parser.mly" ("||") -# 28034 "parsing/parser.ml" +# 27773 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 28039 "parsing/parser.ml" +# 27778 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28058,14 +27797,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3804 "parsing/parser.mly" +# 3907 "parsing/parser.mly" ("&") -# 28064 "parsing/parser.ml" +# 27803 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 28069 "parsing/parser.ml" +# 27808 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28088,14 +27827,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3805 "parsing/parser.mly" +# 3908 "parsing/parser.mly" ("&&") -# 28094 "parsing/parser.ml" +# 27833 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 28099 "parsing/parser.ml" +# 27838 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28118,14 +27857,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3806 "parsing/parser.mly" +# 3909 "parsing/parser.mly" (":=") -# 28124 "parsing/parser.ml" +# 27863 "parsing/parser.ml" in -# 3784 "parsing/parser.mly" +# 3887 "parsing/parser.mly" ( _1 ) -# 28129 "parsing/parser.ml" +# 27868 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28148,9 +27887,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (bool) = -# 3688 "parsing/parser.mly" +# 3791 "parsing/parser.mly" ( true ) -# 28154 "parsing/parser.ml" +# 27893 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28166,9 +27905,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (bool) = -# 3689 "parsing/parser.mly" +# 3792 "parsing/parser.mly" ( false ) -# 28172 "parsing/parser.ml" +# 27911 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28186,7 +27925,7 @@ module Tables = struct let _v : (unit option) = # 114 "" ( None ) -# 28190 "parsing/parser.ml" +# 27929 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28211,7 +27950,7 @@ module Tables = struct let _v : (unit option) = # 116 "" ( Some x ) -# 28215 "parsing/parser.ml" +# 27954 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28229,7 +27968,7 @@ module Tables = struct let _v : (unit option) = # 114 "" ( None ) -# 28233 "parsing/parser.ml" +# 27972 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28254,7 +27993,7 @@ module Tables = struct let _v : (unit option) = # 116 "" ( Some x ) -# 28258 "parsing/parser.ml" +# 27997 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28272,7 +28011,7 @@ module Tables = struct let _v : (string Asttypes.loc option) = # 114 "" ( None ) -# 28276 "parsing/parser.ml" +# 28015 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28297,9 +28036,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 28303 "parsing/parser.ml" +# 28042 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -28312,21 +28051,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 28318 "parsing/parser.ml" +# 28057 "parsing/parser.ml" in # 183 "" ( x ) -# 28324 "parsing/parser.ml" +# 28063 "parsing/parser.ml" in # 116 "" ( Some x ) -# 28330 "parsing/parser.ml" +# 28069 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28344,7 +28083,7 @@ module Tables = struct let _v : (Parsetree.core_type option) = # 114 "" ( None ) -# 28348 "parsing/parser.ml" +# 28087 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28376,12 +28115,12 @@ module Tables = struct let _v : (Parsetree.core_type option) = let x = # 183 "" ( x ) -# 28380 "parsing/parser.ml" +# 28119 "parsing/parser.ml" in # 116 "" ( Some x ) -# 28385 "parsing/parser.ml" +# 28124 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28399,7 +28138,7 @@ module Tables = struct let _v : (Parsetree.expression option) = # 114 "" ( None ) -# 28403 "parsing/parser.ml" +# 28142 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28431,12 +28170,12 @@ module Tables = struct let _v : (Parsetree.expression option) = let x = # 183 "" ( x ) -# 28435 "parsing/parser.ml" +# 28174 "parsing/parser.ml" in # 116 "" ( Some x ) -# 28440 "parsing/parser.ml" +# 28179 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28454,7 +28193,7 @@ module Tables = struct let _v : (Parsetree.module_type option) = # 114 "" ( None ) -# 28458 "parsing/parser.ml" +# 28197 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28486,12 +28225,12 @@ module Tables = struct let _v : (Parsetree.module_type option) = let x = # 183 "" ( x ) -# 28490 "parsing/parser.ml" +# 28229 "parsing/parser.ml" in # 116 "" ( Some x ) -# 28495 "parsing/parser.ml" +# 28234 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28509,7 +28248,7 @@ module Tables = struct let _v : (Parsetree.pattern option) = # 114 "" ( None ) -# 28513 "parsing/parser.ml" +# 28252 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28541,12 +28280,12 @@ module Tables = struct let _v : (Parsetree.pattern option) = let x = # 183 "" ( x ) -# 28545 "parsing/parser.ml" +# 28284 "parsing/parser.ml" in # 116 "" ( Some x ) -# 28550 "parsing/parser.ml" +# 28289 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28564,7 +28303,7 @@ module Tables = struct let _v : (Parsetree.expression option) = # 114 "" ( None ) -# 28568 "parsing/parser.ml" +# 28307 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28596,12 +28335,12 @@ module Tables = struct let _v : (Parsetree.expression option) = let x = # 183 "" ( x ) -# 28600 "parsing/parser.ml" +# 28339 "parsing/parser.ml" in # 116 "" ( Some x ) -# 28605 "parsing/parser.ml" +# 28344 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28619,7 +28358,7 @@ module Tables = struct let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = # 114 "" ( None ) -# 28623 "parsing/parser.ml" +# 28362 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28644,7 +28383,7 @@ module Tables = struct let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = # 116 "" ( Some x ) -# 28648 "parsing/parser.ml" +# 28387 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28663,17 +28402,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 800 "parsing/parser.mly" +# 850 "parsing/parser.mly" (string) -# 28669 "parsing/parser.ml" +# 28408 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4004 "parsing/parser.mly" +# 4107 "parsing/parser.mly" ( _1 ) -# 28677 "parsing/parser.ml" +# 28416 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28705,18 +28444,18 @@ module Tables = struct } = _menhir_stack in let _3 : unit = Obj.magic _3 in let _2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 28711 "parsing/parser.ml" +# 28450 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (string) = -# 4005 "parsing/parser.mly" +# 4108 "parsing/parser.mly" ( _2 ) -# 28720 "parsing/parser.ml" +# 28459 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28770,9 +28509,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1418 "parsing/parser.mly" +# 1468 "parsing/parser.mly" ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) ) -# 28776 "parsing/parser.ml" +# 28515 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28825,9 +28564,9 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1420 "parsing/parser.mly" +# 1470 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 28831 "parsing/parser.ml" +# 28570 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28864,9 +28603,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.module_expr) = -# 1423 "parsing/parser.mly" +# 1473 "parsing/parser.mly" ( me (* TODO consider reloc *) ) -# 28870 "parsing/parser.ml" +# 28609 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28905,9 +28644,9 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1425 "parsing/parser.mly" +# 1475 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 28911 "parsing/parser.ml" +# 28650 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28958,25 +28697,25 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.module_expr) = let e = -# 1442 "parsing/parser.mly" +# 1492 "parsing/parser.mly" ( e ) -# 28964 "parsing/parser.ml" +# 28703 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 28971 "parsing/parser.ml" +# 28710 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1429 "parsing/parser.mly" +# 1479 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 28980 "parsing/parser.ml" +# 28719 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29047,11 +28786,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 29055 "parsing/parser.ml" +# 28794 "parsing/parser.ml" in let _endpos_ty_ = _endpos__1_ in @@ -29059,26 +28798,26 @@ module Tables = struct let _startpos = _startpos_e_ in let _loc = (_startpos, _endpos) in -# 1444 "parsing/parser.mly" +# 1494 "parsing/parser.mly" ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) -# 29065 "parsing/parser.ml" +# 28804 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 29073 "parsing/parser.ml" +# 28812 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1429 "parsing/parser.mly" +# 1479 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 29082 "parsing/parser.ml" +# 28821 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29164,11 +28903,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 29172 "parsing/parser.ml" +# 28911 "parsing/parser.ml" in let _endpos_ty2_ = _endpos__1_inlined1_ in @@ -29177,37 +28916,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 29185 "parsing/parser.ml" +# 28924 "parsing/parser.ml" in let _endpos = _endpos_ty2_ in let _startpos = _startpos_e_ in let _loc = (_startpos, _endpos) in -# 1446 "parsing/parser.mly" +# 1496 "parsing/parser.mly" ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) -# 29194 "parsing/parser.ml" +# 28933 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 29202 "parsing/parser.ml" +# 28941 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1429 "parsing/parser.mly" +# 1479 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 29211 "parsing/parser.ml" +# 28950 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29278,11 +29017,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 29286 "parsing/parser.ml" +# 29025 "parsing/parser.ml" in let _endpos_ty2_ = _endpos__1_ in @@ -29290,26 +29029,26 @@ module Tables = struct let _startpos = _startpos_e_ in let _loc = (_startpos, _endpos) in -# 1448 "parsing/parser.mly" +# 1498 "parsing/parser.mly" ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) -# 29296 "parsing/parser.ml" +# 29035 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 29304 "parsing/parser.ml" +# 29043 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1429 "parsing/parser.mly" +# 1479 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 29313 "parsing/parser.ml" +# 29052 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29369,17 +29108,17 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _3 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 29375 "parsing/parser.ml" +# 29114 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1431 "parsing/parser.mly" +# 1481 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 29383 "parsing/parser.ml" +# 29122 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29439,17 +29178,17 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _3 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 29445 "parsing/parser.ml" +# 29184 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1433 "parsing/parser.mly" +# 1483 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 29453 "parsing/parser.ml" +# 29192 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29502,17 +29241,17 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _3 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 29508 "parsing/parser.ml" +# 29247 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1435 "parsing/parser.mly" +# 1485 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 29516 "parsing/parser.ml" +# 29255 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29542,9 +29281,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1337 "parsing/parser.mly" +# 1387 "parsing/parser.mly" ( _1 ) -# 29548 "parsing/parser.ml" +# 29287 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29574,9 +29313,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1322 "parsing/parser.mly" +# 1372 "parsing/parser.mly" ( _1 ) -# 29580 "parsing/parser.ml" +# 29319 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29606,9 +29345,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = -# 1297 "parsing/parser.mly" +# 1347 "parsing/parser.mly" ( _1 ) -# 29612 "parsing/parser.ml" +# 29351 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29638,9 +29377,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 1302 "parsing/parser.mly" +# 1352 "parsing/parser.mly" ( _1 ) -# 29644 "parsing/parser.ml" +# 29383 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29670,9 +29409,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1327 "parsing/parser.mly" +# 1377 "parsing/parser.mly" ( _1 ) -# 29676 "parsing/parser.ml" +# 29415 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29702,9 +29441,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1332 "parsing/parser.mly" +# 1382 "parsing/parser.mly" ( _1 ) -# 29708 "parsing/parser.ml" +# 29447 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29734,9 +29473,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.module_expr) = -# 1292 "parsing/parser.mly" +# 1342 "parsing/parser.mly" ( _1 ) -# 29740 "parsing/parser.ml" +# 29479 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29766,9 +29505,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.module_type) = -# 1287 "parsing/parser.mly" +# 1337 "parsing/parser.mly" ( _1 ) -# 29772 "parsing/parser.ml" +# 29511 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29798,9 +29537,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1312 "parsing/parser.mly" +# 1362 "parsing/parser.mly" ( _1 ) -# 29804 "parsing/parser.ml" +# 29543 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29830,9 +29569,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = -# 1307 "parsing/parser.mly" +# 1357 "parsing/parser.mly" ( _1 ) -# 29836 "parsing/parser.ml" +# 29575 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29862,9 +29601,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1317 "parsing/parser.mly" +# 1367 "parsing/parser.mly" ( _1 ) -# 29868 "parsing/parser.ml" +# 29607 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29906,15 +29645,15 @@ module Tables = struct let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2901 "parsing/parser.mly" +# 3000 "parsing/parser.mly" ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 29912 "parsing/parser.ml" +# 29651 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 29918 "parsing/parser.ml" +# 29657 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29944,14 +29683,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = -# 2903 "parsing/parser.mly" +# 3002 "parsing/parser.mly" ( Pat.attr _1 _2 ) -# 29950 "parsing/parser.ml" +# 29689 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 29955 "parsing/parser.ml" +# 29694 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29974,14 +29713,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = -# 2905 "parsing/parser.mly" +# 3004 "parsing/parser.mly" ( _1 ) -# 29980 "parsing/parser.ml" +# 29719 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 29985 "parsing/parser.ml" +# 29724 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30026,15 +29765,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 30032 "parsing/parser.ml" +# 29771 "parsing/parser.ml" in -# 2908 "parsing/parser.mly" +# 3007 "parsing/parser.mly" ( Ppat_alias(_1, _3) ) -# 30038 "parsing/parser.ml" +# 29777 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -30042,21 +29781,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30048 "parsing/parser.ml" +# 29787 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 30054 "parsing/parser.ml" +# 29793 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 30060 "parsing/parser.ml" +# 29799 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30097,9 +29836,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2910 "parsing/parser.mly" +# 3009 "parsing/parser.mly" ( expecting _loc__3_ "identifier" ) -# 30103 "parsing/parser.ml" +# 29842 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -30107,21 +29846,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30113 "parsing/parser.ml" +# 29852 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 30119 "parsing/parser.ml" +# 29858 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 30125 "parsing/parser.ml" +# 29864 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30146,29 +29885,29 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2912 "parsing/parser.mly" +# 3011 "parsing/parser.mly" ( Ppat_tuple(List.rev _1) ) -# 30152 "parsing/parser.ml" +# 29891 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30160 "parsing/parser.ml" +# 29899 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 30166 "parsing/parser.ml" +# 29905 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 30172 "parsing/parser.ml" +# 29911 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30209,9 +29948,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2914 "parsing/parser.mly" +# 3013 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 30215 "parsing/parser.ml" +# 29954 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -30219,21 +29958,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30225 "parsing/parser.ml" +# 29964 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 30231 "parsing/parser.ml" +# 29970 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 30237 "parsing/parser.ml" +# 29976 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30272,30 +30011,30 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2916 "parsing/parser.mly" +# 3015 "parsing/parser.mly" ( Ppat_or(_1, _3) ) -# 30278 "parsing/parser.ml" +# 30017 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30287 "parsing/parser.ml" +# 30026 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 30293 "parsing/parser.ml" +# 30032 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 30299 "parsing/parser.ml" +# 30038 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30336,9 +30075,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2918 "parsing/parser.mly" +# 3017 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 30342 "parsing/parser.ml" +# 30081 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -30346,21 +30085,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30352 "parsing/parser.ml" +# 30091 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 30358 "parsing/parser.ml" +# 30097 "parsing/parser.ml" in -# 2889 "parsing/parser.mly" +# 2988 "parsing/parser.mly" ( _1 ) -# 30364 "parsing/parser.ml" +# 30103 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30408,24 +30147,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 30414 "parsing/parser.ml" +# 30153 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 30420 "parsing/parser.ml" +# 30159 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2891 "parsing/parser.mly" +# 2990 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_exception _3) _2) -# 30429 "parsing/parser.ml" +# 30168 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30462,9 +30201,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 3018 "parsing/parser.mly" +# 3121 "parsing/parser.mly" ( _3 :: _1 ) -# 30468 "parsing/parser.ml" +# 30207 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30501,9 +30240,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 3019 "parsing/parser.mly" +# 3122 "parsing/parser.mly" ( [_3; _1] ) -# 30507 "parsing/parser.ml" +# 30246 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30541,9 +30280,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3020 "parsing/parser.mly" +# 3123 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 30547 "parsing/parser.ml" +# 30286 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30580,9 +30319,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 3018 "parsing/parser.mly" +# 3121 "parsing/parser.mly" ( _3 :: _1 ) -# 30586 "parsing/parser.ml" +# 30325 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30619,9 +30358,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 3019 "parsing/parser.mly" +# 3122 "parsing/parser.mly" ( [_3; _1] ) -# 30625 "parsing/parser.ml" +# 30364 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30659,9 +30398,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3020 "parsing/parser.mly" +# 3123 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 30665 "parsing/parser.ml" +# 30404 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30684,9 +30423,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2924 "parsing/parser.mly" +# 3023 "parsing/parser.mly" ( _1 ) -# 30690 "parsing/parser.ml" +# 30429 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30722,15 +30461,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 30728 "parsing/parser.ml" +# 30467 "parsing/parser.ml" in -# 2927 "parsing/parser.mly" +# 3026 "parsing/parser.mly" ( Ppat_construct(_1, Some ([], _2)) ) -# 30734 "parsing/parser.ml" +# 30473 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -30738,15 +30477,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30744 "parsing/parser.ml" +# 30483 "parsing/parser.ml" in -# 2933 "parsing/parser.mly" +# 3032 "parsing/parser.mly" ( _1 ) -# 30750 "parsing/parser.ml" +# 30489 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30806,24 +30545,24 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let newtypes = -# 2643 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( xs ) -# 30812 "parsing/parser.ml" +# 30551 "parsing/parser.ml" in let constr = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 30821 "parsing/parser.ml" +# 30560 "parsing/parser.ml" in -# 2930 "parsing/parser.mly" +# 3029 "parsing/parser.mly" ( Ppat_construct(constr, Some (newtypes, pat)) ) -# 30827 "parsing/parser.ml" +# 30566 "parsing/parser.ml" in let _endpos__1_ = _endpos_pat_ in @@ -30831,15 +30570,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30837 "parsing/parser.ml" +# 30576 "parsing/parser.ml" in -# 2933 "parsing/parser.mly" +# 3032 "parsing/parser.mly" ( _1 ) -# 30843 "parsing/parser.ml" +# 30582 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30870,24 +30609,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2932 "parsing/parser.mly" +# 3031 "parsing/parser.mly" ( Ppat_variant(_1, Some _2) ) -# 30876 "parsing/parser.ml" +# 30615 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 30885 "parsing/parser.ml" +# 30624 "parsing/parser.ml" in -# 2933 "parsing/parser.mly" +# 3032 "parsing/parser.mly" ( _1 ) -# 30891 "parsing/parser.ml" +# 30630 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30935,24 +30674,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 30941 "parsing/parser.ml" +# 30680 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 30947 "parsing/parser.ml" +# 30686 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2935 "parsing/parser.mly" +# 3034 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_lazy _3) _2) -# 30956 "parsing/parser.ml" +# 30695 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30994,15 +30733,15 @@ module Tables = struct let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2901 "parsing/parser.mly" +# 3000 "parsing/parser.mly" ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 31000 "parsing/parser.ml" +# 30739 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31006 "parsing/parser.ml" +# 30745 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31032,14 +30771,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = -# 2903 "parsing/parser.mly" +# 3002 "parsing/parser.mly" ( Pat.attr _1 _2 ) -# 31038 "parsing/parser.ml" +# 30777 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31043 "parsing/parser.ml" +# 30782 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31062,14 +30801,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = -# 2905 "parsing/parser.mly" +# 3004 "parsing/parser.mly" ( _1 ) -# 31068 "parsing/parser.ml" +# 30807 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31073 "parsing/parser.ml" +# 30812 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31114,15 +30853,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31120 "parsing/parser.ml" +# 30859 "parsing/parser.ml" in -# 2908 "parsing/parser.mly" +# 3007 "parsing/parser.mly" ( Ppat_alias(_1, _3) ) -# 31126 "parsing/parser.ml" +# 30865 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -31130,21 +30869,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 31136 "parsing/parser.ml" +# 30875 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 31142 "parsing/parser.ml" +# 30881 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31148 "parsing/parser.ml" +# 30887 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31185,9 +30924,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2910 "parsing/parser.mly" +# 3009 "parsing/parser.mly" ( expecting _loc__3_ "identifier" ) -# 31191 "parsing/parser.ml" +# 30930 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -31195,21 +30934,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 31201 "parsing/parser.ml" +# 30940 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 31207 "parsing/parser.ml" +# 30946 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31213 "parsing/parser.ml" +# 30952 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31234,29 +30973,29 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2912 "parsing/parser.mly" +# 3011 "parsing/parser.mly" ( Ppat_tuple(List.rev _1) ) -# 31240 "parsing/parser.ml" +# 30979 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 31248 "parsing/parser.ml" +# 30987 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 31254 "parsing/parser.ml" +# 30993 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31260 "parsing/parser.ml" +# 30999 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31297,9 +31036,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2914 "parsing/parser.mly" +# 3013 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 31303 "parsing/parser.ml" +# 31042 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -31307,21 +31046,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 31313 "parsing/parser.ml" +# 31052 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 31319 "parsing/parser.ml" +# 31058 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31325 "parsing/parser.ml" +# 31064 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31360,30 +31099,30 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2916 "parsing/parser.mly" +# 3015 "parsing/parser.mly" ( Ppat_or(_1, _3) ) -# 31366 "parsing/parser.ml" +# 31105 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 31375 "parsing/parser.ml" +# 31114 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 31381 "parsing/parser.ml" +# 31120 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31387 "parsing/parser.ml" +# 31126 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31424,9 +31163,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2918 "parsing/parser.mly" +# 3017 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 31430 "parsing/parser.ml" +# 31169 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -31434,21 +31173,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 31440 "parsing/parser.ml" +# 31179 "parsing/parser.ml" in -# 2919 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _1 ) -# 31446 "parsing/parser.ml" +# 31185 "parsing/parser.ml" in -# 2896 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( _1 ) -# 31452 "parsing/parser.ml" +# 31191 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31467,9 +31206,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 31473 "parsing/parser.ml" +# 31212 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -31481,30 +31220,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31487 "parsing/parser.ml" +# 31226 "parsing/parser.ml" in -# 2312 "parsing/parser.mly" +# 2362 "parsing/parser.mly" ( Ppat_var _1 ) -# 31493 "parsing/parser.ml" +# 31232 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 31502 "parsing/parser.ml" +# 31241 "parsing/parser.ml" in -# 2314 "parsing/parser.mly" +# 2364 "parsing/parser.mly" ( _1 ) -# 31508 "parsing/parser.ml" +# 31247 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31528,23 +31267,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2313 "parsing/parser.mly" +# 2363 "parsing/parser.mly" ( Ppat_any ) -# 31534 "parsing/parser.ml" +# 31273 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 31542 "parsing/parser.ml" +# 31281 "parsing/parser.ml" in -# 2314 "parsing/parser.mly" +# 2364 "parsing/parser.mly" ( _1 ) -# 31548 "parsing/parser.ml" +# 31287 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31567,9 +31306,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.payload) = -# 4118 "parsing/parser.mly" +# 4221 "parsing/parser.mly" ( PStr _1 ) -# 31573 "parsing/parser.ml" +# 31312 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31599,9 +31338,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 4119 "parsing/parser.mly" +# 4222 "parsing/parser.mly" ( PSig _2 ) -# 31605 "parsing/parser.ml" +# 31344 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31631,9 +31370,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 4120 "parsing/parser.mly" +# 4223 "parsing/parser.mly" ( PTyp _2 ) -# 31637 "parsing/parser.ml" +# 31376 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31663,9 +31402,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 4121 "parsing/parser.mly" +# 4224 "parsing/parser.mly" ( PPat (_2, None) ) -# 31669 "parsing/parser.ml" +# 31408 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31709,9 +31448,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.payload) = -# 4122 "parsing/parser.mly" +# 4225 "parsing/parser.mly" ( PPat (_2, Some _4) ) -# 31715 "parsing/parser.ml" +# 31454 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31734,9 +31473,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = -# 3467 "parsing/parser.mly" +# 3570 "parsing/parser.mly" ( _1 ) -# 31740 "parsing/parser.ml" +# 31479 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31779,24 +31518,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 31783 "parsing/parser.ml" +# 31522 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 31788 "parsing/parser.ml" +# 31527 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 31794 "parsing/parser.ml" +# 31533 "parsing/parser.ml" in -# 3463 "parsing/parser.mly" +# 3566 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 31800 "parsing/parser.ml" +# 31539 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_xs_) in @@ -31804,15 +31543,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 31810 "parsing/parser.ml" +# 31549 "parsing/parser.ml" in -# 3469 "parsing/parser.mly" +# 3572 "parsing/parser.mly" ( _1 ) -# 31816 "parsing/parser.ml" +# 31555 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31835,14 +31574,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = -# 3498 "parsing/parser.mly" +# 3601 "parsing/parser.mly" ( _1 ) -# 31841 "parsing/parser.ml" +# 31580 "parsing/parser.ml" in -# 3467 "parsing/parser.mly" +# 3570 "parsing/parser.mly" ( _1 ) -# 31846 "parsing/parser.ml" +# 31585 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31881,33 +31620,33 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let _3 = -# 3498 "parsing/parser.mly" +# 3601 "parsing/parser.mly" ( _1 ) -# 31887 "parsing/parser.ml" +# 31626 "parsing/parser.ml" in let _1 = let _1 = let xs = # 253 "" ( List.rev xs ) -# 31894 "parsing/parser.ml" +# 31633 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 31899 "parsing/parser.ml" +# 31638 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 31905 "parsing/parser.ml" +# 31644 "parsing/parser.ml" in -# 3463 "parsing/parser.mly" +# 3566 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 31911 "parsing/parser.ml" +# 31650 "parsing/parser.ml" in let _startpos__1_ = _startpos_xs_ in @@ -31915,15 +31654,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 31921 "parsing/parser.ml" +# 31660 "parsing/parser.ml" in -# 3469 "parsing/parser.mly" +# 3572 "parsing/parser.mly" ( _1 ) -# 31927 "parsing/parser.ml" +# 31666 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31970,9 +31709,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 4079 "parsing/parser.mly" - ( Builtin_attributes.mk_internal ~loc:(make_loc _sloc) _2 _3 ) -# 31976 "parsing/parser.ml" +# 4182 "parsing/parser.mly" + ( mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 31715 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32053,9 +31792,9 @@ module Tables = struct let _v : (Parsetree.value_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 32059 "parsing/parser.ml" +# 31798 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -32065,30 +31804,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32071 "parsing/parser.ml" +# 31810 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 32079 "parsing/parser.ml" +# 31818 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3082 "parsing/parser.mly" +# 3185 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Val.mk id ty ~prim ~attrs ~loc ~docs, ext ) -# 32092 "parsing/parser.ml" +# 31831 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32104,14 +31843,14 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.private_flag) = let _1 = -# 3934 "parsing/parser.mly" +# 4037 "parsing/parser.mly" ( Public ) -# 32110 "parsing/parser.ml" +# 31849 "parsing/parser.ml" in -# 3931 "parsing/parser.mly" +# 4034 "parsing/parser.mly" ( _1 ) -# 32115 "parsing/parser.ml" +# 31854 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32134,14 +31873,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = let _1 = -# 3935 "parsing/parser.mly" +# 4038 "parsing/parser.mly" ( Private ) -# 32140 "parsing/parser.ml" +# 31879 "parsing/parser.ml" in -# 3931 "parsing/parser.mly" +# 4034 "parsing/parser.mly" ( _1 ) -# 32145 "parsing/parser.ml" +# 31884 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32157,9 +31896,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3968 "parsing/parser.mly" +# 4071 "parsing/parser.mly" ( Public, Concrete ) -# 32163 "parsing/parser.ml" +# 31902 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32182,9 +31921,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3969 "parsing/parser.mly" +# 4072 "parsing/parser.mly" ( Private, Concrete ) -# 32188 "parsing/parser.ml" +# 31927 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32207,9 +31946,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3970 "parsing/parser.mly" +# 4073 "parsing/parser.mly" ( Public, Virtual ) -# 32213 "parsing/parser.ml" +# 31952 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32239,9 +31978,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3971 "parsing/parser.mly" +# 4074 "parsing/parser.mly" ( Private, Virtual ) -# 32245 "parsing/parser.ml" +# 31984 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32271,9 +32010,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3972 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( Private, Virtual ) -# 32277 "parsing/parser.ml" +# 32016 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32289,9 +32028,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.rec_flag) = -# 3912 "parsing/parser.mly" +# 4015 "parsing/parser.mly" ( Nonrecursive ) -# 32295 "parsing/parser.ml" +# 32034 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32314,9 +32053,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.rec_flag) = -# 3913 "parsing/parser.mly" +# 4016 "parsing/parser.mly" ( Recursive ) -# 32320 "parsing/parser.ml" +# 32059 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32342,12 +32081,12 @@ module Tables = struct (Longident.t Asttypes.loc * Parsetree.expression) list) = let eo = # 124 "" ( None ) -# 32346 "parsing/parser.ml" +# 32085 "parsing/parser.ml" in -# 2821 "parsing/parser.mly" +# 2920 "parsing/parser.mly" ( eo, fields ) -# 32351 "parsing/parser.ml" +# 32090 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32388,18 +32127,18 @@ module Tables = struct let x = # 191 "" ( x ) -# 32392 "parsing/parser.ml" +# 32131 "parsing/parser.ml" in # 126 "" ( Some x ) -# 32397 "parsing/parser.ml" +# 32136 "parsing/parser.ml" in -# 2821 "parsing/parser.mly" +# 2920 "parsing/parser.mly" ( eo, fields ) -# 32403 "parsing/parser.ml" +# 32142 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32424,17 +32163,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 3267 "parsing/parser.mly" +# 3370 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32433 "parsing/parser.ml" +# 32172 "parsing/parser.ml" in -# 1179 "parsing/parser.mly" +# 1229 "parsing/parser.mly" ( [x] ) -# 32438 "parsing/parser.ml" +# 32177 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32459,17 +32198,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 3267 "parsing/parser.mly" +# 3370 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32468 "parsing/parser.ml" +# 32207 "parsing/parser.ml" in -# 1182 "parsing/parser.mly" +# 1232 "parsing/parser.mly" ( [x] ) -# 32473 "parsing/parser.ml" +# 32212 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32501,17 +32240,17 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 3267 "parsing/parser.mly" +# 3370 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32510 "parsing/parser.ml" +# 32249 "parsing/parser.ml" in -# 1186 "parsing/parser.mly" +# 1236 "parsing/parser.mly" ( x :: xs ) -# 32515 "parsing/parser.ml" +# 32254 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32537,23 +32276,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3397 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32546 "parsing/parser.ml" +# 32285 "parsing/parser.ml" in -# 3391 "parsing/parser.mly" +# 3494 "parsing/parser.mly" ( _1 ) -# 32551 "parsing/parser.ml" +# 32290 "parsing/parser.ml" in -# 1179 "parsing/parser.mly" +# 1229 "parsing/parser.mly" ( [x] ) -# 32557 "parsing/parser.ml" +# 32296 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32576,14 +32315,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3393 "parsing/parser.mly" +# 3496 "parsing/parser.mly" ( _1 ) -# 32582 "parsing/parser.ml" +# 32321 "parsing/parser.ml" in -# 1179 "parsing/parser.mly" +# 1229 "parsing/parser.mly" ( [x] ) -# 32587 "parsing/parser.ml" +# 32326 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32609,23 +32348,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3397 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32618 "parsing/parser.ml" +# 32357 "parsing/parser.ml" in -# 3391 "parsing/parser.mly" +# 3494 "parsing/parser.mly" ( _1 ) -# 32623 "parsing/parser.ml" +# 32362 "parsing/parser.ml" in -# 1182 "parsing/parser.mly" +# 1232 "parsing/parser.mly" ( [x] ) -# 32629 "parsing/parser.ml" +# 32368 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32648,14 +32387,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3393 "parsing/parser.mly" +# 3496 "parsing/parser.mly" ( _1 ) -# 32654 "parsing/parser.ml" +# 32393 "parsing/parser.ml" in -# 1182 "parsing/parser.mly" +# 1232 "parsing/parser.mly" ( [x] ) -# 32659 "parsing/parser.ml" +# 32398 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32688,23 +32427,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3397 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32697 "parsing/parser.ml" +# 32436 "parsing/parser.ml" in -# 3391 "parsing/parser.mly" +# 3494 "parsing/parser.mly" ( _1 ) -# 32702 "parsing/parser.ml" +# 32441 "parsing/parser.ml" in -# 1186 "parsing/parser.mly" +# 1236 "parsing/parser.mly" ( x :: xs ) -# 32708 "parsing/parser.ml" +# 32447 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32734,14 +32473,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3393 "parsing/parser.mly" +# 3496 "parsing/parser.mly" ( _1 ) -# 32740 "parsing/parser.ml" +# 32479 "parsing/parser.ml" in -# 1186 "parsing/parser.mly" +# 1236 "parsing/parser.mly" ( x :: xs ) -# 32745 "parsing/parser.ml" +# 32484 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32766,17 +32505,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3397 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32775 "parsing/parser.ml" +# 32514 "parsing/parser.ml" in -# 1179 "parsing/parser.mly" +# 1229 "parsing/parser.mly" ( [x] ) -# 32780 "parsing/parser.ml" +# 32519 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32801,17 +32540,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3397 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32810 "parsing/parser.ml" +# 32549 "parsing/parser.ml" in -# 1182 "parsing/parser.mly" +# 1232 "parsing/parser.mly" ( [x] ) -# 32815 "parsing/parser.ml" +# 32554 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32843,17 +32582,17 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3397 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 32852 "parsing/parser.ml" +# 32591 "parsing/parser.ml" in -# 1186 "parsing/parser.mly" +# 1236 "parsing/parser.mly" ( x :: xs ) -# 32857 "parsing/parser.ml" +# 32596 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32869,9 +32608,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = -# 1045 "parsing/parser.mly" +# 1095 "parsing/parser.mly" ( [] ) -# 32875 "parsing/parser.ml" +# 32614 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32928,21 +32667,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2181 "parsing/parser.mly" +# 2231 "parsing/parser.mly" ( _1, _3, make_loc _sloc ) -# 32934 "parsing/parser.ml" +# 32673 "parsing/parser.ml" in # 183 "" ( x ) -# 32940 "parsing/parser.ml" +# 32679 "parsing/parser.ml" in -# 1047 "parsing/parser.mly" +# 1097 "parsing/parser.mly" ( x :: xs ) -# 32946 "parsing/parser.ml" +# 32685 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32960,14 +32699,71 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : (Lexing.position * Parsetree.functor_parameter) = Obj.magic x in + let x : (Extensions.Comprehensions.clause) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 1059 "parsing/parser.mly" + let _v : (Extensions.Comprehensions.clause list) = +# 1109 "parsing/parser.mly" ( [ x ] ) -# 32971 "parsing/parser.ml" +# 32710 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let x : (Extensions.Comprehensions.clause) = Obj.magic x in + let xs : (Extensions.Comprehensions.clause list) = Obj.magic xs in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_x_ in + let _v : (Extensions.Comprehensions.clause list) = +# 1111 "parsing/parser.mly" + ( x :: xs ) +# 32742 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x : (Lexing.position * Parsetree.functor_parameter) = Obj.magic x in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : ((Lexing.position * Parsetree.functor_parameter) list) = +# 1109 "parsing/parser.mly" + ( [ x ] ) +# 32767 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32997,9 +32793,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 1061 "parsing/parser.mly" +# 1111 "parsing/parser.mly" ( x :: xs ) -# 33003 "parsing/parser.ml" +# 32799 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33022,9 +32818,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 1059 "parsing/parser.mly" +# 1109 "parsing/parser.mly" ( [ x ] ) -# 33028 "parsing/parser.ml" +# 32824 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33054,9 +32850,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 1061 "parsing/parser.mly" +# 1111 "parsing/parser.mly" ( x :: xs ) -# 33060 "parsing/parser.ml" +# 32856 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33079,9 +32875,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Asttypes.label list) = -# 1059 "parsing/parser.mly" +# 1109 "parsing/parser.mly" ( [ x ] ) -# 33085 "parsing/parser.ml" +# 32881 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33111,9 +32907,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Asttypes.label list) = -# 1061 "parsing/parser.mly" +# 1111 "parsing/parser.mly" ( x :: xs ) -# 33117 "parsing/parser.ml" +# 32913 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33149,21 +32945,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33155 "parsing/parser.ml" +# 32951 "parsing/parser.ml" in -# 3455 "parsing/parser.mly" +# 3558 "parsing/parser.mly" ( _2 ) -# 33161 "parsing/parser.ml" +# 32957 "parsing/parser.ml" in -# 1059 "parsing/parser.mly" +# 1109 "parsing/parser.mly" ( [ x ] ) -# 33167 "parsing/parser.ml" +# 32963 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33206,21 +33002,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33212 "parsing/parser.ml" +# 33008 "parsing/parser.ml" in -# 3455 "parsing/parser.mly" +# 3558 "parsing/parser.mly" ( _2 ) -# 33218 "parsing/parser.ml" +# 33014 "parsing/parser.ml" in -# 1061 "parsing/parser.mly" +# 1111 "parsing/parser.mly" ( x :: xs ) -# 33224 "parsing/parser.ml" +# 33020 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33245,12 +33041,12 @@ module Tables = struct let _v : (Parsetree.case list) = let _1 = # 124 "" ( None ) -# 33249 "parsing/parser.ml" +# 33045 "parsing/parser.ml" in -# 1150 "parsing/parser.mly" +# 1200 "parsing/parser.mly" ( [x] ) -# 33254 "parsing/parser.ml" +# 33050 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33284,13 +33080,13 @@ module Tables = struct # 126 "" ( Some x ) -# 33288 "parsing/parser.ml" +# 33084 "parsing/parser.ml" in -# 1150 "parsing/parser.mly" +# 1200 "parsing/parser.mly" ( [x] ) -# 33294 "parsing/parser.ml" +# 33090 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33327,9 +33123,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.case list) = -# 1154 "parsing/parser.mly" +# 1204 "parsing/parser.mly" ( x :: xs ) -# 33333 "parsing/parser.ml" +# 33129 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33353,20 +33149,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3498 "parsing/parser.mly" +# 3601 "parsing/parser.mly" ( _1 ) -# 33359 "parsing/parser.ml" +# 33155 "parsing/parser.ml" in -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33364 "parsing/parser.ml" +# 33160 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33370 "parsing/parser.ml" +# 33166 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33404,20 +33200,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3498 "parsing/parser.mly" +# 3601 "parsing/parser.mly" ( _1 ) -# 33410 "parsing/parser.ml" +# 33206 "parsing/parser.ml" in -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 33415 "parsing/parser.ml" +# 33211 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33421 "parsing/parser.ml" +# 33217 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33435,19 +33231,19 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : (Extensions.comprehension_clause) = Obj.magic x in + let x : (Extensions.Comprehensions.clause_binding) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : (Extensions.comprehension_clause list) = let xs = -# 1085 "parsing/parser.mly" + let _v : (Extensions.Comprehensions.clause_binding list) = let xs = +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33446 "parsing/parser.ml" +# 33242 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33451 "parsing/parser.ml" +# 33247 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33477,21 +33273,21 @@ module Tables = struct }; }; } = _menhir_stack in - let x : (Extensions.comprehension_clause) = Obj.magic x in + let x : (Extensions.Comprehensions.clause_binding) = Obj.magic x in let _2 : unit = Obj.magic _2 in - let xs : (Extensions.comprehension_clause list) = Obj.magic xs in + let xs : (Extensions.Comprehensions.clause_binding list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in - let _v : (Extensions.comprehension_clause list) = let xs = -# 1089 "parsing/parser.mly" + let _v : (Extensions.Comprehensions.clause_binding list) = let xs = +# 1139 "parsing/parser.mly" ( x :: xs ) -# 33490 "parsing/parser.ml" +# 33286 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33495 "parsing/parser.ml" +# 33291 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33514,14 +33310,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33520 "parsing/parser.ml" +# 33316 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33525 "parsing/parser.ml" +# 33321 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33558,14 +33354,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 33564 "parsing/parser.ml" +# 33360 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33569 "parsing/parser.ml" +# 33365 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33588,14 +33384,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33594 "parsing/parser.ml" +# 33390 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33599 "parsing/parser.ml" +# 33395 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33632,14 +33428,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 33638 "parsing/parser.ml" +# 33434 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33643 "parsing/parser.ml" +# 33439 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33662,14 +33458,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33668 "parsing/parser.ml" +# 33464 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33673 "parsing/parser.ml" +# 33469 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33706,14 +33502,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 33712 "parsing/parser.ml" +# 33508 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33717 "parsing/parser.ml" +# 33513 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33736,14 +33532,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let xs = -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33742 "parsing/parser.ml" +# 33538 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33747 "parsing/parser.ml" +# 33543 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33780,14 +33576,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let xs = -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 33786 "parsing/parser.ml" +# 33582 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33791 "parsing/parser.ml" +# 33587 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33812,30 +33608,30 @@ module Tables = struct let _v : (Parsetree.core_type list) = let xs = let x = let gbl = -# 3948 "parsing/parser.mly" +# 4051 "parsing/parser.mly" ( Nothing ) -# 33818 "parsing/parser.ml" +# 33614 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__0_, _endpos__0_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 33827 "parsing/parser.ml" +# 33623 "parsing/parser.ml" in -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33833 "parsing/parser.ml" +# 33629 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33839 "parsing/parser.ml" +# 33635 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33867,30 +33663,30 @@ module Tables = struct let _v : (Parsetree.core_type list) = let xs = let x = let gbl = -# 3949 "parsing/parser.mly" +# 4052 "parsing/parser.mly" ( Global ) -# 33873 "parsing/parser.ml" +# 33669 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__1_, _startpos__1_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 33882 "parsing/parser.ml" +# 33678 "parsing/parser.ml" in -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33888 "parsing/parser.ml" +# 33684 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33894 "parsing/parser.ml" +# 33690 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33922,30 +33718,30 @@ module Tables = struct let _v : (Parsetree.core_type list) = let xs = let x = let gbl = -# 3950 "parsing/parser.mly" +# 4053 "parsing/parser.mly" ( Nonlocal ) -# 33928 "parsing/parser.ml" +# 33724 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__1_, _startpos__1_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 33937 "parsing/parser.ml" +# 33733 "parsing/parser.ml" in -# 1085 "parsing/parser.mly" +# 1135 "parsing/parser.mly" ( [ x ] ) -# 33943 "parsing/parser.ml" +# 33739 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 33949 "parsing/parser.ml" +# 33745 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33985,30 +33781,30 @@ module Tables = struct let x = let _endpos__0_ = _endpos__2_ in let gbl = -# 3948 "parsing/parser.mly" +# 4051 "parsing/parser.mly" ( Nothing ) -# 33991 "parsing/parser.ml" +# 33787 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__0_, _endpos__0_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 34000 "parsing/parser.ml" +# 33796 "parsing/parser.ml" in -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 34006 "parsing/parser.ml" +# 33802 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 34012 "parsing/parser.ml" +# 33808 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34054,30 +33850,30 @@ module Tables = struct let _v : (Parsetree.core_type list) = let xs = let x = let gbl = -# 3949 "parsing/parser.mly" +# 4052 "parsing/parser.mly" ( Global ) -# 34060 "parsing/parser.ml" +# 33856 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__1_, _startpos__1_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 34069 "parsing/parser.ml" +# 33865 "parsing/parser.ml" in -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 34075 "parsing/parser.ml" +# 33871 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 34081 "parsing/parser.ml" +# 33877 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34123,30 +33919,30 @@ module Tables = struct let _v : (Parsetree.core_type list) = let xs = let x = let gbl = -# 3950 "parsing/parser.mly" +# 4053 "parsing/parser.mly" ( Nonlocal ) -# 34129 "parsing/parser.ml" +# 33925 "parsing/parser.ml" in let (_endpos_gbl_, _startpos_gbl_) = (_endpos__1_, _startpos__1_) in let _loc_gbl_ = (_startpos_gbl_, _endpos_gbl_) in -# 3324 "parsing/parser.mly" +# 3427 "parsing/parser.mly" ( mkcty_global_maybe gbl cty (make_loc _loc_gbl_) ) -# 34138 "parsing/parser.ml" +# 33934 "parsing/parser.ml" in -# 1089 "parsing/parser.mly" +# 1139 "parsing/parser.mly" ( x :: xs ) -# 34144 "parsing/parser.ml" +# 33940 "parsing/parser.ml" in -# 1093 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 34150 "parsing/parser.ml" +# 33946 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34183,9 +33979,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = -# 1116 "parsing/parser.mly" +# 1166 "parsing/parser.mly" ( x :: xs ) -# 34189 "parsing/parser.ml" +# 33985 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34222,9 +34018,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.core_type list) = -# 1120 "parsing/parser.mly" +# 1170 "parsing/parser.mly" ( [ x2; x1 ] ) -# 34228 "parsing/parser.ml" +# 34024 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34261,9 +34057,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.expression list) = -# 1116 "parsing/parser.mly" +# 1166 "parsing/parser.mly" ( x :: xs ) -# 34267 "parsing/parser.ml" +# 34063 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34300,9 +34096,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.expression list) = -# 1120 "parsing/parser.mly" +# 1170 "parsing/parser.mly" ( [ x2; x1 ] ) -# 34306 "parsing/parser.ml" +# 34102 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34339,9 +34135,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = -# 1116 "parsing/parser.mly" +# 1166 "parsing/parser.mly" ( x :: xs ) -# 34345 "parsing/parser.ml" +# 34141 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34378,9 +34174,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.core_type list) = -# 1120 "parsing/parser.mly" +# 1170 "parsing/parser.mly" ( [ x2; x1 ] ) -# 34384 "parsing/parser.ml" +# 34180 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34403,9 +34199,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.row_field) = -# 3673 "parsing/parser.mly" +# 3776 "parsing/parser.mly" ( _1 ) -# 34409 "parsing/parser.ml" +# 34205 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34431,9 +34227,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3675 "parsing/parser.mly" +# 3778 "parsing/parser.mly" ( Rf.inherit_ ~loc:(make_loc _sloc) _1 ) -# 34437 "parsing/parser.ml" +# 34233 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34458,12 +34254,12 @@ module Tables = struct let _v : (Parsetree.expression list) = let _2 = # 124 "" ( None ) -# 34462 "parsing/parser.ml" +# 34258 "parsing/parser.ml" in -# 1137 "parsing/parser.mly" +# 1187 "parsing/parser.mly" ( [x] ) -# 34467 "parsing/parser.ml" +# 34263 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34497,13 +34293,13 @@ module Tables = struct # 126 "" ( Some x ) -# 34501 "parsing/parser.ml" +# 34297 "parsing/parser.ml" in -# 1137 "parsing/parser.mly" +# 1187 "parsing/parser.mly" ( [x] ) -# 34507 "parsing/parser.ml" +# 34303 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34540,9 +34336,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.expression list) = -# 1141 "parsing/parser.mly" +# 1191 "parsing/parser.mly" ( x :: xs ) -# 34546 "parsing/parser.ml" +# 34342 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34568,9 +34364,9 @@ module Tables = struct } = _menhir_stack in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 34574 "parsing/parser.ml" +# 34370 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -34578,26 +34374,26 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 34582 "parsing/parser.ml" +# 34378 "parsing/parser.ml" in let x = let label = let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 34589 "parsing/parser.ml" +# 34385 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 34597 "parsing/parser.ml" +# 34393 "parsing/parser.ml" in -# 2844 "parsing/parser.mly" +# 2943 "parsing/parser.mly" ( let label, e = match oe with | None -> @@ -34607,13 +34403,13 @@ module Tables = struct label, e in label, e ) -# 34611 "parsing/parser.ml" +# 34407 "parsing/parser.ml" in -# 1137 "parsing/parser.mly" +# 1187 "parsing/parser.mly" ( [x] ) -# 34617 "parsing/parser.ml" +# 34413 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34646,9 +34442,9 @@ module Tables = struct let x : unit = Obj.magic x in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 34652 "parsing/parser.ml" +# 34448 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -34656,26 +34452,26 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 34660 "parsing/parser.ml" +# 34456 "parsing/parser.ml" in let x = let label = let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 34667 "parsing/parser.ml" +# 34463 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 34675 "parsing/parser.ml" +# 34471 "parsing/parser.ml" in -# 2844 "parsing/parser.mly" +# 2943 "parsing/parser.mly" ( let label, e = match oe with | None -> @@ -34685,13 +34481,13 @@ module Tables = struct label, e in label, e ) -# 34689 "parsing/parser.ml" +# 34485 "parsing/parser.ml" in -# 1137 "parsing/parser.mly" +# 1187 "parsing/parser.mly" ( [x] ) -# 34695 "parsing/parser.ml" +# 34491 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34731,9 +34527,9 @@ module Tables = struct let _2 : unit = Obj.magic _2 in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 34737 "parsing/parser.ml" +# 34533 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -34741,21 +34537,21 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let x = let label = let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 34747 "parsing/parser.ml" +# 34543 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 34755 "parsing/parser.ml" +# 34551 "parsing/parser.ml" in -# 2844 "parsing/parser.mly" +# 2943 "parsing/parser.mly" ( let label, e = match oe with | None -> @@ -34765,13 +34561,13 @@ module Tables = struct label, e in label, e ) -# 34769 "parsing/parser.ml" +# 34565 "parsing/parser.ml" in -# 1141 "parsing/parser.mly" +# 1191 "parsing/parser.mly" ( x :: xs ) -# 34775 "parsing/parser.ml" +# 34571 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34796,12 +34592,12 @@ module Tables = struct let _v : (Parsetree.pattern list) = let _2 = # 124 "" ( None ) -# 34800 "parsing/parser.ml" +# 34596 "parsing/parser.ml" in -# 1137 "parsing/parser.mly" +# 1187 "parsing/parser.mly" ( [x] ) -# 34805 "parsing/parser.ml" +# 34601 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34835,13 +34631,13 @@ module Tables = struct # 126 "" ( Some x ) -# 34839 "parsing/parser.ml" +# 34635 "parsing/parser.ml" in -# 1137 "parsing/parser.mly" +# 1187 "parsing/parser.mly" ( [x] ) -# 34845 "parsing/parser.ml" +# 34641 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34878,9 +34674,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.pattern list) = -# 1141 "parsing/parser.mly" +# 1191 "parsing/parser.mly" ( x :: xs ) -# 34884 "parsing/parser.ml" +# 34680 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34919,7 +34715,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 34923 "parsing/parser.ml" +# 34719 "parsing/parser.ml" in let x = let label = @@ -34927,9 +34723,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 34933 "parsing/parser.ml" +# 34729 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -34937,7 +34733,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2827 "parsing/parser.mly" +# 2926 "parsing/parser.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -34947,13 +34743,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 34951 "parsing/parser.ml" +# 34747 "parsing/parser.ml" in -# 1137 "parsing/parser.mly" +# 1187 "parsing/parser.mly" ( [x] ) -# 34957 "parsing/parser.ml" +# 34753 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34999,7 +34795,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 35003 "parsing/parser.ml" +# 34799 "parsing/parser.ml" in let x = let label = @@ -35007,9 +34803,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 35013 "parsing/parser.ml" +# 34809 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -35017,7 +34813,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2827 "parsing/parser.mly" +# 2926 "parsing/parser.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -35027,13 +34823,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 35031 "parsing/parser.ml" +# 34827 "parsing/parser.ml" in -# 1137 "parsing/parser.mly" +# 1187 "parsing/parser.mly" ( [x] ) -# 35037 "parsing/parser.ml" +# 34833 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35089,9 +34885,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 35095 "parsing/parser.ml" +# 34891 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -35099,7 +34895,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2827 "parsing/parser.mly" +# 2926 "parsing/parser.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -35109,13 +34905,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 35113 "parsing/parser.ml" +# 34909 "parsing/parser.ml" in -# 1141 "parsing/parser.mly" +# 1191 "parsing/parser.mly" ( x :: xs ) -# 35119 "parsing/parser.ml" +# 34915 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35138,9 +34934,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = -# 2270 "parsing/parser.mly" +# 2320 "parsing/parser.mly" ( _1 ) -# 35144 "parsing/parser.ml" +# 34940 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35170,9 +34966,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2271 "parsing/parser.mly" +# 2321 "parsing/parser.mly" ( _1 ) -# 35176 "parsing/parser.ml" +# 34972 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35210,24 +35006,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2273 "parsing/parser.mly" +# 2323 "parsing/parser.mly" ( Pexp_sequence(_1, _3) ) -# 35216 "parsing/parser.ml" +# 35012 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 35225 "parsing/parser.ml" +# 35021 "parsing/parser.ml" in -# 2274 "parsing/parser.mly" +# 2324 "parsing/parser.mly" ( _1 ) -# 35231 "parsing/parser.ml" +# 35027 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35281,11 +35077,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2276 "parsing/parser.mly" +# 2326 "parsing/parser.mly" ( let seq = mkexp ~loc:_sloc (Pexp_sequence (_1, _5)) in let payload = PStr [mkstrexp seq []] in mkexp ~loc:_sloc (Pexp_extension (_4, payload)) ) -# 35289 "parsing/parser.ml" +# 35085 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35353,18 +35149,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Asttypes.loc option) = let attrs = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 35359 "parsing/parser.ml" +# 35155 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined4_ in let attrs2 = let _1 = _1_inlined3 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 35368 "parsing/parser.ml" +# 35164 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -35374,17 +35170,17 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 35380 "parsing/parser.ml" +# 35176 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 35388 "parsing/parser.ml" +# 35184 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in @@ -35392,14 +35188,14 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3297 "parsing/parser.mly" +# 3400 "parsing/parser.mly" ( let vars, args, res = vars_args_res in let loc = make_loc (_startpos, _endpos_attrs2_) in let docs = symbol_docs _sloc in Te.mk_exception ~attrs (Te.decl id ~vars ~args ?res ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 35403 "parsing/parser.ml" +# 35199 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35425,21 +35221,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 35429 "parsing/parser.ml" +# 35225 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 960 "parsing/parser.mly" +# 1010 "parsing/parser.mly" ( extra_sig _startpos _endpos _1 ) -# 35437 "parsing/parser.ml" +# 35233 "parsing/parser.ml" in -# 1719 "parsing/parser.mly" +# 1769 "parsing/parser.mly" ( _1 ) -# 35443 "parsing/parser.ml" +# 35239 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35471,9 +35267,9 @@ module Tables = struct let _v : (Parsetree.signature_item) = let _2 = let _1 = _1_inlined1 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 35477 "parsing/parser.ml" +# 35273 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -35481,10 +35277,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1734 "parsing/parser.mly" +# 1784 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mksig ~loc:_sloc (Psig_extension (_1, (add_docs_attrs docs _2))) ) -# 35488 "parsing/parser.ml" +# 35284 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35508,23 +35304,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1738 "parsing/parser.mly" +# 1788 "parsing/parser.mly" ( Psig_attribute _1 ) -# 35514 "parsing/parser.ml" +# 35310 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1008 "parsing/parser.mly" +# 1058 "parsing/parser.mly" ( mksig ~loc:_sloc _1 ) -# 35522 "parsing/parser.ml" +# 35318 "parsing/parser.ml" in -# 1740 "parsing/parser.mly" +# 1790 "parsing/parser.mly" ( _1 ) -# 35528 "parsing/parser.ml" +# 35324 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35548,23 +35344,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1743 "parsing/parser.mly" +# 1793 "parsing/parser.mly" ( psig_value _1 ) -# 35554 "parsing/parser.ml" +# 35350 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35562 "parsing/parser.ml" +# 35358 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 35568 "parsing/parser.ml" +# 35364 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35588,23 +35384,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1745 "parsing/parser.mly" +# 1795 "parsing/parser.mly" ( psig_value _1 ) -# 35594 "parsing/parser.ml" +# 35390 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35602 "parsing/parser.ml" +# 35398 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 35608 "parsing/parser.ml" +# 35404 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35639,26 +35435,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1198 "parsing/parser.mly" +# 1248 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 35645 "parsing/parser.ml" +# 35441 "parsing/parser.ml" in -# 3118 "parsing/parser.mly" +# 3221 "parsing/parser.mly" ( _1 ) -# 35650 "parsing/parser.ml" +# 35446 "parsing/parser.ml" in -# 3101 "parsing/parser.mly" +# 3204 "parsing/parser.mly" ( _1 ) -# 35656 "parsing/parser.ml" +# 35452 "parsing/parser.ml" in -# 1747 "parsing/parser.mly" +# 1797 "parsing/parser.mly" ( psig_type _1 ) -# 35662 "parsing/parser.ml" +# 35458 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -35666,15 +35462,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35672 "parsing/parser.ml" +# 35468 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 35678 "parsing/parser.ml" +# 35474 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35709,26 +35505,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1198 "parsing/parser.mly" +# 1248 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 35715 "parsing/parser.ml" +# 35511 "parsing/parser.ml" in -# 3118 "parsing/parser.mly" +# 3221 "parsing/parser.mly" ( _1 ) -# 35720 "parsing/parser.ml" +# 35516 "parsing/parser.ml" in -# 3106 "parsing/parser.mly" +# 3209 "parsing/parser.mly" ( _1 ) -# 35726 "parsing/parser.ml" +# 35522 "parsing/parser.ml" in -# 1749 "parsing/parser.mly" +# 1799 "parsing/parser.mly" ( psig_typesubst _1 ) -# 35732 "parsing/parser.ml" +# 35528 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -35736,15 +35532,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35742 "parsing/parser.ml" +# 35538 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 35748 "parsing/parser.ml" +# 35544 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35829,16 +35625,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 35835 "parsing/parser.ml" +# 35631 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1190 "parsing/parser.mly" +# 1240 "parsing/parser.mly" ( List.rev xs ) -# 35842 "parsing/parser.ml" +# 35638 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -35846,46 +35642,46 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 35852 "parsing/parser.ml" +# 35648 "parsing/parser.ml" in let _4 = -# 3920 "parsing/parser.mly" +# 4023 "parsing/parser.mly" ( Recursive ) -# 35858 "parsing/parser.ml" +# 35654 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 35865 "parsing/parser.ml" +# 35661 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3384 "parsing/parser.mly" +# 3487 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 35877 "parsing/parser.ml" +# 35673 "parsing/parser.ml" in -# 3371 "parsing/parser.mly" +# 3474 "parsing/parser.mly" ( _1 ) -# 35883 "parsing/parser.ml" +# 35679 "parsing/parser.ml" in -# 1751 "parsing/parser.mly" +# 1801 "parsing/parser.mly" ( psig_typext _1 ) -# 35889 "parsing/parser.ml" +# 35685 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -35893,15 +35689,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35899 "parsing/parser.ml" +# 35695 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 35905 "parsing/parser.ml" +# 35701 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35993,16 +35789,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 35999 "parsing/parser.ml" +# 35795 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1190 "parsing/parser.mly" +# 1240 "parsing/parser.mly" ( List.rev xs ) -# 36006 "parsing/parser.ml" +# 35802 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -36010,9 +35806,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36016 "parsing/parser.ml" +# 35812 "parsing/parser.ml" in let _4 = @@ -36021,41 +35817,41 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3922 "parsing/parser.mly" +# 4025 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 36027 "parsing/parser.ml" +# 35823 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 36035 "parsing/parser.ml" +# 35831 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3384 "parsing/parser.mly" +# 3487 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 36047 "parsing/parser.ml" +# 35843 "parsing/parser.ml" in -# 3371 "parsing/parser.mly" +# 3474 "parsing/parser.mly" ( _1 ) -# 36053 "parsing/parser.ml" +# 35849 "parsing/parser.ml" in -# 1751 "parsing/parser.mly" +# 1801 "parsing/parser.mly" ( psig_typext _1 ) -# 36059 "parsing/parser.ml" +# 35855 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -36063,15 +35859,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36069 "parsing/parser.ml" +# 35865 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36075 "parsing/parser.ml" +# 35871 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36095,23 +35891,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1753 "parsing/parser.mly" +# 1803 "parsing/parser.mly" ( psig_exception _1 ) -# 36101 "parsing/parser.ml" +# 35897 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36109 "parsing/parser.ml" +# 35905 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36115 "parsing/parser.ml" +# 35911 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36174,9 +35970,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 36180 "parsing/parser.ml" +# 35976 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -36186,37 +35982,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36192 "parsing/parser.ml" +# 35988 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 36200 "parsing/parser.ml" +# 35996 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1784 "parsing/parser.mly" +# 1834 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Md.mk name body ~attrs ~loc ~docs, ext ) -# 36214 "parsing/parser.ml" +# 36010 "parsing/parser.ml" in -# 1755 "parsing/parser.mly" +# 1805 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 36220 "parsing/parser.ml" +# 36016 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -36224,15 +36020,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36230 "parsing/parser.ml" +# 36026 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36236 "parsing/parser.ml" +# 36032 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36302,9 +36098,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 36308 "parsing/parser.ml" +# 36104 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -36315,9 +36111,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36321 "parsing/parser.ml" +# 36117 "parsing/parser.ml" in let (_endpos_id_, _startpos_id_) = (_endpos__1_, _startpos__1_) in @@ -36325,9 +36121,9 @@ module Tables = struct let _symbolstartpos = _startpos_id_ in let _sloc = (_symbolstartpos, _endpos) in -# 1821 "parsing/parser.mly" +# 1871 "parsing/parser.mly" ( Mty.alias ~loc:(make_loc _sloc) id ) -# 36331 "parsing/parser.ml" +# 36127 "parsing/parser.ml" in let name = @@ -36336,37 +36132,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36342 "parsing/parser.ml" +# 36138 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 36350 "parsing/parser.ml" +# 36146 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1812 "parsing/parser.mly" +# 1862 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Md.mk name body ~attrs ~loc ~docs, ext ) -# 36364 "parsing/parser.ml" +# 36160 "parsing/parser.ml" in -# 1757 "parsing/parser.mly" +# 1807 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 36370 "parsing/parser.ml" +# 36166 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -36374,15 +36170,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36380 "parsing/parser.ml" +# 36176 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36386 "parsing/parser.ml" +# 36182 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36406,23 +36202,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1759 "parsing/parser.mly" +# 1809 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_modsubst body, ext) ) -# 36412 "parsing/parser.ml" +# 36208 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36420 "parsing/parser.ml" +# 36216 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36426 "parsing/parser.ml" +# 36222 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36508,9 +36304,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 36514 "parsing/parser.ml" +# 36310 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -36520,49 +36316,49 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36526 "parsing/parser.ml" +# 36322 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 36534 "parsing/parser.ml" +# 36330 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1855 "parsing/parser.mly" +# 1905 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in ext, Md.mk name mty ~attrs ~loc ~docs ) -# 36548 "parsing/parser.ml" +# 36344 "parsing/parser.ml" in -# 1198 "parsing/parser.mly" +# 1248 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 36554 "parsing/parser.ml" +# 36350 "parsing/parser.ml" in -# 1844 "parsing/parser.mly" +# 1894 "parsing/parser.mly" ( _1 ) -# 36560 "parsing/parser.ml" +# 36356 "parsing/parser.ml" in -# 1761 "parsing/parser.mly" +# 1811 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_recmodule l, ext) ) -# 36566 "parsing/parser.ml" +# 36362 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -36570,15 +36366,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36576 "parsing/parser.ml" +# 36372 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36582 "parsing/parser.ml" +# 36378 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36602,23 +36398,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1763 "parsing/parser.mly" +# 1813 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_modtype body, ext) ) -# 36608 "parsing/parser.ml" +# 36404 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36616 "parsing/parser.ml" +# 36412 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36622 "parsing/parser.ml" +# 36418 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36642,23 +36438,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1765 "parsing/parser.mly" +# 1815 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_modtypesubst body, ext) ) -# 36648 "parsing/parser.ml" +# 36444 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36656 "parsing/parser.ml" +# 36452 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36662 "parsing/parser.ml" +# 36458 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36682,23 +36478,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1767 "parsing/parser.mly" +# 1817 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_open body, ext) ) -# 36688 "parsing/parser.ml" +# 36484 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36696 "parsing/parser.ml" +# 36492 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36702 "parsing/parser.ml" +# 36498 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36754,35 +36550,35 @@ module Tables = struct let attrs2 = let _1 = _1_inlined1 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 36760 "parsing/parser.ml" +# 36556 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined1_ in let attrs1 = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 36767 "parsing/parser.ml" +# 36563 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos_attrs0_ in let _sloc = (_symbolstartpos, _endpos) in -# 1611 "parsing/parser.mly" +# 1661 "parsing/parser.mly" ( let attrs = attrs0 @ attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 36780 "parsing/parser.ml" +# 36576 "parsing/parser.ml" in -# 1769 "parsing/parser.mly" +# 1819 "parsing/parser.mly" ( psig_include _1 ) -# 36786 "parsing/parser.ml" +# 36582 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_attrs0_) in @@ -36790,15 +36586,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36796 "parsing/parser.ml" +# 36592 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36802 "parsing/parser.ml" +# 36598 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36875,9 +36671,9 @@ module Tables = struct let cty : (Parsetree.class_type) = Obj.magic cty in let _7 : unit = Obj.magic _7 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 36881 "parsing/parser.ml" +# 36677 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -36895,9 +36691,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 36901 "parsing/parser.ml" +# 36697 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -36907,24 +36703,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36913 "parsing/parser.ml" +# 36709 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 36921 "parsing/parser.ml" +# 36717 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2202 "parsing/parser.mly" +# 2252 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -36932,25 +36728,25 @@ module Tables = struct ext, Ci.mk id cty ~virt ~params ~attrs ~loc ~docs ) -# 36936 "parsing/parser.ml" +# 36732 "parsing/parser.ml" in -# 1198 "parsing/parser.mly" +# 1248 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 36942 "parsing/parser.ml" +# 36738 "parsing/parser.ml" in -# 2190 "parsing/parser.mly" +# 2240 "parsing/parser.mly" ( _1 ) -# 36948 "parsing/parser.ml" +# 36744 "parsing/parser.ml" in -# 1771 "parsing/parser.mly" +# 1821 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_class l, ext) ) -# 36954 "parsing/parser.ml" +# 36750 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -36958,15 +36754,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 36964 "parsing/parser.ml" +# 36760 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 36970 "parsing/parser.ml" +# 36766 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36990,23 +36786,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1773 "parsing/parser.mly" +# 1823 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_class_type l, ext) ) -# 36996 "parsing/parser.ml" +# 36792 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1025 "parsing/parser.mly" +# 1075 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 37004 "parsing/parser.ml" +# 36800 "parsing/parser.ml" in -# 1775 "parsing/parser.mly" +# 1825 "parsing/parser.mly" ( _1 ) -# 37010 "parsing/parser.ml" +# 36806 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37029,9 +36825,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3749 "parsing/parser.mly" +# 3852 "parsing/parser.mly" ( _1 ) -# 37035 "parsing/parser.ml" +# 36831 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37056,18 +36852,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 767 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * char option) -# 37062 "parsing/parser.ml" +# 36858 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3750 "parsing/parser.mly" +# 3853 "parsing/parser.mly" ( let (n, m) = _2 in Pconst_integer("-" ^ n, m) ) -# 37071 "parsing/parser.ml" +# 36867 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37092,18 +36888,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 745 "parsing/parser.mly" +# 794 "parsing/parser.mly" (string * char option) -# 37098 "parsing/parser.ml" +# 36894 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3751 "parsing/parser.mly" +# 3854 "parsing/parser.mly" ( let (f, m) = _2 in Pconst_float("-" ^ f, m) ) -# 37107 "parsing/parser.ml" +# 36903 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37128,18 +36924,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 767 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * char option) -# 37134 "parsing/parser.ml" +# 36930 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3752 "parsing/parser.mly" +# 3855 "parsing/parser.mly" ( let (n, m) = _2 in Pconst_integer (n, m) ) -# 37143 "parsing/parser.ml" +# 36939 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37164,18 +36960,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 745 "parsing/parser.mly" +# 794 "parsing/parser.mly" (string * char option) -# 37170 "parsing/parser.ml" +# 36966 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3753 "parsing/parser.mly" +# 3856 "parsing/parser.mly" ( let (f, m) = _2 in Pconst_float(f, m) ) -# 37179 "parsing/parser.ml" +# 36975 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37216,18 +37012,18 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3030 "parsing/parser.mly" +# 3133 "parsing/parser.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 37224 "parsing/parser.ml" +# 37020 "parsing/parser.ml" in -# 3001 "parsing/parser.mly" +# 3100 "parsing/parser.mly" ( let (fields, closed) = _2 in Ppat_record(fields, closed) ) -# 37231 "parsing/parser.ml" +# 37027 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37235,15 +37031,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 37241 "parsing/parser.ml" +# 37037 "parsing/parser.ml" in -# 3015 "parsing/parser.mly" +# 3118 "parsing/parser.mly" ( _1 ) -# 37247 "parsing/parser.ml" +# 37043 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37284,19 +37080,19 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3030 "parsing/parser.mly" +# 3133 "parsing/parser.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 37292 "parsing/parser.ml" +# 37088 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3004 "parsing/parser.mly" +# 3103 "parsing/parser.mly" ( unclosed "{" _loc__1_ "}" _loc__3_ ) -# 37300 "parsing/parser.ml" +# 37096 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37304,15 +37100,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 37310 "parsing/parser.ml" +# 37106 "parsing/parser.ml" in -# 3015 "parsing/parser.mly" +# 3118 "parsing/parser.mly" ( _1 ) -# 37316 "parsing/parser.ml" +# 37112 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37351,15 +37147,15 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 3024 "parsing/parser.mly" +# 3127 "parsing/parser.mly" ( ps ) -# 37357 "parsing/parser.ml" +# 37153 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3006 "parsing/parser.mly" +# 3105 "parsing/parser.mly" ( fst (mktailpat _loc__3_ _2) ) -# 37363 "parsing/parser.ml" +# 37159 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37367,15 +37163,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 37373 "parsing/parser.ml" +# 37169 "parsing/parser.ml" in -# 3015 "parsing/parser.mly" +# 3118 "parsing/parser.mly" ( _1 ) -# 37379 "parsing/parser.ml" +# 37175 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37414,16 +37210,16 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 3024 "parsing/parser.mly" +# 3127 "parsing/parser.mly" ( ps ) -# 37420 "parsing/parser.ml" +# 37216 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3008 "parsing/parser.mly" +# 3107 "parsing/parser.mly" ( unclosed "[" _loc__1_ "]" _loc__3_ ) -# 37427 "parsing/parser.ml" +# 37223 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37431,15 +37227,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 37437 "parsing/parser.ml" +# 37233 "parsing/parser.ml" in -# 3015 "parsing/parser.mly" +# 3118 "parsing/parser.mly" ( _1 ) -# 37443 "parsing/parser.ml" +# 37239 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37477,15 +37273,32 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = - let _2 = -# 3024 "parsing/parser.mly" + let _1 = + let _1 = + let _2 = +# 3127 "parsing/parser.mly" ( ps ) -# 37484 "parsing/parser.ml" - in +# 37282 "parsing/parser.ml" + in + +# 2608 "parsing/parser.mly" + ( Generic_array.Literal _2 ) +# 37287 "parsing/parser.ml" + + in + +# 2630 "parsing/parser.mly" + ( _1 ) +# 37293 "parsing/parser.ml" + + in -# 3010 "parsing/parser.mly" - ( Ppat_array _2 ) -# 37489 "parsing/parser.ml" +# 3109 "parsing/parser.mly" + ( Generic_array.pattern + "[|" "|]" + (fun elts -> Ppat_array elts) + _1 ) +# 37302 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37493,15 +37306,96 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 37499 "parsing/parser.ml" +# 37312 "parsing/parser.ml" in -# 3015 "parsing/parser.mly" +# 3118 "parsing/parser.mly" + ( _1 ) +# 37318 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ps; + MenhirLib.EngineTypes.startp = _startpos_ps_; + MenhirLib.EngineTypes.endp = _endpos_ps_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : unit = Obj.magic _3 in + let ps : (Parsetree.pattern list) = Obj.magic ps in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _1 = + let _2 = +# 3127 "parsing/parser.mly" + ( ps ) +# 37361 "parsing/parser.ml" + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2610 "parsing/parser.mly" + ( Generic_array.Unclosed(_loc__1_,_loc__3_) ) +# 37368 "parsing/parser.ml" + + in + +# 2630 "parsing/parser.mly" + ( _1 ) +# 37374 "parsing/parser.ml" + + in + +# 3109 "parsing/parser.mly" + ( Generic_array.pattern + "[|" "|]" + (fun elts -> Ppat_array elts) + _1 ) +# 37383 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1052 "parsing/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 37393 "parsing/parser.ml" + + in + +# 3118 "parsing/parser.mly" ( _1 ) -# 37505 "parsing/parser.ml" +# 37399 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37531,25 +37425,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = - let _1 = -# 3012 "parsing/parser.mly" - ( Ppat_array [] ) -# 37538 "parsing/parser.ml" - in + let _1 = + let _1 = + let _1 = +# 2612 "parsing/parser.mly" + ( Generic_array.Literal [] ) +# 37434 "parsing/parser.ml" + in + +# 2630 "parsing/parser.mly" + ( _1 ) +# 37439 "parsing/parser.ml" + + in + +# 3109 "parsing/parser.mly" + ( Generic_array.pattern + "[|" "|]" + (fun elts -> Ppat_array elts) + _1 ) +# 37448 "parsing/parser.ml" + + in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 37547 "parsing/parser.ml" +# 37458 "parsing/parser.ml" in -# 3015 "parsing/parser.mly" +# 3118 "parsing/parser.mly" ( _1 ) -# 37553 "parsing/parser.ml" +# 37464 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37587,17 +37498,36 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = - let _2 = -# 3024 "parsing/parser.mly" + let _1 = + let _1 = + let _2 = +# 3127 "parsing/parser.mly" ( ps ) -# 37594 "parsing/parser.ml" - in - let _loc__3_ = (_startpos__3_, _endpos__3_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in +# 37507 "parsing/parser.ml" + in + +# 2608 "parsing/parser.mly" + ( Generic_array.Literal _2 ) +# 37512 "parsing/parser.ml" + + in + +# 2630 "parsing/parser.mly" + ( _1 ) +# 37518 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3014 "parsing/parser.mly" - ( unclosed "[|" _loc__1_ "|]" _loc__3_ ) -# 37601 "parsing/parser.ml" +# 3114 "parsing/parser.mly" + ( Generic_array.pattern + "[:" ":]" + (ppat_iarray _sloc) + _1 ) +# 37531 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37605,15 +37535,169 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 37611 "parsing/parser.ml" +# 37541 "parsing/parser.ml" in -# 3015 "parsing/parser.mly" +# 3118 "parsing/parser.mly" ( _1 ) -# 37617 "parsing/parser.ml" +# 37547 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ps; + MenhirLib.EngineTypes.startp = _startpos_ps_; + MenhirLib.EngineTypes.endp = _endpos_ps_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : unit = Obj.magic _3 in + let ps : (Parsetree.pattern list) = Obj.magic ps in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _1 = + let _2 = +# 3127 "parsing/parser.mly" + ( ps ) +# 37590 "parsing/parser.ml" + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2610 "parsing/parser.mly" + ( Generic_array.Unclosed(_loc__1_,_loc__3_) ) +# 37597 "parsing/parser.ml" + + in + +# 2630 "parsing/parser.mly" + ( _1 ) +# 37603 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3114 "parsing/parser.mly" + ( Generic_array.pattern + "[:" ":]" + (ppat_iarray _sloc) + _1 ) +# 37616 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1052 "parsing/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 37626 "parsing/parser.ml" + + in + +# 3118 "parsing/parser.mly" + ( _1 ) +# 37632 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _1 = +# 2612 "parsing/parser.mly" + ( Generic_array.Literal [] ) +# 37667 "parsing/parser.ml" + in + +# 2630 "parsing/parser.mly" + ( _1 ) +# 37672 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3114 "parsing/parser.mly" + ( Generic_array.pattern + "[:" ":]" + (ppat_iarray _sloc) + _1 ) +# 37685 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1052 "parsing/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 37695 "parsing/parser.ml" + + in + +# 3118 "parsing/parser.mly" + ( _1 ) +# 37701 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37653,9 +37737,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2467 "parsing/parser.mly" +# 2517 "parsing/parser.mly" ( reloc_exp ~loc:_sloc _2 ) -# 37659 "parsing/parser.ml" +# 37743 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37694,9 +37778,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2469 "parsing/parser.mly" +# 2519 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 37700 "parsing/parser.ml" +# 37784 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37743,9 +37827,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2471 "parsing/parser.mly" +# 2521 "parsing/parser.mly" ( mkexp_constraint ~loc:_sloc _2 _3 ) -# 37749 "parsing/parser.ml" +# 37833 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37797,14 +37881,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2472 "parsing/parser.mly" +# 2522 "parsing/parser.mly" ( None ) -# 37803 "parsing/parser.ml" +# 37887 "parsing/parser.ml" in -# 2359 "parsing/parser.mly" +# 2409 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 37808 "parsing/parser.ml" +# 37892 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -37812,9 +37896,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2473 "parsing/parser.mly" +# 2523 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 37818 "parsing/parser.ml" +# 37902 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37866,14 +37950,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2472 "parsing/parser.mly" +# 2522 "parsing/parser.mly" ( None ) -# 37872 "parsing/parser.ml" +# 37956 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2411 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 37877 "parsing/parser.ml" +# 37961 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -37881,9 +37965,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2473 "parsing/parser.mly" +# 2523 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 37887 "parsing/parser.ml" +# 37971 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37935,14 +38019,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2472 "parsing/parser.mly" +# 2522 "parsing/parser.mly" ( None ) -# 37941 "parsing/parser.ml" +# 38025 "parsing/parser.ml" in -# 2363 "parsing/parser.mly" +# 2413 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 37946 "parsing/parser.ml" +# 38030 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -37950,9 +38034,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2473 "parsing/parser.mly" +# 2523 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 37956 "parsing/parser.ml" +# 38040 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37998,9 +38082,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38004 "parsing/parser.ml" +# 38088 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -38008,31 +38092,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2474 "parsing/parser.mly" +# 2526 "parsing/parser.mly" ( None ) -# 38014 "parsing/parser.ml" +# 38098 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38019 "parsing/parser.ml" +# 38103 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 38025 "parsing/parser.ml" +# 38109 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 38030 "parsing/parser.ml" +# 38114 "parsing/parser.ml" in -# 2359 "parsing/parser.mly" +# 2409 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 38036 "parsing/parser.ml" +# 38120 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -38040,9 +38124,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2475 "parsing/parser.mly" +# 2527 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 38046 "parsing/parser.ml" +# 38130 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38100,9 +38184,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38106 "parsing/parser.ml" +# 38190 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -38112,39 +38196,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2474 "parsing/parser.mly" +# 2526 "parsing/parser.mly" ( None ) -# 38118 "parsing/parser.ml" +# 38202 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38123 "parsing/parser.ml" +# 38207 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 38131 "parsing/parser.ml" +# 38215 "parsing/parser.ml" in # 126 "" ( Some x ) -# 38136 "parsing/parser.ml" +# 38220 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 38142 "parsing/parser.ml" +# 38226 "parsing/parser.ml" in -# 2359 "parsing/parser.mly" +# 2409 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 38148 "parsing/parser.ml" +# 38232 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -38152,9 +38236,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2475 "parsing/parser.mly" +# 2527 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 38158 "parsing/parser.ml" +# 38242 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38200,9 +38284,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38206 "parsing/parser.ml" +# 38290 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -38210,31 +38294,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2474 "parsing/parser.mly" +# 2526 "parsing/parser.mly" ( None ) -# 38216 "parsing/parser.ml" +# 38300 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38221 "parsing/parser.ml" +# 38305 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 38227 "parsing/parser.ml" +# 38311 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 38232 "parsing/parser.ml" +# 38316 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2411 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 38238 "parsing/parser.ml" +# 38322 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -38242,9 +38326,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2475 "parsing/parser.mly" +# 2527 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 38248 "parsing/parser.ml" +# 38332 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38302,9 +38386,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38308 "parsing/parser.ml" +# 38392 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -38314,39 +38398,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2474 "parsing/parser.mly" +# 2526 "parsing/parser.mly" ( None ) -# 38320 "parsing/parser.ml" +# 38404 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38325 "parsing/parser.ml" +# 38409 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 38333 "parsing/parser.ml" +# 38417 "parsing/parser.ml" in # 126 "" ( Some x ) -# 38338 "parsing/parser.ml" +# 38422 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 38344 "parsing/parser.ml" +# 38428 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2411 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 38350 "parsing/parser.ml" +# 38434 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -38354,9 +38438,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2475 "parsing/parser.mly" +# 2527 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 38360 "parsing/parser.ml" +# 38444 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38402,9 +38486,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38408 "parsing/parser.ml" +# 38492 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -38412,31 +38496,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2474 "parsing/parser.mly" +# 2526 "parsing/parser.mly" ( None ) -# 38418 "parsing/parser.ml" +# 38502 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38423 "parsing/parser.ml" +# 38507 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 38429 "parsing/parser.ml" +# 38513 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 38434 "parsing/parser.ml" +# 38518 "parsing/parser.ml" in -# 2363 "parsing/parser.mly" +# 2413 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 38440 "parsing/parser.ml" +# 38524 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -38444,9 +38528,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2475 "parsing/parser.mly" +# 2527 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 38450 "parsing/parser.ml" +# 38534 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38504,9 +38588,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38510 "parsing/parser.ml" +# 38594 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -38516,39 +38600,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2474 "parsing/parser.mly" +# 2526 "parsing/parser.mly" ( None ) -# 38522 "parsing/parser.ml" +# 38606 "parsing/parser.ml" in let i = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38527 "parsing/parser.ml" +# 38611 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 38535 "parsing/parser.ml" +# 38619 "parsing/parser.ml" in # 126 "" ( Some x ) -# 38540 "parsing/parser.ml" +# 38624 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 38546 "parsing/parser.ml" +# 38630 "parsing/parser.ml" in -# 2363 "parsing/parser.mly" +# 2413 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 38552 "parsing/parser.ml" +# 38636 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -38556,9 +38640,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2475 "parsing/parser.mly" +# 2527 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 38562 "parsing/parser.ml" +# 38646 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38612,15 +38696,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2368 "parsing/parser.mly" +# 2418 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 38618 "parsing/parser.ml" +# 38702 "parsing/parser.ml" in -# 2476 "parsing/parser.mly" +# 2528 "parsing/parser.mly" ( _1 ) -# 38624 "parsing/parser.ml" +# 38708 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38674,15 +38758,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2370 "parsing/parser.mly" +# 2420 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 38680 "parsing/parser.ml" +# 38764 "parsing/parser.ml" in -# 2476 "parsing/parser.mly" +# 2528 "parsing/parser.mly" ( _1 ) -# 38686 "parsing/parser.ml" +# 38770 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38736,15 +38820,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2372 "parsing/parser.mly" +# 2422 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 38742 "parsing/parser.ml" +# 38826 "parsing/parser.ml" in -# 2476 "parsing/parser.mly" +# 2528 "parsing/parser.mly" ( _1 ) -# 38748 "parsing/parser.ml" +# 38832 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38790,9 +38874,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38796 "parsing/parser.ml" +# 38880 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -38800,34 +38884,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38806 "parsing/parser.ml" +# 38890 "parsing/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 38812 "parsing/parser.ml" +# 38896 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 38817 "parsing/parser.ml" +# 38901 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2368 "parsing/parser.mly" +# 2418 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 38825 "parsing/parser.ml" +# 38909 "parsing/parser.ml" in -# 2477 "parsing/parser.mly" +# 2529 "parsing/parser.mly" ( _1 ) -# 38831 "parsing/parser.ml" +# 38915 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38885,9 +38969,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38891 "parsing/parser.ml" +# 38975 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in @@ -38897,42 +38981,42 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38903 "parsing/parser.ml" +# 38987 "parsing/parser.ml" in let _2 = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 38911 "parsing/parser.ml" +# 38995 "parsing/parser.ml" in # 126 "" ( Some x ) -# 38916 "parsing/parser.ml" +# 39000 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 38922 "parsing/parser.ml" +# 39006 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2368 "parsing/parser.mly" +# 2418 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 38930 "parsing/parser.ml" +# 39014 "parsing/parser.ml" in -# 2477 "parsing/parser.mly" +# 2529 "parsing/parser.mly" ( _1 ) -# 38936 "parsing/parser.ml" +# 39020 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38978,9 +39062,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 38984 "parsing/parser.ml" +# 39068 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -38988,34 +39072,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 38994 "parsing/parser.ml" +# 39078 "parsing/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 39000 "parsing/parser.ml" +# 39084 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 39005 "parsing/parser.ml" +# 39089 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2370 "parsing/parser.mly" +# 2420 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 39013 "parsing/parser.ml" +# 39097 "parsing/parser.ml" in -# 2477 "parsing/parser.mly" +# 2529 "parsing/parser.mly" ( _1 ) -# 39019 "parsing/parser.ml" +# 39103 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39073,9 +39157,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 39079 "parsing/parser.ml" +# 39163 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in @@ -39085,42 +39169,42 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 39091 "parsing/parser.ml" +# 39175 "parsing/parser.ml" in let _2 = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 39099 "parsing/parser.ml" +# 39183 "parsing/parser.ml" in # 126 "" ( Some x ) -# 39104 "parsing/parser.ml" +# 39188 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 39110 "parsing/parser.ml" +# 39194 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2370 "parsing/parser.mly" +# 2420 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 39118 "parsing/parser.ml" +# 39202 "parsing/parser.ml" in -# 2477 "parsing/parser.mly" +# 2529 "parsing/parser.mly" ( _1 ) -# 39124 "parsing/parser.ml" +# 39208 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39166,9 +39250,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 39172 "parsing/parser.ml" +# 39256 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -39176,34 +39260,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 39182 "parsing/parser.ml" +# 39266 "parsing/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 39188 "parsing/parser.ml" +# 39272 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 39193 "parsing/parser.ml" +# 39277 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2372 "parsing/parser.mly" +# 2422 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 39201 "parsing/parser.ml" +# 39285 "parsing/parser.ml" in -# 2477 "parsing/parser.mly" +# 2529 "parsing/parser.mly" ( _1 ) -# 39207 "parsing/parser.ml" +# 39291 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39261,9 +39345,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 762 "parsing/parser.mly" +# 811 "parsing/parser.mly" (string) -# 39267 "parsing/parser.ml" +# 39351 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in @@ -39273,42 +39357,42 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 39279 "parsing/parser.ml" +# 39363 "parsing/parser.ml" in let _2 = let _1 = let _2 = _2_inlined1 in let x = -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" (_2) -# 39287 "parsing/parser.ml" +# 39371 "parsing/parser.ml" in # 126 "" ( Some x ) -# 39292 "parsing/parser.ml" +# 39376 "parsing/parser.ml" in -# 2375 "parsing/parser.mly" +# 2425 "parsing/parser.mly" ( _1, _2 ) -# 39298 "parsing/parser.ml" +# 39382 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2372 "parsing/parser.mly" +# 2422 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 39306 "parsing/parser.ml" +# 39390 "parsing/parser.ml" in -# 2477 "parsing/parser.mly" +# 2529 "parsing/parser.mly" ( _1 ) -# 39312 "parsing/parser.ml" +# 39396 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39362,15 +39446,15 @@ module Tables = struct let attrs = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 39368 "parsing/parser.ml" +# 39452 "parsing/parser.ml" in -# 2486 "parsing/parser.mly" +# 2538 "parsing/parser.mly" ( e.pexp_desc, (ext, attrs @ e.pexp_attributes) ) -# 39374 "parsing/parser.ml" +# 39458 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39378,10 +39462,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 39385 "parsing/parser.ml" +# 39469 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39430,24 +39514,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 39436 "parsing/parser.ml" +# 39520 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 39442 "parsing/parser.ml" +# 39526 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2488 "parsing/parser.mly" +# 2540 "parsing/parser.mly" ( Pexp_construct (mkloc (Lident "()") (make_loc _sloc), None), _2 ) -# 39451 "parsing/parser.ml" +# 39535 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -39455,10 +39539,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 39462 "parsing/parser.ml" +# 39546 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39514,23 +39598,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 39520 "parsing/parser.ml" +# 39604 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 39526 "parsing/parser.ml" +# 39610 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2490 "parsing/parser.mly" +# 2542 "parsing/parser.mly" ( unclosed "begin" _loc__1_ "end" _loc__4_ ) -# 39534 "parsing/parser.ml" +# 39618 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -39538,10 +39622,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 39545 "parsing/parser.ml" +# 39629 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39591,9 +39675,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39597 "parsing/parser.ml" +# 39681 "parsing/parser.ml" in let _2 = @@ -39601,21 +39685,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 39607 "parsing/parser.ml" +# 39691 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 39613 "parsing/parser.ml" +# 39697 "parsing/parser.ml" in -# 2492 "parsing/parser.mly" +# 2544 "parsing/parser.mly" ( Pexp_new(_3), _2 ) -# 39619 "parsing/parser.ml" +# 39703 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -39623,10 +39707,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 39630 "parsing/parser.ml" +# 39714 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39689,21 +39773,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 39695 "parsing/parser.ml" +# 39779 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 39701 "parsing/parser.ml" +# 39785 "parsing/parser.ml" in -# 2494 "parsing/parser.mly" +# 2546 "parsing/parser.mly" ( Pexp_pack _4, _3 ) -# 39707 "parsing/parser.ml" +# 39791 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39711,10 +39795,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 39718 "parsing/parser.ml" +# 39802 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39792,11 +39876,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 39800 "parsing/parser.ml" +# 39884 "parsing/parser.ml" in let _3 = @@ -39804,24 +39888,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 39810 "parsing/parser.ml" +# 39894 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 39816 "parsing/parser.ml" +# 39900 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2496 "parsing/parser.mly" +# 2548 "parsing/parser.mly" ( Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _4), _6), _3 ) -# 39825 "parsing/parser.ml" +# 39909 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -39829,10 +39913,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 39836 "parsing/parser.ml" +# 39920 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39902,23 +39986,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 39908 "parsing/parser.ml" +# 39992 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 39914 "parsing/parser.ml" +# 39998 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2498 "parsing/parser.mly" +# 2550 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 39922 "parsing/parser.ml" +# 40006 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -39926,10 +40010,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 39933 "parsing/parser.ml" +# 40017 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39994,27 +40078,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 39998 "parsing/parser.ml" +# 40082 "parsing/parser.ml" in -# 2018 "parsing/parser.mly" +# 2068 "parsing/parser.mly" ( _1 ) -# 40003 "parsing/parser.ml" +# 40087 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 961 "parsing/parser.mly" +# 1011 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 40012 "parsing/parser.ml" +# 40096 "parsing/parser.ml" in -# 2005 "parsing/parser.mly" +# 2055 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 40018 "parsing/parser.ml" +# 40102 "parsing/parser.ml" in let _2 = @@ -40022,21 +40106,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 40028 "parsing/parser.ml" +# 40112 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 40034 "parsing/parser.ml" +# 40118 "parsing/parser.ml" in -# 2500 "parsing/parser.mly" +# 2552 "parsing/parser.mly" ( Pexp_object _3, _2 ) -# 40040 "parsing/parser.ml" +# 40124 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -40044,10 +40128,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 40051 "parsing/parser.ml" +# 40135 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40112,27 +40196,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 40116 "parsing/parser.ml" +# 40200 "parsing/parser.ml" in -# 2018 "parsing/parser.mly" +# 2068 "parsing/parser.mly" ( _1 ) -# 40121 "parsing/parser.ml" +# 40205 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 961 "parsing/parser.mly" +# 1011 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 40130 "parsing/parser.ml" +# 40214 "parsing/parser.ml" in -# 2005 "parsing/parser.mly" +# 2055 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 40136 "parsing/parser.ml" +# 40220 "parsing/parser.ml" in let _2 = @@ -40140,23 +40224,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 40146 "parsing/parser.ml" +# 40230 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 40152 "parsing/parser.ml" +# 40236 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2502 "parsing/parser.mly" +# 2554 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 40160 "parsing/parser.ml" +# 40244 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -40164,10 +40248,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2479 "parsing/parser.mly" +# 2531 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 40171 "parsing/parser.ml" +# 40255 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40196,30 +40280,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40202 "parsing/parser.ml" +# 40286 "parsing/parser.ml" in -# 2535 "parsing/parser.mly" +# 2635 "parsing/parser.mly" ( Pexp_ident (_1) ) -# 40208 "parsing/parser.ml" +# 40292 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40217 "parsing/parser.ml" +# 40301 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40223 "parsing/parser.ml" +# 40307 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40243,23 +40327,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2537 "parsing/parser.mly" +# 2637 "parsing/parser.mly" ( Pexp_constant _1 ) -# 40249 "parsing/parser.ml" +# 40333 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40257 "parsing/parser.ml" +# 40341 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40263 "parsing/parser.ml" +# 40347 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40288,30 +40372,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40294 "parsing/parser.ml" +# 40378 "parsing/parser.ml" in -# 2539 "parsing/parser.mly" +# 2639 "parsing/parser.mly" ( Pexp_construct(_1, None) ) -# 40300 "parsing/parser.ml" +# 40384 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40309 "parsing/parser.ml" +# 40393 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40315 "parsing/parser.ml" +# 40399 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40335,23 +40419,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2541 "parsing/parser.mly" +# 2641 "parsing/parser.mly" ( Pexp_variant(_1, None) ) -# 40341 "parsing/parser.ml" +# 40425 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40349 "parsing/parser.ml" +# 40433 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40355 "parsing/parser.ml" +# 40439 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40377,9 +40461,9 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 807 "parsing/parser.mly" +# 857 "parsing/parser.mly" (string) -# 40383 "parsing/parser.ml" +# 40467 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -40391,15 +40475,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 40397 "parsing/parser.ml" +# 40481 "parsing/parser.ml" in -# 2543 "parsing/parser.mly" +# 2643 "parsing/parser.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 40403 "parsing/parser.ml" +# 40487 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -40407,15 +40491,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40413 "parsing/parser.ml" +# 40497 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40419 "parsing/parser.ml" +# 40503 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40448,23 +40532,23 @@ module Tables = struct let _1 = let _1 = let _1 = -# 2544 "parsing/parser.mly" +# 2644 "parsing/parser.mly" ("!") -# 40454 "parsing/parser.ml" +# 40538 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 40462 "parsing/parser.ml" +# 40546 "parsing/parser.ml" in -# 2545 "parsing/parser.mly" +# 2645 "parsing/parser.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 40468 "parsing/parser.ml" +# 40552 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -40472,15 +40556,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40478 "parsing/parser.ml" +# 40562 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40484 "parsing/parser.ml" +# 40568 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40519,14 +40603,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2839 "parsing/parser.mly" +# 2938 "parsing/parser.mly" ( xs ) -# 40525 "parsing/parser.ml" +# 40609 "parsing/parser.ml" in -# 2547 "parsing/parser.mly" +# 2647 "parsing/parser.mly" ( Pexp_override _2 ) -# 40530 "parsing/parser.ml" +# 40614 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -40534,15 +40618,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40540 "parsing/parser.ml" +# 40624 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40546 "parsing/parser.ml" +# 40630 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40581,16 +40665,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2839 "parsing/parser.mly" +# 2938 "parsing/parser.mly" ( xs ) -# 40587 "parsing/parser.ml" +# 40671 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2549 "parsing/parser.mly" +# 2649 "parsing/parser.mly" ( unclosed "{<" _loc__1_ ">}" _loc__3_ ) -# 40594 "parsing/parser.ml" +# 40678 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -40598,15 +40682,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40604 "parsing/parser.ml" +# 40688 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40610 "parsing/parser.ml" +# 40694 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40637,24 +40721,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2551 "parsing/parser.mly" +# 2651 "parsing/parser.mly" ( Pexp_override [] ) -# 40643 "parsing/parser.ml" +# 40727 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40652 "parsing/parser.ml" +# 40736 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40658 "parsing/parser.ml" +# 40742 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40698,15 +40782,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40704 "parsing/parser.ml" +# 40788 "parsing/parser.ml" in -# 2553 "parsing/parser.mly" +# 2653 "parsing/parser.mly" ( Pexp_field(_1, _3) ) -# 40710 "parsing/parser.ml" +# 40794 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -40714,15 +40798,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40720 "parsing/parser.ml" +# 40804 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40726 "parsing/parser.ml" +# 40810 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40780,24 +40864,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40786 "parsing/parser.ml" +# 40870 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 40795 "parsing/parser.ml" +# 40879 "parsing/parser.ml" in -# 2555 "parsing/parser.mly" +# 2655 "parsing/parser.mly" ( Pexp_open(od, _4) ) -# 40801 "parsing/parser.ml" +# 40885 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40805,15 +40889,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40811 "parsing/parser.ml" +# 40895 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40817 "parsing/parser.ml" +# 40901 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40866,9 +40950,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2839 "parsing/parser.mly" +# 2938 "parsing/parser.mly" ( xs ) -# 40872 "parsing/parser.ml" +# 40956 "parsing/parser.ml" in let od = let _1 = @@ -40876,18 +40960,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40882 "parsing/parser.ml" +# 40966 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 40891 "parsing/parser.ml" +# 40975 "parsing/parser.ml" in let _startpos_od_ = _startpos__1_ in @@ -40895,10 +40979,10 @@ module Tables = struct let _symbolstartpos = _startpos_od_ in let _sloc = (_symbolstartpos, _endpos) in -# 2557 "parsing/parser.mly" +# 2657 "parsing/parser.mly" ( (* TODO: review the location of Pexp_override *) Pexp_open(od, mkexp ~loc:_sloc (Pexp_override _4)) ) -# 40902 "parsing/parser.ml" +# 40986 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40906,15 +40990,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40912 "parsing/parser.ml" +# 40996 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40918 "parsing/parser.ml" +# 41002 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40967,16 +41051,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2839 "parsing/parser.mly" +# 2938 "parsing/parser.mly" ( xs ) -# 40973 "parsing/parser.ml" +# 41057 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2560 "parsing/parser.mly" +# 2660 "parsing/parser.mly" ( unclosed "{<" _loc__3_ ">}" _loc__5_ ) -# 40980 "parsing/parser.ml" +# 41064 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40984,15 +41068,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40990 "parsing/parser.ml" +# 41074 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 40996 "parsing/parser.ml" +# 41080 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41023,9 +41107,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 41029 "parsing/parser.ml" +# 41113 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in @@ -41037,23 +41121,23 @@ module Tables = struct let _3 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 41043 "parsing/parser.ml" +# 41127 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 41051 "parsing/parser.ml" +# 41135 "parsing/parser.ml" in -# 2562 "parsing/parser.mly" +# 2662 "parsing/parser.mly" ( Pexp_send(_1, _3) ) -# 41057 "parsing/parser.ml" +# 41141 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -41061,15 +41145,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41067 "parsing/parser.ml" +# 41151 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41073 "parsing/parser.ml" +# 41157 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41101,9 +41185,9 @@ module Tables = struct } = _menhir_stack in let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined1 : ( -# 818 "parsing/parser.mly" +# 868 "parsing/parser.mly" (string) -# 41107 "parsing/parser.ml" +# 41191 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -41117,15 +41201,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 994 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 41123 "parsing/parser.ml" +# 41207 "parsing/parser.ml" in -# 2564 "parsing/parser.mly" +# 2664 "parsing/parser.mly" ( mkinfix _1 _2 _3 ) -# 41129 "parsing/parser.ml" +# 41213 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -41133,15 +41217,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41139 "parsing/parser.ml" +# 41223 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41145 "parsing/parser.ml" +# 41229 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41165,23 +41249,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2566 "parsing/parser.mly" +# 2666 "parsing/parser.mly" ( Pexp_extension _1 ) -# 41171 "parsing/parser.ml" +# 41255 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41179 "parsing/parser.ml" +# 41263 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41185 "parsing/parser.ml" +# 41269 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41229,18 +41313,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in let _1 = -# 2567 "parsing/parser.mly" +# 2667 "parsing/parser.mly" (Lident "()") -# 41235 "parsing/parser.ml" +# 41319 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 41244 "parsing/parser.ml" +# 41328 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -41250,25 +41334,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 41256 "parsing/parser.ml" +# 41340 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 41265 "parsing/parser.ml" +# 41349 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2568 "parsing/parser.mly" +# 2668 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:(_loc__3_) (Pexp_construct(_3, None))) ) -# 41272 "parsing/parser.ml" +# 41356 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -41276,15 +41360,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41282 "parsing/parser.ml" +# 41366 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41288 "parsing/parser.ml" +# 41372 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41339,9 +41423,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2570 "parsing/parser.mly" +# 2670 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 41345 "parsing/parser.ml" +# 41429 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -41349,15 +41433,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41355 "parsing/parser.ml" +# 41439 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41361 "parsing/parser.ml" +# 41445 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41396,25 +41480,25 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2572 "parsing/parser.mly" +# 2672 "parsing/parser.mly" ( let (exten, fields) = _2 in Pexp_record(fields, exten) ) -# 41403 "parsing/parser.ml" +# 41487 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41412 "parsing/parser.ml" +# 41496 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41418 "parsing/parser.ml" +# 41502 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41456,9 +41540,9 @@ module Tables = struct let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2575 "parsing/parser.mly" +# 2675 "parsing/parser.mly" ( unclosed "{" _loc__1_ "}" _loc__3_ ) -# 41462 "parsing/parser.ml" +# 41546 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -41466,15 +41550,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41472 "parsing/parser.ml" +# 41556 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41478 "parsing/parser.ml" +# 41562 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41533,27 +41617,27 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 41539 "parsing/parser.ml" +# 41623 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 41548 "parsing/parser.ml" +# 41632 "parsing/parser.ml" in let _endpos = _endpos__5_ in -# 2577 "parsing/parser.mly" +# 2677 "parsing/parser.mly" ( let (exten, fields) = _4 in Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_record(fields, exten))) ) -# 41557 "parsing/parser.ml" +# 41641 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -41561,15 +41645,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41567 "parsing/parser.ml" +# 41651 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41573 "parsing/parser.ml" +# 41657 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41625,9 +41709,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2581 "parsing/parser.mly" +# 2681 "parsing/parser.mly" ( unclosed "{" _loc__3_ "}" _loc__5_ ) -# 41631 "parsing/parser.ml" +# 41715 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -41635,15 +41719,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41641 "parsing/parser.ml" +# 41725 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41647 "parsing/parser.ml" +# 41731 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41681,15 +41765,32 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _2 = -# 2856 "parsing/parser.mly" + let _1 = + let _1 = + let _2 = +# 2955 "parsing/parser.mly" ( es ) -# 41688 "parsing/parser.ml" - in +# 41774 "parsing/parser.ml" + in + +# 2608 "parsing/parser.mly" + ( Generic_array.Literal _2 ) +# 41779 "parsing/parser.ml" + + in + +# 2617 "parsing/parser.mly" + ( _1 ) +# 41785 "parsing/parser.ml" + + in -# 2583 "parsing/parser.mly" - ( Pexp_array(_2) ) -# 41693 "parsing/parser.ml" +# 2683 "parsing/parser.mly" + ( Generic_array.expression + "[|" "|]" + (fun elts -> Pexp_array elts) + _1 ) +# 41794 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -41697,15 +41798,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41703 "parsing/parser.ml" +# 41804 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41709 "parsing/parser.ml" +# 41810 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41743,17 +41844,34 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _2 = -# 2856 "parsing/parser.mly" + let _1 = + let _1 = + let _2 = +# 2955 "parsing/parser.mly" ( es ) -# 41750 "parsing/parser.ml" - in - let _loc__3_ = (_startpos__3_, _endpos__3_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in +# 41853 "parsing/parser.ml" + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2610 "parsing/parser.mly" + ( Generic_array.Unclosed(_loc__1_,_loc__3_) ) +# 41860 "parsing/parser.ml" + + in + +# 2617 "parsing/parser.mly" + ( _1 ) +# 41866 "parsing/parser.ml" + + in -# 2585 "parsing/parser.mly" - ( unclosed "[|" _loc__1_ "|]" _loc__3_ ) -# 41757 "parsing/parser.ml" +# 2683 "parsing/parser.mly" + ( Generic_array.expression + "[|" "|]" + (fun elts -> Pexp_array elts) + _1 ) +# 41875 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -41761,15 +41879,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41767 "parsing/parser.ml" +# 41885 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41773 "parsing/parser.ml" +# 41891 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41799,25 +41917,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = - let _1 = -# 2587 "parsing/parser.mly" - ( Pexp_array [] ) -# 41806 "parsing/parser.ml" - in + let _1 = + let _1 = + let _1 = +# 2612 "parsing/parser.mly" + ( Generic_array.Literal [] ) +# 41926 "parsing/parser.ml" + in + +# 2617 "parsing/parser.mly" + ( _1 ) +# 41931 "parsing/parser.ml" + + in + +# 2683 "parsing/parser.mly" + ( Generic_array.expression + "[|" "|]" + (fun elts -> Pexp_array elts) + _1 ) +# 41940 "parsing/parser.ml" + + in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41815 "parsing/parser.ml" +# 41950 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41821 "parsing/parser.ml" +# 41956 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41869,36 +42004,46 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _4 = -# 2856 "parsing/parser.mly" + let _1 = + let _4 = +# 2955 "parsing/parser.mly" ( es ) -# 41876 "parsing/parser.ml" - in - let od = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 967 "parsing/parser.mly" +# 42012 "parsing/parser.ml" + in + let od = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 41886 "parsing/parser.ml" +# 42022 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in - in - let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 41895 "parsing/parser.ml" +# 42031 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in + +# 2619 "parsing/parser.mly" + ( Generic_array.Opened_literal(od, _startpos__3_, _endpos, _4) ) +# 42038 "parsing/parser.ml" in - let _endpos = _endpos__5_ in -# 2589 "parsing/parser.mly" - ( Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array(_4))) ) -# 41902 "parsing/parser.ml" +# 2683 "parsing/parser.mly" + ( Generic_array.expression + "[|" "|]" + (fun elts -> Pexp_array elts) + _1 ) +# 42047 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -41906,15 +42051,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41912 "parsing/parser.ml" +# 42057 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 41918 "parsing/parser.ml" +# 42063 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41959,32 +42104,42 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let od = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 967 "parsing/parser.mly" + let _1 = + let od = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 41971 "parsing/parser.ml" +# 42117 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in - in - let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 41980 "parsing/parser.ml" +# 42126 "parsing/parser.ml" + + in + let _endpos = _endpos__4_ in + +# 2621 "parsing/parser.mly" + ( (* TODO: review the location of Pexp_array *) + Generic_array.Opened_literal(od, _startpos__3_, _endpos, []) ) +# 42134 "parsing/parser.ml" in - let _endpos = _endpos__4_ in -# 2591 "parsing/parser.mly" - ( (* TODO: review the location of Pexp_array *) - Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array [])) ) -# 41988 "parsing/parser.ml" +# 2683 "parsing/parser.mly" + ( Generic_array.expression + "[|" "|]" + (fun elts -> Pexp_array elts) + _1 ) +# 42143 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -41992,15 +42147,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41998 "parsing/parser.ml" +# 42153 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42004 "parsing/parser.ml" +# 42159 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42052,17 +42207,27 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _4 = -# 2856 "parsing/parser.mly" + let _1 = + let _4 = +# 2955 "parsing/parser.mly" ( es ) -# 42059 "parsing/parser.ml" - in - let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__3_ = (_startpos__3_, _endpos__3_) in +# 42215 "parsing/parser.ml" + in + let _loc__5_ = (_startpos__5_, _endpos__5_) in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 2625 "parsing/parser.mly" + ( Generic_array.Unclosed(_loc__3_, _loc__5_) ) +# 42222 "parsing/parser.ml" + + in -# 2595 "parsing/parser.mly" - ( unclosed "[|" _loc__3_ "|]" _loc__5_ ) -# 42066 "parsing/parser.ml" +# 2683 "parsing/parser.mly" + ( Generic_array.expression + "[|" "|]" + (fun elts -> Pexp_array elts) + _1 ) +# 42231 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -42070,15 +42235,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42076 "parsing/parser.ml" +# 42241 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42082 "parsing/parser.ml" +# 42247 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42116,16 +42281,39 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _2 = -# 2856 "parsing/parser.mly" + let _1 = + let _1 = + let _2 = +# 2955 "parsing/parser.mly" ( es ) -# 42123 "parsing/parser.ml" - in - let _loc__3_ = (_startpos__3_, _endpos__3_) in +# 42290 "parsing/parser.ml" + in + +# 2608 "parsing/parser.mly" + ( Generic_array.Literal _2 ) +# 42295 "parsing/parser.ml" + + in + +# 2617 "parsing/parser.mly" + ( _1 ) +# 42301 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2597 "parsing/parser.mly" - ( fst (mktailexp _loc__3_ _2) ) -# 42129 "parsing/parser.ml" +# 2688 "parsing/parser.mly" + ( Generic_array.expression + "[:" ":]" + (fun elts -> + (Extensions.Immutable_arrays.expr_of + ~loc:(make_loc _sloc) + (Iaexp_immutable_array elts)).pexp_desc) + _1 ) +# 42317 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -42133,15 +42321,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42139 "parsing/parser.ml" +# 42327 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42145 "parsing/parser.ml" +# 42333 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42179,17 +42367,41 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _2 = -# 2856 "parsing/parser.mly" + let _1 = + let _1 = + let _2 = +# 2955 "parsing/parser.mly" ( es ) -# 42186 "parsing/parser.ml" - in - let _loc__3_ = (_startpos__3_, _endpos__3_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in +# 42376 "parsing/parser.ml" + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2610 "parsing/parser.mly" + ( Generic_array.Unclosed(_loc__1_,_loc__3_) ) +# 42383 "parsing/parser.ml" + + in + +# 2617 "parsing/parser.mly" + ( _1 ) +# 42389 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2599 "parsing/parser.mly" - ( unclosed "[" _loc__1_ "]" _loc__3_ ) -# 42193 "parsing/parser.ml" +# 2688 "parsing/parser.mly" + ( Generic_array.expression + "[:" ":]" + (fun elts -> + (Extensions.Immutable_arrays.expr_of + ~loc:(make_loc _sloc) + (Iaexp_immutable_array elts)).pexp_desc) + _1 ) +# 42405 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -42197,15 +42409,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42203 "parsing/parser.ml" +# 42415 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42209 "parsing/parser.ml" +# 42421 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42218,63 +42430,378 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _1 = + let _1 = +# 2612 "parsing/parser.mly" + ( Generic_array.Literal [] ) +# 42456 "parsing/parser.ml" + in + +# 2617 "parsing/parser.mly" + ( _1 ) +# 42461 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2688 "parsing/parser.mly" + ( Generic_array.expression + "[:" ":]" + (fun elts -> + (Extensions.Immutable_arrays.expr_of + ~loc:(make_loc _sloc) + (Iaexp_immutable_array elts)).pexp_desc) + _1 ) +# 42477 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1050 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 42487 "parsing/parser.ml" + + in + +# 2534 "parsing/parser.mly" + ( _1 ) +# 42493 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let _3 : (Extensions.comprehension list) = Obj.magic _3 in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in + let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let _1 = let _1 = - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _4 = +# 2955 "parsing/parser.mly" + ( es ) +# 42549 "parsing/parser.ml" + in + let od = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1017 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 42559 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1720 "parsing/parser.mly" + ( let loc = make_loc _loc__1_ in + let me = Mod.ident ~loc _1 in + Opn.mk ~loc me ) +# 42568 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in -# 2524 "parsing/parser.mly" - ( Pexp_extension( - Extensions.payload_of_extension_expr - ~loc:(make_loc _sloc) (Eexp_list_comprehension(_2, _3))) ) -# 42256 "parsing/parser.ml" +# 2619 "parsing/parser.mly" + ( Generic_array.Opened_literal(od, _startpos__3_, _endpos, _4) ) +# 42575 "parsing/parser.ml" in + let _endpos__1_ = _endpos__5_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2600 "parsing/parser.mly" - ( _1 ) -# 42262 "parsing/parser.ml" +# 2688 "parsing/parser.mly" + ( Generic_array.expression + "[:" ":]" + (fun elts -> + (Extensions.Immutable_arrays.expr_of + ~loc:(make_loc _sloc) + (Iaexp_immutable_array elts)).pexp_desc) + _1 ) +# 42591 "parsing/parser.ml" in - let _endpos__1_ = _endpos__3_ in + let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42272 "parsing/parser.ml" +# 42601 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42278 "parsing/parser.ml" +# 42607 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _1 = + let od = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1017 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 42661 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1720 "parsing/parser.mly" + ( let loc = make_loc _loc__1_ in + let me = Mod.ident ~loc _1 in + Opn.mk ~loc me ) +# 42670 "parsing/parser.ml" + + in + let _endpos = _endpos__4_ in + +# 2621 "parsing/parser.mly" + ( (* TODO: review the location of Pexp_array *) + Generic_array.Opened_literal(od, _startpos__3_, _endpos, []) ) +# 42678 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2688 "parsing/parser.mly" + ( Generic_array.expression + "[:" ":]" + (fun elts -> + (Extensions.Immutable_arrays.expr_of + ~loc:(make_loc _sloc) + (Iaexp_immutable_array elts)).pexp_desc) + _1 ) +# 42694 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1050 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 42704 "parsing/parser.ml" + + in + +# 2534 "parsing/parser.mly" + ( _1 ) +# 42710 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _1 = + let _4 = +# 2955 "parsing/parser.mly" + ( es ) +# 42766 "parsing/parser.ml" + in + let _loc__5_ = (_startpos__5_, _endpos__5_) in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 2625 "parsing/parser.mly" + ( Generic_array.Unclosed(_loc__3_, _loc__5_) ) +# 42773 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__5_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2688 "parsing/parser.mly" + ( Generic_array.expression + "[:" ":]" + (fun elts -> + (Extensions.Immutable_arrays.expr_of + ~loc:(make_loc _sloc) + (Iaexp_immutable_array elts)).pexp_desc) + _1 ) +# 42789 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__5_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1050 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 42799 "parsing/parser.ml" + + in + +# 2534 "parsing/parser.mly" + ( _1 ) +# 42805 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42292,9 +42819,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -42304,46 +42831,545 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Extensions.comprehension list) = Obj.magic _3 in - let _2 : (Parsetree.expression) = Obj.magic _2 in + let _3 : unit = Obj.magic _3 in + let es : (Parsetree.expression list) = Obj.magic es in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = +# 2955 "parsing/parser.mly" + ( es ) +# 42846 "parsing/parser.ml" + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 2696 "parsing/parser.mly" + ( fst (mktailexp _loc__3_ _2) ) +# 42852 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1050 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 42862 "parsing/parser.ml" + + in + +# 2534 "parsing/parser.mly" + ( _1 ) +# 42868 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : unit = Obj.magic _3 in + let es : (Parsetree.expression list) = Obj.magic es in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = +# 2955 "parsing/parser.mly" + ( es ) +# 42909 "parsing/parser.ml" + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2698 "parsing/parser.mly" + ( unclosed "[" _loc__1_ "]" _loc__3_ ) +# 42916 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1050 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 42926 "parsing/parser.ml" + + in + +# 2534 "parsing/parser.mly" + ( _1 ) +# 42932 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let xs : (Extensions.Comprehensions.clause list) = Obj.magic xs in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _1 = + let _1 = + let _1 = + let _3 = + let xs = +# 253 "" + ( List.rev xs ) +# 42984 "parsing/parser.ml" + in + +# 1119 "parsing/parser.mly" + ( xs ) +# 42989 "parsing/parser.ml" + + in + +# 2589 "parsing/parser.mly" + ( Extensions.Comprehensions.{ body = _2; clauses = _3 } ) +# 42995 "parsing/parser.ml" + + in + +# 2594 "parsing/parser.mly" + ( Extensions.Comprehensions.Cexp_list_comprehension _1 ) +# 43001 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2603 "parsing/parser.mly" + ( (Extensions.Comprehensions.expr_of ~loc:(make_loc _sloc) _1).pexp_desc ) +# 43011 "parsing/parser.ml" + + in + +# 2699 "parsing/parser.mly" + ( _1 ) +# 43017 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1050 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 43027 "parsing/parser.ml" + + in + +# 2534 "parsing/parser.mly" + ( _1 ) +# 43033 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let xs : (Extensions.Comprehensions.clause list) = Obj.magic xs in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in let _v : (Parsetree.expression) = let _1 = let _1 = let _1 = - let _endpos = _endpos__3_ in + let _1 = + let _1 = + let _3 = + let xs = +# 253 "" + ( List.rev xs ) +# 43085 "parsing/parser.ml" + in + +# 1119 "parsing/parser.mly" + ( xs ) +# 43090 "parsing/parser.ml" + + in + +# 2589 "parsing/parser.mly" + ( Extensions.Comprehensions.{ body = _2; clauses = _3 } ) +# 43096 "parsing/parser.ml" + + in + +# 2596 "parsing/parser.mly" + ( Extensions.Comprehensions.Cexp_array_comprehension (Mutable, _1) ) +# 43102 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2528 "parsing/parser.mly" - ( Pexp_extension( - Extensions.payload_of_extension_expr - ~loc:(make_loc _sloc) (Eexp_arr_comprehension(_2, _3))) ) -# 42325 "parsing/parser.ml" +# 2603 "parsing/parser.mly" + ( (Extensions.Comprehensions.expr_of ~loc:(make_loc _sloc) _1).pexp_desc ) +# 43112 "parsing/parser.ml" in -# 2600 "parsing/parser.mly" +# 2699 "parsing/parser.mly" ( _1 ) -# 42331 "parsing/parser.ml" +# 43118 "parsing/parser.ml" in - let _endpos__1_ = _endpos__3_ in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1050 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 43128 "parsing/parser.ml" + + in + +# 2534 "parsing/parser.mly" + ( _1 ) +# 43134 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let xs : (Extensions.Comprehensions.clause list) = Obj.magic xs in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _1 = + let _1 = + let _1 = + let _3 = + let xs = +# 253 "" + ( List.rev xs ) +# 43186 "parsing/parser.ml" + in + +# 1119 "parsing/parser.mly" + ( xs ) +# 43191 "parsing/parser.ml" + + in + +# 2589 "parsing/parser.mly" + ( Extensions.Comprehensions.{ body = _2; clauses = _3 } ) +# 43197 "parsing/parser.ml" + + in + +# 2598 "parsing/parser.mly" + ( Extensions.Comprehensions.Cexp_array_comprehension (Immutable, _1) ) +# 43203 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2603 "parsing/parser.mly" + ( (Extensions.Comprehensions.expr_of ~loc:(make_loc _sloc) _1).pexp_desc ) +# 43213 "parsing/parser.ml" + + in + +# 2699 "parsing/parser.mly" + ( _1 ) +# 43219 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1050 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 43229 "parsing/parser.ml" + + in + +# 2534 "parsing/parser.mly" + ( _1 ) +# 43235 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _4 : unit = Obj.magic _4 in + let xs : (Extensions.Comprehensions.clause list) = Obj.magic xs in + let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _3 = + let (_startpos__1_, _2) = (_startpos__1_inlined1_, _2_inlined1) in + let _1 = + let _1 = + let _3 = + let xs = +# 253 "" + ( List.rev xs ) +# 43302 "parsing/parser.ml" + in + +# 1119 "parsing/parser.mly" + ( xs ) +# 43307 "parsing/parser.ml" + + in + +# 2589 "parsing/parser.mly" + ( Extensions.Comprehensions.{ body = _2; clauses = _3 } ) +# 43313 "parsing/parser.ml" + + in + +# 2594 "parsing/parser.mly" + ( Extensions.Comprehensions.Cexp_list_comprehension _1 ) +# 43319 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2603 "parsing/parser.mly" + ( (Extensions.Comprehensions.expr_of ~loc:(make_loc _sloc) _1).pexp_desc ) +# 43329 "parsing/parser.ml" + + in + let (_endpos__3_, _startpos__3_) = (_endpos__4_, _startpos__1_inlined1_) in + let od = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1017 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 43341 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1720 "parsing/parser.mly" + ( let loc = make_loc _loc__1_ in + let me = Mod.ident ~loc _1 in + Opn.mk ~loc me ) +# 43350 "parsing/parser.ml" + + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 2701 "parsing/parser.mly" + ( Pexp_open(od, mkexp ~loc:(_loc__3_) _3) ) +# 43357 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42341 "parsing/parser.ml" +# 43367 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42347 "parsing/parser.ml" +# 43373 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42356,100 +43382,132 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _3 : (Extensions.comprehension list) = Obj.magic _3 in + let _4 : unit = Obj.magic _4 in + let xs : (Extensions.Comprehensions.clause list) = Obj.magic xs in let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in + let _endpos = _endpos__4_ in let _v : (Parsetree.expression) = let _1 = let _1 = let _3 = let (_startpos__1_, _2) = (_startpos__1_inlined1_, _2_inlined1) in - let _endpos = _endpos__3_ in + let _1 = + let _1 = + let _3 = + let xs = +# 253 "" + ( List.rev xs ) +# 43440 "parsing/parser.ml" + in + +# 1119 "parsing/parser.mly" + ( xs ) +# 43445 "parsing/parser.ml" + + in + +# 2589 "parsing/parser.mly" + ( Extensions.Comprehensions.{ body = _2; clauses = _3 } ) +# 43451 "parsing/parser.ml" + + in + +# 2596 "parsing/parser.mly" + ( Extensions.Comprehensions.Cexp_array_comprehension (Mutable, _1) ) +# 43457 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2524 "parsing/parser.mly" - ( Pexp_extension( - Extensions.payload_of_extension_expr - ~loc:(make_loc _sloc) (Eexp_list_comprehension(_2, _3))) ) -# 42409 "parsing/parser.ml" +# 2603 "parsing/parser.mly" + ( (Extensions.Comprehensions.expr_of ~loc:(make_loc _sloc) _1).pexp_desc ) +# 43467 "parsing/parser.ml" in - let _startpos__3_ = _startpos__1_inlined1_ in + let (_endpos__3_, _startpos__3_) = (_endpos__4_, _startpos__1_inlined1_) in let od = let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42421 "parsing/parser.ml" +# 43479 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 42430 "parsing/parser.ml" +# 43488 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2602 "parsing/parser.mly" +# 2701 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:(_loc__3_) _3) ) -# 42437 "parsing/parser.ml" +# 43495 "parsing/parser.ml" in - let _endpos__1_ = _endpos__3_ in + let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42447 "parsing/parser.ml" +# 43505 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42453 "parsing/parser.ml" +# 43511 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42462,100 +43520,132 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _3 : (Extensions.comprehension list) = Obj.magic _3 in + let _4 : unit = Obj.magic _4 in + let xs : (Extensions.Comprehensions.clause list) = Obj.magic xs in let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in + let _endpos = _endpos__4_ in let _v : (Parsetree.expression) = let _1 = let _1 = let _3 = let (_startpos__1_, _2) = (_startpos__1_inlined1_, _2_inlined1) in - let _endpos = _endpos__3_ in + let _1 = + let _1 = + let _3 = + let xs = +# 253 "" + ( List.rev xs ) +# 43578 "parsing/parser.ml" + in + +# 1119 "parsing/parser.mly" + ( xs ) +# 43583 "parsing/parser.ml" + + in + +# 2589 "parsing/parser.mly" + ( Extensions.Comprehensions.{ body = _2; clauses = _3 } ) +# 43589 "parsing/parser.ml" + + in + +# 2598 "parsing/parser.mly" + ( Extensions.Comprehensions.Cexp_array_comprehension (Immutable, _1) ) +# 43595 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2528 "parsing/parser.mly" - ( Pexp_extension( - Extensions.payload_of_extension_expr - ~loc:(make_loc _sloc) (Eexp_arr_comprehension(_2, _3))) ) -# 42515 "parsing/parser.ml" +# 2603 "parsing/parser.mly" + ( (Extensions.Comprehensions.expr_of ~loc:(make_loc _sloc) _1).pexp_desc ) +# 43605 "parsing/parser.ml" in - let _startpos__3_ = _startpos__1_inlined1_ in + let (_endpos__3_, _startpos__3_) = (_endpos__4_, _startpos__1_inlined1_) in let od = let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42527 "parsing/parser.ml" +# 43617 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 42536 "parsing/parser.ml" +# 43626 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2602 "parsing/parser.mly" +# 2701 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:(_loc__3_) _3) ) -# 42543 "parsing/parser.ml" +# 43633 "parsing/parser.ml" in - let _endpos__1_ = _endpos__3_ in + let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42553 "parsing/parser.ml" +# 43643 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42559 "parsing/parser.ml" +# 43649 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42608,9 +43698,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 42614 "parsing/parser.ml" +# 43704 "parsing/parser.ml" in let od = let _1 = @@ -42618,30 +43708,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42624 "parsing/parser.ml" +# 43714 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 42633 "parsing/parser.ml" +# 43723 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _loc__5_ = (_startpos__5_, _endpos__5_) in -# 2604 "parsing/parser.mly" +# 2703 "parsing/parser.mly" ( let list_exp = (* TODO: review the location of list_exp *) let tail_exp, _tail_loc = mktailexp _loc__5_ _4 in mkexp ~loc:(_startpos__3_, _endpos) tail_exp in Pexp_open(od, list_exp) ) -# 42645 "parsing/parser.ml" +# 43735 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -42649,15 +43739,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42655 "parsing/parser.ml" +# 43745 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42661 "parsing/parser.ml" +# 43751 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42705,18 +43795,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in let _1 = -# 2609 "parsing/parser.mly" +# 2708 "parsing/parser.mly" (Lident "[]") -# 42711 "parsing/parser.ml" +# 43801 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42720 "parsing/parser.ml" +# 43810 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -42726,25 +43816,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42732 "parsing/parser.ml" +# 43822 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 42741 "parsing/parser.ml" +# 43831 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2610 "parsing/parser.mly" +# 2709 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:_loc__3_ (Pexp_construct(_3, None))) ) -# 42748 "parsing/parser.ml" +# 43838 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -42752,15 +43842,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42758 "parsing/parser.ml" +# 43848 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42764 "parsing/parser.ml" +# 43854 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42813,16 +43903,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2856 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( es ) -# 42819 "parsing/parser.ml" +# 43909 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2613 "parsing/parser.mly" +# 2712 "parsing/parser.mly" ( unclosed "[" _loc__3_ "]" _loc__5_ ) -# 42826 "parsing/parser.ml" +# 43916 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -42830,15 +43920,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42836 "parsing/parser.ml" +# 43926 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 42842 "parsing/parser.ml" +# 43932 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42931,11 +44021,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 42939 "parsing/parser.ml" +# 44029 "parsing/parser.ml" in let _5 = @@ -42943,15 +44033,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 42949 "parsing/parser.ml" +# 44039 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 42955 "parsing/parser.ml" +# 44045 "parsing/parser.ml" in let od = @@ -42960,18 +44050,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42966 "parsing/parser.ml" +# 44056 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1670 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 42975 "parsing/parser.ml" +# 44065 "parsing/parser.ml" in let _startpos_od_ = _startpos__1_ in @@ -42979,12 +44069,12 @@ module Tables = struct let _symbolstartpos = _startpos_od_ in let _sloc = (_symbolstartpos, _endpos) in -# 2616 "parsing/parser.mly" +# 2715 "parsing/parser.mly" ( let modexp = mkexp_attrs ~loc:(_startpos__3_, _endpos) (Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _6), _8)) _5 in Pexp_open(od, modexp) ) -# 42988 "parsing/parser.ml" +# 44078 "parsing/parser.ml" in let _endpos__1_ = _endpos__9_ in @@ -42992,15 +44082,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 42998 "parsing/parser.ml" +# 44088 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 43004 "parsing/parser.ml" +# 44094 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43085,23 +44175,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 43091 "parsing/parser.ml" +# 44181 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 43097 "parsing/parser.ml" +# 44187 "parsing/parser.ml" in let _loc__8_ = (_startpos__8_, _endpos__8_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2622 "parsing/parser.mly" +# 2721 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__8_ ) -# 43105 "parsing/parser.ml" +# 44195 "parsing/parser.ml" in let _endpos__1_ = _endpos__8_ in @@ -43109,15 +44199,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1000 "parsing/parser.mly" +# 1050 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 43115 "parsing/parser.ml" +# 44205 "parsing/parser.ml" in -# 2482 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 43121 "parsing/parser.ml" +# 44211 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43146,30 +44236,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43152 "parsing/parser.ml" +# 44242 "parsing/parser.ml" in -# 2939 "parsing/parser.mly" +# 3038 "parsing/parser.mly" ( Ppat_var (_1) ) -# 43158 "parsing/parser.ml" +# 44248 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43167 "parsing/parser.ml" +# 44257 "parsing/parser.ml" in -# 2940 "parsing/parser.mly" +# 3039 "parsing/parser.mly" ( _1 ) -# 43173 "parsing/parser.ml" +# 44263 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43192,9 +44282,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2941 "parsing/parser.mly" +# 3040 "parsing/parser.mly" ( _1 ) -# 43198 "parsing/parser.ml" +# 44288 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43234,9 +44324,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2946 "parsing/parser.mly" +# 3045 "parsing/parser.mly" ( reloc_pat ~loc:_sloc _2 ) -# 43240 "parsing/parser.ml" +# 44330 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43259,9 +44349,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2948 "parsing/parser.mly" +# 3047 "parsing/parser.mly" ( _1 ) -# 43265 "parsing/parser.ml" +# 44355 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43324,9 +44414,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43330 "parsing/parser.ml" +# 44420 "parsing/parser.ml" in let _3 = @@ -43334,24 +44424,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 43340 "parsing/parser.ml" +# 44430 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 43346 "parsing/parser.ml" +# 44436 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2950 "parsing/parser.mly" +# 3049 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_unpack _4) _3 ) -# 43355 "parsing/parser.ml" +# 44445 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43428,11 +44518,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 43436 "parsing/parser.ml" +# 44526 "parsing/parser.ml" in let _4 = @@ -43441,9 +44531,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43447 "parsing/parser.ml" +# 44537 "parsing/parser.ml" in let (_endpos__4_, _startpos__4_) = (_endpos__1_inlined3_, _startpos__1_inlined3_) in @@ -43452,15 +44542,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 43458 "parsing/parser.ml" +# 44548 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 43464 "parsing/parser.ml" +# 44554 "parsing/parser.ml" in let _endpos = _endpos__7_ in @@ -43468,11 +44558,11 @@ module Tables = struct let _loc__4_ = (_startpos__4_, _endpos__4_) in let _sloc = (_symbolstartpos, _endpos) in -# 2952 "parsing/parser.mly" +# 3051 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_constraint(mkpat ~loc:_loc__4_ (Ppat_unpack _4), _6)) _3 ) -# 43476 "parsing/parser.ml" +# 44566 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43496,23 +44586,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2960 "parsing/parser.mly" +# 3059 "parsing/parser.mly" ( Ppat_any ) -# 43502 "parsing/parser.ml" +# 44592 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43510 "parsing/parser.ml" +# 44600 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 43516 "parsing/parser.ml" +# 44606 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43536,23 +44626,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2962 "parsing/parser.mly" +# 3061 "parsing/parser.mly" ( Ppat_constant _1 ) -# 43542 "parsing/parser.ml" +# 44632 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43550 "parsing/parser.ml" +# 44640 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 43556 "parsing/parser.ml" +# 44646 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43590,24 +44680,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2964 "parsing/parser.mly" +# 3063 "parsing/parser.mly" ( Ppat_interval (_1, _3) ) -# 43596 "parsing/parser.ml" +# 44686 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43605 "parsing/parser.ml" +# 44695 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 43611 "parsing/parser.ml" +# 44701 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43636,30 +44726,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43642 "parsing/parser.ml" +# 44732 "parsing/parser.ml" in -# 2966 "parsing/parser.mly" +# 3065 "parsing/parser.mly" ( Ppat_construct(_1, None) ) -# 43648 "parsing/parser.ml" +# 44738 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43657 "parsing/parser.ml" +# 44747 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 43663 "parsing/parser.ml" +# 44753 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43683,23 +44773,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2968 "parsing/parser.mly" +# 3067 "parsing/parser.mly" ( Ppat_variant(_1, None) ) -# 43689 "parsing/parser.ml" +# 44779 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43697 "parsing/parser.ml" +# 44787 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 43703 "parsing/parser.ml" +# 44793 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43736,15 +44826,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43742 "parsing/parser.ml" +# 44832 "parsing/parser.ml" in -# 2970 "parsing/parser.mly" +# 3069 "parsing/parser.mly" ( Ppat_type (_2) ) -# 43748 "parsing/parser.ml" +# 44838 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -43752,15 +44842,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43758 "parsing/parser.ml" +# 44848 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 43764 "parsing/parser.ml" +# 44854 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43803,15 +44893,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43809 "parsing/parser.ml" +# 44899 "parsing/parser.ml" in -# 2972 "parsing/parser.mly" +# 3071 "parsing/parser.mly" ( Ppat_open(_1, _3) ) -# 43815 "parsing/parser.ml" +# 44905 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -43819,15 +44909,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43825 "parsing/parser.ml" +# 44915 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 43831 "parsing/parser.ml" +# 44921 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43875,18 +44965,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in let _1 = -# 2973 "parsing/parser.mly" +# 3072 "parsing/parser.mly" (Lident "[]") -# 43881 "parsing/parser.ml" +# 44971 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43890 "parsing/parser.ml" +# 44980 "parsing/parser.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -43895,18 +44985,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43901 "parsing/parser.ml" +# 44991 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2974 "parsing/parser.mly" +# 3073 "parsing/parser.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 43910 "parsing/parser.ml" +# 45000 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -43914,15 +45004,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 43920 "parsing/parser.ml" +# 45010 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 43926 "parsing/parser.ml" +# 45016 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43970,18 +45060,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in let _1 = -# 2975 "parsing/parser.mly" +# 3074 "parsing/parser.mly" (Lident "()") -# 43976 "parsing/parser.ml" +# 45066 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43985 "parsing/parser.ml" +# 45075 "parsing/parser.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -43990,18 +45080,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43996 "parsing/parser.ml" +# 45086 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2976 "parsing/parser.mly" +# 3075 "parsing/parser.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 44005 "parsing/parser.ml" +# 45095 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -44009,15 +45099,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44015 "parsing/parser.ml" +# 45105 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44021 "parsing/parser.ml" +# 45111 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44074,15 +45164,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44080 "parsing/parser.ml" +# 45170 "parsing/parser.ml" in -# 2978 "parsing/parser.mly" +# 3077 "parsing/parser.mly" ( Ppat_open (_1, _4) ) -# 44086 "parsing/parser.ml" +# 45176 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -44090,15 +45180,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44096 "parsing/parser.ml" +# 45186 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44102 "parsing/parser.ml" +# 45192 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44153,9 +45243,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2980 "parsing/parser.mly" +# 3079 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 44159 "parsing/parser.ml" +# 45249 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -44163,15 +45253,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44169 "parsing/parser.ml" +# 45259 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44175 "parsing/parser.ml" +# 45265 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44218,9 +45308,9 @@ module Tables = struct let _1 = let _loc__4_ = (_startpos__4_, _endpos__4_) in -# 2982 "parsing/parser.mly" +# 3081 "parsing/parser.mly" ( expecting _loc__4_ "pattern" ) -# 44224 "parsing/parser.ml" +# 45314 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -44228,15 +45318,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44234 "parsing/parser.ml" +# 45324 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44240 "parsing/parser.ml" +# 45330 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44277,9 +45367,9 @@ module Tables = struct let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2984 "parsing/parser.mly" +# 3083 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 44283 "parsing/parser.ml" +# 45373 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -44287,15 +45377,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44293 "parsing/parser.ml" +# 45383 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44299 "parsing/parser.ml" +# 45389 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44347,24 +45437,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2986 "parsing/parser.mly" +# 3085 "parsing/parser.mly" ( Ppat_constraint(_2, _4) ) -# 44353 "parsing/parser.ml" +# 45443 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44362 "parsing/parser.ml" +# 45452 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44368 "parsing/parser.ml" +# 45458 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44419,9 +45509,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2988 "parsing/parser.mly" +# 3087 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 44425 "parsing/parser.ml" +# 45515 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -44429,15 +45519,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44435 "parsing/parser.ml" +# 45525 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44441 "parsing/parser.ml" +# 45531 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44484,9 +45574,9 @@ module Tables = struct let _1 = let _loc__4_ = (_startpos__4_, _endpos__4_) in -# 2990 "parsing/parser.mly" +# 3089 "parsing/parser.mly" ( expecting _loc__4_ "type" ) -# 44490 "parsing/parser.ml" +# 45580 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -44494,15 +45584,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44500 "parsing/parser.ml" +# 45590 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44506 "parsing/parser.ml" +# 45596 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44581,11 +45671,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 44589 "parsing/parser.ml" +# 45679 "parsing/parser.ml" in let _3 = @@ -44593,23 +45683,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 44599 "parsing/parser.ml" +# 45689 "parsing/parser.ml" in -# 4105 "parsing/parser.mly" +# 4208 "parsing/parser.mly" ( _1, _2 ) -# 44605 "parsing/parser.ml" +# 45695 "parsing/parser.ml" in let _loc__7_ = (_startpos__7_, _endpos__7_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2993 "parsing/parser.mly" +# 3092 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__7_ ) -# 44613 "parsing/parser.ml" +# 45703 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -44617,15 +45707,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44623 "parsing/parser.ml" +# 45713 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44629 "parsing/parser.ml" +# 45719 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44649,23 +45739,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2995 "parsing/parser.mly" +# 3094 "parsing/parser.mly" ( Ppat_extension _1 ) -# 44655 "parsing/parser.ml" +# 45745 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1002 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 44663 "parsing/parser.ml" +# 45753 "parsing/parser.ml" in -# 2956 "parsing/parser.mly" +# 3055 "parsing/parser.mly" ( _1 ) -# 44669 "parsing/parser.ml" +# 45759 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44684,17 +45774,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 44690 "parsing/parser.ml" +# 45780 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4011 "parsing/parser.mly" +# 4114 "parsing/parser.mly" ( _1 ) -# 44698 "parsing/parser.ml" +# 45788 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44713,17 +45803,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 834 "parsing/parser.mly" +# 884 "parsing/parser.mly" (string) -# 44719 "parsing/parser.ml" +# 45809 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4012 "parsing/parser.mly" +# 4115 "parsing/parser.mly" ( _1 ) -# 44727 "parsing/parser.ml" +# 45817 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44746,9 +45836,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4013 "parsing/parser.mly" +# 4116 "parsing/parser.mly" ( "and" ) -# 44752 "parsing/parser.ml" +# 45842 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44771,9 +45861,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4014 "parsing/parser.mly" +# 4117 "parsing/parser.mly" ( "as" ) -# 44777 "parsing/parser.ml" +# 45867 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44796,9 +45886,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4015 "parsing/parser.mly" +# 4118 "parsing/parser.mly" ( "assert" ) -# 44802 "parsing/parser.ml" +# 45892 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44821,9 +45911,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4016 "parsing/parser.mly" +# 4119 "parsing/parser.mly" ( "begin" ) -# 44827 "parsing/parser.ml" +# 45917 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44846,9 +45936,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4017 "parsing/parser.mly" +# 4120 "parsing/parser.mly" ( "class" ) -# 44852 "parsing/parser.ml" +# 45942 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44871,9 +45961,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4018 "parsing/parser.mly" +# 4121 "parsing/parser.mly" ( "constraint" ) -# 44877 "parsing/parser.ml" +# 45967 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44896,9 +45986,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4019 "parsing/parser.mly" +# 4122 "parsing/parser.mly" ( "do" ) -# 44902 "parsing/parser.ml" +# 45992 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44921,9 +46011,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4020 "parsing/parser.mly" +# 4123 "parsing/parser.mly" ( "done" ) -# 44927 "parsing/parser.ml" +# 46017 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44946,9 +46036,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4021 "parsing/parser.mly" +# 4124 "parsing/parser.mly" ( "downto" ) -# 44952 "parsing/parser.ml" +# 46042 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44971,9 +46061,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4022 "parsing/parser.mly" +# 4125 "parsing/parser.mly" ( "else" ) -# 44977 "parsing/parser.ml" +# 46067 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44996,9 +46086,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4023 "parsing/parser.mly" +# 4126 "parsing/parser.mly" ( "end" ) -# 45002 "parsing/parser.ml" +# 46092 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45021,9 +46111,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4024 "parsing/parser.mly" +# 4127 "parsing/parser.mly" ( "exception" ) -# 45027 "parsing/parser.ml" +# 46117 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45046,9 +46136,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4025 "parsing/parser.mly" +# 4128 "parsing/parser.mly" ( "external" ) -# 45052 "parsing/parser.ml" +# 46142 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45071,9 +46161,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4026 "parsing/parser.mly" +# 4129 "parsing/parser.mly" ( "false" ) -# 45077 "parsing/parser.ml" +# 46167 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45096,9 +46186,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4027 "parsing/parser.mly" +# 4130 "parsing/parser.mly" ( "for" ) -# 45102 "parsing/parser.ml" +# 46192 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45121,9 +46211,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4028 "parsing/parser.mly" +# 4131 "parsing/parser.mly" ( "fun" ) -# 45127 "parsing/parser.ml" +# 46217 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45146,9 +46236,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4029 "parsing/parser.mly" +# 4132 "parsing/parser.mly" ( "function" ) -# 45152 "parsing/parser.ml" +# 46242 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45171,9 +46261,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4030 "parsing/parser.mly" +# 4133 "parsing/parser.mly" ( "functor" ) -# 45177 "parsing/parser.ml" +# 46267 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45196,9 +46286,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4031 "parsing/parser.mly" +# 4134 "parsing/parser.mly" ( "nonlocal_" ) -# 45202 "parsing/parser.ml" +# 46292 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45221,9 +46311,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4032 "parsing/parser.mly" +# 4135 "parsing/parser.mly" ( "if" ) -# 45227 "parsing/parser.ml" +# 46317 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45246,9 +46336,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4033 "parsing/parser.mly" +# 4136 "parsing/parser.mly" ( "in" ) -# 45252 "parsing/parser.ml" +# 46342 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45271,9 +46361,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4034 "parsing/parser.mly" +# 4137 "parsing/parser.mly" ( "include" ) -# 45277 "parsing/parser.ml" +# 46367 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45296,9 +46386,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4035 "parsing/parser.mly" +# 4138 "parsing/parser.mly" ( "inherit" ) -# 45302 "parsing/parser.ml" +# 46392 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45321,9 +46411,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4036 "parsing/parser.mly" +# 4139 "parsing/parser.mly" ( "initializer" ) -# 45327 "parsing/parser.ml" +# 46417 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45346,9 +46436,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4037 "parsing/parser.mly" +# 4140 "parsing/parser.mly" ( "lazy" ) -# 45352 "parsing/parser.ml" +# 46442 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45371,9 +46461,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4038 "parsing/parser.mly" +# 4141 "parsing/parser.mly" ( "let" ) -# 45377 "parsing/parser.ml" +# 46467 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45396,9 +46486,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4039 "parsing/parser.mly" +# 4142 "parsing/parser.mly" ( "local_" ) -# 45402 "parsing/parser.ml" +# 46492 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45421,9 +46511,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4040 "parsing/parser.mly" +# 4143 "parsing/parser.mly" ( "match" ) -# 45427 "parsing/parser.ml" +# 46517 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45446,9 +46536,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4041 "parsing/parser.mly" +# 4144 "parsing/parser.mly" ( "method" ) -# 45452 "parsing/parser.ml" +# 46542 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45471,9 +46561,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4042 "parsing/parser.mly" +# 4145 "parsing/parser.mly" ( "module" ) -# 45477 "parsing/parser.ml" +# 46567 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45496,9 +46586,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4043 "parsing/parser.mly" +# 4146 "parsing/parser.mly" ( "mutable" ) -# 45502 "parsing/parser.ml" +# 46592 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45521,9 +46611,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4044 "parsing/parser.mly" +# 4147 "parsing/parser.mly" ( "new" ) -# 45527 "parsing/parser.ml" +# 46617 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45546,9 +46636,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4045 "parsing/parser.mly" +# 4148 "parsing/parser.mly" ( "nonrec" ) -# 45552 "parsing/parser.ml" +# 46642 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45571,9 +46661,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4046 "parsing/parser.mly" +# 4149 "parsing/parser.mly" ( "object" ) -# 45577 "parsing/parser.ml" +# 46667 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45596,9 +46686,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4047 "parsing/parser.mly" +# 4150 "parsing/parser.mly" ( "of" ) -# 45602 "parsing/parser.ml" +# 46692 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45621,9 +46711,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4048 "parsing/parser.mly" +# 4151 "parsing/parser.mly" ( "open" ) -# 45627 "parsing/parser.ml" +# 46717 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45646,9 +46736,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4049 "parsing/parser.mly" +# 4152 "parsing/parser.mly" ( "or" ) -# 45652 "parsing/parser.ml" +# 46742 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45671,9 +46761,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4050 "parsing/parser.mly" +# 4153 "parsing/parser.mly" ( "private" ) -# 45677 "parsing/parser.ml" +# 46767 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45696,9 +46786,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4051 "parsing/parser.mly" +# 4154 "parsing/parser.mly" ( "rec" ) -# 45702 "parsing/parser.ml" +# 46792 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45721,9 +46811,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4052 "parsing/parser.mly" +# 4155 "parsing/parser.mly" ( "sig" ) -# 45727 "parsing/parser.ml" +# 46817 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45746,9 +46836,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4053 "parsing/parser.mly" +# 4156 "parsing/parser.mly" ( "struct" ) -# 45752 "parsing/parser.ml" +# 46842 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45771,9 +46861,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4054 "parsing/parser.mly" +# 4157 "parsing/parser.mly" ( "then" ) -# 45777 "parsing/parser.ml" +# 46867 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45796,9 +46886,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4055 "parsing/parser.mly" +# 4158 "parsing/parser.mly" ( "to" ) -# 45802 "parsing/parser.ml" +# 46892 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45821,9 +46911,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4056 "parsing/parser.mly" +# 4159 "parsing/parser.mly" ( "true" ) -# 45827 "parsing/parser.ml" +# 46917 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45846,9 +46936,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4057 "parsing/parser.mly" +# 4160 "parsing/parser.mly" ( "try" ) -# 45852 "parsing/parser.ml" +# 46942 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45871,9 +46961,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4058 "parsing/parser.mly" +# 4161 "parsing/parser.mly" ( "type" ) -# 45877 "parsing/parser.ml" +# 46967 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45896,9 +46986,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4059 "parsing/parser.mly" +# 4162 "parsing/parser.mly" ( "val" ) -# 45902 "parsing/parser.ml" +# 46992 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45921,9 +47011,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4060 "parsing/parser.mly" +# 4163 "parsing/parser.mly" ( "virtual" ) -# 45927 "parsing/parser.ml" +# 47017 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45946,9 +47036,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4061 "parsing/parser.mly" +# 4164 "parsing/parser.mly" ( "when" ) -# 45952 "parsing/parser.ml" +# 47042 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45971,9 +47061,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4062 "parsing/parser.mly" +# 4165 "parsing/parser.mly" ( "while" ) -# 45977 "parsing/parser.ml" +# 47067 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45996,9 +47086,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4063 "parsing/parser.mly" +# 4166 "parsing/parser.mly" ( "with" ) -# 46002 "parsing/parser.ml" +# 47092 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46021,9 +47111,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.type_exception * string Asttypes.loc option) = -# 3274 "parsing/parser.mly" +# 3377 "parsing/parser.mly" ( _1 ) -# 46027 "parsing/parser.ml" +# 47117 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46097,18 +47187,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Asttypes.loc option) = let attrs = let _1 = _1_inlined5 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 46103 "parsing/parser.ml" +# 47193 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined5_ in let attrs2 = let _1 = _1_inlined4 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 46112 "parsing/parser.ml" +# 47202 "parsing/parser.ml" in let lid = @@ -46117,9 +47207,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46123 "parsing/parser.ml" +# 47213 "parsing/parser.ml" in let id = @@ -46128,30 +47218,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46134 "parsing/parser.ml" +# 47224 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 46142 "parsing/parser.ml" +# 47232 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3283 "parsing/parser.mly" +# 3386 "parsing/parser.mly" ( let loc = make_loc _sloc in let docs = symbol_docs _sloc in Te.mk_exception ~attrs (Te.rebind id lid ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 46155 "parsing/parser.ml" +# 47245 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46181,9 +47271,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2767 "parsing/parser.mly" +# 2866 "parsing/parser.mly" ( _2 ) -# 46187 "parsing/parser.ml" +# 47277 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46216,9 +47306,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2769 "parsing/parser.mly" +# 2868 "parsing/parser.mly" ( let (l, o, p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) ) -# 46222 "parsing/parser.ml" +# 47312 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46269,17 +47359,17 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _3 = -# 2643 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( xs ) -# 46275 "parsing/parser.ml" +# 47365 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2771 "parsing/parser.mly" +# 2870 "parsing/parser.mly" ( mk_newtypes ~loc:_sloc _3 _5 ) -# 46283 "parsing/parser.ml" +# 47373 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46361,24 +47451,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 46365 "parsing/parser.ml" +# 47455 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 46370 "parsing/parser.ml" +# 47460 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 46376 "parsing/parser.ml" +# 47466 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 46382 "parsing/parser.ml" +# 47472 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -46386,40 +47476,40 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 46392 "parsing/parser.ml" +# 47482 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 46398 "parsing/parser.ml" +# 47488 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 46405 "parsing/parser.ml" +# 47495 "parsing/parser.ml" in let local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 46411 "parsing/parser.ml" +# 47501 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos_label_, _endpos_label_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 46417 "parsing/parser.ml" +# 47507 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 46423 "parsing/parser.ml" +# 47513 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -46427,15 +47517,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 46433 "parsing/parser.ml" +# 47523 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 46439 "parsing/parser.ml" +# 47529 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46482,33 +47572,33 @@ module Tables = struct let _1 = let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 46488 "parsing/parser.ml" +# 47578 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 46494 "parsing/parser.ml" +# 47584 "parsing/parser.ml" in let local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 46500 "parsing/parser.ml" +# 47590 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos_label_, _endpos_label_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 46506 "parsing/parser.ml" +# 47596 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 46512 "parsing/parser.ml" +# 47602 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -46516,15 +47606,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 46522 "parsing/parser.ml" +# 47612 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 46528 "parsing/parser.ml" +# 47618 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46614,24 +47704,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 46618 "parsing/parser.ml" +# 47708 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 46623 "parsing/parser.ml" +# 47713 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 46629 "parsing/parser.ml" +# 47719 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 46635 "parsing/parser.ml" +# 47725 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -46639,40 +47729,40 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 46645 "parsing/parser.ml" +# 47735 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 46651 "parsing/parser.ml" +# 47741 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 46658 "parsing/parser.ml" +# 47748 "parsing/parser.ml" in let local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 46664 "parsing/parser.ml" +# 47754 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 46670 "parsing/parser.ml" +# 47760 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 46676 "parsing/parser.ml" +# 47766 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -46680,15 +47770,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 46686 "parsing/parser.ml" +# 47776 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 46692 "parsing/parser.ml" +# 47782 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46742,33 +47832,33 @@ module Tables = struct let _1 = let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 46748 "parsing/parser.ml" +# 47838 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 46754 "parsing/parser.ml" +# 47844 "parsing/parser.ml" in let local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 46760 "parsing/parser.ml" +# 47850 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 46766 "parsing/parser.ml" +# 47856 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 46772 "parsing/parser.ml" +# 47862 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -46776,15 +47866,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 46782 "parsing/parser.ml" +# 47872 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 46788 "parsing/parser.ml" +# 47878 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46859,9 +47949,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 46865 "parsing/parser.ml" +# 47955 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -46877,24 +47967,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 46881 "parsing/parser.ml" +# 47971 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 46886 "parsing/parser.ml" +# 47976 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 46892 "parsing/parser.ml" +# 47982 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 46898 "parsing/parser.ml" +# 47988 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -46902,40 +47992,40 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 46908 "parsing/parser.ml" +# 47998 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 46914 "parsing/parser.ml" +# 48004 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 46921 "parsing/parser.ml" +# 48011 "parsing/parser.ml" in let local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 46927 "parsing/parser.ml" +# 48017 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__2_, _endpos__2_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 46933 "parsing/parser.ml" +# 48023 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 46939 "parsing/parser.ml" +# 48029 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -46943,15 +48033,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 46949 "parsing/parser.ml" +# 48039 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 46955 "parsing/parser.ml" +# 48045 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46998,9 +48088,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 47004 "parsing/parser.ml" +# 48094 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -47009,33 +48099,33 @@ module Tables = struct let _1 = let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 47015 "parsing/parser.ml" +# 48105 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 47021 "parsing/parser.ml" +# 48111 "parsing/parser.ml" in let local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 47027 "parsing/parser.ml" +# 48117 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__2_, _endpos__2_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 47033 "parsing/parser.ml" +# 48123 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 47039 "parsing/parser.ml" +# 48129 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -47043,15 +48133,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47049 "parsing/parser.ml" +# 48139 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 47055 "parsing/parser.ml" +# 48145 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47133,9 +48223,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 47139 "parsing/parser.ml" +# 48229 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -47152,24 +48242,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 47156 "parsing/parser.ml" +# 48246 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 47161 "parsing/parser.ml" +# 48251 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 47167 "parsing/parser.ml" +# 48257 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 47173 "parsing/parser.ml" +# 48263 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -47177,40 +48267,40 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47183 "parsing/parser.ml" +# 48273 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 47189 "parsing/parser.ml" +# 48279 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 47196 "parsing/parser.ml" +# 48286 "parsing/parser.ml" in let local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 47202 "parsing/parser.ml" +# 48292 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 47208 "parsing/parser.ml" +# 48298 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 47214 "parsing/parser.ml" +# 48304 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -47218,15 +48308,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47224 "parsing/parser.ml" +# 48314 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 47230 "parsing/parser.ml" +# 48320 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47280,9 +48370,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 47286 "parsing/parser.ml" +# 48376 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -47291,33 +48381,33 @@ module Tables = struct let _1 = let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 47297 "parsing/parser.ml" +# 48387 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 47303 "parsing/parser.ml" +# 48393 "parsing/parser.ml" in let local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 47309 "parsing/parser.ml" +# 48399 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 47315 "parsing/parser.ml" +# 48405 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 47321 "parsing/parser.ml" +# 48411 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -47325,15 +48415,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47331 "parsing/parser.ml" +# 48421 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 47337 "parsing/parser.ml" +# 48427 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47408,24 +48498,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 47412 "parsing/parser.ml" +# 48502 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 47417 "parsing/parser.ml" +# 48507 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 47423 "parsing/parser.ml" +# 48513 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 47429 "parsing/parser.ml" +# 48519 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -47433,40 +48523,40 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47439 "parsing/parser.ml" +# 48529 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 47445 "parsing/parser.ml" +# 48535 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 47452 "parsing/parser.ml" +# 48542 "parsing/parser.ml" in let local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 47458 "parsing/parser.ml" +# 48548 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__0_, _endpos__0_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 47464 "parsing/parser.ml" +# 48554 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 47470 "parsing/parser.ml" +# 48560 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -47474,15 +48564,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47480 "parsing/parser.ml" +# 48570 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 47486 "parsing/parser.ml" +# 48576 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47522,33 +48612,33 @@ module Tables = struct let _1 = let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 47528 "parsing/parser.ml" +# 48618 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 47534 "parsing/parser.ml" +# 48624 "parsing/parser.ml" in let local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 47540 "parsing/parser.ml" +# 48630 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__0_, _endpos__0_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 47546 "parsing/parser.ml" +# 48636 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 47552 "parsing/parser.ml" +# 48642 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_ty_) in @@ -47556,15 +48646,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47562 "parsing/parser.ml" +# 48652 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 47568 "parsing/parser.ml" +# 48658 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47647,24 +48737,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 47651 "parsing/parser.ml" +# 48741 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 47656 "parsing/parser.ml" +# 48746 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 47662 "parsing/parser.ml" +# 48752 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 47668 "parsing/parser.ml" +# 48758 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -47672,40 +48762,40 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47678 "parsing/parser.ml" +# 48768 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 47684 "parsing/parser.ml" +# 48774 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 47691 "parsing/parser.ml" +# 48781 "parsing/parser.ml" in let local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 47697 "parsing/parser.ml" +# 48787 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 47703 "parsing/parser.ml" +# 48793 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 47709 "parsing/parser.ml" +# 48799 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -47713,15 +48803,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47719 "parsing/parser.ml" +# 48809 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 47725 "parsing/parser.ml" +# 48815 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47768,33 +48858,33 @@ module Tables = struct let _1 = let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 47774 "parsing/parser.ml" +# 48864 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 47780 "parsing/parser.ml" +# 48870 "parsing/parser.ml" in let local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 47786 "parsing/parser.ml" +# 48876 "parsing/parser.ml" in let (_endpos_local_, _startpos_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 47792 "parsing/parser.ml" +# 48882 "parsing/parser.ml" in let _loc_local_ = (_startpos_local_, _endpos_local_) in -# 3536 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if local domain _loc_local_, codomain) ) -# 47798 "parsing/parser.ml" +# 48888 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -47802,15 +48892,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47808 "parsing/parser.ml" +# 48898 "parsing/parser.ml" in -# 3538 "parsing/parser.mly" +# 3641 "parsing/parser.mly" ( _1 ) -# 47814 "parsing/parser.ml" +# 48904 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47884,9 +48974,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 47890 "parsing/parser.ml" +# 48980 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = @@ -47898,24 +48988,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 47902 "parsing/parser.ml" +# 48992 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 47907 "parsing/parser.ml" +# 48997 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 47913 "parsing/parser.ml" +# 49003 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 47919 "parsing/parser.ml" +# 49009 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -47923,45 +49013,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47929 "parsing/parser.ml" +# 49019 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 47935 "parsing/parser.ml" +# 49025 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 47942 "parsing/parser.ml" +# 49032 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 47948 "parsing/parser.ml" +# 49038 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos_label_, _endpos_label_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 47954 "parsing/parser.ml" +# 49044 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 47965 "parsing/parser.ml" +# 49055 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -47969,15 +49059,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47975 "parsing/parser.ml" +# 49065 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 47981 "parsing/parser.ml" +# 49071 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48058,9 +49148,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 48064 "parsing/parser.ml" +# 49154 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let domain = @@ -48072,24 +49162,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 48076 "parsing/parser.ml" +# 49166 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 48081 "parsing/parser.ml" +# 49171 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 48087 "parsing/parser.ml" +# 49177 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 48093 "parsing/parser.ml" +# 49183 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -48097,45 +49187,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48103 "parsing/parser.ml" +# 49193 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 48109 "parsing/parser.ml" +# 49199 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 48116 "parsing/parser.ml" +# 49206 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 48122 "parsing/parser.ml" +# 49212 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos_label_, _endpos_label_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 48128 "parsing/parser.ml" +# 49218 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 48139 "parsing/parser.ml" +# 49229 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -48143,15 +49233,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48149 "parsing/parser.ml" +# 49239 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 48155 "parsing/parser.ml" +# 49245 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48197,45 +49287,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 48203 "parsing/parser.ml" +# 49293 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 48210 "parsing/parser.ml" +# 49300 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 48216 "parsing/parser.ml" +# 49306 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 48222 "parsing/parser.ml" +# 49312 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos_label_, _endpos_label_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 48228 "parsing/parser.ml" +# 49318 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 48239 "parsing/parser.ml" +# 49329 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -48243,15 +49333,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48249 "parsing/parser.ml" +# 49339 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 48255 "parsing/parser.ml" +# 49345 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48304,45 +49394,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 48310 "parsing/parser.ml" +# 49400 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_, _startpos__1_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 48317 "parsing/parser.ml" +# 49407 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 48323 "parsing/parser.ml" +# 49413 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 48329 "parsing/parser.ml" +# 49419 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos_label_, _endpos_label_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 48335 "parsing/parser.ml" +# 49425 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 48346 "parsing/parser.ml" +# 49436 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -48350,15 +49440,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48356 "parsing/parser.ml" +# 49446 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 48362 "parsing/parser.ml" +# 49452 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48439,9 +49529,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 48445 "parsing/parser.ml" +# 49535 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = @@ -48454,24 +49544,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 48458 "parsing/parser.ml" +# 49548 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 48463 "parsing/parser.ml" +# 49553 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 48469 "parsing/parser.ml" +# 49559 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 48475 "parsing/parser.ml" +# 49565 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -48479,45 +49569,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48485 "parsing/parser.ml" +# 49575 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 48491 "parsing/parser.ml" +# 49581 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 48498 "parsing/parser.ml" +# 49588 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 48504 "parsing/parser.ml" +# 49594 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 48510 "parsing/parser.ml" +# 49600 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 48521 "parsing/parser.ml" +# 49611 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -48525,15 +49615,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48531 "parsing/parser.ml" +# 49621 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 48537 "parsing/parser.ml" +# 49627 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48621,9 +49711,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 48627 "parsing/parser.ml" +# 49717 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined2_, _startpos__1_inlined2_) in let domain = @@ -48636,24 +49726,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 48640 "parsing/parser.ml" +# 49730 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 48645 "parsing/parser.ml" +# 49735 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 48651 "parsing/parser.ml" +# 49741 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 48657 "parsing/parser.ml" +# 49747 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -48661,45 +49751,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48667 "parsing/parser.ml" +# 49757 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 48673 "parsing/parser.ml" +# 49763 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 48680 "parsing/parser.ml" +# 49770 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 48686 "parsing/parser.ml" +# 49776 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 48692 "parsing/parser.ml" +# 49782 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 48703 "parsing/parser.ml" +# 49793 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -48707,15 +49797,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48713 "parsing/parser.ml" +# 49803 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 48719 "parsing/parser.ml" +# 49809 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48768,45 +49858,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 48774 "parsing/parser.ml" +# 49864 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 48781 "parsing/parser.ml" +# 49871 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 48787 "parsing/parser.ml" +# 49877 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 48793 "parsing/parser.ml" +# 49883 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 48799 "parsing/parser.ml" +# 49889 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 48810 "parsing/parser.ml" +# 49900 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -48814,15 +49904,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48820 "parsing/parser.ml" +# 49910 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 48826 "parsing/parser.ml" +# 49916 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48882,45 +49972,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 48888 "parsing/parser.ml" +# 49978 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 48895 "parsing/parser.ml" +# 49985 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 48901 "parsing/parser.ml" +# 49991 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 48907 "parsing/parser.ml" +# 49997 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3556 "parsing/parser.mly" +# 3659 "parsing/parser.mly" ( Optional label ) -# 48913 "parsing/parser.ml" +# 50003 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 48924 "parsing/parser.ml" +# 50014 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -48928,15 +50018,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 48934 "parsing/parser.ml" +# 50024 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 48940 "parsing/parser.ml" +# 50030 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49011,9 +50101,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 49017 "parsing/parser.ml" +# 50107 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -49021,9 +50111,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 49027 "parsing/parser.ml" +# 50117 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = @@ -49035,24 +50125,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 49039 "parsing/parser.ml" +# 50129 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 49044 "parsing/parser.ml" +# 50134 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 49050 "parsing/parser.ml" +# 50140 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 49056 "parsing/parser.ml" +# 50146 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -49060,45 +50150,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49066 "parsing/parser.ml" +# 50156 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 49072 "parsing/parser.ml" +# 50162 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 49079 "parsing/parser.ml" +# 50169 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 49085 "parsing/parser.ml" +# 50175 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__2_, _endpos__2_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 49091 "parsing/parser.ml" +# 50181 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 49102 "parsing/parser.ml" +# 50192 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -49106,15 +50196,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49112 "parsing/parser.ml" +# 50202 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 49118 "parsing/parser.ml" +# 50208 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49196,9 +50286,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 49202 "parsing/parser.ml" +# 50292 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -49206,9 +50296,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 49212 "parsing/parser.ml" +# 50302 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let domain = @@ -49220,24 +50310,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 49224 "parsing/parser.ml" +# 50314 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 49229 "parsing/parser.ml" +# 50319 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 49235 "parsing/parser.ml" +# 50325 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 49241 "parsing/parser.ml" +# 50331 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -49245,45 +50335,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49251 "parsing/parser.ml" +# 50341 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 49257 "parsing/parser.ml" +# 50347 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 49264 "parsing/parser.ml" +# 50354 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 49270 "parsing/parser.ml" +# 50360 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__2_, _endpos__2_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 49276 "parsing/parser.ml" +# 50366 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 49287 "parsing/parser.ml" +# 50377 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -49291,15 +50381,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49297 "parsing/parser.ml" +# 50387 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 49303 "parsing/parser.ml" +# 50393 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49346,9 +50436,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 49352 "parsing/parser.ml" +# 50442 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -49356,45 +50446,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 49362 "parsing/parser.ml" +# 50452 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 49369 "parsing/parser.ml" +# 50459 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 49375 "parsing/parser.ml" +# 50465 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 49381 "parsing/parser.ml" +# 50471 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__2_, _endpos__2_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 49387 "parsing/parser.ml" +# 50477 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 49398 "parsing/parser.ml" +# 50488 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -49402,15 +50492,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49408 "parsing/parser.ml" +# 50498 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 49414 "parsing/parser.ml" +# 50504 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49464,9 +50554,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 49470 "parsing/parser.ml" +# 50560 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -49474,45 +50564,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 49480 "parsing/parser.ml" +# 50570 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_, _startpos__1_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 49487 "parsing/parser.ml" +# 50577 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 49493 "parsing/parser.ml" +# 50583 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 49499 "parsing/parser.ml" +# 50589 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__2_, _endpos__2_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 49505 "parsing/parser.ml" +# 50595 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 49516 "parsing/parser.ml" +# 50606 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -49520,15 +50610,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49526 "parsing/parser.ml" +# 50616 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 49532 "parsing/parser.ml" +# 50622 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49610,9 +50700,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 49616 "parsing/parser.ml" +# 50706 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -49620,9 +50710,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 49626 "parsing/parser.ml" +# 50716 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = @@ -49635,24 +50725,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 49639 "parsing/parser.ml" +# 50729 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 49644 "parsing/parser.ml" +# 50734 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 49650 "parsing/parser.ml" +# 50740 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 49656 "parsing/parser.ml" +# 50746 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -49660,45 +50750,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49666 "parsing/parser.ml" +# 50756 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 49672 "parsing/parser.ml" +# 50762 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 49679 "parsing/parser.ml" +# 50769 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 49685 "parsing/parser.ml" +# 50775 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 49691 "parsing/parser.ml" +# 50781 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 49702 "parsing/parser.ml" +# 50792 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -49706,15 +50796,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49712 "parsing/parser.ml" +# 50802 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 49718 "parsing/parser.ml" +# 50808 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49803,9 +50893,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 49809 "parsing/parser.ml" +# 50899 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -49813,9 +50903,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 49819 "parsing/parser.ml" +# 50909 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined2_, _startpos__1_inlined2_) in let domain = @@ -49828,24 +50918,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 49832 "parsing/parser.ml" +# 50922 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 49837 "parsing/parser.ml" +# 50927 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 49843 "parsing/parser.ml" +# 50933 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 49849 "parsing/parser.ml" +# 50939 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -49853,45 +50943,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49859 "parsing/parser.ml" +# 50949 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 49865 "parsing/parser.ml" +# 50955 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 49872 "parsing/parser.ml" +# 50962 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 49878 "parsing/parser.ml" +# 50968 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 49884 "parsing/parser.ml" +# 50974 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 49895 "parsing/parser.ml" +# 50985 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -49899,15 +50989,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 49905 "parsing/parser.ml" +# 50995 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 49911 "parsing/parser.ml" +# 51001 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49961,9 +51051,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 49967 "parsing/parser.ml" +# 51057 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -49971,45 +51061,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 49977 "parsing/parser.ml" +# 51067 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 49984 "parsing/parser.ml" +# 51074 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 49990 "parsing/parser.ml" +# 51080 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 49996 "parsing/parser.ml" +# 51086 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 50002 "parsing/parser.ml" +# 51092 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 50013 "parsing/parser.ml" +# 51103 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -50017,15 +51107,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50023 "parsing/parser.ml" +# 51113 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 50029 "parsing/parser.ml" +# 51119 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50086,9 +51176,9 @@ module Tables = struct let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 50092 "parsing/parser.ml" +# 51182 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -50096,45 +51186,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 50102 "parsing/parser.ml" +# 51192 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 50109 "parsing/parser.ml" +# 51199 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 50115 "parsing/parser.ml" +# 51205 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 50121 "parsing/parser.ml" +# 51211 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3558 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( Labelled label ) -# 50127 "parsing/parser.ml" +# 51217 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 50138 "parsing/parser.ml" +# 51228 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -50142,15 +51232,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50148 "parsing/parser.ml" +# 51238 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 50154 "parsing/parser.ml" +# 51244 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50217,9 +51307,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 50223 "parsing/parser.ml" +# 51313 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = @@ -50231,24 +51321,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 50235 "parsing/parser.ml" +# 51325 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 50240 "parsing/parser.ml" +# 51330 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 50246 "parsing/parser.ml" +# 51336 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 50252 "parsing/parser.ml" +# 51342 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -50256,45 +51346,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50262 "parsing/parser.ml" +# 51352 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 50268 "parsing/parser.ml" +# 51358 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 50275 "parsing/parser.ml" +# 51365 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 50281 "parsing/parser.ml" +# 51371 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__0_, _endpos__0_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 50287 "parsing/parser.ml" +# 51377 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 50298 "parsing/parser.ml" +# 51388 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -50302,15 +51392,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50308 "parsing/parser.ml" +# 51398 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 50314 "parsing/parser.ml" +# 51404 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50384,9 +51474,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 50390 "parsing/parser.ml" +# 51480 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let domain = @@ -50398,24 +51488,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 50402 "parsing/parser.ml" +# 51492 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 50407 "parsing/parser.ml" +# 51497 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 50413 "parsing/parser.ml" +# 51503 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 50419 "parsing/parser.ml" +# 51509 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -50423,45 +51513,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50429 "parsing/parser.ml" +# 51519 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 50435 "parsing/parser.ml" +# 51525 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 50442 "parsing/parser.ml" +# 51532 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 50448 "parsing/parser.ml" +# 51538 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__0_, _endpos__0_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 50454 "parsing/parser.ml" +# 51544 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 50465 "parsing/parser.ml" +# 51555 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -50469,15 +51559,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50475 "parsing/parser.ml" +# 51565 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 50481 "parsing/parser.ml" +# 51571 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50516,45 +51606,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 50522 "parsing/parser.ml" +# 51612 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 50529 "parsing/parser.ml" +# 51619 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 50535 "parsing/parser.ml" +# 51625 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 50541 "parsing/parser.ml" +# 51631 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__0_, _endpos__0_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 50547 "parsing/parser.ml" +# 51637 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 50558 "parsing/parser.ml" +# 51648 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_ty_) in @@ -50562,15 +51652,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50568 "parsing/parser.ml" +# 51658 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 50574 "parsing/parser.ml" +# 51664 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50616,45 +51706,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 50622 "parsing/parser.ml" +# 51712 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_, _startpos__1_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 50629 "parsing/parser.ml" +# 51719 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 50635 "parsing/parser.ml" +# 51725 "parsing/parser.ml" in let arg_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 50641 "parsing/parser.ml" +# 51731 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__0_, _endpos__0_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 50647 "parsing/parser.ml" +# 51737 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 50658 "parsing/parser.ml" +# 51748 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_ty_) in @@ -50662,15 +51752,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50668 "parsing/parser.ml" +# 51758 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 50674 "parsing/parser.ml" +# 51764 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50744,9 +51834,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 50750 "parsing/parser.ml" +# 51840 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = @@ -50759,24 +51849,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 50763 "parsing/parser.ml" +# 51853 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 50768 "parsing/parser.ml" +# 51858 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 50774 "parsing/parser.ml" +# 51864 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 50780 "parsing/parser.ml" +# 51870 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -50784,45 +51874,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50790 "parsing/parser.ml" +# 51880 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 50796 "parsing/parser.ml" +# 51886 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 50803 "parsing/parser.ml" +# 51893 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 50809 "parsing/parser.ml" +# 51899 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 50815 "parsing/parser.ml" +# 51905 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 50826 "parsing/parser.ml" +# 51916 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -50830,15 +51920,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50836 "parsing/parser.ml" +# 51926 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 50842 "parsing/parser.ml" +# 51932 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -50919,9 +52009,9 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 50925 "parsing/parser.ml" +# 52015 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined2_, _startpos__1_inlined2_) in let domain = @@ -50934,24 +52024,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 50938 "parsing/parser.ml" +# 52028 "parsing/parser.ml" in -# 1069 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 50943 "parsing/parser.ml" +# 52033 "parsing/parser.ml" in -# 3459 "parsing/parser.mly" +# 3562 "parsing/parser.mly" ( _1 ) -# 50949 "parsing/parser.ml" +# 52039 "parsing/parser.ml" in -# 3571 "parsing/parser.mly" +# 3674 "parsing/parser.mly" ( Ptyp_poly(vars, ty) ) -# 50955 "parsing/parser.ml" +# 52045 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -50959,45 +52049,45 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 50965 "parsing/parser.ml" +# 52055 "parsing/parser.ml" in -# 3573 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 50971 "parsing/parser.ml" +# 52061 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 50978 "parsing/parser.ml" +# 52068 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 50984 "parsing/parser.ml" +# 52074 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 50990 "parsing/parser.ml" +# 52080 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 51001 "parsing/parser.ml" +# 52091 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -51005,15 +52095,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 51011 "parsing/parser.ml" +# 52101 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 51017 "parsing/parser.ml" +# 52107 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51059,45 +52149,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3564 "parsing/parser.mly" +# 3667 "parsing/parser.mly" ( false ) -# 51065 "parsing/parser.ml" +# 52155 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__4_, _endpos__4_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 51072 "parsing/parser.ml" +# 52162 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 51078 "parsing/parser.ml" +# 52168 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 51084 "parsing/parser.ml" +# 52174 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 51090 "parsing/parser.ml" +# 52180 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 51101 "parsing/parser.ml" +# 52191 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -51105,15 +52195,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 51111 "parsing/parser.ml" +# 52201 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 51117 "parsing/parser.ml" +# 52207 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51166,45 +52256,45 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let ret_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 51172 "parsing/parser.ml" +# 52262 "parsing/parser.ml" in let (_endpos_ret_local_, _startpos_ret_local_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let domain = let _1 = -# 3575 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( ty ) -# 51179 "parsing/parser.ml" +# 52269 "parsing/parser.ml" in let _endpos__1_ = _endpos_ty_ in -# 965 "parsing/parser.mly" +# 1015 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 51185 "parsing/parser.ml" +# 52275 "parsing/parser.ml" in let arg_local = -# 3566 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( true ) -# 51191 "parsing/parser.ml" +# 52281 "parsing/parser.ml" in let (_endpos_arg_local_, _startpos_arg_local_) = (_endpos__1_, _startpos__1_) in let label = -# 3560 "parsing/parser.mly" +# 3663 "parsing/parser.mly" ( Nolabel ) -# 51197 "parsing/parser.ml" +# 52287 "parsing/parser.ml" in let _loc_ret_local_ = (_startpos_ret_local_, _endpos_ret_local_) in let _loc_codomain_ = (_startpos_codomain_, _endpos_codomain_) in let _loc_arg_local_ = (_startpos_arg_local_, _endpos_arg_local_) in -# 3547 "parsing/parser.mly" +# 3650 "parsing/parser.mly" ( Ptyp_arrow(label, mktyp_local_if arg_local domain _loc_arg_local_, mktyp_local_if ret_local (maybe_curry_typ codomain _loc_codomain_) _loc_ret_local_) ) -# 51208 "parsing/parser.ml" +# 52298 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -51212,15 +52302,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 51218 "parsing/parser.ml" +# 52308 "parsing/parser.ml" in -# 3552 "parsing/parser.mly" +# 3655 "parsing/parser.mly" ( _1 ) -# 51224 "parsing/parser.ml" +# 52314 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51247,39 +52337,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 51251 "parsing/parser.ml" +# 52341 "parsing/parser.ml" in let xs = let items = -# 1037 "parsing/parser.mly" +# 1087 "parsing/parser.mly" ( [] ) -# 51257 "parsing/parser.ml" +# 52347 "parsing/parser.ml" in -# 1466 "parsing/parser.mly" +# 1516 "parsing/parser.mly" ( items ) -# 51262 "parsing/parser.ml" +# 52352 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 51268 "parsing/parser.ml" +# 52358 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 959 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 51277 "parsing/parser.ml" +# 52367 "parsing/parser.ml" in -# 1459 "parsing/parser.mly" +# 1509 "parsing/parser.mly" ( _1 ) -# 51283 "parsing/parser.ml" +# 52373 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51320,7 +52410,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 51324 "parsing/parser.ml" +# 52414 "parsing/parser.ml" in let xs = let items = @@ -51328,65 +52418,65 @@ module Tables = struct let _1 = let _1 = let attrs = -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 51334 "parsing/parser.ml" +# 52424 "parsing/parser.ml" in -# 1473 "parsing/parser.mly" +# 1523 "parsing/parser.mly" ( mkstrexp e attrs ) -# 51339 "parsing/parser.ml" +# 52429 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 971 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 51347 "parsing/parser.ml" +# 52437 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 990 "parsing/parser.mly" +# 1040 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 51357 "parsing/parser.ml" +# 52447 "parsing/parser.ml" in -# 1039 "parsing/parser.mly" +# 1089 "parsing/parser.mly" ( x ) -# 51363 "parsing/parser.ml" +# 52453 "parsing/parser.ml" in -# 1466 "parsing/parser.mly" +# 1516 "parsing/parser.mly" ( items ) -# 51369 "parsing/parser.ml" +# 52459 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 51375 "parsing/parser.ml" +# 52465 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 959 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 51384 "parsing/parser.ml" +# 52474 "parsing/parser.ml" in -# 1459 "parsing/parser.mly" +# 1509 "parsing/parser.mly" ( _1 ) -# 51390 "parsing/parser.ml" +# 52480 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51412,9 +52502,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1488 "parsing/parser.mly" +# 1538 "parsing/parser.mly" ( val_of_let_bindings ~loc:_sloc _1 ) -# 51418 "parsing/parser.ml" +# 52508 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51448,9 +52538,9 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 51454 "parsing/parser.ml" +# 52544 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -51458,10 +52548,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1491 "parsing/parser.mly" +# 1541 "parsing/parser.mly" ( let docs = symbol_docs _sloc in Pstr_extension (_1, add_docs_attrs docs _2) ) -# 51465 "parsing/parser.ml" +# 52555 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -51469,15 +52559,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1006 "parsing/parser.mly" +# 1056 "parsing/parser.mly" ( mkstr ~loc:_sloc _1 ) -# 51475 "parsing/parser.ml" +# 52565 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 51481 "parsing/parser.ml" +# 52571 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51501,23 +52591,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1494 "parsing/parser.mly" +# 1544 "parsing/parser.mly" ( Pstr_attribute _1 ) -# 51507 "parsing/parser.ml" +# 52597 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1006 "parsing/parser.mly" +# 1056 "parsing/parser.mly" ( mkstr ~loc:_sloc _1 ) -# 51515 "parsing/parser.ml" +# 52605 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 51521 "parsing/parser.ml" +# 52611 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51541,23 +52631,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1498 "parsing/parser.mly" +# 1548 "parsing/parser.mly" ( pstr_primitive _1 ) -# 51547 "parsing/parser.ml" +# 52637 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 51555 "parsing/parser.ml" +# 52645 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 51561 "parsing/parser.ml" +# 52651 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51581,23 +52671,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1500 "parsing/parser.mly" +# 1550 "parsing/parser.mly" ( pstr_primitive _1 ) -# 51587 "parsing/parser.ml" +# 52677 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 51595 "parsing/parser.ml" +# 52685 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 51601 "parsing/parser.ml" +# 52691 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51632,26 +52722,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1198 "parsing/parser.mly" +# 1248 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 51638 "parsing/parser.ml" +# 52728 "parsing/parser.ml" in -# 3118 "parsing/parser.mly" +# 3221 "parsing/parser.mly" ( _1 ) -# 51643 "parsing/parser.ml" +# 52733 "parsing/parser.ml" in -# 3101 "parsing/parser.mly" +# 3204 "parsing/parser.mly" ( _1 ) -# 51649 "parsing/parser.ml" +# 52739 "parsing/parser.ml" in -# 1502 "parsing/parser.mly" +# 1552 "parsing/parser.mly" ( pstr_type _1 ) -# 51655 "parsing/parser.ml" +# 52745 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -51659,15 +52749,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 51665 "parsing/parser.ml" +# 52755 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 51671 "parsing/parser.ml" +# 52761 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51752,16 +52842,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 51758 "parsing/parser.ml" +# 52848 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1190 "parsing/parser.mly" +# 1240 "parsing/parser.mly" ( List.rev xs ) -# 51765 "parsing/parser.ml" +# 52855 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -51769,46 +52859,46 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 51775 "parsing/parser.ml" +# 52865 "parsing/parser.ml" in let _4 = -# 3920 "parsing/parser.mly" +# 4023 "parsing/parser.mly" ( Recursive ) -# 51781 "parsing/parser.ml" +# 52871 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 51788 "parsing/parser.ml" +# 52878 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3384 "parsing/parser.mly" +# 3487 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 51800 "parsing/parser.ml" +# 52890 "parsing/parser.ml" in -# 3367 "parsing/parser.mly" +# 3470 "parsing/parser.mly" ( _1 ) -# 51806 "parsing/parser.ml" +# 52896 "parsing/parser.ml" in -# 1504 "parsing/parser.mly" +# 1554 "parsing/parser.mly" ( pstr_typext _1 ) -# 51812 "parsing/parser.ml" +# 52902 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -51816,15 +52906,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 51822 "parsing/parser.ml" +# 52912 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 51828 "parsing/parser.ml" +# 52918 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -51916,16 +53006,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 51922 "parsing/parser.ml" +# 53012 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1190 "parsing/parser.mly" +# 1240 "parsing/parser.mly" ( List.rev xs ) -# 51929 "parsing/parser.ml" +# 53019 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -51933,9 +53023,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 51939 "parsing/parser.ml" +# 53029 "parsing/parser.ml" in let _4 = @@ -51944,41 +53034,41 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3922 "parsing/parser.mly" +# 4025 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 51950 "parsing/parser.ml" +# 53040 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 51958 "parsing/parser.ml" +# 53048 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3384 "parsing/parser.mly" +# 3487 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 51970 "parsing/parser.ml" +# 53060 "parsing/parser.ml" in -# 3367 "parsing/parser.mly" +# 3470 "parsing/parser.mly" ( _1 ) -# 51976 "parsing/parser.ml" +# 53066 "parsing/parser.ml" in -# 1504 "parsing/parser.mly" +# 1554 "parsing/parser.mly" ( pstr_typext _1 ) -# 51982 "parsing/parser.ml" +# 53072 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -51986,15 +53076,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 51992 "parsing/parser.ml" +# 53082 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 51998 "parsing/parser.ml" +# 53088 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52018,23 +53108,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1506 "parsing/parser.mly" +# 1556 "parsing/parser.mly" ( pstr_exception _1 ) -# 52024 "parsing/parser.ml" +# 53114 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 52032 "parsing/parser.ml" +# 53122 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 52038 "parsing/parser.ml" +# 53128 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52097,9 +53187,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 52103 "parsing/parser.ml" +# 53193 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -52109,36 +53199,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 52115 "parsing/parser.ml" +# 53205 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 52123 "parsing/parser.ml" +# 53213 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1532 "parsing/parser.mly" +# 1582 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in let body = Mb.mk name body ~attrs ~loc ~docs in Pstr_module body, ext ) -# 52136 "parsing/parser.ml" +# 53226 "parsing/parser.ml" in -# 1508 "parsing/parser.mly" +# 1558 "parsing/parser.mly" ( _1 ) -# 52142 "parsing/parser.ml" +# 53232 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -52146,15 +53236,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 52152 "parsing/parser.ml" +# 53242 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 52158 "parsing/parser.ml" +# 53248 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52233,9 +53323,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 52239 "parsing/parser.ml" +# 53329 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -52245,24 +53335,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 52251 "parsing/parser.ml" +# 53341 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 52259 "parsing/parser.ml" +# 53349 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1567 "parsing/parser.mly" +# 1617 "parsing/parser.mly" ( let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in @@ -52270,25 +53360,25 @@ module Tables = struct ext, Mb.mk name body ~attrs ~loc ~docs ) -# 52274 "parsing/parser.ml" +# 53364 "parsing/parser.ml" in -# 1198 "parsing/parser.mly" +# 1248 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 52280 "parsing/parser.ml" +# 53370 "parsing/parser.ml" in -# 1555 "parsing/parser.mly" +# 1605 "parsing/parser.mly" ( _1 ) -# 52286 "parsing/parser.ml" +# 53376 "parsing/parser.ml" in -# 1510 "parsing/parser.mly" +# 1560 "parsing/parser.mly" ( pstr_recmodule _1 ) -# 52292 "parsing/parser.ml" +# 53382 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -52296,15 +53386,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 52302 "parsing/parser.ml" +# 53392 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 52308 "parsing/parser.ml" +# 53398 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52328,23 +53418,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1512 "parsing/parser.mly" +# 1562 "parsing/parser.mly" ( let (body, ext) = _1 in (Pstr_modtype body, ext) ) -# 52334 "parsing/parser.ml" +# 53424 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 52342 "parsing/parser.ml" +# 53432 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 52348 "parsing/parser.ml" +# 53438 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52368,23 +53458,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1514 "parsing/parser.mly" +# 1564 "parsing/parser.mly" ( let (body, ext) = _1 in (Pstr_open body, ext) ) -# 52374 "parsing/parser.ml" +# 53464 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 52382 "parsing/parser.ml" +# 53472 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 52388 "parsing/parser.ml" +# 53478 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52454,9 +53544,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in let body : (Parsetree.class_expr) = Obj.magic body in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 52460 "parsing/parser.ml" +# 53550 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -52474,9 +53564,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 52480 "parsing/parser.ml" +# 53570 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -52486,24 +53576,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 52492 "parsing/parser.ml" +# 53582 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 52500 "parsing/parser.ml" +# 53590 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1912 "parsing/parser.mly" +# 1962 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -52511,25 +53601,25 @@ module Tables = struct ext, Ci.mk id body ~virt ~params ~attrs ~loc ~docs ) -# 52515 "parsing/parser.ml" +# 53605 "parsing/parser.ml" in -# 1198 "parsing/parser.mly" +# 1248 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 52521 "parsing/parser.ml" +# 53611 "parsing/parser.ml" in -# 1901 "parsing/parser.mly" +# 1951 "parsing/parser.mly" ( _1 ) -# 52527 "parsing/parser.ml" +# 53617 "parsing/parser.ml" in -# 1516 "parsing/parser.mly" +# 1566 "parsing/parser.mly" ( let (ext, l) = _1 in (Pstr_class l, ext) ) -# 52533 "parsing/parser.ml" +# 53623 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -52537,15 +53627,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 52543 "parsing/parser.ml" +# 53633 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 52549 "parsing/parser.ml" +# 53639 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52569,23 +53659,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1518 "parsing/parser.mly" +# 1568 "parsing/parser.mly" ( let (ext, l) = _1 in (Pstr_class_type l, ext) ) -# 52575 "parsing/parser.ml" +# 53665 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 52583 "parsing/parser.ml" +# 53673 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 52589 "parsing/parser.ml" +# 53679 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52641,35 +53731,35 @@ module Tables = struct let attrs2 = let _1 = _1_inlined1 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 52647 "parsing/parser.ml" +# 53737 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined1_ in let attrs1 = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 52654 "parsing/parser.ml" +# 53744 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos_attrs0_ in let _sloc = (_symbolstartpos, _endpos) in -# 1611 "parsing/parser.mly" +# 1661 "parsing/parser.mly" ( let attrs = attrs0 @ attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 52667 "parsing/parser.ml" +# 53757 "parsing/parser.ml" in -# 1520 "parsing/parser.mly" +# 1570 "parsing/parser.mly" ( pstr_include _1 ) -# 52673 "parsing/parser.ml" +# 53763 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_attrs0_) in @@ -52677,15 +53767,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1023 "parsing/parser.mly" +# 1073 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 52683 "parsing/parser.ml" +# 53773 "parsing/parser.ml" in -# 1522 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 52689 "parsing/parser.ml" +# 53779 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52708,9 +53798,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3996 "parsing/parser.mly" +# 4099 "parsing/parser.mly" ( "-" ) -# 52714 "parsing/parser.ml" +# 53804 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52733,9 +53823,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3997 "parsing/parser.mly" +# 4100 "parsing/parser.mly" ( "-." ) -# 52739 "parsing/parser.ml" +# 53829 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52788,9 +53878,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _5 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 52794 "parsing/parser.ml" +# 53884 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined1_ in @@ -52799,18 +53889,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 52803 "parsing/parser.ml" +# 53893 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 52808 "parsing/parser.ml" +# 53898 "parsing/parser.ml" in -# 3693 "parsing/parser.mly" +# 3796 "parsing/parser.mly" ( _1 ) -# 52814 "parsing/parser.ml" +# 53904 "parsing/parser.ml" in let _1 = @@ -52818,20 +53908,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 52824 "parsing/parser.ml" +# 53914 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3679 "parsing/parser.mly" +# 3782 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _5 in Rf.tag ~loc:(make_loc _sloc) ~attrs _1 _3 _4 ) -# 52835 "parsing/parser.ml" +# 53925 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52863,9 +53953,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 52869 "parsing/parser.ml" +# 53959 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -52874,20 +53964,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 52880 "parsing/parser.ml" +# 53970 "parsing/parser.ml" in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3683 "parsing/parser.mly" +# 3786 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _2 in Rf.tag ~loc:(make_loc _sloc) ~attrs _1 true [] ) -# 52891 "parsing/parser.ml" +# 53981 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52919,7 +54009,7 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase) = let arg = # 124 "" ( None ) -# 52923 "parsing/parser.ml" +# 54013 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined1_ in let dir = @@ -52928,18 +54018,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 52934 "parsing/parser.ml" +# 54024 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3883 "parsing/parser.mly" +# 3986 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 52943 "parsing/parser.ml" +# 54033 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -52970,9 +54060,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 821 "parsing/parser.mly" +# 871 "parsing/parser.mly" (string * Location.t * string option) -# 52976 "parsing/parser.ml" +# 54066 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -52983,23 +54073,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3887 "parsing/parser.mly" +# 3990 "parsing/parser.mly" ( let (s, _, _) = _1 in Pdir_string s ) -# 52989 "parsing/parser.ml" +# 54079 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1028 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 52997 "parsing/parser.ml" +# 54087 "parsing/parser.ml" in # 126 "" ( Some x ) -# 53003 "parsing/parser.ml" +# 54093 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -53009,18 +54099,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 53015 "parsing/parser.ml" +# 54105 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3883 "parsing/parser.mly" +# 3986 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 53024 "parsing/parser.ml" +# 54114 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53051,9 +54141,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 767 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * char option) -# 53057 "parsing/parser.ml" +# 54147 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -53064,23 +54154,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3888 "parsing/parser.mly" +# 3991 "parsing/parser.mly" ( let (n, m) = _1 in Pdir_int (n ,m) ) -# 53070 "parsing/parser.ml" +# 54160 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1028 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 53078 "parsing/parser.ml" +# 54168 "parsing/parser.ml" in # 126 "" ( Some x ) -# 53084 "parsing/parser.ml" +# 54174 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -53090,18 +54180,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 53096 "parsing/parser.ml" +# 54186 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3883 "parsing/parser.mly" +# 3986 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 53105 "parsing/parser.ml" +# 54195 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53141,23 +54231,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3889 "parsing/parser.mly" +# 3992 "parsing/parser.mly" ( Pdir_ident _1 ) -# 53147 "parsing/parser.ml" +# 54237 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1028 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 53155 "parsing/parser.ml" +# 54245 "parsing/parser.ml" in # 126 "" ( Some x ) -# 53161 "parsing/parser.ml" +# 54251 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -53167,18 +54257,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 53173 "parsing/parser.ml" +# 54263 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3883 "parsing/parser.mly" +# 3986 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 53182 "parsing/parser.ml" +# 54272 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53218,23 +54308,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3890 "parsing/parser.mly" +# 3993 "parsing/parser.mly" ( Pdir_ident _1 ) -# 53224 "parsing/parser.ml" +# 54314 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1028 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 53232 "parsing/parser.ml" +# 54322 "parsing/parser.ml" in # 126 "" ( Some x ) -# 53238 "parsing/parser.ml" +# 54328 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -53244,18 +54334,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 53250 "parsing/parser.ml" +# 54340 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3883 "parsing/parser.mly" +# 3986 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 53259 "parsing/parser.ml" +# 54349 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53295,23 +54385,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos__1_inlined2_) in let x = let _1 = -# 3891 "parsing/parser.mly" +# 3994 "parsing/parser.mly" ( Pdir_bool false ) -# 53301 "parsing/parser.ml" +# 54391 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1028 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 53309 "parsing/parser.ml" +# 54399 "parsing/parser.ml" in # 126 "" ( Some x ) -# 53315 "parsing/parser.ml" +# 54405 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -53321,18 +54411,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 53327 "parsing/parser.ml" +# 54417 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3883 "parsing/parser.mly" +# 3986 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 53336 "parsing/parser.ml" +# 54426 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53372,23 +54462,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos__1_inlined2_) in let x = let _1 = -# 3892 "parsing/parser.mly" +# 3995 "parsing/parser.mly" ( Pdir_bool true ) -# 53378 "parsing/parser.ml" +# 54468 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1028 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 53386 "parsing/parser.ml" +# 54476 "parsing/parser.ml" in # 126 "" ( Some x ) -# 53392 "parsing/parser.ml" +# 54482 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -53398,18 +54488,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 53404 "parsing/parser.ml" +# 54494 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3883 "parsing/parser.mly" +# 3986 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 53413 "parsing/parser.ml" +# 54503 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53449,37 +54539,37 @@ module Tables = struct let _1 = let _1 = let attrs = -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 53455 "parsing/parser.ml" +# 54545 "parsing/parser.ml" in -# 1473 "parsing/parser.mly" +# 1523 "parsing/parser.mly" ( mkstrexp e attrs ) -# 53460 "parsing/parser.ml" +# 54550 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 971 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 53468 "parsing/parser.ml" +# 54558 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 959 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 53477 "parsing/parser.ml" +# 54567 "parsing/parser.ml" in -# 1238 "parsing/parser.mly" +# 1288 "parsing/parser.mly" ( Ptop_def _1 ) -# 53483 "parsing/parser.ml" +# 54573 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53512,21 +54602,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 53516 "parsing/parser.ml" +# 54606 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 959 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 53524 "parsing/parser.ml" +# 54614 "parsing/parser.ml" in -# 1242 "parsing/parser.mly" +# 1292 "parsing/parser.mly" ( Ptop_def _1 ) -# 53530 "parsing/parser.ml" +# 54620 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53556,9 +54646,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.toplevel_phrase) = -# 1246 "parsing/parser.mly" +# 1296 "parsing/parser.mly" ( _1 ) -# 53562 "parsing/parser.ml" +# 54652 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53581,9 +54671,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.toplevel_phrase) = -# 1249 "parsing/parser.mly" +# 1299 "parsing/parser.mly" ( raise End_of_file ) -# 53587 "parsing/parser.ml" +# 54677 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53606,9 +54696,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3585 "parsing/parser.mly" +# 3688 "parsing/parser.mly" ( ty ) -# 53612 "parsing/parser.ml" +# 54702 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53636,18 +54726,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 53640 "parsing/parser.ml" +# 54730 "parsing/parser.ml" in -# 1129 "parsing/parser.mly" +# 1179 "parsing/parser.mly" ( xs ) -# 53645 "parsing/parser.ml" +# 54735 "parsing/parser.ml" in -# 3588 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Ptyp_tuple tys ) -# 53651 "parsing/parser.ml" +# 54741 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in @@ -53655,15 +54745,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 53661 "parsing/parser.ml" +# 54751 "parsing/parser.ml" in -# 3590 "parsing/parser.mly" +# 3693 "parsing/parser.mly" ( _1 ) -# 53667 "parsing/parser.ml" +# 54757 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53693,9 +54783,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2859 "parsing/parser.mly" +# 2958 "parsing/parser.mly" ( (Some _2, None) ) -# 53699 "parsing/parser.ml" +# 54789 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53739,9 +54829,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2860 "parsing/parser.mly" +# 2959 "parsing/parser.mly" ( (Some _2, Some _4) ) -# 53745 "parsing/parser.ml" +# 54835 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53771,9 +54861,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2861 "parsing/parser.mly" +# 2960 "parsing/parser.mly" ( (None, Some _2) ) -# 53777 "parsing/parser.ml" +# 54867 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53803,9 +54893,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2862 "parsing/parser.mly" +# 2961 "parsing/parser.mly" ( syntax_error() ) -# 53809 "parsing/parser.ml" +# 54899 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53835,9 +54925,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2863 "parsing/parser.mly" +# 2962 "parsing/parser.mly" ( syntax_error() ) -# 53841 "parsing/parser.ml" +# 54931 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53853,9 +54943,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = -# 3192 "parsing/parser.mly" +# 3295 "parsing/parser.mly" ( (Ptype_abstract, Public, None) ) -# 53859 "parsing/parser.ml" +# 54949 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53885,9 +54975,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = -# 3194 "parsing/parser.mly" +# 3297 "parsing/parser.mly" ( _2 ) -# 53891 "parsing/parser.ml" +# 54981 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53910,9 +55000,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3844 "parsing/parser.mly" +# 3947 "parsing/parser.mly" ( _1 ) -# 53916 "parsing/parser.ml" +# 55006 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53942,9 +55032,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) = -# 3209 "parsing/parser.mly" +# 3312 "parsing/parser.mly" ( _2, _1 ) -# 53948 "parsing/parser.ml" +# 55038 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53960,9 +55050,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = -# 3202 "parsing/parser.mly" +# 3305 "parsing/parser.mly" ( [] ) -# 53966 "parsing/parser.ml" +# 55056 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -53985,9 +55075,9 @@ module Tables = struct let _startpos = _startpos_p_ in let _endpos = _endpos_p_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = -# 3204 "parsing/parser.mly" +# 3307 "parsing/parser.mly" ( [p] ) -# 53991 "parsing/parser.ml" +# 55081 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54027,18 +55117,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 54031 "parsing/parser.ml" +# 55121 "parsing/parser.ml" in -# 1101 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( xs ) -# 54036 "parsing/parser.ml" +# 55126 "parsing/parser.ml" in -# 3206 "parsing/parser.mly" +# 3309 "parsing/parser.mly" ( ps ) -# 54042 "parsing/parser.ml" +# 55132 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54069,24 +55159,24 @@ module Tables = struct let _endpos = _endpos_tyvar_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3214 "parsing/parser.mly" +# 3317 "parsing/parser.mly" ( Ptyp_var tyvar ) -# 54075 "parsing/parser.ml" +# 55165 "parsing/parser.ml" in let _endpos__1_ = _endpos_tyvar_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 54084 "parsing/parser.ml" +# 55174 "parsing/parser.ml" in -# 3217 "parsing/parser.mly" +# 3320 "parsing/parser.mly" ( _1 ) -# 54090 "parsing/parser.ml" +# 55180 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54110,23 +55200,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3216 "parsing/parser.mly" +# 3319 "parsing/parser.mly" ( Ptyp_any ) -# 54116 "parsing/parser.ml" +# 55206 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 54124 "parsing/parser.ml" +# 55214 "parsing/parser.ml" in -# 3217 "parsing/parser.mly" +# 3320 "parsing/parser.mly" ( _1 ) -# 54130 "parsing/parser.ml" +# 55220 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54142,9 +55232,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3221 "parsing/parser.mly" +# 3324 "parsing/parser.mly" ( NoVariance, NoInjectivity ) -# 54148 "parsing/parser.ml" +# 55238 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54167,9 +55257,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3222 "parsing/parser.mly" +# 3325 "parsing/parser.mly" ( Covariant, NoInjectivity ) -# 54173 "parsing/parser.ml" +# 55263 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54192,9 +55282,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3223 "parsing/parser.mly" +# 3326 "parsing/parser.mly" ( Contravariant, NoInjectivity ) -# 54198 "parsing/parser.ml" +# 55288 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54217,9 +55307,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3224 "parsing/parser.mly" +# 3327 "parsing/parser.mly" ( NoVariance, Injective ) -# 54223 "parsing/parser.ml" +# 55313 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54249,9 +55339,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3225 "parsing/parser.mly" +# 3328 "parsing/parser.mly" ( Covariant, Injective ) -# 54255 "parsing/parser.ml" +# 55345 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54281,9 +55371,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3225 "parsing/parser.mly" +# 3328 "parsing/parser.mly" ( Covariant, Injective ) -# 54287 "parsing/parser.ml" +# 55377 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54313,9 +55403,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3226 "parsing/parser.mly" +# 3329 "parsing/parser.mly" ( Contravariant, Injective ) -# 54319 "parsing/parser.ml" +# 55409 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54345,9 +55435,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3226 "parsing/parser.mly" +# 3329 "parsing/parser.mly" ( Contravariant, Injective ) -# 54351 "parsing/parser.ml" +# 55441 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54366,20 +55456,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 759 "parsing/parser.mly" +# 808 "parsing/parser.mly" (string) -# 54372 "parsing/parser.ml" +# 55462 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3228 "parsing/parser.mly" +# 3331 "parsing/parser.mly" ( if _1 = "+!" then Covariant, Injective else if _1 = "-!" then Contravariant, Injective else expecting _loc__1_ "type_variance" ) -# 54383 "parsing/parser.ml" +# 55473 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54398,20 +55488,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 807 "parsing/parser.mly" +# 857 "parsing/parser.mly" (string) -# 54404 "parsing/parser.ml" +# 55494 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3232 "parsing/parser.mly" +# 3335 "parsing/parser.mly" ( if _1 = "!+" then Covariant, Injective else if _1 = "!-" then Contravariant, Injective else expecting _loc__1_ "type_variance" ) -# 54415 "parsing/parser.ml" +# 55505 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54445,39 +55535,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 54449 "parsing/parser.ml" +# 55539 "parsing/parser.ml" in let xs = let _1 = -# 1037 "parsing/parser.mly" +# 1087 "parsing/parser.mly" ( [] ) -# 54455 "parsing/parser.ml" +# 55545 "parsing/parser.ml" in -# 1269 "parsing/parser.mly" +# 1319 "parsing/parser.mly" ( _1 ) -# 54460 "parsing/parser.ml" +# 55550 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 54466 "parsing/parser.ml" +# 55556 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 963 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( extra_def _startpos _endpos _1 ) -# 54475 "parsing/parser.ml" +# 55565 "parsing/parser.ml" in -# 1262 "parsing/parser.mly" +# 1312 "parsing/parser.mly" ( _1 ) -# 54481 "parsing/parser.ml" +# 55571 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54525,7 +55615,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 54529 "parsing/parser.ml" +# 55619 "parsing/parser.ml" in let xs = let _1 = @@ -54533,61 +55623,61 @@ module Tables = struct let _1 = let _1 = let attrs = -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 54539 "parsing/parser.ml" +# 55629 "parsing/parser.ml" in -# 1473 "parsing/parser.mly" +# 1523 "parsing/parser.mly" ( mkstrexp e attrs ) -# 54544 "parsing/parser.ml" +# 55634 "parsing/parser.ml" in -# 981 "parsing/parser.mly" +# 1031 "parsing/parser.mly" ( Ptop_def [_1] ) -# 54550 "parsing/parser.ml" +# 55640 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 979 "parsing/parser.mly" +# 1029 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 54558 "parsing/parser.ml" +# 55648 "parsing/parser.ml" in -# 1039 "parsing/parser.mly" +# 1089 "parsing/parser.mly" ( x ) -# 54564 "parsing/parser.ml" +# 55654 "parsing/parser.ml" in -# 1269 "parsing/parser.mly" +# 1319 "parsing/parser.mly" ( _1 ) -# 54570 "parsing/parser.ml" +# 55660 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 54576 "parsing/parser.ml" +# 55666 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 963 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( extra_def _startpos _endpos _1 ) -# 54585 "parsing/parser.ml" +# 55675 "parsing/parser.ml" in -# 1262 "parsing/parser.mly" +# 1312 "parsing/parser.mly" ( _1 ) -# 54591 "parsing/parser.ml" +# 55681 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54624,9 +55714,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Asttypes.label) = -# 3763 "parsing/parser.mly" +# 3866 "parsing/parser.mly" ( _2 ) -# 54630 "parsing/parser.ml" +# 55720 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54665,9 +55755,9 @@ module Tables = struct let _v : (Asttypes.label) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3764 "parsing/parser.mly" +# 3867 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 54671 "parsing/parser.ml" +# 55761 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54698,9 +55788,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Asttypes.label) = let _loc__2_ = (_startpos__2_, _endpos__2_) in -# 3765 "parsing/parser.mly" +# 3868 "parsing/parser.mly" ( expecting _loc__2_ "operator" ) -# 54704 "parsing/parser.ml" +# 55794 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54738,9 +55828,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Asttypes.label) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3766 "parsing/parser.mly" +# 3869 "parsing/parser.mly" ( expecting _loc__3_ "module-expr" ) -# 54744 "parsing/parser.ml" +# 55834 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54759,17 +55849,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 54765 "parsing/parser.ml" +# 55855 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3769 "parsing/parser.mly" +# 3872 "parsing/parser.mly" ( _1 ) -# 54773 "parsing/parser.ml" +# 55863 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54792,9 +55882,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3770 "parsing/parser.mly" +# 3873 "parsing/parser.mly" ( _1 ) -# 54798 "parsing/parser.ml" +# 55888 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54817,9 +55907,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3838 "parsing/parser.mly" +# 3941 "parsing/parser.mly" ( _1 ) -# 54823 "parsing/parser.ml" +# 55913 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54864,9 +55954,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 54870 "parsing/parser.ml" +# 55960 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let mutable_ : (Asttypes.mutable_flag) = Obj.magic mutable_ in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -54878,33 +55968,33 @@ module Tables = struct Parsetree.attributes) = let label = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 54884 "parsing/parser.ml" +# 55974 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 54892 "parsing/parser.ml" +# 55982 "parsing/parser.ml" in let attrs = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 54898 "parsing/parser.ml" +# 55988 "parsing/parser.ml" in let _1 = -# 3989 "parsing/parser.mly" +# 4092 "parsing/parser.mly" ( Fresh ) -# 54903 "parsing/parser.ml" +# 55993 "parsing/parser.ml" in -# 2052 "parsing/parser.mly" +# 2102 "parsing/parser.mly" ( (label, mutable_, Cfk_virtual ty), attrs ) -# 54908 "parsing/parser.ml" +# 55998 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -54949,9 +56039,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 54955 "parsing/parser.ml" +# 56045 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -54963,33 +56053,33 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 54969 "parsing/parser.ml" +# 56059 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 54977 "parsing/parser.ml" +# 56067 "parsing/parser.ml" in let _2 = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 54983 "parsing/parser.ml" +# 56073 "parsing/parser.ml" in let _1 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 54988 "parsing/parser.ml" +# 56078 "parsing/parser.ml" in -# 2054 "parsing/parser.mly" +# 2104 "parsing/parser.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 54993 "parsing/parser.ml" +# 56083 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55040,9 +56130,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 55046 "parsing/parser.ml" +# 56136 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -55055,36 +56145,36 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 55061 "parsing/parser.ml" +# 56151 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55069 "parsing/parser.ml" +# 56159 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 55077 "parsing/parser.ml" +# 56167 "parsing/parser.ml" in let _1 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 55083 "parsing/parser.ml" +# 56173 "parsing/parser.ml" in -# 2054 "parsing/parser.mly" +# 2104 "parsing/parser.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 55088 "parsing/parser.ml" +# 56178 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55136,9 +56226,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in let _1_inlined1 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 55142 "parsing/parser.ml" +# 56232 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -55150,30 +56240,30 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 55156 "parsing/parser.ml" +# 56246 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55164 "parsing/parser.ml" +# 56254 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined1_ in let _2 = -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 55171 "parsing/parser.ml" +# 56261 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in let _1 = -# 3992 "parsing/parser.mly" +# 4095 "parsing/parser.mly" ( Fresh ) -# 55177 "parsing/parser.ml" +# 56267 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__7_ in @@ -55189,11 +56279,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 2057 "parsing/parser.mly" +# 2107 "parsing/parser.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 55197 "parsing/parser.ml" +# 56287 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55251,9 +56341,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in let _1_inlined2 : ( -# 781 "parsing/parser.mly" +# 831 "parsing/parser.mly" (string) -# 55257 "parsing/parser.ml" +# 56347 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -55266,33 +56356,33 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3737 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 55272 "parsing/parser.ml" +# 56362 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55280 "parsing/parser.ml" +# 56370 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 55289 "parsing/parser.ml" +# 56379 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _1 = -# 3993 "parsing/parser.mly" +# 4096 "parsing/parser.mly" ( Override ) -# 55296 "parsing/parser.ml" +# 56386 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -55307,11 +56397,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 2057 "parsing/parser.mly" +# 2107 "parsing/parser.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 55315 "parsing/parser.ml" +# 56405 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55378,9 +56468,9 @@ module Tables = struct let _v : (Parsetree.value_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 4088 "parsing/parser.mly" +# 4191 "parsing/parser.mly" ( _1 ) -# 55384 "parsing/parser.ml" +# 56474 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -55390,30 +56480,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55396 "parsing/parser.ml" +# 56486 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4092 "parsing/parser.mly" +# 4195 "parsing/parser.mly" ( _1 ) -# 55404 "parsing/parser.ml" +# 56494 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3063 "parsing/parser.mly" +# 3166 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Val.mk id ty ~attrs ~loc ~docs, ext ) -# 55417 "parsing/parser.ml" +# 56507 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55429,9 +56519,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.virtual_flag) = -# 3953 "parsing/parser.mly" +# 4056 "parsing/parser.mly" ( Concrete ) -# 55435 "parsing/parser.ml" +# 56525 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55454,9 +56544,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.virtual_flag) = -# 3954 "parsing/parser.mly" +# 4057 "parsing/parser.mly" ( Virtual ) -# 55460 "parsing/parser.ml" +# 56550 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55479,9 +56569,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag) = -# 3977 "parsing/parser.mly" +# 4080 "parsing/parser.mly" ( Immutable ) -# 55485 "parsing/parser.ml" +# 56575 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55511,9 +56601,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3978 "parsing/parser.mly" +# 4081 "parsing/parser.mly" ( Mutable ) -# 55517 "parsing/parser.ml" +# 56607 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55543,9 +56633,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3979 "parsing/parser.mly" +# 4082 "parsing/parser.mly" ( Mutable ) -# 55549 "parsing/parser.ml" +# 56639 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55568,9 +56658,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3984 "parsing/parser.mly" +# 4087 "parsing/parser.mly" ( Public ) -# 55574 "parsing/parser.ml" +# 56664 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55600,9 +56690,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3985 "parsing/parser.mly" +# 4088 "parsing/parser.mly" ( Private ) -# 55606 "parsing/parser.ml" +# 56696 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55632,9 +56722,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3986 "parsing/parser.mly" +# 4089 "parsing/parser.mly" ( Private ) -# 55638 "parsing/parser.ml" +# 56728 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55696,27 +56786,27 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 55700 "parsing/parser.ml" +# 56790 "parsing/parser.ml" in -# 1051 "parsing/parser.mly" +# 1101 "parsing/parser.mly" ( xs ) -# 55705 "parsing/parser.ml" +# 56795 "parsing/parser.ml" in -# 3163 "parsing/parser.mly" +# 3266 "parsing/parser.mly" ( _1 ) -# 55711 "parsing/parser.ml" +# 56801 "parsing/parser.ml" in let _endpos__6_ = _endpos_xs_ in let _5 = let _1 = _1_inlined2 in -# 3498 "parsing/parser.mly" +# 3601 "parsing/parser.mly" ( _1 ) -# 55720 "parsing/parser.ml" +# 56810 "parsing/parser.ml" in let _3 = @@ -55725,16 +56815,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55731 "parsing/parser.ml" +# 56821 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3417 "parsing/parser.mly" +# 3520 "parsing/parser.mly" ( let lident = loc_last _3 in Pwith_type (_3, @@ -55744,7 +56834,7 @@ module Tables = struct ~manifest:_5 ~priv:_4 ~loc:(make_loc _sloc))) ) -# 55748 "parsing/parser.ml" +# 56838 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55797,9 +56887,9 @@ module Tables = struct let _v : (Parsetree.with_constraint) = let _5 = let _1 = _1_inlined2 in -# 3498 "parsing/parser.mly" +# 3601 "parsing/parser.mly" ( _1 ) -# 55803 "parsing/parser.ml" +# 56893 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in @@ -55809,16 +56899,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55815 "parsing/parser.ml" +# 56905 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3430 "parsing/parser.mly" +# 3533 "parsing/parser.mly" ( let lident = loc_last _3 in Pwith_typesubst (_3, @@ -55826,7 +56916,7 @@ module Tables = struct ~params:_2 ~manifest:_5 ~loc:(make_loc _sloc))) ) -# 55830 "parsing/parser.ml" +# 56920 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55875,9 +56965,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55881 "parsing/parser.ml" +# 56971 "parsing/parser.ml" in let _2 = @@ -55886,15 +56976,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55892 "parsing/parser.ml" +# 56982 "parsing/parser.ml" in -# 3438 "parsing/parser.mly" +# 3541 "parsing/parser.mly" ( Pwith_module (_2, _4) ) -# 55898 "parsing/parser.ml" +# 56988 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -55943,9 +57033,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55949 "parsing/parser.ml" +# 57039 "parsing/parser.ml" in let _2 = @@ -55954,15 +57044,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 55960 "parsing/parser.ml" +# 57050 "parsing/parser.ml" in -# 3440 "parsing/parser.mly" +# 3543 "parsing/parser.mly" ( Pwith_modsubst (_2, _4) ) -# 55966 "parsing/parser.ml" +# 57056 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56018,15 +57108,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 56024 "parsing/parser.ml" +# 57114 "parsing/parser.ml" in -# 3442 "parsing/parser.mly" +# 3545 "parsing/parser.mly" ( Pwith_modtype (l, rhs) ) -# 56030 "parsing/parser.ml" +# 57120 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56082,15 +57172,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 967 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 56088 "parsing/parser.ml" +# 57178 "parsing/parser.ml" in -# 3444 "parsing/parser.mly" +# 3547 "parsing/parser.mly" ( Pwith_modtypesubst (l, rhs) ) -# 56094 "parsing/parser.ml" +# 57184 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56113,9 +57203,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3447 "parsing/parser.mly" +# 3550 "parsing/parser.mly" ( Public ) -# 56119 "parsing/parser.ml" +# 57209 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56145,9 +57235,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3448 "parsing/parser.mly" +# 3551 "parsing/parser.mly" ( Private ) -# 56151 "parsing/parser.ml" +# 57241 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -56175,59 +57265,59 @@ end let use_file = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2059 lexer lexbuf) : (Parsetree.toplevel_phrase list)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2079 lexer lexbuf) : (Parsetree.toplevel_phrase list)) and toplevel_phrase = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2039 lexer lexbuf) : (Parsetree.toplevel_phrase)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2059 lexer lexbuf) : (Parsetree.toplevel_phrase)) and parse_val_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2033 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2053 lexer lexbuf) : (Longident.t)) and parse_pattern = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2029 lexer lexbuf) : (Parsetree.pattern)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2049 lexer lexbuf) : (Parsetree.pattern)) and parse_mty_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2025 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2045 lexer lexbuf) : (Longident.t)) and parse_module_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2021 lexer lexbuf) : (Parsetree.module_type)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2041 lexer lexbuf) : (Parsetree.module_type)) and parse_module_expr = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2017 lexer lexbuf) : (Parsetree.module_expr)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2037 lexer lexbuf) : (Parsetree.module_expr)) and parse_mod_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2013 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2033 lexer lexbuf) : (Longident.t)) and parse_mod_ext_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2009 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2029 lexer lexbuf) : (Longident.t)) and parse_expression = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2005 lexer lexbuf) : (Parsetree.expression)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2025 lexer lexbuf) : (Parsetree.expression)) and parse_core_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 2001 lexer lexbuf) : (Parsetree.core_type)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2021 lexer lexbuf) : (Parsetree.core_type)) and parse_constr_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1997 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2017 lexer lexbuf) : (Longident.t)) and parse_any_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1979 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 1999 lexer lexbuf) : (Longident.t)) and interface = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1975 lexer lexbuf) : (Parsetree.signature)) + (Obj.magic (MenhirInterpreter.entry `Simplified 1995 lexer lexbuf) : (Parsetree.signature)) and implementation = fun lexer lexbuf -> @@ -56237,59 +57327,59 @@ module Incremental = struct let use_file = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2059 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2079 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) and toplevel_phrase = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2039 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2059 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) and parse_val_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2033 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2053 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_pattern = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2029 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2049 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) and parse_mty_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2025 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2045 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_module_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2021 initial_position) : (Parsetree.module_type) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2041 initial_position) : (Parsetree.module_type) MenhirInterpreter.checkpoint) and parse_module_expr = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2017 initial_position) : (Parsetree.module_expr) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2037 initial_position) : (Parsetree.module_expr) MenhirInterpreter.checkpoint) and parse_mod_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2013 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2033 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_mod_ext_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2009 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2029 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_expression = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2005 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2025 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) and parse_core_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 2001 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2021 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) and parse_constr_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1997 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2017 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_any_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1979 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1999 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and interface = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1975 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1995 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) and implementation = fun initial_position -> @@ -56297,12 +57387,12 @@ module Incremental = struct end -# 4124 "parsing/parser.mly" +# 4233 "parsing/parser.mly" -# 56304 "parsing/parser.ml" +# 57394 "parsing/parser.ml" # 269 "" -# 56309 "parsing/parser.ml" +# 57399 "parsing/parser.ml" diff --git a/boot/menhir/parser.mli b/boot/menhir/parser.mli index f666afaade39..d937e1832b33 100644 --- a/boot/menhir/parser.mli +++ b/boot/menhir/parser.mli @@ -61,6 +61,7 @@ type token = | LBRACKETPERCENT | LBRACKETLESS | LBRACKETGREATER + | LBRACKETCOLON | LBRACKETBAR | LBRACKETATATAT | LBRACKETATAT @@ -110,6 +111,7 @@ type token = | CONSTRAINT | COMMENT of (string * Location.t) | COMMA + | COLONRBRACKET | COLONGREATER | COLONEQUAL | COLONCOLON diff --git a/boot/ocamlc b/boot/ocamlc index e1a26ad76240300f0d201f24a499e6091d2bc9cf..cbd13c38b9178d08688d78a3b4947ce5a8b83bf7 100755 GIT binary patch delta 476132 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�tW=kEAf|DUZK4NV~$uawbzGBtQhz&nZp#g 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 z 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 z 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
    T$edxCD&eR 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 diff --git a/boot/ocamllex b/boot/ocamllex index 8e766686c96bcde02dfa3959fc24637cd89d8005..78f886dfe4c236fd9e01d26c734c3b1ad9550126 100755 GIT binary patch delta 2097 zcmZ8h2~-nT6wMR{p)Da+3DQylWf4&_0ffYY&4NH=iOQx`87DA6AelfifKd>ug00$0 zr8-qwI|c#*T9&p(N>S-@=mLUAp{E5cYD+7qAc`Ug=}#3|=A3)}xo^4e|2O~r-CgWo zy4W>54wSNo&oS^h&|}xU*BA_jHGpYl0$2ff0+_zOr$*y+{^2YhKZ~!K#owI8Z;Z{< z`+Uq8Kcj$RRzTn^&YH!0MrR6U%;L_}cnsv3xBZFHr~v1I0bT|$oz(%rbk3Imh94V^ zCj0cWe*0*q^bx>Kd3FG%JP05L*i3noeChKXOJMT=cm)9Tlq!#fGOWA+F$r)f=QzmG zp8K4xc)t2RU-?v1KjaAc7tK9u2d_36i{4#1&#H6yS^1D6`=ySy>wtX~z!Ct{HxIyb zUq>8d=!knMtOsHmoOx#1+0bj$v1&6hpx3I+9?XGQhRX)C@;eZd(w3Tk50*f^`C@3U z0n?k`7F%&WQ#Itpph%%1>bCg^3`q^)1LniEc~Kz(Vaal7CW)$&P$jNZskPC9c0mau zA+j)qJQ2mz$(c%=AY;S=p{T??7?Ue9)p)F^9Rztqsz@|Rl}RMV1p^t6D6Iy?)oPV` zgAjN74#0(bP~4p*c1x#y-fKsg(@Kp zPekRa%@QEuCDdqeHK_8e?iR{;5_W>(4Nf{Z*Gzm4wB{!U!>kef>MlzLgfM8=XiTQS zk%*gr-4F*_y}E8#U$}v>5ux3pv;>K5LkdIBtb7>f!*zTCj8i>&*vsp#LxzoY zurNb*>GaL>|CVrQ&nPlcA(x>j*b`FzR_VjKSFn!zwakXA?7RxKw;d|Lv-TqJ2N3#8FaeVw&6(EJYSKsoHrid~GYQJYug zuCcTEr+C}~p}s4JMZWnXnU%|U0b}EL7RYb)jkM9+Nx4XjlxN{U61msABy~$_oLLiE zn{^ehxkvF%!7ErP+BE4I+dKA0+wL#0Y$?p4a!yK0G7p*52S}wGUpqIS}z_x3V(CDbe4eh_)4U2XuWdD6;1-*RI zEg?uhUqnyVuhtZHmr9t8zjQbJm@>ofOZ7|1Ut-Za$?S)U$ziRE8>NF5Q;uWs- zlF0XR>Y@Y>y0-4@p`;bC?HZl$iz1j>jcLO%8LrR>bT9TU`QI#{Ig@drm?njkDUdBT zcl_qxE;tK)cYQ}$jKfo^paR~?qT8=!Z|w8`;$^T>C3AJ_}#WMoUJ@JiU3^-*l~4Tqi`ANMyDESa~9 z{Uw!K3G>&Ab(}u}Rvo^ud~3kvxbY35DKSxIQWCC4P75*)E*;z>b3Uu@&?lB3p6atm zrBWc9et0xT%RWAT{RDCN;=5mMqb#am7gpdEjL6A#FdK!%77^Wx?5LGhuv^H2i$f3h z7S#mv`YjgCy?y6Dm~fU-O0S_HPU-_Xg=)*E?F{8Ana9+ z#XqIa<)uY)gV5?vGH6%e08KerpQp3;Ua9Rw>i51QO~0eT$0kG5quZGn(7bsr!|710JP{K&tzBqm8HCutU3o58ZdY znoc8POsOzUpqjuG;ikKMCFIas)<=qbbzh7+N(9z}G*67VPsIeQ)JlvLVH$aY2Ki)1 z;^u-|rCEci pM~K*6SgT;Dzep?%TFo$T&Y?tSV9wkY@Knw*WpVj@{szQ{`yVl$9RvUX delta 2036 zcmZ8h3se(V8qNSCZ-@`TQj0+WjbL&EA_QAYNK8duw$TtDG$thA)JX;>6BKnf3%IcL zQBc^<`alLzP*9P=F;=X`qH+#>tfj0{5hW#w$B-Lcs?wCkh%T@le`Zj)a^3I%K!w@CYb`2gEdpKnTatoFIkz%8;mAWE)c<;Z6D2uK_Pd|Hr>%;xe( zXw=9WIkLu#tYFk%hMWsPL}ds!!2Pc6%^t*M6(FFDv%t+S1x77}2!n8Z(;>LUwsgd7 zOLt1@MZCaY*A33kToE7hQ?qmJ@3chf!lq9gb7@Ar=#1koa}i&2 z{&AN_Vs{Y!iGi|6Qsd2rM=mc=L~6#LxY!y^AAJxns$Q68q?AOKQm54sWS%VkMtn6$ z)aR;jOrunh*+!jKPpuNiixR5mNmUqbB(DLvd;nZcQ+>nrJE7LK|T z_0-};K(k>_>^A?4`2mka(HQyMWyOioRBd3Rm`=`{B^x+1+hv-m@O0 zJyjHqi6t1bva}@lkB_(K^3BG3otkF<%#U|)#`>2)5IE>)_M3jxHQ2JZM8Nbn@GsG+ z^=JtD&neqG1D(5)zlb|k-&z-xN*C0lVIMREHt#n5e7>-9(FH$W-QN$6wMs;00}*Q& zfB*Id?D}fc!`iZ)5;#cz8x0_^epTdN1L|9)LYwY8+Ew>2KR5X`M&LZJgTWyw{O zX7PYx$&Z^N0&eap-zR56#0EHalEin*Tju_rR)K8kylvgo!ORmAx*Sy|1>_ZvgMKUC zzi+PWo7JI%nNCa?^ymmZXl=dx^=H$QkN0;^OIRYav@<}g(&3KDBK0af*>OifLR002 zMIPtliii;V0{&DcR;;3@o<;-Ifmgm7pqH7Ny><PB z>K?OduKd8>d@yEWkcc95SSE. # @@ -621,8 +621,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='OCaml' PACKAGE_TARNAME='ocaml' -PACKAGE_VERSION='4.14.0+jst' -PACKAGE_STRING='OCaml 4.14.0+jst' +PACKAGE_VERSION='4.14.1+jst' +PACKAGE_STRING='OCaml 4.14.1+jst' PACKAGE_BUGREPORT='caml-list@inria.fr' PACKAGE_URL='http://www.ocaml.org' @@ -1477,7 +1477,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures OCaml 4.14.0+jst to adapt to many kinds of systems. +\`configure' configures OCaml 4.14.1+jst to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1544,7 +1544,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of OCaml 4.14.0+jst:";; + short | recursive ) echo "Configuration of OCaml 4.14.1+jst:";; esac cat <<\_ACEOF @@ -1717,7 +1717,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -OCaml configure 4.14.0+jst +OCaml configure 4.14.1+jst generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2374,7 +2374,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by OCaml $as_me 4.14.0+jst, which was +It was created by OCaml $as_me 4.14.1+jst, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3130,8 +3130,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configuring OCaml version 4.14.0+jst" >&5 -printf "%s\n" "$as_me: Configuring OCaml version 4.14.0+jst" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configuring OCaml version 4.14.1+jst" >&5 +printf "%s\n" "$as_me: Configuring OCaml version 4.14.1+jst" >&6;} # Configuration variables @@ -3179,7 +3179,7 @@ bootstrapping_flexdll=false -VERSION=4.14.0+jst +VERSION=4.14.1+jst OCAML_DEVELOPMENT_VERSION=false @@ -3189,7 +3189,7 @@ OCAML_VERSION_MAJOR=4 OCAML_VERSION_MINOR=14 -OCAML_VERSION_PATCHLEVEL=0 +OCAML_VERSION_PATCHLEVEL=1 OCAML_VERSION_EXTRA=jst @@ -3318,15 +3318,15 @@ printf "%s\n" "#define OCAML_VERSION_MAJOR 4" >>confdefs.h printf "%s\n" "#define OCAML_VERSION_MINOR 14" >>confdefs.h -printf "%s\n" "#define OCAML_VERSION_PATCHLEVEL 0" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION_PATCHLEVEL 1" >>confdefs.h printf "%s\n" "#define OCAML_VERSION_ADDITIONAL \"jst\"" >>confdefs.h printf "%s\n" "#define OCAML_VERSION_EXTRA \"jst\"" >>confdefs.h -printf "%s\n" "#define OCAML_VERSION 41400" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION 41401" >>confdefs.h -printf "%s\n" "#define OCAML_VERSION_STRING \"4.14.0+jst\"" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION_STRING \"4.14.1+jst\"" >>confdefs.h # Checks for system types @@ -19676,7 +19676,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by OCaml $as_me 4.14.0+jst, which was +This file was extended by OCaml $as_me 4.14.1+jst, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19745,7 +19745,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -OCaml config.status 4.14.0+jst +OCaml config.status 4.14.1+jst configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/driver/pparse.ml b/driver/pparse.ml index 5991459d11cc..279b336d4348 100644 --- a/driver/pparse.ml +++ b/driver/pparse.ml @@ -187,7 +187,9 @@ let file_aux ~tool_name inputfile (type a) parse_fun invariant_fun Location.input_lexbuf := Some lexbuf; Profile.record_call "parser" (fun () -> parse_fun lexbuf) end - with x -> close_in ic; raise x + with x -> + close_in ic; + raise x in close_in ic; Profile.record_call "-ppx" (fun () -> diff --git a/dune b/dune index 22ab4c5c32ff..b3af9e622672 100644 --- a/dune +++ b/dune @@ -67,8 +67,8 @@ ;; PARSING location longident docstrings syntaxerr ast_helper camlinternalMenhirLib - parser lexer parse printast pprintast ast_mapper ast_iterator attr_helper - builtin_attributes ast_invariants depend extensions + ast_iterator parser lexer parse printast pprintast ast_mapper attr_helper + builtin_attributes ast_invariants depend extensions_parsing extensions ; manual update: mli only files asttypes parsetree @@ -87,8 +87,10 @@ ;; lambda/ debuginfo lambda matching printlambda runtimedef tmc simplif switch - translattribute translclass translcomprehension translcore translmod - translobj translprim + translmode + transl_comprehension_utils + transl_array_comprehension transl_list_comprehension + translattribute translclass translcore translmod translobj translprim ;; bytecomp/ debug_event meta opcodes bytesections dll symtable @@ -316,6 +318,7 @@ (runtimedef.mli as compiler-libs/runtimedef.mli) (simplif.mli as compiler-libs/simplif.mli) (switch.mli as compiler-libs/switch.mli) + (translmode.mli as compiler-libs/translmode.mli) (translattribute.mli as compiler-libs/translattribute.mli) (translclass.mli as compiler-libs/translclass.mli) (translcore.mli as compiler-libs/translcore.mli) diff --git a/jane/doc/local-reference.md b/jane/doc/local-reference.md index e8f85155331f..b86c943c3be1 100644 --- a/jane/doc/local-reference.md +++ b/jane/doc/local-reference.md @@ -486,6 +486,16 @@ then a variable `local_ x` of type `string glob list` is a local list of global strings, and while the list itself cannot be returned out of a region, the `contents` field of any of its elements can. +The same overriding can be used on constructor arguments. To imitate the example +for record fields: + + type ('a, 'b) t = Foo of global_ 'a * 'b + + let f () = + let local_ packed = Foo (x, y) in + match packed with + | Foo (foo, bar) -> foo + ### Mutability Mutable fields are always `global_`, including array elements. That is, while diff --git a/lambda/lambda.ml b/lambda/lambda.ml index 9ee7cffc92f5..b04e885f1008 100644 --- a/lambda/lambda.ml +++ b/lambda/lambda.ml @@ -46,6 +46,10 @@ include (struct | Alloc_heap | Alloc_local + type modify_mode = + | Modify_heap + | Modify_maybe_stack + let alloc_heap = Alloc_heap let alloc_local : alloc_mode = @@ -57,16 +61,39 @@ include (struct | Alloc_local, _ | _, Alloc_local -> Alloc_local | Alloc_heap, Alloc_heap -> Alloc_heap + let modify_heap = Modify_heap + + let modify_maybe_stack : modify_mode = + (* CR zqian: possible to move this check to a better place? *) + (* idealy I don't want to do the checking here. + if stack allocations are disabled, then the alloc_mode which this modify_mode + depends on should be heap, which makes this modify_mode to be heap *) + + (* one suggestion: move the check to optimize_allocation; + if stack_allocation not enabled, force all allocations to be heap, + which then propagates to all the other modes. + *) + if Config.stack_allocation then Modify_maybe_stack + else Modify_heap + end : sig type alloc_mode = private | Alloc_heap | Alloc_local + type modify_mode = private + | Modify_heap + | Modify_maybe_stack + val alloc_heap : alloc_mode val alloc_local : alloc_mode + val modify_heap : modify_mode + + val modify_maybe_stack : modify_mode + val join_mode : alloc_mode -> alloc_mode -> alloc_mode end) @@ -93,7 +120,7 @@ let eq_mode a b = | Alloc_local, Alloc_heap -> false type initialization_or_assignment = - | Assignment of alloc_mode + | Assignment of modify_mode | Heap_initialization | Root_initialization diff --git a/lambda/lambda.mli b/lambda/lambda.mli index c1377f132b7b..fecd2ed05f5b 100644 --- a/lambda/lambda.mli +++ b/lambda/lambda.mli @@ -38,15 +38,23 @@ type alloc_mode = private | Alloc_heap | Alloc_local +type modify_mode = private + | Modify_heap + | Modify_maybe_stack + val alloc_heap : alloc_mode (* Actually [Alloc_heap] if [Config.stack_allocation] is [false] *) val alloc_local : alloc_mode +val modify_heap : modify_mode + +val modify_maybe_stack : modify_mode + type initialization_or_assignment = (* [Assignment Alloc_local] is a mutation of a block that may be heap or local. [Assignment Alloc_heap] is a mutation of a block that's definitely heap. *) - | Assignment of alloc_mode + | Assignment of modify_mode (* Initialization of in heap values, like [caml_initialize] C primitive. The field should not have been read before and initialization should happen only once. *) @@ -355,8 +363,8 @@ type lambda = | Lstaticraise of int * lambda list | Lstaticcatch of lambda * (int * (Ident.t * value_kind) list) * lambda * value_kind | Ltrywith of lambda * Ident.t * lambda * value_kind -(* Lifthenelse (e, t, f) evaluates t if e evaluates to 0, and - evaluates f if e evaluates to any other value *) +(* Lifthenelse (e, t, f, vk) evaluates t if e evaluates to 0, and evaluates f if + e evaluates to any other value; vk must be the value_kind of [t] and [f] *) | Lifthenelse of lambda * lambda * lambda * value_kind | Lsequence of lambda * lambda | Lwhile of lambda_while diff --git a/lambda/matching.ml b/lambda/matching.ml index 1e241f6e594f..59ab53a1808a 100644 --- a/lambda/matching.ml +++ b/lambda/matching.ml @@ -207,8 +207,8 @@ end = struct | Tpat_any | Tpat_var _ -> p - | Tpat_alias (q, id, s) -> - { p with pat_desc = Tpat_alias (simpl_under_orpat q, id, s) } + | Tpat_alias (q, id, s, mode) -> + { p with pat_desc = Tpat_alias (simpl_under_orpat q, id, s, mode) } | Tpat_or (p1, p2, o) -> let p1, p2 = (simpl_under_orpat p1, simpl_under_orpat p2) in if le_pat p1 p2 then @@ -231,8 +231,8 @@ end = struct in match p.pat_desc with | `Any -> stop p `Any - | `Var (id, s) -> continue p (`Alias (Patterns.omega, id, s)) - | `Alias (p, id, _) -> + | `Var (id, s, mode) -> continue p (`Alias (Patterns.omega, id, s, mode)) + | `Alias (p, id, _, _) -> aux ( (General.view p, patl), bind_alias p id ~arg ~action ) @@ -289,7 +289,7 @@ end = struct | `Record (fields, closed) -> let alpha_field env (lid, l, p) = (lid, l, alpha_pat env p) in `Record (List.map (alpha_field env) fields, closed) - | `Array ps -> `Array (List.map (alpha_pat env) ps) + | `Array (am, ps) -> `Array (am, List.map (alpha_pat env) ps) | `Lazy p -> `Lazy (alpha_pat env p) in { p with pat_desc } @@ -326,10 +326,10 @@ end = struct match p.pat_desc with | `Or (p1, p2, _) -> split_explode p1 aliases (split_explode p2 aliases rem) - | `Alias (p, id, _) -> split_explode p (id :: aliases) rem - | `Var (id, str) -> + | `Alias (p, id, _, _) -> split_explode p (id :: aliases) rem + | `Var (id, str, mode) -> explode - { p with pat_desc = `Alias (Patterns.omega, id, str) } + { p with pat_desc = `Alias (Patterns.omega, id, str, mode) } aliases rem | #view as view -> (* We are doing two things here: @@ -440,7 +440,7 @@ let matcher discr (p : Simple.pattern) rem = | Variant _, (Constant _ | Construct _ | Lazy | Array _ | Record _ | Tuple _) -> no () - | Array n1, Array n2 -> yesif (n1 = n2) + | Array (am1, n1), Array (am2, n2) -> yesif (am1 = am2 && n1 = n2) | Array _, (Constant _ | Construct _ | Variant _ | Lazy | Record _ | Tuple _) -> no () @@ -567,7 +567,7 @@ end = struct match p.pat_desc with | `Or (p1, p2, _) -> filter_rec ((left, p1, right) :: (left, p2, right) :: rem) - | `Alias (p, _, _) -> filter_rec ((left, p, right) :: rem) + | `Alias (p, _, _, _) -> filter_rec ((left, p, right) :: rem) | `Var _ -> filter_rec ((left, Patterns.omega, right) :: rem) | #Simple.view as view -> ( let p = { p with pat_desc = view } in @@ -617,7 +617,7 @@ let rec flatten_pat_line size p k = | Tpat_tuple args -> args :: k | Tpat_or (p1, p2, _) -> flatten_pat_line size p1 (flatten_pat_line size p2 k) - | Tpat_alias (p, _, _) -> + | Tpat_alias (p, _, _, _) -> (* Note: we are only called from flatten_matrix, which is itself only ever used in places where variables do not matter (default environments, @@ -694,7 +694,7 @@ end = struct | (p, ps) :: rem -> ( let p = General.view p in match p.pat_desc with - | `Alias (p, _, _) -> filter_rec ((p, ps) :: rem) + | `Alias (p, _, _, _) -> filter_rec ((p, ps) :: rem) | `Var _ -> filter_rec ((Patterns.omega, ps) :: rem) | `Or (p1, p2, _) -> filter_rec_or p1 p2 ps rem | #Simple.view as view -> ( @@ -1180,7 +1180,7 @@ let rec omega_like p = | Tpat_any | Tpat_var _ -> true - | Tpat_alias (p, _, _) -> omega_like p + | Tpat_alias (p, _, _, _) -> omega_like p | Tpat_or (p1, p2, _) -> omega_like p1 || omega_like p2 | _ -> false @@ -2110,19 +2110,19 @@ let divide_record all_labels ~scopes head ctx pm = (* Matching against an array pattern *) let get_key_array = function - | { pat_desc = Tpat_array patl } -> List.length patl + | { pat_desc = Tpat_array (_, patl) } -> List.length patl | _ -> assert false let get_pat_args_array p rem = match p with - | { pat_desc = Tpat_array patl } -> patl @ rem + | { pat_desc = Tpat_array (_, patl) } -> patl @ rem | _ -> assert false let get_expr_args_array ~scopes kind head (arg, _mut) rem = - let len = + let am, len = let open Patterns.Head in match head.pat_desc with - | Array len -> len + | Array (am, len) -> am, len | _ -> assert false in let loc = head_loc ~scopes head in @@ -2132,7 +2132,9 @@ let get_expr_args_array ~scopes kind head (arg, _mut) rem = else ( Lprim (Parrayrefu kind, [ arg; Lconst (Const_base (Const_int pos)) ], loc), - StrictOpt ) + match am with + | Mutable -> StrictOpt + | Immutable -> Alias ) :: make_args (pos + 1) in make_args 0 @@ -3226,8 +3228,8 @@ let rec comp_match_handlers value_kind comp_fun partial ctx first_match next_mat let rec name_pattern default = function | ((pat, _), _) :: rem -> ( match pat.pat_desc with - | Tpat_var (id, _) -> id - | Tpat_alias (_, id, _) -> id + | Tpat_var (id, _, _) -> id + | Tpat_alias (_, id, _, _) -> id | _ -> name_pattern default rem ) | _ -> Ident.create_local default @@ -3715,7 +3717,7 @@ let for_let ~scopes loc param pat body_kind body = (* This eliminates a useless variable (and stack slot in bytecode) for "let _ = ...". See #6865. *) Lsequence (param, body) - | Tpat_var (id, _) -> + | Tpat_var (id, _, _) -> (* fast path, and keep track of simple bindings to unboxable numbers *) let k = Typeopt.value_kind pat.pat_env pat.pat_type in Llet (Strict, k, id, param, body) diff --git a/lambda/printlambda.ml b/lambda/printlambda.ml index a0fa4f6dbf10..983ed34142a7 100644 --- a/lambda/printlambda.ml +++ b/lambda/printlambda.ml @@ -252,8 +252,8 @@ let primitive ppf = function match init with | Heap_initialization -> "(heap-init)" | Root_initialization -> "(root-init)" - | Assignment Alloc_heap -> "" - | Assignment Alloc_local -> "(local)" + | Assignment Modify_heap -> "" + | Assignment Modify_maybe_stack -> "(maybe-stack)" in fprintf ppf "setfield_%s%s %i" instr init n | Psetfield_computed (ptr, init) -> @@ -266,8 +266,8 @@ let primitive ppf = function match init with | Heap_initialization -> "(heap-init)" | Root_initialization -> "(root-init)" - | Assignment Alloc_heap -> "" - | Assignment Alloc_local -> "(local)" + | Assignment Modify_heap -> "" + | Assignment Modify_maybe_stack -> "(maybe-stack)" in fprintf ppf "setfield_%s%s_computed" instr init | Pfloatfield (n, sem, mode) -> @@ -278,8 +278,8 @@ let primitive ppf = function match init with | Heap_initialization -> "(heap-init)" | Root_initialization -> "(root-init)" - | Assignment Alloc_heap -> "" - | Assignment Alloc_local -> "(local)" + | Assignment Modify_heap -> "" + | Assignment Modify_maybe_stack -> "(maybe-stack)" in fprintf ppf "setfloatfield%s %i" init n | Pduprecord (rep, size) -> fprintf ppf "duprecord %a %i" record_rep rep size @@ -644,7 +644,8 @@ let rec lam ppf = function | Lfunction{kind; params; return; body; attr; mode; region} -> let pr_params ppf params = match kind with - | Curried _ -> + | Curried {nlocal} -> + fprintf ppf "@ {nlocal = %d}" nlocal; List.iter (fun (param, k) -> fprintf ppf "@ %a%a" Ident.print param value_kind k) params | Tupled -> diff --git a/lambda/transl_array_comprehension.ml b/lambda/transl_array_comprehension.ml new file mode 100644 index 000000000000..5fa3c844ea48 --- /dev/null +++ b/lambda/transl_array_comprehension.ml @@ -0,0 +1,853 @@ +open Lambda +open Typedtree +open Asttypes +open Transl_comprehension_utils +open Lambda_utils.Constants +open Lambda_utils.Primitive + +(** Array comprehensions are compiled by turning into a nested series of loops + that mutably update an array. This is simple to say, but slightly tricky to + do. One complexity is that we want to apply an optimization to certain + array comprehensions: if an array comprehension contains exactly one clause, + and it’s a [for ... and ...] clause, then we can allocate an array of + exactly the right size up front (instead of having to grow the generated + array dynamically, as we usually do). We call this the *fixed-size array + comprehension optimization*. We cannot do this with nested [for]s, as the + sizes of iterators further to the right could depend on the values generated + by those on the left; indeed, this is why we have [for ... and ...] instead + of just allowing the user to nest [for]s. + + In general, there are three major sources of complexity to be aware of in + this translation: + + 1. We need to have a resizable array, as most array comprehensions have an + unknown size (but see point (2)); however, OCaml arrays can't grow or + shrink, so we have to do this ourselves. + + 2. We need to perform the fixed-size array comprehension optimization, as + described above; this requires handling things specially when the + comprehension has the form [[|BODY for ITER and ITER ... and ITER|]]. + This ends up getting its tentacles throughout the entire module, as we + want to share a lot of the code but have to parameterize it over these + two kinds of output. + + 3. We have to handle the float array optimization, so we can't simply + allocate arrays in a uniform way; if we don't know what's in the array, + we have to carefully handle things on the first iteration. These details + are more local in scope, but particularly fiddly. + + In general, the structure is: we allocate an array and a mutable index + counter that starts at [0]; each iterator becomes a loop; [when] clauses + become an [if] expression, same as with lists; and in the body, every time + we generate an array element, we set it and increment the index counter by + one. If we're not in the fixed-size array case, then we also need the array + to be growable, the first source of extra complexity; we keep track of the + array size, and if we would ever exceed it, we double the size of the array. + This means that at the end, we have to use a subarray operation to cut it + down to the right size. + + In the fixed-size array case, the second source of extra complexity, we have + to first compute the size of every iterator and multiply them together; in + both cases, we have to check for overflow, in which case we simply fail. We + also check to see if any of the iterators would be empty (have size [0]), in + which case we can shortcut this whole process and simply return an empty + array. Once we do that, though, the loop body is simpler as there's no need + to double the array size, and we don't need to cut the list down to size at + the end. This has ramifications throughout the translation code, as we have + to add a bunch of extra special-case logic to handle this: we have to store + enough information to be able to compute iterator sizes if we need to; we + have to be able to switch between having a resizable and a fixed-size array; + we don't need to introduce the same number of variable bindings in each + case; etc. Various bits of the code make these decisions (for these + examples: the [Iterator_bindings] module and the [initial_array] and [body] + functions, all in this file). + + Finally, handling the float array optimization also affects the initial + array and the element assignment (so this ends up being a locus for all the + sources of complexity). If the array has an unknown array kind + ([Pgenarray]), then we can't allocate it with nonzero size without having + the first element! Thus, no matter whether we are in the normal case or the + fixed-size case, we have to set the initial array to be completely empty. + Then, on the first iteration through the loop, we can finally create the + real array, by allocating either the initial values for a resizable array or + precisely enough values for a fixed-size array and setting all of them to + the newly-computed first element of the resulting array. The initial array + creation is done by the function [initial_array], and the index checking is + done (among other things) by the function [body]. + + To see some examples of what this translation looks like, consider the + following array comprehension: + {[ + [x+y for x = 1 to 3 when x <> 2 for y in [10*x; 100*x]] + (* = [11; 101; 33; 303] *) + ]} + This translates to the (Lambda equivalent of) the following: + {[ + (* Allocate the (resizable) array *) + let array_size = ref 8 in + let array = ref [|0; 0; 0; 0; 0; 0; 0; 0|] in + (* Next element to be generated *) + let index = ref 0 in + (* for x = 1 to 3 *) + let start = 1 in + let stop = 3 in + for x = start to stop do + (* when x <> 2 *) + if x <> 2 then + (* for y in [|10*x; 100*x|] *) + let iter_arr = [|10*x; 100*x|] in + for iter_ix = 0 to Array.length iter_arr - 1 do + let y = iter_arr.(iter_ix) in + (* Resize the array if necessary *) + if not (!index < !array_size) then begin + array_size := 2 * !array_size; + array := Array.append !array !array + end; + (* The body: x + y *) + !array.(!index) <- x + y; + index := !index + 1 + done + done; + (* Cut the array back down to size *) + Array.sub !array 0 !index + ]} + On the other hand, consider this array comprehension, which is subject to + the fixed-size array comprehension optimization: + {[ + [|x*y for x = 1 to 3 and y = 10 downto 8|] + (* = [|10; 9; 8; 20; 18; 16; 30; 27; 24|] *) + ]} + This translates to the (Lambda equivalent of) the following rather different + OCaml: + {[ + (* ... = 1 to 3 *) + let start_x = 1 in + let stop_x = 3 in + (* ... = 10 downto 8 *) + let start_y = 10 in + let stop_y = 8 in + (* Check if any iterators are empty *) + if start_x > stop_x || start_y < stop_y + then + (* If so, return the empty array *) + [||] + else + (* Precompute the array size *) + let array_size = + (* Compute the size of the range [1 to 3], failing on overflow (the + case where the range is correctly size 0 is handled by the + emptiness check) *) + let x_size = + let range_size = (stop_x - start_x) + 1 in + if range_size > 0 + then range_size + else raise (Invalid_argument "integer overflow when precomputing \ + the size of an array comprehension") + in + (* Compute the size of the range [10 downto 8], failing on overflow + (the case where the range is correctly size 0 is handled by the + emptiness check) *) + let y_size = + let range_size = (start_y - stop_y) + 1 in + if range_size > 0 + then range_size + else raise (Invalid_argument "integer overflow when precomputing \ + the size of an array comprehension") + in + (* Multiplication that checks for overflow ([y_size] can't be [0] + because we checked that above *) + let product = x_size * y_size in + if product / y_size = x_size + then product + else raise (Invalid_argument "integer overflow when precomputing \ + the size of an array comprehension") + in + (* Allocate the (nonresizable) array *) + let array = Array.make array_size 0 in + (* Next element to be generated *) + let index = ref 0 in + (* for x = 1 to 3 *) + for x = start_x to stop_x do + (* for y = 10 downto 8 *) + for y = start_y downto stop_y do + (* The body: x*y *) + array.(!index) <- x*y; + index := !index + 1 + done + done; + array + ]} + You can see that the loop body is tighter, but there's more up-front size + checking work to be done. *) + +(** An implementation note: Many of the functions in this file need to translate + expressions from Typedtree to lambda; to avoid strange dependency ordering, + we parameterize those functions by [Translcore.transl_exp], and pass it in + as a labeled argument, along with the necessary [scopes] labeled argument + that it requires. *) + +module Precompute_array_size : sig + (** Generates the lambda expression that throws the exception once we've + determined that precomputing the array size has overflowed. The check for + overflow is done elsewhere; this just throws the exception + unconditionally. *) + val raise_overflow_exn : loc:scoped_location -> lambda + + (** [safe_product_pos_vals ~loc xs] generates the lambda expression that + computes the product of all the lambda terms in [xs] assuming they are all + strictly positive (nonzero!) integers, failing if any product overflows + (equivalently, if the whole product would overflow). This function must + look at its inputs multiple times, as they are evaluated more than once + due to the overflow check; the optional argument [variable_name] + customizes the string used to name these variables. *) + val safe_product_pos : + ?variable_name:string -> loc:scoped_location -> lambda list -> lambda +end = struct + let raise_overflow_exn ~loc = + let loc' = Debuginfo.Scoped_location.to_location loc in + let slot = + transl_extension_path + loc + Env.initial_safe_string + Predef.path_invalid_argument + in + (* CR aspectorzabusky: Should I call [Translprim.event_after] here? + [Translcore.asssert_failed] does (via a local intermediary). *) + Lprim(Praise Raise_regular, + [Lprim(Pmakeblock(0, Immutable, None, alloc_heap), + [ slot + ; string + ~loc:loc' + "integer overflow when precomputing the size of an array \ + comprehension" ], + loc)], + loc) + + (** [safe_mul_pos_vals ~loc x y] generates the lambda expression that computes + the product [x * y] of two strictly positive (nonzero!) integers and fails + if this overflowed; the inputs are required to be values, as they are + evaluated more than once *) + let safe_mul_pos_vals ~loc x y = + let y = y.Let_binding.var in + let open (val Lambda_utils.int_ops ~loc) in + let product = + Let_binding.make (Immutable Alias) Pintval "product" (x * y) + in + (* [x * y] is safe, for strictly positive [x] and [y], iff you can undo the + multiplication: [(x * y)/y = x]. We assume the inputs are values, so we + don't have to bind them first to avoid extra computation. *) + Let_binding.let_one product + (Lifthenelse(product.var / y = x, + product.var, + raise_overflow_exn ~loc, + Pintval)) + + (** [safe_product_pos_vals ~loc xs] generates the lambda expression that + computes the product of all the lambda values in [xs] assuming they are + all strictly positive (nonzero!) integers, failing if any product + overflows; the inputs are required to be values, as they are evaluated + more than once *) + let safe_product_pos_vals ~loc = function + (* This operation is associative, so the fact that [List.fold_left] brackets + as [(((one * two) * three) * four)] shouldn't matter *) + | x :: xs -> List.fold_left (safe_mul_pos_vals ~loc) x.Let_binding.var xs + | [] -> int 1 + (* The empty list case can't happen with comprehensions; we could raise an + error here instead of returning 1 *) + + (* The inputs are *not* required to be values, as we save them in variables. + We could avoid making let-bindings for lambda-terms that are already + variables, but we assume the optimizer can deal with that case nicely. *) + let safe_product_pos ?(variable_name = "x") ~loc factors = + let factors = + List.map (Let_binding.make (Immutable Strict) Pintval + variable_name) factors + in + Let_binding.let_all factors (safe_product_pos_vals ~loc factors) +end + +(** This module contains the type of bindings generated when translating array + comprehension iterators ([Typedtree.comprehension_iterator]s). We need more + structure than a [Let_binding.t list] because of the fixed-size array + optimization: if we're translating an array comprehension whose size can be + determined ahead of time, such as + [[|x,y for x = 1 to 10 and y in some_array|]], then we need to be able to + precompute the sizes of the iterators. This means that we don't just need + the list of bindings, but we also need to know which bindings are which. + Thus, this module, which allows you to work with a structured representation + of the translated iterator bindings. *) +module Iterator_bindings = struct + (** This is the type of bindings generated when translating array + comprehension iterators ([Typedtree.comprehension_iterator]). If we are + in the fixed-size array case, then ['u = many], and we remember all the + information about the right-hand sides of the iterators; if not, then + ['u = once], and we only remember those bindings that could have side + effects, using the other terms directly. (This means that we remember the + [start] and [stop] of [to] and [downto] iterators, and the array on the + right-hand side of an [in] iterator; this last binding is also always + referenced multiple times.) *) + type t = + | Range of { start : Let_binding.t (* Always bound *) + ; stop : Let_binding.t (* Always bound *) + ; direction : direction_flag } + (** The translation of [Typedtree.Texp_comp_range], an integer iterator + ([... = ... (down)to ...]) *) + | Array of { iter_arr : Let_binding.t (* Always bound *) + ; iter_len : Let_binding.t } + (** The translation of [Typedtree.Texp_comp_in], an array iterator + ([... in ...]). Note that we always remember the array ([iter_arr]), as + it's indexed repeatedly no matter what. *) + + (** Get the [Let_binding.t]s out of a translated iterator *) + let let_bindings = function + | Range { start; stop; direction = _ } -> + [start; stop] + | Array { iter_arr; iter_len } -> + [iter_arr; iter_len] + + (** Get the [Let_binding.t]s out of a list of translated iterators; this is + the information we need to translate a full [for] comprehension clause + ([Typedtree.Texp_comp_for]). *) + let all_let_bindings bindings = List.concat_map let_bindings bindings + + (** Functions for use in the fixed-size array case *) + module Fixed_size_array = struct + (** Check if a translated iterator is empty; that is, check if this iterator + will iterate over zero things. *) + let is_empty ~loc t = + let open (val Lambda_utils.int_ops ~loc) in + match t with + | Range { start; stop; direction} -> begin + let start = start.var in + let stop = stop.var in + match direction with + | Upto -> start > stop + | Downto -> start < stop + end + | Array { iter_arr = _; iter_len } -> + iter_len.var = l0 + + (** Check if any of the translated iterators are empty; that is, check if + any of these iterators will iterate over zero things, and thus check if + iterating over all of these iterators together will actually iterate + over zero things. This is the information we need to optimize away + iterating over the values at all if the result would have zero + elements. *) + let are_any_empty ~loc ts = + let open (val Lambda_utils.int_ops ~loc) in + match List.map (is_empty ~loc) ts with + | is_empty :: are_empty -> + (* ( || ) is associative, so the fact that [List.fold_left] brackets + as [(((one || two) || three) || four)] shouldn't matter *) + List.fold_left ( || ) is_empty are_empty + | [] -> + l0 (* false *) + (* The empty list case can't happen with comprehensions; we could + raise an error here instead *) + + (** Compute the size of a single nonempty array iterator. This is either + the size of a range, which itself is either [stop - start + 1] or + [start - stop + 1] depending on if the array is counting up ([to]) or + down ([downto]), clamped to being nonnegative; or it is the length of + the array being iterated over. In the range case, we also have to check + for overflow. We require that the iterators be nonempty, although this + is only important for the range case; generate Lambda code that checks + the result of [are_any_empty] before entering [size_nonempty] to ensure + this. *) + let size_nonempty ~loc = function + | Range { start; stop; direction } -> + let open (val Lambda_utils.int_ops ~loc) in + let start = start.var in + let stop = stop.var in + let low, high = match direction with + | Upto -> start, stop + | Downto -> stop, start + in + (* We can assume that the range is nonempty, but computing its size + still might overflow *) + let range_size = + Let_binding.make (Immutable Alias) Pintval + "range_size" (high - low + l1) + in + Let_binding.let_one range_size + (* If the computed size of the range is positive, there was no + overflow; if it was zero or negative, then there was overflow *) + (Lifthenelse(range_size.var > l0, + range_size.var, + Precompute_array_size.raise_overflow_exn ~loc, + Pintval)) + | Array { iter_arr = _; iter_len } -> + iter_len.var + + (** Compute the total size of an array built out of a list of translated + iterators, as long as all the iterators are nonempty; since this forms a + cartesian product, we take the product of the sizes (see + [size_nonempty]). This can overflow, in which case we will raise an + exception. This is the operation needed to precompute the fixed size of + a nonempty fixed-size array; check against [are_any_empty] first to + address the case of fixedly-empty array. *) + let total_size_nonempty ~loc iterators = + Precompute_array_size.safe_product_pos + ~variable_name:"iterator_size" + ~loc + (List.map (size_nonempty ~loc) iterators) + end +end + +(** Machinery for working with resizable arrays for the results of an array + comprehension: they are created at a fixed, known, small size, and are + doubled in size when necessary. These are the arrays that back array + comprehensions by default, but not in the fixed-size case; in that case, we + simply construct an array of the appropriate size directly. We could have + built something like this as an OCaml module instead, but doing it directly + in Lambda was simpler, particularly around the ability to alternate freely + with the fixed-size case. *) +module Resizable_array = struct + (** The starting size of a resizable array. This is guaranteed to be a small + power of two. Because we resize the array by doubling, using a power of + two means that, under the assumption that [Sys.max_array_length] is of the + form 2^x-1, the array will only grow too large one iteration before it + would otherwise exceed the limit. (In practice, the program will fail by + running out of memory first.) *) + let starting_size = 8 + + (** Create a fresh resizable array: it is mutable and has [starting_size] + elements. We have to provide the initial value as well as the array kind, + thanks to the float array optimization, so sometimes this will be a + default value and sometimes it will be the first element of the + comprehension. *) + let make ~loc array_kind elt = + Lprim(Pmakearray(array_kind, Mutable, alloc_heap), + Misc.replicate_list elt starting_size, + loc) + + (** Create a new array that's twice the size of the old one. The first half + of the array contains the same elements, and the latter half's contents + are unspecified. Note that this does not update [array] itself. *) + let double ~loc array = array_append ~loc array array + (* Implementing array doubling in by appending an array to itself may not be + the optimal way to do array doubling, but it's good enough for now *) +end + +(** Translates an iterator ([Typedtree.comprehension_iterator]), one piece of a + [for ... and ... and ...] expression, into Lambda. We translate iterators + from the "outermost" iterator inwards, so this translation is done in CPS; + the result of the translation is actually a function that's waiting for the + body to fill into the translated loop. The term generated by this function + will execute the body (which is likely made of further translated iterators + and suchlike) once for every value being iterated over, with all the + variables bound over by the iterator available. + + This function returns both a pair of said CPSed Lambda term and the let + bindings generated by this term (as an [Iterator_bindings.t], which see). *) +let iterator ~transl_exp ~scopes ~loc + : comprehension_iterator -> (lambda -> lambda) * Iterator_bindings.t + = function + | Texp_comp_range { ident; pattern = _; start; stop; direction } -> + let bound name value = + Let_binding.make (Immutable Strict) Pintval + name (transl_exp ~scopes value) + in + let start = bound "start" start in + let stop = bound "stop" stop in + let mk_iterator body = + Lfor { for_id = ident + ; for_from = start.var + ; for_to = stop.var + ; for_dir = direction + ; for_body = body + ; for_region = true } + in + mk_iterator, Range { start + ; stop + ; direction } + | Texp_comp_in { pattern; sequence = iter_arr_exp } -> + let iter_arr = + Let_binding.make (Immutable Strict) Pgenval + "iter_arr" (transl_exp ~scopes iter_arr_exp) + in + let iter_arr_kind = Typeopt.array_kind iter_arr_exp in + let iter_len = + (* Extra let-binding if we're not in the fixed-size array case; the + middle-end will simplify this for us *) + Let_binding.make (Immutable Alias) Pintval + "iter_len" + (Lprim(Parraylength iter_arr_kind, [iter_arr.var], loc)) + in + let iter_ix = Ident.create_local "iter_ix" in + let mk_iterator body = + let open (val Lambda_utils.int_ops ~loc) in + (* for iter_ix = 0 to Array.length iter_arr - 1 ... *) + Lfor { for_id = iter_ix + ; for_from = l0 + ; for_to = iter_len.var - l1 + ; for_dir = Upto + ; for_region = true + ; for_body = + Matching.for_let + ~scopes + pattern.pat_loc + (Lprim(Parrayrefu iter_arr_kind, + [iter_arr.var; Lvar iter_ix], + loc)) + pattern + Pintval + body + } + in + mk_iterator, Array { iter_arr; iter_len } + +(** Translates an array comprehension binding + ([Typedtree.comprehension_clause_binding]) into Lambda. At parse time, + iterators don't include patterns and bindings do; however, in the typedtree + representation, the patterns have been moved into the iterators (so that + range iterators can just have an [Ident.t], for translation into for loops), + so bindings are just like iterators with a possible annotation. As a + result, this function is essentially the same as [iterator], which see. *) +let binding + ~transl_exp + ~scopes + ~loc + { comp_cb_iterator; comp_cb_attributes = _ } = + (* CR aspectorzabusky: What do we do with attributes here? *) + iterator ~transl_exp ~loc ~scopes comp_cb_iterator + +(** Translate the contents of a single [for ... and ...] clause (the contents of + a [Typedtree.Texp_comp_for]) into Lambda, returning both the [lambda -> + lambda] function awaiting the body of the translated loop, and the ['u + Iterator_bindings.t list] containing all the bindings generated by the + individual iterators. This function is factored out of [clause] because it + is also used separately in the fixed-size case. *) +let for_and_clause ~transl_exp ~scopes ~loc = + Cps_utils.compose_map_acc (binding ~transl_exp ~loc ~scopes) + +(** Translate a single clause, either [for ... and ...] or [when ...] + ([Typedtree.comprehension_clause]), into Lambda, returning the [lambda -> + lambda] function awaiting the body of the loop or conditional corresponding + to this clause. The argument to that function will be executed once for + every tuple of elements being iterated over in the [for ... and ...] case, + or it will be executed iff the condition is true in the [when] case. + + This function is only used if we are not in the fixed-size array case; see + [clauses] and [for_and_clause] for more details. *) +let clause ~transl_exp ~scopes ~loc = function + | Texp_comp_for bindings -> + let make_clause, var_bindings = + for_and_clause ~transl_exp ~loc ~scopes bindings + in + fun body -> Let_binding.let_all + (Iterator_bindings.all_let_bindings var_bindings) + (make_clause body) + | Texp_comp_when cond -> + fun body -> Lifthenelse(transl_exp ~scopes cond, + body, + lambda_unit, + Pintval (* [unit] is immediate *)) + +(** The [array_sizing] type describes whether an array comprehension has been + translated using the fixed-size array optimization ([Fixed_size]), or it has + not been but instead been translated using the usual dynamically-sized array + ([Dynamic_size]). + + If an array comprehension is of the form + {[ + [|BODY for ITER and ITER ... and ITER|] + ]} + then we can compute the size of the resulting array before allocating it + ([Fixed_size]); otherwise, we cannot ([Dynamic_size]), and we have to + dynamically grow the array as we iterate and shrink it to size at the + end. *) +type array_sizing = + | Fixed_size + | Dynamic_size + +(** The [array_sizing_info] type is like [array_sizing], but includes any extra + information necessary to construct the array comprehension at the very top + level; it does not need to be passed down into the various functions that + create pieces, which can operate only knowing the [array_sizing]. *) +type array_sizing_info = + | Fixed_size_info of Iterator_bindings.t list + (** In the fixed-size case, we need to collect the lengths of the iterators + being iterated over, which determine the size of the array; thus, the + iterator bindings need to be available early, before we even allocate the + array. *) + | Dynamic_size_info + (** In the dynamic-size case, we don't need to collect any other + information. *) + +(** The result of translating the clauses portion of an array comprehension + (everything but the body) *) +type translated_clauses = + { array_sizing_info : array_sizing_info + (** Whether the array is of a fixed size or must be grown dynamically, along + with supporting information; see the [array_sizing] and + [array_sizing_info] types for more details. *) + ; array_size : Let_binding.t + (** The binding that defines the array size; comes in between any extra + information from [array_sizing_info] and the definition of the array. In + the case where the array has been translated with the fixed-size array + optimization (when [array_sizing_info] is [Fixed_size _]), the variable + holding the size is immutable; in the usual dynamically-sized array case + (when [array_sizing_info] is [Dynamic_size_info]), the variable holding + the size is mutable so that the array size can be grown.*) + ; make_comprehension : lambda -> lambda + (** The translation of the comprehension's iterators, awaiting the translation + of the comprehension's body. All that remains to be done after this + function is called is the creation and disposal of the array that is being + constructed; the extra information from [array_sizing_info] must also be + applied to the result, outside of even the creation of the array. *) + } + +(** Translate the clauses of an array comprehension (everything but the body; a + [Typedtree.comprehension_clause list], which is the [comp_clauses] field of + [Typedtree.comprehension]). This function has to handle the fixed-size + array case: if the list of clauses is a single [for ... and ...] clause, + then the array will be preallocated at its full size and the comprehension + will not have to resize the array (although the float array optimization + interferes with this slightly -- see [initial_array]); this is also why we + need the [array_kind]. In the normal case, this function simply wires + together multiple [clause]s, and provides the variable holding the current + array size as a binding. *) +let clauses ~transl_exp ~scopes ~loc = function + | [Texp_comp_for bindings] -> + let make_comprehension, var_bindings = + for_and_clause ~transl_exp ~loc ~scopes bindings + in + let array_size = + Let_binding.make (Immutable Alias) Pintval + "array_size" + (Iterator_bindings.Fixed_size_array.total_size_nonempty + ~loc var_bindings) + in + { array_sizing_info = Fixed_size_info var_bindings + ; array_size + ; make_comprehension + } + | clauses -> + let array_size = + Let_binding.make Mutable Pintval + "array_size" (int Resizable_array.starting_size) + in + let make_comprehension = + Cps_utils.compose_map (clause ~transl_exp ~loc ~scopes) clauses + in + { array_sizing_info = Dynamic_size_info + ; array_size + ; make_comprehension } + +(** Create the initial array that will be filled by an array comprehension, + returning both its identifier and the let binding that binds it. The logic + behind how to create the array is complicated, because it lies at the + intersection of two special cases (controlled by the two non-location + arguments to this function): + + * The float array optimization means that we may not know the type of + elements that go into this array, and so need to wait to actually create + an array until we have seen the first element. In this case, we have to + return an empty array that will get overwritten later. + + * The fixed-size optimization means that we may want to preallocate the + entire array all at once, instead of allocating a resizable array and + growing it. + + Importantly, the two cases can co-occur, in which case later code needs to + be aware of what has happened. + + The array that is returned is bound as a [Variable] in both the case where + we're subject to the float array optimization (i.e., [array_kind] is + [Pgenarray]) and in the case where nothing special occurs and the array is + resizable; in the fixed-size array case, the resulting array is bound + immutably, although it is still internally mutable. This logic is important + when translating comprehension bodies; see [body] for details. *) +let initial_array ~loc ~array_kind ~array_size ~array_sizing = + (* As discussed above, there are three cases to consider for how we allocate + the array. + + 1. We are subject to the float array optimization: The array kind is + [Pgenarray]. In this case, we create an immutable empty array as a + [Variable], since rather than being updated it will simply be + overwritten once we have the first element. This is the only time a + fixed-size array needs to be a [Variable], since it will be overwritten + on the first iteration. + 2. The array is of fixed size and known array kind, in which case we use + [make_(float_)vect] to create the array, and bind it as [StrictOpt] + since it never needs to be overwritten to be resized or replaced. + 3. The array is of unknown size and known array kind, in which case we + create a small array of default values using [Pmakearray] and bind it as + a [Variable] so that it can be overwritten when its size needs to be + doubled. *) + let array_let_kind, array_value = + let open Let_binding in + let open Let_kind in + match array_sizing, array_kind with + (* Case 1: Float array optimization difficulties *) + | (Fixed_size | Dynamic_size), Pgenarray -> + Mutable, + Lprim(Pmakearray(Pgenarray, Immutable, Lambda.alloc_heap), [], loc) + (* Case 2: Fixed size, known array kind *) + | Fixed_size, (Pintarray | Paddrarray) -> + Immutable StrictOpt, + make_vect ~loc ~length:array_size.var ~init:(int 0) + | Fixed_size, Pfloatarray -> + Immutable StrictOpt, make_float_vect ~loc array_size.var + (* Case 3: Unknown size, known array kind *) + | Dynamic_size, (Pintarray | Paddrarray) -> + Mutable, Resizable_array.make ~loc array_kind (int 0) + | Dynamic_size, Pfloatarray -> + Mutable, Resizable_array.make ~loc array_kind (float 0.) + in + Let_binding.make array_let_kind Pgenval "array" array_value + +(** Generate the code for the body of an array comprehension. This involves + translating the body expression (a [Typedtree.expression], which is the + [comp_body] field of [Typedtree.comprehension], but also handles the logic + of filling in the array that is being produced by the comprehension. This + logic varies depending on whether we are subject to the float array + optimization or not and whether we are in the fixed size array case or not, + so the correctness depends on getting the correct bindings from + [initial_array] and [clauses]. *) +let body + ~loc + ~array_kind + ~array_size + ~array_sizing + ~array + ~index + ~body + = + (* The body of an array comprehension has three jobs: + 1. Compute the next element + 2. Assign it (mutably) to the next element of the array + 3. Advance the index of the next element + However, there are several pieces of complexity: + (a) If the array size is not fixed, we have to check if the index has + overflowed; if it has, we have to double the size of the array. (The + complex case corresponds to [array_sizing] being [Dynamic_size].) + (b) If the array kind is not statically known, we initially created an + empty array; we have to check if we're on the first iteration and use + the putative first element of the array as the placeholder value for + every element of the array. (The complex case corresponds to + [array_kind] being [Pgenarray].) + (c) If both (a) and (b) hold, we shouldn't bother checking for an + overflowed index on the first loop iteration. + The result is that we build the "set the element" behavior in three steps: + i. First, we build the raw "set the element unconditionally" expression + ([set_element_raw]). + ii. Then, if necessary, we precede that with the resizing check; + otherwise, we leave the raw behavior alone + ([set_element_in_bounds]). + iii. Then, if necessary, we check to see if we're on the first iteration + and create the fresh array instead if so; otherwise, we leave the + size-safe behavior alone ([set_element_known_kind_in_bounds]). + iv. Finally, we take the resulting safe element-setting behavior (which + could be equal to the result from any of stages i--iii), and follow + it up by advancing the index of the element to update. + *) + let open (val Lambda_utils.int_ops ~loc) in + let open Let_binding in + let set_element_raw elt = + (* array.(index) <- elt *) + Lprim(Parraysetu array_kind, [array.var; index.var; elt], loc) + (* CR aspectorzabusky: Is [array_kind] safe here, since it could be + [Pgenarray]? Do we have to learn which it should be? *) + in + let set_element_in_bounds elt = match array_sizing with + | Fixed_size -> + set_element_raw elt + | Dynamic_size -> + Lsequence( + (* Double the size of the array if it's time... *) + Lifthenelse(index.var < array_size.var, + lambda_unit, + Lsequence( + Lassign(array_size.id, i 2 * array_size.var), + Lassign(array.id, + Resizable_array.double ~loc array.var)), + Pintval (* [unit] is immediate *)), + (* ...and then set the element now that the array is big enough *) + set_element_raw elt) + in + let set_element_known_kind_in_bounds = match array_kind with + | Pgenarray -> + let is_first_iteration = (index.var = l0) in + let elt = Let_binding.make (Immutable Strict) Pgenval "elt" body in + let make_array = match array_sizing with + | Fixed_size -> + make_vect ~loc ~length:array_size.var ~init:elt.var + | Dynamic_size -> + Resizable_array.make ~loc Pgenarray elt.var + in + Let_binding.let_one elt + (Lifthenelse(is_first_iteration, + Lassign(array.id, make_array), + set_element_in_bounds elt.var, + Pintval (* [unit] is immediate *))) + | Pintarray | Paddrarray | Pfloatarray -> + set_element_in_bounds body + in + Lsequence( + set_element_known_kind_in_bounds, + Lassign(index.id, index.var + l1)) + +let comprehension + ~transl_exp ~scopes ~loc ~array_kind { comp_body; comp_clauses } = + let { array_sizing_info; array_size; make_comprehension } = + clauses ~transl_exp ~scopes ~loc comp_clauses + in + let array_sizing = match array_sizing_info with + | Fixed_size_info _ -> Fixed_size + | Dynamic_size_info -> Dynamic_size + in + let array = + initial_array ~loc ~array_kind ~array_size ~array_sizing + in + let index = Let_binding.make Mutable Pintval "index" (int 0) in + (* The core of the comprehension: the array, the index, and the iteration that + fills everything in. The translation of the clauses will produce a check + to see if we can avoid doing the hard work of growing the array, which is + the case when the array is known to be empty after the fixed-size array + optimization; we also have to check again when we're done. *) + let comprehension = + Let_binding.let_all + [array_size; array; index] + (Lsequence( + (* Create the array *) + make_comprehension + (body + ~loc + ~array_kind + ~array_size + ~array_sizing + ~array + ~index + ~body:(transl_exp ~scopes comp_body)), + (* If it was dynamically grown, cut it down to size *) + match array_sizing with + | Fixed_size -> array.var + | Dynamic_size -> + array_sub ~loc array.var ~offset:(int 0) + ~length:index.var)) + in + (* If we're in the fixed-size array case, do the extra setup necessary. *) + match array_sizing_info with + | Fixed_size_info var_bindings -> + Let_binding.let_all + (Iterator_bindings.all_let_bindings var_bindings) + (Lifthenelse(Iterator_bindings.Fixed_size_array.are_any_empty + ~loc var_bindings, + (* If the array is known to be empty, we short-circuit and return + the empty array *) + Lprim( + Pmakearray(Pgenarray, Immutable, Lambda.alloc_heap), + [], + loc), + (* Otherwise, we translate it normally *) + comprehension, + (* CR aspectorzabusky: My understanding is that all empty arrays + are identical, no matter their [array_kind], and that's why I + can use [Pgenarray] to create the empty array above but still + use [array_kind] here. Is that right? *) + (* (And the result has the [value_kind] of the array) *) + Parrayval array_kind)) + | Dynamic_size_info -> + comprehension diff --git a/lambda/transl_array_comprehension.mli b/lambda/transl_array_comprehension.mli new file mode 100644 index 000000000000..271020941aa5 --- /dev/null +++ b/lambda/transl_array_comprehension.mli @@ -0,0 +1,32 @@ +open Lambda +open Typedtree +open Debuginfo.Scoped_location + +(** Translate array comprehensions; see the .ml file for more details *) + +(* CR aspectorzabusky: Is it really true that I don't need to pass in array + mutability information here? (Last sentence of the first paragraph.) *) +(** Translate an array comprehension ([Typedtree.comprehension], when it's the + body of a [Typedtree.Texp_array_comprehension]) into Lambda. This generates + more efficient code in the case where the array has a known fixed size, by + preallocating the generated array; otherwise, it dynamically resizes the + generated array, cutting it back down to size at the end. The [array_kind] + of the resulting array must be provided. We do not need to pass in whether + the resulting array should be mutable or immutable; both sorts of arrays + will be constructed mutably, and the type checker has already enforced that + only mutable arrays are used mutably. + + The only variables this term refers to are those that come from the array + comprehension itself; some C primitives are referenced, but no standard + library functions. + + This function needs to translate expressions from Typedtree into Lambda, and + so is parameterized by [Translcore.transl_exp], its [scopes] argument, and + the [loc]ation. *) +val comprehension + : transl_exp:(scopes:scopes -> expression -> lambda) + -> scopes:scopes + -> loc:scoped_location + -> array_kind:array_kind + -> comprehension + -> lambda diff --git a/lambda/transl_comprehension_utils.ml b/lambda/transl_comprehension_utils.ml new file mode 100644 index 000000000000..3256c90943c8 --- /dev/null +++ b/lambda/transl_comprehension_utils.ml @@ -0,0 +1,161 @@ +open Lambda + +module Let_binding = struct + module Let_kind = struct + type t = + | Immutable of let_kind + | Mutable + end + + type t = + { let_kind : Let_kind.t + ; value_kind : value_kind + ; id : Ident.t + ; init : lambda + ; var : lambda } + + let make (let_kind : Let_kind.t) value_kind name init = + let id = Ident.create_local name in + let var = match let_kind with + | Mutable -> Lmutvar id + | Immutable _ -> Lvar id + in + {let_kind; value_kind; id; init; var} + + let let_one {let_kind; value_kind; id; init} body = + match let_kind with + | Immutable let_kind -> Llet(let_kind, value_kind, id, init, body) + | Mutable -> Lmutlet(value_kind, id, init, body) + + let let_all = List.fold_right let_one +end + +module Lambda_utils = struct + module Constants = struct + let int n = Lconst (const_int n) + + let float f = Lconst (Const_base (Const_float (Float.to_string f))) + + let string ~loc s = Lconst (Const_base (Const_string(s, loc, None))) + end + + let apply + ~loc + ~mode + func + args = + (* These defaultscould be promoted to optional arguments if they were more + widely used *) + let region_close = Rc_normal in + let tailcall = Default_tailcall in + let inlined = Default_inlined in + let specialised = Default_specialise in + let probe = None in + Lapply { ap_loc = loc + ; ap_func = func + ; ap_args = args + ; ap_region_close = region_close + ; ap_mode = mode + ; ap_tailcall = tailcall + ; ap_inlined = inlined + ; ap_specialised = specialised + ; ap_probe = probe + } + + module type Int_ops = sig + (* We want to expose all the operators so we don't have to think about which + ones to add and remove as we change the rest of the file *) + + val ( + ) : lambda -> lambda -> lambda + val ( - ) : lambda -> lambda -> lambda + val ( * ) : lambda -> lambda -> lambda + val ( / ) : lambda -> lambda -> lambda + + val ( = ) : lambda -> lambda -> lambda + val ( <> ) : lambda -> lambda -> lambda + val ( < ) : lambda -> lambda -> lambda + val ( > ) : lambda -> lambda -> lambda + val ( <= ) : lambda -> lambda -> lambda + val ( >= ) : lambda -> lambda -> lambda + + val ( && ) : lambda -> lambda -> lambda + val ( || ) : lambda -> lambda -> lambda + + val l0 : lambda + val l1 : lambda + val i : int -> lambda + end + + let int_ops ~loc : (module Int_ops) = (module struct + let binop prim l r = Lprim(prim, [l; r], loc) + + let ( + ) = binop Paddint + let ( - ) = binop Psubint + let ( * ) = binop Pmulint + let ( / ) = binop (Pdivint Unsafe) + let ( = ) = binop (Pintcomp Ceq) + let ( <> ) = binop (Pintcomp Cne) + let ( < ) = binop (Pintcomp Clt) + let ( > ) = binop (Pintcomp Cgt) + let ( <= ) = binop (Pintcomp Cle) + let ( >= ) = binop (Pintcomp Cge) + let ( && ) = binop Psequor + let ( || ) = binop Psequor + + let i = Constants.int + let l0 = i 0 + let l1 = i 1 + end) + + module Primitive = struct + (** The Lambda primitive for calling a simple C primitive *) + let c_prim name arity = Pccall (Primitive.simple ~name ~arity ~alloc:true) + + (** Create a function that produces the Lambda representation for a + one-argument C primitive when provided with a Lambda argument *) + let unary name = + let prim = c_prim name 1 in + fun ~loc x -> Lprim(prim, [x], loc) + + (** Create a function that produces the Lambda representation for a + two-argument C primitive when provided with two Lambda arguments *) + let binary name = + let prim = c_prim name 2 in + fun ~loc x y -> Lprim(prim, [x; y], loc) + + (** Create a function that produces the Lambda representation for a + three-argument C primitive when provided with three Lambda arguments *) + let ternary name = + let prim = c_prim name 3 in + fun ~loc x y z -> Lprim(prim, [x; y; z], loc) + + (* CR aspectorzabusky: These primitives are now created unconditionally on + compiler startup. Is that okay? *) + + let make_vect = + let make_vect = binary "caml_make_vect" in + fun ~loc ~length ~init -> make_vect ~loc length init + + let make_float_vect = unary "caml_make_float_vect" + + let array_append = binary "caml_array_append" + + let array_sub = + let array_sub = ternary "caml_array_sub" in + fun ~loc a ~offset ~length -> array_sub ~loc a offset length + end +end + +module Cps_utils = struct + (** Function composition *) + let compose f g x = f (g x) + + (** Apply a function to the first part of a tuple *) + let first f (x, y) = f x, y + + let compose_map f = + List.fold_left (fun k x -> compose k (f x)) Fun.id + + let compose_map_acc f = + List.fold_left_map (fun k x -> first (compose k) (f x)) Fun.id +end diff --git a/lambda/transl_comprehension_utils.mli b/lambda/transl_comprehension_utils.mli new file mode 100644 index 000000000000..c35621fdd906 --- /dev/null +++ b/lambda/transl_comprehension_utils.mli @@ -0,0 +1,148 @@ +open Lambda + +(** Code-generation utilities for use when generating Lambda for + comprehensions. *) + +(** First-class let bindings (mutable and immutable); we sometimes need to + collect these while translating array comprehension clauses and bind them + later. *) +module Let_binding : sig + (** Lambda distinguishes between binding forms that bind an immutable ([Llet]) + vs. mutable ([Lmutlet]) variable; however, we want to be able to abstract + over these uniformly, as in some cases we will be collecting lists of + variables we want to bind don't want to split the mutable and immutable + ones apart. We thus combine the different immutable [let_kind]s with the + option of having a mutable variable and use that to distinguish what sort + of [let] we're generating. *) + module Let_kind : sig + (** What sort of variable are we binding? *) + type t = + | Immutable of let_kind + (** Bind an immutable variable of the specified [let_kind]; corresponds to + [Llet]. *) + | Mutable + (** Bind a mutable variable; corresponds to [Lmutlet]. *) + end + + (** The first-class (in OCaml) type of let bindings. *) + type t = private + { let_kind : Let_kind.t + ; value_kind : value_kind + ; id : Ident.t + ; init : lambda (* initial value *) + ; var : lambda (* occurrence of this variable *) + } + + (** Create a fresh local identifier (with name as given by the string + argument) to bind to an initial value given by the lambda argument. *) + val make : Let_kind.t -> value_kind -> string -> lambda -> t + + (** Create a Lambda let-binding (with [Llet]) from a first-class let + binding, providing the body. *) + val let_one : t -> lambda -> lambda + + (** Create Lambda let-bindings (with [Llet]) from multiple first-class let + bindings, providing the body. *) + val let_all : t list -> lambda -> lambda +end + +(** Convenience functions for working with the Lambda AST *) +module Lambda_utils : sig + (** Creating AST fragments for constants from OCaml values *) + module Constants : sig + (** Lambda integer literals *) + val int : int -> lambda + + (** Lambda float literals; be careful with unusual values, as this calls + [Float.to_string] *) + val float : float -> lambda + + (** Lambda string literals; these require a location, and are constructed as + "quoted strings", not {fancy|delimited strings|fancy}. *) + val string : loc:Location.t -> string -> lambda + end + + (** Apply a Lambda function to some Lambda values, at a location; all the + other information needed by [Lapply] is set to some default value. *) + val apply : + loc:scoped_location -> mode:alloc_mode -> lambda -> lambda list -> lambda + + (** Nicer OCaml syntax for constructing Lambda ASTs that operate on integers; + created by [int_ops], which includes the necessary location in all the + operations *) + module type Int_ops = sig + (** Integer arithmetic *) + + val ( + ) : lambda -> lambda -> lambda + val ( - ) : lambda -> lambda -> lambda + val ( * ) : lambda -> lambda -> lambda + val ( / ) : lambda -> lambda -> lambda + + (** Integer comparisons *) + + val ( = ) : lambda -> lambda -> lambda + val ( <> ) : lambda -> lambda -> lambda + val ( < ) : lambda -> lambda -> lambda + val ( > ) : lambda -> lambda -> lambda + val ( <= ) : lambda -> lambda -> lambda + val ( >= ) : lambda -> lambda -> lambda + + (** Boolean logical operators *) + + val ( && ) : lambda -> lambda -> lambda + val ( || ) : lambda -> lambda -> lambda + + (** Integer literals *) + + val l0 : lambda + val l1 : lambda + val i : int -> lambda + end + + (** Construct an [Int_ops] module at the given location *) + val int_ops : loc:scoped_location -> (module Int_ops) + + (** Expose functions to construct Lambda calls to primitives; some of their + arguments have been given labels, but otherwise they mirror the primitives + exactly *) + module Primitive : sig + (** [make_vect ~length ~init] calls the [caml_make_vect] C primitive, which + creates an array of the given [length] containing that many copies of + the given [init]ial value *) + val make_vect : + loc:scoped_location -> length:lambda -> init:lambda -> lambda + + (** [make_float_vect len] calls the [caml_make_float_vect] C primitive, + which creates an unboxed float array of length [len] whose contents are + uninitialized *) + val make_float_vect : loc:scoped_location -> lambda -> lambda + + (** [array_append a1 a2] calls the [caml_array_append] C primitive, which + creates a new array by appending [a1] and [a2] *) + val array_append : loc:scoped_location -> lambda -> lambda -> lambda + + (** [array_sub a ~offset ~length] calls the [caml_array_sub] C primitive, + which creates a new subarray corresponding to the subarray of [a] + starting at the given [offset] with the given [length] *) + val array_sub : + loc:scoped_location -> lambda -> offset:lambda -> length:lambda -> lambda + end +end + +module Cps_utils : sig + (** [compose_map f xs] applies [f] to every element of [xs], obtaining a list + of functions, and then composes these functions (from left to right). + This is useful for, e.g., combining a sequence of translated clauses into + a single [lambda -> lambda] function. *) + val compose_map : ('a -> 'b -> 'b) -> 'a list -> 'b -> 'b + + (** [compose_map_acc f xs] is like [compose_map], but [f] returns a pair of a + function and some extra data; the final result is then the composition (as + in [compose_map]) paired with the list of all these extra values. This is + useful for combining a sequence of iterators into a single [lambda -> + lambda] function and their list of generated bindings (a + ['u Iterator_bindings.t list]), as the [binding] function returns this + extra data. *) + val compose_map_acc : + ('a -> ('b -> 'b) * 'c) -> 'a list -> ('b -> 'b) * 'c list +end diff --git a/lambda/transl_list_comprehension.ml b/lambda/transl_list_comprehension.ml new file mode 100644 index 000000000000..e8310840cbb7 --- /dev/null +++ b/lambda/transl_list_comprehension.ml @@ -0,0 +1,306 @@ +open Lambda +open Typedtree +open Asttypes +open Transl_comprehension_utils +open Lambda_utils.Constants + +(** List comprehensions are compiled in terms of "reversed difference lists". A + difference list in general is a function from lists to lists; by "reversed", + we mean that these lists are stored backwards, and need to be reversed at + the end. We make both these choices for the usual efficiency reasons; + difference lists allow for efficient concatenation; they can also be viewed + as based on passing around accumulators, which allows us to make our + functions tail-recursive, at the cost of building our lists up backwards. + An additional choice we make is to build all these intermediate data + structures on the stack (i.e., make them [local_]); again, this is for + efficiency, as it means we don't need to get the structure of these + difference lists involved with the garbage collector. Since we can + currently only generate global lists with list comprehensions (see the + comment "What modes should comprehensions use?" in [typecore.ml]), we need a + type that is spine-local but element-global; we thus define a custom type of + such snoc lists, and define our difference lists in terms of that, in the + internal module [CamlinternalComprehension]: + {[ + type 'a rev_list = + | Nil + | Snoc of { init : 'a rev_list; global_ last : 'a } + + type 'a rev_dlist = local_ 'a rev_list -> local_ 'a rev_list + ]} + We then work exclusively in terms of [local_ 'a rev_dlist] values, reversing + them into a global [list] only at the very end. + + We desugar each iterator of a list comprehension into the application of a + tail-recursive higher-order function analogous to `concat_map`, whose type + is of the following form: + {[ + ...iterator arguments... -> + local_ ('elt -> local_ 'res rev_dlist) -> + local_ 'res rev_dlist + ]} + Here, the [...iterator arguments...] define the sequence of values to be + iterated over (the [seq] of a [for pat in seq] iterator, or the [start] and + [end] of a [for x = start to/downto end] iterator); the function argument is + then to be called once for each item. What goes in the function? It will + be the next iterator, desugared in the same way. At any time, a [when] + clause might intervene, which is simply desugared into a conditional that + gates entering the next phase of the translation. + + Eventually, we reach the body, which is placed into the body of the + innermost translated function; it produces the single-item reversed + difference list (alternatively, snocs its generated value onto the + accumulator). Because each function is analogous to `concat_map`, this + builds up the correct list in the end. The whole thing is then passed into + a reversal function, building the final list. + + For example, consider the following list comprehension: + {[ + [x+y for x = 1 to 3 when x <> 2 for y in [10*x; 100*x]] + (* = [11; 101; 33; 303] *) + ]} + This translates to the (Lambda equivalent of) the following: + {[ + (* Convert the result to a normal list *) + CamlinternalComprehension.rev_list_to_list ( + (* for x = 1 to 3 *) + let start = 1 in + let stop = 3 in + CamlinternalComprehension.rev_dlist_concat_iterate_up + start stop + (fun x acc_x -> local_ + (* when x <> 2 *) + if x <> 2 + then + (* for y in [10*x; 100*x] *) + let iter_list = [10*x; 100*x] in + CamlinternalComprehension.rev_dlist_concat_map + iter_list + (fun y acc_y -> local_ + (* The body: x+y *) + Snoc { init = acc_y; last = x*y }) + acc_x + else + acc_x) + Nil) + ]} + + See [CamlinternalComprehension] the types and functions we desugar to, along + with some more documentation. *) + +(** An implementation note: Many of the functions in this file need to translate + expressions from Typedtree to Lambda; to avoid strange dependency ordering, + we parameterize those functions by [Translcore.transl_exp], and pass it in + as a labeled argument, along with the necessary [scopes] labeled argument + that it requires. *) + +(* CR aspectorzabusky: I couldn't get this to build if these were run as soon as + this file was processed *) +(** The functions that are required to build the results of list comprehensions; + see the documentation for [CamlinternalComprehension] for more details. *) +let ( rev_list_to_list + , rev_dlist_concat_map + , rev_dlist_concat_iterate_up + , rev_dlist_concat_iterate_down ) + = + let transl name = + lazy (Lambda.transl_prim "CamlinternalComprehension" name) + in + ( transl "rev_list_to_list" + , transl "rev_dlist_concat_map" + , transl "rev_dlist_concat_iterate_up" + , transl "rev_dlist_concat_iterate_down" ) +;; + +(** The [local_] form of the [CamlinternalComprehension.Snoc] constructor, for + building the intermediate restults of list comprehensions; see the + documentation for [CamlinternalComprehension.rev_list] for more details. *) +let rev_list_snoc_local ~loc ~init ~last = + Lprim(Pmakeblock(0, Immutable, None, alloc_local), [init; last], loc) + +(** The [CamlinternalComprehension.Nil] constructor, for building the + intermediate restults of list comprehensions; see the documentation for + [CamlinternalComprehension.rev_list] for more details. *) +let rev_list_nil = int 0 + +(** The information needed to translate a single iterator from a + [for ... and ...] clause (i.e., [x = e1 (down)to e2] or [for pat in xs]). *) +type translated_iterator = + { builder : lambda Lazy.t + (** The function that does the appropriate iteration (counting up, counting + down, or iterating over a list). As discussed at the start of this file, + this function is expected to have a type of the following form: + {[ + ...iterator arguments... -> + local_ ('elt -> local_ 'res rev_dlist) -> + local_ 'res rev_dlist + ]} + Once the "iterator arguments", which vary depending on the iterator, are + applied to this function (see [arg_lets]), then it is simply waiting for + the body of the iterator (the final function argument). *) + ; arg_lets : Let_binding.t list + (** The first-class let bindings that bind the arguments to the [builder] + function that actually does the iteration. These let bindings need to be + collected separately so that they can all be bound at once before the + whole [for ... and ...] clause, so that iterators in such a clause don't + have their side effects performed multiple times in relation to each + other. Every variable bound by one of these let bindings will be passed + to [builder], filling in the [...iterator arguments...] in its type. *) + ; element : Ident.t + (** The name given to the values we're iterating over; needs to be a fresh + name for [for]-[in] iterators in case the user specifies a complex + pattern. *) + ; element_kind : value_kind + (** The [value_kind] of the values we're iterating over. *) + ; add_bindings : lambda -> lambda + (** Any extra bindings that should be present in the body of this iterator, + for use by nested pieces of the translation; used if the user specifies a + complex pattern in a [for]-[in] iterator. *) + } + +(** Translates an iterator ([Typedtree.comprehension_iterator]), one piece of a + [for ... and ... and ...] expression, into Lambda. This translation is into + a [translated_iterator], not just a Lambda term, because the iterator + desugars into a higher-order function which is applied to another function + containing the body of the iteration; that body function can't be filled in + until the rest of the translations have been done. *) +let iterator ~transl_exp ~scopes = function + | Texp_comp_range { ident; pattern = _; start; stop; direction } -> + (* We have to let-bind [start] and [stop] so that they're evaluated in the + correct (i.e., left-to-right) order *) + let transl_bound var bound = + Let_binding.make + (Immutable Strict) Pintval + var (transl_exp ~scopes bound) + in + let start = transl_bound "start" start in + let stop = transl_bound "stop" stop in + { builder = (match direction with + | Upto -> rev_dlist_concat_iterate_up + | Downto -> rev_dlist_concat_iterate_down) + ; arg_lets = [start; stop] + ; element = ident + ; element_kind = Pintval + ; add_bindings = Fun.id + } + | Texp_comp_in { pattern; sequence } -> + let iter_list = + Let_binding.make (Immutable Strict) Pgenval + "iter_list" (transl_exp ~scopes sequence) + in + (* Create a fresh variable to use as the function argument *) + let element = Ident.create_local "element" in + { builder = rev_dlist_concat_map + ; arg_lets = [iter_list] + ; element + ; element_kind = Typeopt.value_kind pattern.pat_env pattern.pat_type + ; add_bindings = + (* CR aspectorzabusky: This has to be at [value_kind] [Pgenval], + right, since we don't know more specifically? *) + Matching.for_let + ~scopes pattern.pat_loc (Lvar element) pattern Pgenval + } + +(** Translates a list comprehension binding + ([Typedtree.comprehension_clause_binding]) into Lambda. At parse time, + iterators don't include patterns and bindings do; however, in the typedtree + representation, the patterns have been moved into the iterators (so that + range iterators can just have an [Ident.t], for translation into for loops), + so bindings are just like iterators with a possible annotation. As a + result, this function is essentially the same as [iterator], which see. *) +let binding ~transl_exp ~scopes { comp_cb_iterator; comp_cb_attributes = _ } = + (* CR aspectorzabusky: What do we do with attributes here? *) + iterator ~transl_exp ~scopes comp_cb_iterator + +(** Translate all the bindings of a single [for ... and ...] clause (the + contents of a [Typedtree.Texp_comp_for]) into a pair of (1) a list of let + bindings that are in force for the translation; and (2) a single Lambda term + of type ['res rev_dlist], assuming we know how to translate everything that + ought to be nested within it (the [inner_body], a function awaiting the most + nested accumulator as a labeled argument which will produce the body of the + iterations) and have a name for the accumulator of the current [rev_dlist] + ([accumulator], which changes at every recursive step). It folds together + all the [translated_iterator]s by connecting their [body_func]tions to each + other, and bottoms out at the [inner_body]. *) +let rec translate_bindings + ~transl_exp ~scopes ~loc ~inner_body ~accumulator = function + | cur_binding :: bindings -> + let { builder; arg_lets; element; element_kind; add_bindings } = + binding ~transl_exp ~scopes cur_binding + in + let inner_acc = Ident.create_local "accumulator" in + let body_arg_lets, body = + translate_bindings + ~transl_exp ~scopes ~loc + ~inner_body ~accumulator:(Lvar inner_acc) bindings + in + let body_func = + Lambda.lfunction + ~kind:(Curried { nlocal = 2 }) + (* Only the accumulator is local, but since the function itself is + local, [nlocal] has to be equal to the number of parameters *) + ~params:[element, element_kind; inner_acc, Pgenval] + ~return:Pgenval + ~attr:default_function_attribute + ~loc + ~mode:alloc_local + ~region:true (* One region per iterator, like for loops *) + ~body:(add_bindings body) + in + let result = + Lambda_utils.apply + ~loc + ~mode:alloc_local + (Lazy.force builder) + (List.map (fun Let_binding.{id; _} -> Lvar id) arg_lets @ + [body_func; accumulator]) + in + arg_lets @ body_arg_lets, result + | [] -> + [], inner_body ~accumulator + +(** Translate a single clause, either [for ... and ...] or [when ...] + ([Typedtree.comprehension_clause]), into a single Lambda term of type + ['res rev_dlist], assuming we know how to translate everything that ought to + be nested within it (the [comprehension_body], a a function awaiting the + most nested accumulator as a labeled argument which will produce the body of + the iterations) and have a name for the accumulator of the current + [rev_dlist] ([accumulator], which changes at every recursive step). *) +let rec translate_clauses + ~transl_exp ~scopes ~loc ~comprehension_body ~accumulator = function + | clause :: clauses -> + let body ~accumulator = + translate_clauses ~transl_exp ~scopes ~loc + ~comprehension_body ~accumulator clauses + in begin + match clause with + | Texp_comp_for bindings -> + let arg_lets, bindings = + translate_bindings + ~transl_exp ~scopes ~loc ~inner_body:body ~accumulator bindings + in + Let_binding.let_all arg_lets bindings + | Texp_comp_when cond -> + Lifthenelse(transl_exp ~scopes cond, + body ~accumulator, + accumulator, + Pgenval (* [list]s have the standard representation *)) + end + | [] -> + comprehension_body ~accumulator + +let comprehension ~transl_exp ~scopes ~loc { comp_body; comp_clauses } = + let rev_comprehension = + translate_clauses ~transl_exp ~scopes ~loc + ~comprehension_body:(fun ~accumulator -> + rev_list_snoc_local + ~loc + ~init:accumulator + ~last:(transl_exp ~scopes comp_body)) + ~accumulator:rev_list_nil + comp_clauses + in + Lambda_utils.apply + ~loc + ~mode:alloc_heap + (Lazy.force rev_list_to_list) + [rev_comprehension] diff --git a/lambda/transl_list_comprehension.mli b/lambda/transl_list_comprehension.mli new file mode 100644 index 000000000000..3369e08776c6 --- /dev/null +++ b/lambda/transl_list_comprehension.mli @@ -0,0 +1,22 @@ +open Lambda +open Typedtree +open Debuginfo.Scoped_location + +(** Translate list comprehensions; see the .ml file for more details *) + +(** Translate a list comprehension ([Typedtree.comprehension], when it's the + body of a [Typedtree.Texp_list_comprehension]) into Lambda. + + The only variables and types this term directly refers to are those from + [CamlinternalComprehension] and those that come from the list comprehension + itself. + + This function needs to translate expressions from Typedtree into Lambda, and + so is parameterized by [Translcore.transl_exp], its [scopes] argument, and + the [loc]ation. *) +val comprehension + : transl_exp:(scopes:scopes -> expression -> lambda) + -> scopes:scopes + -> loc:scoped_location + -> comprehension + -> lambda diff --git a/lambda/translattribute.ml b/lambda/translattribute.ml index 2f10f518eb15..d103b498f5f8 100644 --- a/lambda/translattribute.ml +++ b/lambda/translattribute.ml @@ -260,12 +260,7 @@ let get_property_attribute l p = let attr = find_attribute (is_property_attribute p) l in parse_property_attribute attr p -let get_check_attribute l = - List.filter_map (fun p -> - match get_property_attribute l p with - | Default_check -> None - | a -> Some a) - [Noalloc] +let get_check_attribute l = get_property_attribute l Noalloc let get_poll_attribute l = let attr = find_attribute is_poll_attribute l in @@ -370,9 +365,11 @@ let add_check_attribute expr loc attributes = | Assume p -> Printf.sprintf "%s assume" (to_string p) | Default_check -> assert false in - match expr, get_check_attribute attributes with - | expr, [] -> expr - | Lfunction({ attr = { stub = false } as attr } as funct), [check] -> + match expr with + | Lfunction({ attr = { stub = false } as attr } as funct) -> + begin match get_check_attribute attributes with + | Default_check -> expr + | (Assert _ | Assume _) as check -> begin match attr.check with | Default_check -> () | Assert Noalloc | Assume Noalloc -> @@ -381,15 +378,8 @@ let add_check_attribute expr loc attributes = end; let attr = { attr with check } in lfunction_with_attr ~attr funct - | expr, [check] -> - Location.prerr_warning loc - (Warnings.Misplaced_attribute (to_string check)); - expr - | expr, a::b::_ -> - Location.prerr_warning loc - (Warnings.Duplicated_attribute - (Printf.sprintf "%s/%s"(to_string a) (to_string b))); - expr + end + | expr -> expr let add_loop_attribute expr loc attributes = match expr with @@ -424,9 +414,11 @@ let add_tmc_attribute expr loc attributes = | _ -> expr let add_poll_attribute expr loc attributes = - match expr, get_poll_attribute attributes with - | expr, Default_poll -> expr - | Lfunction({ attr = { stub = false } as attr } as funct), poll -> + match expr with + | Lfunction({ attr = { stub = false } as attr } as funct) -> + begin match get_poll_attribute attributes with + | Default_poll -> expr + | Error_poll as poll -> begin match attr.poll with | Default_poll -> () | Error_poll -> @@ -438,10 +430,8 @@ let add_poll_attribute expr loc attributes = check_poll_local loc attr; let attr = { attr with inline = Never_inline; local = Never_local } in lfunction_with_attr ~attr funct - | expr, Error_poll -> - Location.prerr_warning loc - (Warnings.Misplaced_attribute "error_poll"); - expr + end + | expr -> expr (* Get the [@inlined] attribute payload (or default if not present). *) let get_inlined_attribute e = diff --git a/lambda/translclass.ml b/lambda/translclass.ml index d64a847d6d3b..4ae5e29887ce 100644 --- a/lambda/translclass.ml +++ b/lambda/translclass.ml @@ -86,7 +86,7 @@ let transl_meth_list lst = (0, List.map (fun lab -> Const_immstring lab) lst)) let set_inst_var ~scopes obj id expr = - Lprim(Psetfield_computed (Typeopt.maybe_pointer expr, Assignment alloc_heap), + Lprim(Psetfield_computed (Typeopt.maybe_pointer expr, Assignment modify_heap), [Lvar obj; Lvar id; transl_exp ~scopes expr], Loc_unknown) let transl_val tbl create name = @@ -135,8 +135,8 @@ let create_object cl obj init = let name_pattern default p = match p.pat_desc with - | Tpat_var (id, _) -> id - | Tpat_alias(_, id, _) -> id + | Tpat_var (id, _, _) -> id + | Tpat_alias(_, id, _, _) -> id | _ -> Ident.create_local default let rec build_object_init ~scopes cl_table obj params inh_init obj_init cl = @@ -770,7 +770,7 @@ let transl_class ~scopes ids cl_id pub_meths cl vflag = let env1 = Ident.create_local "env" and env1' = Ident.create_local "env'" in let copy_env self = if top then lambda_unit else - Lifused(env2, Lprim(Psetfield_computed (Pointer, Assignment alloc_heap), + Lifused(env2, Lprim(Psetfield_computed (Pointer, Assignment modify_heap), [Lvar self; Lvar env2; Lvar env1'], Loc_unknown)) and subst_env envs l lam = @@ -921,7 +921,7 @@ let transl_class ~scopes ids cl_id pub_meths cl vflag = inh_keys, Loc_unknown)]), lam) and lset cached i lam = - Lprim(Psetfield(i, Pointer, Assignment alloc_heap), + Lprim(Psetfield(i, Pointer, Assignment modify_heap), [Lvar cached; lam], Loc_unknown) in let ldirect () = diff --git a/lambda/translcomprehension.ml b/lambda/translcomprehension.ml deleted file mode 100644 index eab804fed578..000000000000 --- a/lambda/translcomprehension.ml +++ /dev/null @@ -1,555 +0,0 @@ -open Lambda -open Typedtree -open Asttypes - -let int n = Lconst (Const_base (Const_int n)) - -type let_kind_or_mut = - | Mutlet - | Let of let_kind - -type binding = - { let_kind : let_kind_or_mut; - value_kind : value_kind; - var : Ident.t; - init : lambda } - -let binding let_kind value_kind var init = - {let_kind=Let let_kind; value_kind; var; init} - -let binding_mut value_kind var init = - {let_kind=Mutlet; value_kind; var; init} - -let gen_binding {let_kind; value_kind; var; init} body = - match let_kind with - | Let let_kind -> - Llet(let_kind, value_kind, var, init, body) - | Mutlet -> - Lmutlet(value_kind, var, init, body) - -let gen_bindings bindings body = - List.fold_right gen_binding bindings body - -let valuekind_of_arraykind = function - | Pgenarray -> Pgenval - | Paddrarray | Pintarray -> Pintval - | Pfloatarray -> Pfloatval - -(* Pgenarray results in a mutable variable that should be referenced with - Lmutvar *) -let array_var ~kind array = - match kind with - | Pgenarray -> Lmutvar array - | (Pintarray | Paddrarray | Pfloatarray) -> Lvar array - -(* Translate a clause into some initialising bindings, a variable - that will be bound to the number of iterations in the clause by - those bindings, and lambda code that performs the iterations. *) -let transl_arr_clause ~transl_exp ~scopes ~loc clause body = - let len_var = Ident.create_local "len_var" in - let bindings, for_ = - match clause with - | In (pat , e2) -> - let in_var = Ident.create_local "in_var" in - let in_kind = Typeopt.array_kind e2 in - let in_binding = - binding Strict Pgenval in_var (transl_exp ~scopes e2) - in - let len_binding = - let init = Lprim( (Parraylength(in_kind)), [Lvar(in_var)], loc) in - binding Alias Pintval len_var init - in - let index = Ident.create_local "index" in - let for_ = Lfor { - for_id = index; - for_from = int 0; - for_to = Lprim(Psubint, [Lvar(len_var); int 1], loc); - for_dir = Upto; - for_body = - Matching.for_let ~scopes pat.pat_loc - (Lprim(Parrayrefu(in_kind), - [Lvar(in_var); Lvar(index)], loc)) - pat (valuekind_of_arraykind in_kind) body; - for_region = true - } - in - [in_binding; len_binding], for_ - | From_to(id, _, e2, e3, dir) -> - let from_var = Ident.create_local "from" in - let from_binding = - binding Strict Pintval from_var (transl_exp ~scopes e2) - in - let to_var = Ident.create_local "to" in - let to_binding = - binding Strict Pintval to_var (transl_exp ~scopes e3) - in - let low, high = - match dir with - | Upto -> Lvar from_var, Lvar to_var - | Downto -> Lvar to_var, Lvar from_var - in - let len_binding = - let init = - Lprim(Psubint, [Lprim(Paddint, [high; int 1], loc); low], loc) - in - binding Alias Pintval len_var init - in - let for_ = Lfor { - for_id = id; - for_from = Lvar from_var; - for_to = Lvar to_var; - for_dir = dir; - for_body = body; - for_region = true - } - in - [from_binding; to_binding; len_binding], for_ - in - bindings, len_var, for_ - -(* Generate code to iterate over a comprehension block, along with some - initialising bindings. The bindings will also bind the given - [length_var] ident to the total number of iterations in the - block. *) -let iterate_arr_block ~transl_exp ~loc ~scopes - {clauses; guard} length_var body = - let body = - match guard with - | None -> body - | Some guard -> - Lifthenelse(transl_exp ~scopes guard, body, lambda_unit, Pintval) - in - let body, length_opt, bindings = - List.fold_left - (fun (body, length, bindings) clause -> - let new_bindings, new_length_var, body = - transl_arr_clause ~transl_exp ~scopes ~loc clause body - in - let rev_bindings = new_bindings @ bindings in - let length = - match length with - | None -> Lvar new_length_var - | Some length -> - Lprim(Pmulint, [Lvar new_length_var; length], loc) - in - body, Some length, rev_bindings) - (body, None, []) clauses - in - let length = Option.value length_opt ~default:(int 0) in - let length_binding = binding Alias Pintval length_var length in - let bindings = List.append bindings [length_binding] in - bindings, body - -let make_array_prim ~loc size init = - let prim = - Primitive.simple ~name:"caml_make_vect" ~arity:2 ~alloc:true - in - Lprim (Pccall prim, [size; init], loc) - -let make_floatarray_prim ~loc size = - let prim = - Primitive.simple ~name:"caml_make_float_vect" ~arity:1 ~alloc:true - in - Lprim (Pccall prim, [size], loc) - -let blit_array_prim ~loc src src_pos dst dst_pos len = - let prim_blit_arr = - Primitive.simple ~name:"caml_array_blit" ~arity:5 ~alloc:true - in - Lprim (Pccall prim_blit_arr, [src; src_pos; dst; dst_pos; len], loc) - -(* Generate binding to make an "uninitialized" array *) -let make_array ~loc ~kind ~size ~array = - match kind with - | Pgenarray -> - (* This array can be Immutable since it is empty and will later be - replaced when an example value (to create the array) is known. - That is also why the biding is a Variable. *) - let init = Lprim(Pmakearray(Pgenarray, Immutable, alloc_heap), [], loc) in - binding_mut Pgenval array init - | Pintarray | Paddrarray -> - let init = make_array_prim ~loc size (int 0) in - binding Strict Pgenval array init - | Pfloatarray -> - let init = make_floatarray_prim ~loc size in - binding Strict Pgenval array init - -(* Generate code to initialise an element of an "uninitialised" array *) -let init_array_elem ~loc ~kind ~size ~array ~index ~value = - let set_elem = - Lprim(Parraysetu kind, [array_var ~kind array; Lvar index; Lvar value], loc) - in - match kind with - | Pgenarray -> - let is_first_iteration = - Lprim(Pintcomp Ceq, [Lvar index; int 0], loc) - in - let make_array = - Lassign(array, make_array_prim ~loc size (Lvar value)) - in - Lifthenelse(is_first_iteration, make_array, set_elem, Pintval) - | Pintarray | Paddrarray | Pfloatarray -> set_elem - -(* Generate code to blit elements into an "uninitialised" array *) -let init_array_elems ~loc ~kind ~size ~array ~index ~src ~len = - let array_var = array_var ~kind array in - let blit = - blit_array_prim ~loc (Lvar src) (int 0) array_var (Lmutvar index) (Lvar len) - in - match kind with - | Pgenarray -> - let is_first_iteration = - Lprim(Pintcomp Ceq, [Lmutvar index; int 0], loc) - in - let is_not_empty = - Lprim(Pintcomp(Cne), [Lvar len; int 0], loc) - in - let first_elem = - Lprim(Parrayrefu kind, [Lvar src; int 0], loc) - in - let make_array = - Lassign(array, make_array_prim ~loc size first_elem) - in - Lsequence( - Lifthenelse(is_first_iteration, - Lifthenelse(is_not_empty, make_array, lambda_unit, Pintval), - lambda_unit, Pintval), - blit) - | Pintarray | Paddrarray | Pfloatarray -> blit - -(* Binding for a counter *) -let make_counter counter = - binding_mut Pintval counter (int 0) - -(* Code to increment a counter *) -let increment_counter ~loc counter step = - Lassign(counter, Lprim(Paddint, [Lmutvar counter; step], loc)) - -type block_lambda = - | Without_size of { body : lambda } - | With_size of { body : lambda; raise_count: int } - -let transl_arr_block ~transl_exp ~loc ~scopes - global_counter body array_kind value_kind block = - let length_var = Ident.create_local "len" in - let size = - match body with - | Without_size _ -> Lvar length_var - | With_size _ -> Lprim(Pmulint, [Lvar length_var; int 2], loc) - in - let result_array_name = Ident.create_local "arr" in - let result_array_var = array_var ~kind:array_kind result_array_name in - let result_array_binding = - make_array ~loc ~kind:array_kind ~size ~array:result_array_name - in - let counter_var = Ident.create_local "counter" in - let counter_binding = make_counter counter_var in - let elem_var = Ident.create_local "elem" in - let init_elem = - init_array_elem ~loc ~kind:array_kind ~size - ~array:result_array_name ~index:counter_var ~value:elem_var - in - let set_result = - match body with - | Without_size {body} -> - Llet(Strict, value_kind, elem_var, body, - Lsequence(init_elem, increment_counter ~loc counter_var (int 1))) - | With_size {body; raise_count} -> - let elem_len_var = Ident.create_local "len" in - let set_len = - Lprim(Parraysetu Paddrarray, - [result_array_var; - Lprim(Paddint, [Lmutvar counter_var; int 1], loc); - Lvar elem_len_var], loc) - in - Lstaticcatch(body, - (raise_count, [(elem_var, Pgenval); (elem_len_var, Pintval)]), - Lsequence(init_elem, Lsequence(set_len, - increment_counter ~loc counter_var (int 2))), Pintval) - in - let bindings, loops = - iterate_arr_block ~transl_exp ~loc ~scopes block length_var set_result - in - let bindings = - bindings @ [result_array_binding; counter_binding] - in - let body = - match global_counter with - | None -> loops - | Some global_counter_var -> - let len = - match body with - | Without_size _ -> Lmutvar counter_var - | With_size _ -> - Lprim(Pdivint Unsafe, [Lmutvar counter_var; int 2], loc) - in - Lsequence(loops, increment_counter ~loc global_counter_var len) - in - match block.guard with - | None -> - let body = - gen_bindings bindings (Lsequence(body, result_array_var)) - in - Without_size { body } - | Some _ -> - let raise_count = next_raise_count () in - let return = - Lstaticraise(raise_count, [result_array_var; Lmutvar counter_var]) - in - let body = - gen_bindings bindings (Lsequence(body, return)) - in - With_size { body; raise_count } - -let sub_array ~loc src src_pos len = - let prim = - Primitive.simple ~name:"caml_array_sub" ~arity:3 ~alloc:true - in - Lprim (Pccall prim, [src; src_pos; len], loc) - -let transl_single_arr_block ~transl_exp ~loc ~scopes - block body array_kind value_kind = - let body = - transl_arr_block ~transl_exp ~loc ~scopes None - (Without_size {body}) array_kind value_kind block - in - match body with - | Without_size { body } -> body - | With_size { body; raise_count } -> - let array_var = Ident.create_local "array" in - let len_var = Ident.create_local "len" in - Lstaticcatch(body, - (raise_count, [(array_var, Pgenval); (len_var, Pintval)]), - sub_array ~loc (Lvar array_var) (int 0) (Lvar len_var), Pintval) - -type intermediate_array_shape = - | Array_of_elements - | Array_of_arrays of intermediate_array_shape - | Array_of_filtered_arrays of intermediate_array_shape - -let concat_arrays ~loc arr kind shape global_count_var = - let res_name = Ident.create_local "res" in - let res_var = array_var ~kind res_name in - let res_binding = - make_array ~loc ~kind ~size:(Lmutvar global_count_var) ~array:res_name - in - let counter_var = Ident.create_local "counter" in - let counter_binding = make_counter counter_var in - let rec loop shape arr_var len_var = - let kind = - match shape with - | Array_of_elements -> kind - | Array_of_arrays _ | Array_of_filtered_arrays _ -> Paddrarray - in - let len_var, bindings = - match len_var with - | Some var -> var, [] - | None -> - let var = Ident.create_local "len" in - let init = Lprim((Parraylength kind), [Lvar(arr_var)], loc) in - let binding = binding Alias Pintval var init in - var, [binding] - in - match shape with - | Array_of_elements -> - gen_bindings bindings - (Lsequence( - init_array_elems ~loc ~kind ~size:(Lmutvar global_count_var) - ~array:res_name ~index:counter_var ~src:arr_var ~len:len_var, - increment_counter ~loc counter_var (Lvar len_var))) - | Array_of_arrays shape -> - let index_var = Ident.create_local "index" in - let sub_arr_var = Ident.create_local "arr" in - let last_index = Lprim(Psubint, [Lvar len_var; int 1], loc) in - let sub_arr = - Lprim(Parrayrefu kind, [Lvar arr_var; Lvar index_var], loc) - in - gen_bindings bindings (Lfor { - for_id = index_var; - for_from = int 0; - for_to = last_index; - for_dir = Upto; - for_body = Llet(Strict, Pgenval, sub_arr_var, sub_arr, - loop shape sub_arr_var None); - for_region = true }) - | Array_of_filtered_arrays shape -> - let index_var = Ident.create_local "index" in - let index_binding = make_counter index_var in - let sub_arr_var = Ident.create_local "arr" in - let sub_arr = - Lprim(Parrayrefu kind, [Lvar arr_var; Lvar index_var], loc) - in - let sub_arr_len_var = Ident.create_local "len" in - let sub_arr_len = - Lprim(Parrayrefu kind, - [Lvar arr_var; Lprim(Paddint, [Lvar index_var; int 1], loc)], loc) - in - gen_bindings bindings - (gen_binding index_binding - (Lwhile - {wh_cond = Lprim(Pintcomp Clt, [Lvar index_var; Lvar len_var], - loc); - wh_cond_region = true; - wh_body = - Lsequence( - Llet(Strict, Pgenval, sub_arr_var, sub_arr, - Llet(Strict, Pintval, sub_arr_len_var, sub_arr_len, - loop shape sub_arr_var (Some sub_arr_len_var))), - increment_counter ~loc index_var (int 2)); - wh_body_region = true})) - in - match arr with - | Without_size { body } -> - let array_var = Ident.create_local "array" in - Llet(Strict, Pgenval, array_var, body, - gen_binding res_binding - (gen_binding counter_binding - (Lsequence - (loop shape array_var None, - res_var)))) - | With_size { body; raise_count } -> - let array_var = Ident.create_local "array" in - let len_var = Ident.create_local "len" in - Lstaticcatch(body, - (raise_count, [(array_var, Pgenval); (len_var, Pintval)]), - gen_binding res_binding - (gen_binding counter_binding - ((Lsequence - (loop shape array_var (Some len_var), - res_var)))), Pgenval) - -let transl_arr_comprehension ~transl_exp ~loc ~scopes - ~array_kind exp blocks = - let body = transl_exp ~scopes exp in - let value_kind = Typeopt.value_kind exp.exp_env exp.exp_type in - match blocks with - | [] -> assert false - | [block] -> - transl_single_arr_block ~transl_exp ~loc ~scopes - block body array_kind value_kind - | inner_block :: rest -> - let counter_var = Ident.create_local "counter" in - let counter_binding = make_counter counter_var in - let body = - transl_arr_block ~transl_exp ~loc ~scopes (Some counter_var) - (Without_size {body}) array_kind value_kind inner_block - in - let shape, body = - List.fold_left - (fun (shape, body) block -> - let shape = - match body with - | Without_size _ -> Array_of_arrays shape - | With_size _ -> Array_of_filtered_arrays shape - in - let body = - transl_arr_block ~transl_exp ~loc ~scopes None - body Paddrarray Pgenval block - in - shape, body) - (Array_of_elements, body) rest - in - gen_binding counter_binding - (concat_arrays ~loc body array_kind shape counter_var) - -let from_to_comp_prim ~dir= - let function_name = match dir with - | Upto -> "map_from_to_cons" - | Downto -> "map_from_downto_cons" - in - Lambda.transl_prim "CamlinternalComprehension" function_name - -let in_comp_prim () = Lambda.transl_prim "CamlinternalComprehension" "map_cons" - -let comp_rev () = Lambda.transl_prim "CamlinternalComprehension" "rev" - -let transl_list_comp type_comp body acc_var mats ~transl_exp ~scopes ~loc = - let new_acc = Ident.create_local "acc" in - let param, pval, args, func, body, mats = - match type_comp with - | From_to (param, _,e2,e3, dir) -> - let pval = Pintval in - let from_var = Ident.create_local "from" in - let to_var = Ident.create_local "to_" in - let args = [Lvar(from_var); Lvar(to_var); Lvar(new_acc)] in - let func = from_to_comp_prim ~dir in - let mats = - (from_var, transl_exp ~scopes e2)::(to_var, transl_exp ~scopes e3)::mats - in - param, pval, args, func, body, mats - | In (pat, in_) -> - let pat_id = Ident.create_local "pat" in - let pval = Typeopt.value_kind pat.pat_env pat.pat_type in - let in_var = Ident.create_local "in_var" in - let args = [Lvar(in_var); Lvar(new_acc)] in - let func = in_comp_prim () in - let body = - Matching.for_let ~scopes pat.pat_loc (Lvar(pat_id)) pat pval body - in - let mats = (in_var, transl_exp ~scopes in_)::mats in - pat_id , pval, args, func, body, mats - in - let fn = - lfunction - ~kind:(Curried {nlocal=0}) - ~params:[param, pval; acc_var, Pgenval] - ~return:Pgenval - ~attr:default_function_attribute - ~loc - ~body - ~mode:alloc_heap - ~region:true - in - Lapply{ - ap_loc=loc; - ap_region_close=Rc_normal; - ap_mode=alloc_heap; - ap_func=func; - ap_args= fn::args; - ap_tailcall=Default_tailcall; - ap_inlined=Default_inlined; - ap_specialised=Default_specialise; - ap_probe=None; - }, new_acc, mats - -let transl_list_comprehension ~transl_exp ~loc ~scopes body blocks = - let acc_var = Ident.create_local "acc" in - let value_kind = Typeopt.value_kind body.exp_env body.exp_type in - let bdy = - Lprim( - Pmakeblock(0, Immutable, None, alloc_heap), - [(transl_exp ~scopes body); Lvar(acc_var)], loc) - in - let res_list, res_var = List.fold_left - (fun (body, acc_var) block -> - let body = - match block.guard with - | None -> body - | Some guard -> - Lifthenelse((transl_exp ~scopes guard), body, Lvar(acc_var), value_kind) - in - let body, acc_var, materialize = - List.fold_left - (fun (body, acc_var, mats) el -> - transl_list_comp ~transl_exp ~scopes ~loc el body acc_var mats) - (body, acc_var, []) block.clauses - in - let body = List.fold_right (fun (id, arr) body -> - Llet(Strict, Pgenval, id, arr, body)) - materialize body - in - body, acc_var) - (bdy, acc_var) blocks - in - Llet(Alias, Pintval, res_var, int 0, (*Empty list.*) - Lapply{ - ap_loc=loc; - ap_func=comp_rev (); - ap_args=[res_list]; - ap_region_close=Rc_normal; - ap_mode=alloc_heap; - ap_tailcall=Default_tailcall; - ap_inlined=Default_inlined; - ap_specialised=Default_specialise; - ap_probe=None; - }) diff --git a/lambda/translcomprehension.mli b/lambda/translcomprehension.mli deleted file mode 100644 index 41065551e272..000000000000 --- a/lambda/translcomprehension.mli +++ /dev/null @@ -1,17 +0,0 @@ - -open Lambda -open Typedtree -open Debuginfo.Scoped_location - -val transl_arr_comprehension: - transl_exp:(scopes:scopes -> expression -> lambda) - -> loc:scoped_location -> scopes:scopes - -> array_kind:array_kind - -> expression -> comprehension list - -> lambda - -val transl_list_comprehension: - transl_exp:(scopes:scopes -> expression -> lambda) - -> loc:scoped_location -> scopes:scopes - -> expression -> comprehension list - -> lambda \ No newline at end of file diff --git a/lambda/translcore.ml b/lambda/translcore.ml index 33f7ee9fefd7..683a281561c8 100644 --- a/lambda/translcore.ml +++ b/lambda/translcore.ml @@ -23,6 +23,7 @@ open Types open Typedtree open Typeopt open Lambda +open Translmode open Debuginfo.Scoped_location type error = @@ -31,7 +32,7 @@ type error = exception Error of Location.t * error -let use_dup_for_constant_arrays_bigger_than = 4 +let use_dup_for_constant_mutable_arrays_bigger_than = 4 (* Forward declaration -- to be filled in by Translmod.transl_module *) let transl_module = @@ -93,15 +94,6 @@ let extract_float = function Const_base(Const_float f) -> f | _ -> fatal_error "Translcore.extract_float" -let transl_alloc_mode alloc_mode = - match Alloc_mode.constrain_lower alloc_mode with - | Global -> alloc_heap - | Local -> alloc_local - -let transl_exp_mode e = - let alloc_mode = Value_mode.regional_to_global_alloc e.exp_mode in - transl_alloc_mode alloc_mode - let transl_apply_position position = match position with | Default -> Rc_normal @@ -182,7 +174,7 @@ let rec trivial_pat pat = match pat.pat_desc with Tpat_var _ | Tpat_any -> true - | Tpat_alias (p, _, _) -> + | Tpat_alias (p, _, _, _) -> trivial_pat p | Tpat_construct (_, cd, [], _) -> not cd.cstr_generalized && cd.cstr_consts = 1 && cd.cstr_nonconsts = 0 @@ -190,23 +182,23 @@ let rec trivial_pat pat = List.for_all trivial_pat patl | _ -> false -let rec push_defaults loc bindings use_lhs cases partial warnings = +let rec push_defaults loc bindings use_lhs arg_mode cases partial warnings = match cases with [{c_lhs=pat; c_guard=None; c_rhs={exp_desc = Texp_function { arg_label; param; cases; partial; - region; curry; warnings } } + region; curry; warnings; arg_mode; alloc_mode } } as exp}] when bindings = [] || trivial_pat pat -> - let cases = push_defaults exp.exp_loc bindings false cases partial warnings in + let cases = push_defaults exp.exp_loc bindings false arg_mode cases partial warnings in [{c_lhs=pat; c_guard=None; c_rhs={exp with exp_desc = Texp_function { arg_label; param; cases; - partial; region; curry; warnings }}}] + partial; region; curry; warnings; arg_mode; alloc_mode }}}] | [{c_lhs=pat; c_guard=None; c_rhs={exp_attributes=[{Parsetree.attr_name = {txt="#default"};_}]; exp_desc = Texp_let (Nonrecursive, binds, ({exp_desc = Texp_function _} as e2))}}] -> push_defaults loc (Bind_value binds :: bindings) true - [{c_lhs=pat;c_guard=None;c_rhs=e2}] + arg_mode [{c_lhs=pat;c_guard=None;c_rhs=e2}] partial warnings | [{c_lhs=pat; c_guard=None; c_rhs={exp_attributes=[{Parsetree.attr_name = {txt="#modulepat"};_}]; @@ -214,19 +206,20 @@ let rec push_defaults loc bindings use_lhs cases partial warnings = (Some id, name, pres, mexpr, ({exp_desc = Texp_function _} as e2))}}] -> push_defaults loc (Bind_module (id, name, pres, mexpr) :: bindings) true - [{c_lhs=pat;c_guard=None;c_rhs=e2}] + arg_mode [{c_lhs=pat;c_guard=None;c_rhs=e2}] partial warnings | [{c_lhs=pat; c_guard=None; c_rhs=exp} as case] when use_lhs || trivial_pat pat && exp.exp_desc <> Texp_unreachable -> [{case with c_rhs = wrap_bindings bindings exp}] | {c_lhs=pat; c_rhs=exp; c_guard=_} :: _ when bindings <> [] -> + let mode = Value_mode.of_alloc arg_mode in let param = Typecore.name_cases "param" cases in let desc = {val_type = pat.pat_type; val_kind = Val_reg; val_attributes = []; Types.val_loc = Location.none; val_uid = Types.Uid.internal_not_actually_unique; } in - let env = Env.add_value param desc exp.exp_env in + let env = Env.add_value ~mode param desc exp.exp_env in let name = Ident.name param in let exp = let cases = @@ -241,7 +234,7 @@ let rec push_defaults loc bindings use_lhs cases partial warnings = desc, Id_value)}, cases, partial) } in - [{c_lhs = {pat with pat_desc = Tpat_var (param, mknoloc name)}; + [{c_lhs = {pat with pat_desc = Tpat_var (param, mknoloc name, mode)}; c_guard = None; c_rhs= wrap_bindings bindings exp}] | _ -> cases @@ -298,16 +291,15 @@ let rec cut n l = let rec iter_exn_names f pat = match pat.pat_desc with - | Tpat_var (id, _) -> f id - | Tpat_alias (p, id, _) -> + | Tpat_var (id, _, _) -> f id + | Tpat_alias (p, id, _, _) -> f id; iter_exn_names f p | _ -> () let transl_ident loc env ty path desc kind = match desc.val_kind, kind with - | Val_prim p, Id_prim pmode -> - let poly_mode = Option.map transl_alloc_mode pmode in + | Val_prim p, Id_prim poly_mode -> Translprim.transl_primitive loc p env ty ~poly_mode (Some path) | Val_anc _, Id_value -> raise(Error(to_location loc, Free_super_var)) @@ -362,15 +354,15 @@ and transl_exp0 ~in_new_scope ~scopes e = transl_let ~scopes rec_flag pat_expr_list body_kind (event_before ~scopes body (transl_exp ~scopes body)) | Texp_function { arg_label = _; param; cases; partial; - region; curry; warnings } -> + region; curry; warnings; arg_mode; alloc_mode } -> let scopes = if in_new_scope then scopes else enter_anonymous_function ~scopes in - transl_function ~scopes e param cases partial warnings region curry + transl_function ~scopes e alloc_mode param arg_mode cases partial warnings region curry | Texp_apply({ exp_desc = Texp_ident(path, _, {val_kind = Val_prim p}, Id_prim pmode); - exp_type = prim_type } as funct, oargs, pos) + exp_type = prim_type; } as funct, oargs, pos, alloc_mode) when can_apply_primitive p pmode pos oargs -> let argl, extra_args = cut p.prim_arity oargs in let arg_exps = @@ -382,10 +374,9 @@ and transl_exp0 ~in_new_scope ~scopes e = if extra_args = [] then transl_apply_position pos else Rc_normal in - let prim_mode = Option.map transl_alloc_mode pmode in let lam = Translprim.transl_primitive_application - (of_location ~scopes e.exp_loc) p e.exp_env prim_type prim_mode + (of_location ~scopes e.exp_loc) p e.exp_env prim_type pmode path prim_exp args arg_exps position in if extra_args = [] then lam @@ -393,20 +384,18 @@ and transl_exp0 ~in_new_scope ~scopes e = let tailcall = Translattribute.get_tailcall_attribute funct in let inlined = Translattribute.get_inlined_attribute funct in let specialised = Translattribute.get_specialised_attribute funct in - let e = { e with exp_desc = Texp_apply(funct, oargs, pos) } in let position = transl_apply_position pos in - let mode = transl_exp_mode e in + let mode = transl_alloc_mode alloc_mode in event_after ~scopes e (transl_apply ~scopes ~tailcall ~inlined ~specialised ~position ~mode lam extra_args (of_location ~scopes e.exp_loc)) end - | Texp_apply(funct, oargs, position) -> + | Texp_apply(funct, oargs, position, alloc_mode) -> let tailcall = Translattribute.get_tailcall_attribute funct in let inlined = Translattribute.get_inlined_attribute funct in let specialised = Translattribute.get_specialised_attribute funct in - let e = { e with exp_desc = Texp_apply(funct, oargs, position) } in let position = transl_apply_position position in - let mode = transl_exp_mode e in + let mode = transl_alloc_mode alloc_mode in event_after ~scopes e (transl_apply ~scopes ~tailcall ~inlined ~specialised ~position ~mode (transl_exp ~scopes funct) @@ -420,17 +409,17 @@ and transl_exp0 ~in_new_scope ~scopes e = Matching.for_trywith ~scopes k e.exp_loc (Lvar id) (transl_cases_try ~scopes pat_expr_list), Typeopt.value_kind e.exp_env e.exp_type) - | Texp_tuple el -> + | Texp_tuple (el, alloc_mode) -> let ll, shape = transl_list_with_shape ~scopes el in begin try Lconst(Const_block(0, List.map extract_constant ll)) with Not_constant -> Lprim(Pmakeblock(0, Immutable, Some shape, - transl_exp_mode e), + transl_alloc_mode alloc_mode), ll, (of_location ~scopes e.exp_loc)) end - | Texp_construct(_, cstr, args) -> + | Texp_construct(_, cstr, args, alloc_mode) -> let ll, shape = transl_list_with_shape ~scopes args in if cstr.cstr_inlined <> None then begin match ll with | [x] -> x @@ -445,7 +434,7 @@ and transl_exp0 ~in_new_scope ~scopes e = Lconst(Const_block(n, List.map extract_constant ll)) with Not_constant -> Lprim(Pmakeblock(n, Immutable, Some shape, - transl_exp_mode e), + transl_alloc_mode (Option.get alloc_mode)), ll, of_location ~scopes e.exp_loc) end @@ -455,7 +444,7 @@ and transl_exp0 ~in_new_scope ~scopes e = if is_const then lam else Lprim(Pmakeblock(0, Immutable, Some (Pgenval :: shape), - transl_exp_mode e), + transl_alloc_mode (Option.get alloc_mode)), lam :: ll, of_location ~scopes e.exp_loc) end | Texp_extension_constructor (_, path) -> @@ -464,22 +453,22 @@ and transl_exp0 ~in_new_scope ~scopes e = let tag = Btype.hash_variant l in begin match arg with None -> Lconst(const_int tag) - | Some arg -> + | Some (arg, alloc_mode) -> let lam = transl_exp ~scopes arg in try Lconst(Const_block(0, [const_int tag; extract_constant lam])) with Not_constant -> Lprim(Pmakeblock(0, Immutable, None, - transl_exp_mode e), + transl_alloc_mode alloc_mode), [Lconst(const_int tag); lam], of_location ~scopes e.exp_loc) end - | Texp_record {fields; representation; extended_expression} -> + | Texp_record {fields; representation; extended_expression; alloc_mode} -> transl_record ~scopes e.exp_loc e.exp_env - (transl_exp_mode e) + (Option.map transl_alloc_mode alloc_mode) fields representation extended_expression - | Texp_field(arg, _, lbl) -> + | Texp_field(arg, _, lbl, alloc_mode) -> let targ = transl_exp ~scopes arg in let sem = match lbl.lbl_mut with @@ -492,17 +481,16 @@ and transl_exp0 ~in_new_scope ~scopes e = of_location ~scopes e.exp_loc) | Record_unboxed _ -> targ | Record_float -> - let mode = transl_exp_mode e in + let mode = transl_alloc_mode (Option.get alloc_mode) in Lprim (Pfloatfield (lbl.lbl_pos, sem, mode), [targ], of_location ~scopes e.exp_loc) | Record_extension _ -> Lprim (Pfield (lbl.lbl_pos + 1, sem), [targ], of_location ~scopes e.exp_loc) end - | Texp_setfield(arg, _, lbl, newval) -> + | Texp_setfield(arg, arg_mode, _, lbl, newval) -> let mode = - let arg_mode = Value_mode.regional_to_local_alloc arg.exp_mode in - Assignment (transl_alloc_mode arg_mode) + Assignment (transl_modify_mode arg_mode) in let access = match lbl.lbl_repres with @@ -516,47 +504,58 @@ and transl_exp0 ~in_new_scope ~scopes e = in Lprim(access, [transl_exp ~scopes arg; transl_exp ~scopes newval], of_location ~scopes e.exp_loc) - | Texp_array expr_list -> + | Texp_array (amut, expr_list, alloc_mode) -> + let mode = transl_alloc_mode alloc_mode in let kind = array_kind e in let ll = transl_list ~scopes expr_list in - let mode = transl_exp_mode e in + let loc = of_location ~scopes e.exp_loc in + let makearray mutability = + Lprim (Pmakearray (kind, mutability, mode), ll, loc) + in + let duparray_to_mutable array = + Lprim (Pduparray (kind, Mutable), [array], loc) + in + let imm_array = makearray Immutable in + let lambda_arr_mut : Lambda.mutable_flag = + match (amut : Asttypes.mutable_flag) with + | Mutable -> Mutable + | Immutable -> Immutable + in begin try (* For native code the decision as to which compilation strategy to use is made later. This enables the Flambda passes to lift certain kinds of array definitions to symbols. *) (* Deactivate constant optimization if array is small enough *) - if List.length ll <= use_dup_for_constant_arrays_bigger_than + if amut = Asttypes.Mutable && + List.length ll <= use_dup_for_constant_mutable_arrays_bigger_than then begin raise Not_constant end; (* Pduparray only works in Alloc_heap mode *) if is_local_mode mode then raise Not_constant; begin match List.map extract_constant ll with - | exception Not_constant when kind = Pfloatarray -> - (* We cannot currently lift [Pintarray] arrays safely in Flambda - because [caml_modify] might be called upon them (e.g. from - code operating on polymorphic arrays, or functions such as - [caml_array_blit]. - To avoid having different Lambda code for - bytecode/Closure vs. Flambda, we always generate - [Pduparray] here, and deal with it in [Bytegen] (or in - the case of Closure, in [Cmmgen], which already has to - handle [Pduparray Pmakearray Pfloatarray] in the case - where the array turned out to be inconstant). + | exception Not_constant + when kind = Pfloatarray && amut = Asttypes.Mutable -> + (* We cannot currently lift mutable [Pintarray] arrays safely in + Flambda because [caml_modify] might be called upon them + (e.g. from code operating on polymorphic arrays, or functions + such as [caml_array_blit]. + To avoid having different Lambda code for bytecode/Closure + vs. Flambda, we always generate [Pduparray] for mutable arrays + here, and deal with it in [Bytegen] (or in the case of Closure, + in [Cmmgen], which already has to handle [Pduparray Pmakearray + Pfloatarray] in the case where the array turned out to be + inconstant). When not [Pfloatarray], the exception propagates to the handler below. *) - let imm_array = - Lprim (Pmakearray (kind, Immutable, mode), ll, - of_location ~scopes e.exp_loc) - in - Lprim (Pduparray (kind, Mutable), [imm_array], - of_location ~scopes e.exp_loc) + duparray_to_mutable imm_array | cl -> - let imm_array = + let const = if Config.flambda2 then - Lprim (Pmakearray (kind, Immutable, mode), ll, - of_location ~scopes e.exp_loc) + imm_array else + (* CR aspectorzabusky: Do we construct things correctly in this + case? *) match kind with | Paddrarray | Pintarray -> Lconst(Const_block(0, cl)) @@ -565,13 +564,25 @@ and transl_exp0 ~in_new_scope ~scopes e = | Pgenarray -> raise Not_constant (* can this really happen? *) in - Lprim (Pduparray (kind, Mutable), [imm_array], - of_location ~scopes e.exp_loc) + match amut with + | Mutable -> duparray_to_mutable const + | Immutable -> const end with Not_constant -> - Lprim(Pmakearray (kind, Mutable, mode), ll, - of_location ~scopes e.exp_loc) + makearray lambda_arr_mut end + | Texp_list_comprehension comp -> + let loc = of_location ~scopes e.exp_loc in + Transl_list_comprehension.comprehension + ~transl_exp ~scopes ~loc comp + | Texp_array_comprehension (_amut, comp) -> + (* We can ignore mutability here since we've already checked in in the + type checker; both mutable and immutable arrays are created the same + way *) + let loc = of_location ~scopes e.exp_loc in + let array_kind = Typeopt.array_kind e in + Transl_array_comprehension.comprehension + ~transl_exp ~scopes ~loc ~array_kind comp | Texp_ifthenelse(cond, ifso, Some ifnot) -> Lifthenelse(transl_exp ~scopes cond, event_before ~scopes ifso (transl_exp ~scopes ifso), @@ -595,16 +606,6 @@ and transl_exp0 ~in_new_scope ~scopes e = (if wh_body_region then maybe_region body else body); wh_body_region; } - | Texp_arr_comprehension (body, blocks) -> - (*One block consists of comprehension statements connected by "and".*) - let loc = of_location ~scopes e.exp_loc in - let array_kind = Typeopt.array_kind e in - Translcomprehension.transl_arr_comprehension - body blocks ~array_kind ~scopes ~loc ~transl_exp - | Texp_list_comprehension (body, blocks) -> - let loc = of_location ~scopes e.exp_loc in - Translcomprehension.transl_list_comprehension - body blocks ~scopes ~loc ~transl_exp | Texp_for {for_id; for_from; for_to; for_dir; for_body; for_region} -> let body = transl_exp ~scopes for_body in Lfor { @@ -616,10 +617,10 @@ and transl_exp0 ~in_new_scope ~scopes e = (if for_region then maybe_region body else body); for_region; } - | Texp_send(expr, met, pos) -> + | Texp_send(expr, met, pos, alloc_mode) -> let lam = let pos = transl_apply_position pos in - let mode = transl_exp_mode e in + let mode = transl_alloc_mode alloc_mode in let loc = of_location ~scopes e.exp_loc in match met with | Tmeth_val id -> @@ -715,7 +716,7 @@ and transl_exp0 ~in_new_scope ~scopes e = transl_exp ~scopes body) | Texp_pack modl -> !transl_module ~scopes Tcoerce_none None modl - | Texp_assert {exp_desc=Texp_construct(_, {cstr_name="false"}, _)} -> + | Texp_assert {exp_desc=Texp_construct(_, {cstr_name="false"}, _, _)} -> assert_failed ~scopes e | Texp_assert (cond) -> if !Clflags.noassert @@ -731,7 +732,6 @@ and transl_exp0 ~in_new_scope ~scopes e = (* when e needs no computation (constants, identifiers, ...), we optimize the translation just as Lazy.lazy_from_val would do *) - assert (is_heap_mode (transl_exp_mode e)); begin match Typeopt.classify_lazy_argument e with | `Constant_or_function -> (* A constant expr (of type <> float if [Config.flat_float_array] is @@ -1182,12 +1182,12 @@ and transl_function0 in ((Curried {nlocal}, [param, kind], return, region), body) -and transl_function ~scopes e param cases partial warnings region curry = - let mode = transl_exp_mode e in +and transl_function ~scopes e alloc_mode param arg_mode cases partial warnings region curry = + let mode = transl_alloc_mode alloc_mode in let ((kind, params, return, region), body) = event_function ~scopes e (function repr -> - let pl = push_defaults e.exp_loc cases partial warnings in + let pl = push_defaults e.exp_loc arg_mode cases partial warnings in let return_kind = function_return_value_kind e.exp_env e.exp_type in transl_curried_function ~scopes e.exp_loc return_kind repr ~region ~curry partial warnings param pl) @@ -1196,7 +1196,19 @@ and transl_function ~scopes e param cases partial warnings region curry = let loc = of_location ~scopes e.exp_loc in let body = if region then maybe_region body else body in let lam = lfunction ~kind ~params ~return ~body ~attr ~loc ~mode ~region in - Translattribute.add_function_attributes lam e.exp_loc e.exp_attributes + let attrs = + (* Collect attributes from the Pexp_newtype node for locally abstract types. + Otherwise we'd ignore the attribute in, e.g.; + fun [@inline] (type a) x -> ... + *) + List.fold_left + (fun attrs (extra_exp, _, extra_attrs) -> + match extra_exp with + | Texp_newtype _ -> extra_attrs @ attrs + | (Texp_constraint _ | Texp_coerce _ | Texp_poly _) -> attrs) + e.exp_attributes e.exp_extra + in + Translattribute.add_function_attributes lam e.exp_loc attrs (* Like transl_exp, but used when a new scope was just introduced. *) and transl_scoped_exp ~scopes expr = @@ -1240,7 +1252,7 @@ and transl_let ~scopes ?(add_regions=false) ?(in_structure=false) let idlist = List.map (fun {vb_pat=pat} -> match pat.pat_desc with - Tpat_var (id,_) -> id + Tpat_var (id,_,_) -> id | _ -> assert false) pat_expr_list in let transl_case {vb_expr=expr; vb_attributes; vb_loc; vb_pat} id = @@ -1249,17 +1261,12 @@ and transl_let ~scopes ?(add_regions=false) ?(in_structure=false) Translattribute.add_function_attributes lam vb_loc vb_attributes in let lam = if add_regions then maybe_region lam else lam in - begin match transl_exp_mode expr, lam with - | Alloc_heap, _ -> () - | Alloc_local, Lfunction _ -> () - | _ -> Misc.fatal_error "transl_let: local recursive non-function" - end; (id, lam) in let lam_bds = List.map2 transl_case pat_expr_list idlist in fun body -> Lletrec(lam_bds, body) and transl_setinstvar ~scopes loc self var expr = - Lprim(Psetfield_computed (maybe_pointer expr, Assignment alloc_heap), + Lprim(Psetfield_computed (maybe_pointer expr, Assignment modify_heap), [self; var; transl_exp ~scopes expr], loc) and transl_record ~scopes loc env mode fields repres opt_init_expr = @@ -1267,7 +1274,11 @@ and transl_record ~scopes loc env mode fields repres opt_init_expr = (* Determine if there are "enough" fields (only relevant if this is a functional-style record update *) let no_init = match opt_init_expr with None -> true | _ -> false in - if no_init || size < Config.max_young_wosize || is_local_mode mode + let on_heap = match mode with + | None -> false (* unboxed is not on heap *) + | Some m -> is_heap_mode m + in + if no_init || size < Config.max_young_wosize || not on_heap then begin (* Allocate new record with given fields (and remaining fields taken from init_expr if any *) @@ -1321,15 +1332,15 @@ and transl_record ~scopes loc env mode fields repres opt_init_expr = let loc = of_location ~scopes loc in match repres with Record_regular -> - Lprim(Pmakeblock(0, mut, Some shape, mode), ll, loc) + Lprim(Pmakeblock(0, mut, Some shape, Option.get mode), ll, loc) | Record_inlined tag -> - Lprim(Pmakeblock(tag, mut, Some shape, mode), ll, loc) + Lprim(Pmakeblock(tag, mut, Some shape, Option.get mode), ll, loc) | Record_unboxed _ -> (match ll with [v] -> v | _ -> assert false) | Record_float -> - Lprim(Pmakefloatblock (mut, mode), ll, loc) + Lprim(Pmakefloatblock (mut, Option.get mode), ll, loc) | Record_extension path -> let slot = transl_extension_path loc env path in - Lprim(Pmakeblock(0, mut, Some (Pgenval :: shape), mode), + Lprim(Pmakeblock(0, mut, Some (Pgenval :: shape), Option.get mode), slot :: ll, loc) in begin match opt_init_expr with @@ -1350,14 +1361,14 @@ and transl_record ~scopes loc env mode fields repres opt_init_expr = Record_regular | Record_inlined _ -> let ptr = maybe_pointer expr in - Psetfield(lbl.lbl_pos, ptr, Assignment alloc_heap) + Psetfield(lbl.lbl_pos, ptr, Assignment modify_heap) | Record_unboxed _ -> assert false | Record_float -> - Psetfloatfield (lbl.lbl_pos, Assignment alloc_heap) + Psetfloatfield (lbl.lbl_pos, Assignment modify_heap) | Record_extension _ -> let pos = lbl.lbl_pos + 1 in let ptr = maybe_pointer expr in - Psetfield(pos, ptr, Assignment alloc_heap) + Psetfield(pos, ptr, Assignment modify_heap) in Lsequence(Lprim(upd, [Lvar copy_id; transl_exp ~scopes expr], of_location ~scopes loc), @@ -1366,7 +1377,7 @@ and transl_record ~scopes loc env mode fields repres opt_init_expr = begin match opt_init_expr with None -> assert false | Some init_expr -> - assert (is_heap_mode mode); (* Pduprecord must be Alloc_heap *) + assert (is_heap_mode (Option.get mode)); (* Pduprecord must be Alloc_heap and not unboxed *) Llet(Strict, Pgenval, copy_id, Lprim(Pduprecord (repres, size), [transl_exp ~scopes init_expr], of_location ~scopes loc), @@ -1453,12 +1464,12 @@ and transl_match ~scopes e arg pat_expr_list partial = in let classic = match arg, exn_cases with - | {exp_desc = Texp_tuple argl}, [] -> + | {exp_desc = Texp_tuple (argl, alloc_mode)}, [] -> assert (static_handlers = []); - let mode = transl_exp_mode arg in + let mode = transl_alloc_mode alloc_mode in Matching.for_multiple_match ~scopes kind e.exp_loc (transl_list ~scopes argl) mode val_cases partial - | {exp_desc = Texp_tuple argl}, _ :: _ -> + | {exp_desc = Texp_tuple (argl, alloc_mode)}, _ :: _ -> let val_ids = List.map (fun arg -> @@ -1468,7 +1479,7 @@ and transl_match ~scopes e arg pat_expr_list partial = argl in let lvars = List.map (fun (id, _) -> Lvar id) val_ids in - let mode = transl_exp_mode arg in + let mode = transl_alloc_mode alloc_mode in static_catch (transl_list ~scopes argl) val_ids (Matching.for_multiple_match ~scopes kind e.exp_loc lvars mode val_cases partial) diff --git a/lambda/translcore.mli b/lambda/translcore.mli index 72901a70fd70..1d14670e8085 100644 --- a/lambda/translcore.mli +++ b/lambda/translcore.mli @@ -43,8 +43,6 @@ val transl_extension_constructor: scopes:scopes -> val transl_scoped_exp : scopes:scopes -> expression -> lambda -val transl_alloc_mode : Types.alloc_mode -> Lambda.alloc_mode - type error = Free_super_var | Unreachable_reached diff --git a/lambda/translmod.ml b/lambda/translmod.ml index db6602023d29..840b5d604b1d 100644 --- a/lambda/translmod.ml +++ b/lambda/translmod.ml @@ -110,8 +110,7 @@ let rec apply_coercion loc strict restr arg = let carg = apply_coercion loc Alias cc_arg (Lvar param) in apply_coercion_result loc strict arg [param, Pgenval] [carg] cc_res | Tcoerce_primitive { pc_desc; pc_env; pc_type; pc_poly_mode } -> - let poly_mode = Option.map Translcore.transl_alloc_mode pc_poly_mode in - Translprim.transl_primitive loc pc_desc pc_env pc_type ~poly_mode None + Translprim.transl_primitive loc pc_desc pc_env pc_type ~poly_mode:pc_poly_mode None | Tcoerce_alias (env, path, cc) -> let lam = transl_module_path loc env path in name_lambda strict arg @@ -625,12 +624,8 @@ and transl_structure ~scopes loc fields cc rootpath final_env = function match cc with | Tcoerce_primitive p -> let loc = of_location ~scopes p.pc_loc in - let poly_mode = - Option.map - Translcore.transl_alloc_mode p.pc_poly_mode - in Translprim.transl_primitive - loc p.pc_desc p.pc_env p.pc_type ~poly_mode None + loc p.pc_desc p.pc_env p.pc_type ~poly_mode:p.pc_poly_mode None | _ -> apply_coercion loc Strict cc (get_field pos)) pos_cc_list, loc) and id_pos_list = @@ -1085,8 +1080,7 @@ let field_of_str loc str = fun (pos, cc) -> match cc with | Tcoerce_primitive { pc_desc; pc_env; pc_type; pc_poly_mode } -> - let poly_mode = Option.map Translcore.transl_alloc_mode pc_poly_mode in - Translprim.transl_primitive loc pc_desc pc_env pc_type ~poly_mode None + Translprim.transl_primitive loc pc_desc pc_env pc_type ~poly_mode:pc_poly_mode None | Tcoerce_alias (env, path, cc) -> let lam = transl_module_path loc env path in apply_coercion loc Alias cc lam @@ -1417,13 +1411,10 @@ let transl_store_structure ~scopes glob map prims aliases str = List.fold_right (add_ident may_coerce) idlist subst and store_primitive (pos, prim) cont = - let poly_mode = - Option.map Translcore.transl_alloc_mode prim.pc_poly_mode - in Lsequence(Lprim(mod_setfield pos, [Lprim(Pgetglobal glob, [], Loc_unknown); Translprim.transl_primitive Loc_unknown - prim.pc_desc prim.pc_env prim.pc_type ~poly_mode None], + prim.pc_desc prim.pc_env prim.pc_type ~poly_mode:prim.pc_poly_mode None], Loc_unknown), cont) diff --git a/lambda/translmode.ml b/lambda/translmode.ml new file mode 100644 index 000000000000..5b719f21eabb --- /dev/null +++ b/lambda/translmode.ml @@ -0,0 +1,11 @@ +open Types +open Lambda +let transl_alloc_mode alloc_mode = + match Alloc_mode.constrain_lower alloc_mode with + | Global -> alloc_heap + | Local -> alloc_local + +let transl_modify_mode alloc_mode = + match Alloc_mode.constrain_lower alloc_mode with + | Global -> modify_heap + | Local -> modify_maybe_stack \ No newline at end of file diff --git a/lambda/translmode.mli b/lambda/translmode.mli new file mode 100644 index 000000000000..1c84b4c6e24c --- /dev/null +++ b/lambda/translmode.mli @@ -0,0 +1,3 @@ +val transl_alloc_mode : Types.alloc_mode -> Lambda.alloc_mode + +val transl_modify_mode : Types.alloc_mode -> Lambda.modify_mode diff --git a/lambda/translprim.ml b/lambda/translprim.ml index a023b5567cec..5ba4ef79d94d 100644 --- a/lambda/translprim.ml +++ b/lambda/translprim.ml @@ -22,6 +22,7 @@ open Typedtree open Typeopt open Lambda open Debuginfo.Scoped_location +open Translmode type error = | Unknown_builtin_primitive of string @@ -122,11 +123,19 @@ let to_alloc_mode ~poly = function | Prim_poly, _ -> match poly with | None -> assert false - | Some mode -> mode + | Some mode -> transl_alloc_mode mode + +let to_modify_mode ~poly = function + | Prim_global, _ -> modify_heap + | Prim_local, _ -> modify_maybe_stack + | Prim_poly, _ -> + match poly with + | None -> assert false + | Some mode -> transl_modify_mode mode let lookup_primitive loc poly pos p = let mode = to_alloc_mode ~poly p.prim_native_repr_res in - let arg_modes = List.map (to_alloc_mode ~poly) p.prim_native_repr_args in + let arg_modes = List.map (to_modify_mode ~poly) p.prim_native_repr_args in let prim = match p.prim_name with | "%identity" -> Identity | "%bytes_to_string" -> Primitive (Pbytes_to_string, 1) @@ -759,8 +768,8 @@ let lambda_of_prim prim_name prim loc args arg_exps = let check_primitive_arity loc p = let mode = match p.prim_native_repr_res with - | Prim_global, _ | Prim_poly, _ -> Some alloc_heap - | Prim_local, _ -> Some alloc_local + | Prim_global, _ | Prim_poly, _ -> Some Alloc_mode.global + | Prim_local, _ -> Some Alloc_mode.local in let prim = lookup_primitive loc mode Rc_normal p in let ok = @@ -884,8 +893,8 @@ let transl_primitive_application loc p env ty mode path exp args arg_exps pos = in let has_constant_constructor = match arg_exps with - | [_; {exp_desc = Texp_construct(_, {cstr_tag = Cstr_constant _}, _)}] - | [{exp_desc = Texp_construct(_, {cstr_tag = Cstr_constant _}, _)}; _] + | [_; {exp_desc = Texp_construct(_, {cstr_tag = Cstr_constant _}, _, _)}] + | [{exp_desc = Texp_construct(_, {cstr_tag = Cstr_constant _}, _, _)}; _] | [_; {exp_desc = Texp_variant(_, None)}] | [{exp_desc = Texp_variant(_, None)}; _] -> true | _ -> false diff --git a/lambda/translprim.mli b/lambda/translprim.mli index 5f3c1cb8020a..999c15068177 100644 --- a/lambda/translprim.mli +++ b/lambda/translprim.mli @@ -35,13 +35,13 @@ val check_primitive_arity : val transl_primitive : Lambda.scoped_location -> Primitive.description -> Env.t -> Types.type_expr -> - poly_mode:Lambda.alloc_mode option -> + poly_mode:Types.alloc_mode option -> Path.t option -> Lambda.lambda val transl_primitive_application : Lambda.scoped_location -> Primitive.description -> Env.t -> - Types.type_expr -> Lambda.alloc_mode option -> Path.t -> + Types.type_expr -> Types.alloc_mode option -> Path.t -> Typedtree.expression option -> Lambda.lambda list -> Typedtree.expression list -> Lambda.region_close -> Lambda.lambda diff --git a/middle_end/printclambda_primitives.ml b/middle_end/printclambda_primitives.ml index 4106672000a6..bac2b5d2b2e5 100644 --- a/middle_end/printclambda_primitives.ml +++ b/middle_end/printclambda_primitives.ml @@ -84,8 +84,8 @@ let primitive ppf (prim:Clambda_primitives.primitive) = match init with | Heap_initialization -> "(heap-init)" | Root_initialization -> "(root-init)" - | Assignment Alloc_heap -> "" - | Assignment Alloc_local -> "(local)" + | Assignment Modify_heap -> "" + | Assignment Modify_maybe_stack -> "(maybe-stack)" in fprintf ppf "setfield_%s%s %i" instr init n | Psetfield_computed (ptr, init) -> @@ -98,8 +98,8 @@ let primitive ppf (prim:Clambda_primitives.primitive) = match init with | Heap_initialization -> "(heap-init)" | Root_initialization -> "(root-init)" - | Assignment Alloc_heap -> "" - | Assignment Alloc_local -> "(local)" + | Assignment Modify_heap -> "" + | Assignment Modify_maybe_stack -> "(maybe-stack)" in fprintf ppf "setfield_%s%s_computed" instr init | Pfloatfield (n, Alloc_heap) -> fprintf ppf "floatfield %i" n @@ -109,8 +109,8 @@ let primitive ppf (prim:Clambda_primitives.primitive) = match init with | Heap_initialization -> "(heap-init)" | Root_initialization -> "(root-init)" - | Assignment Alloc_heap -> "" - | Assignment Alloc_local -> "(local)" + | Assignment Modify_heap -> "" + | Assignment Modify_maybe_stack -> "(maybe-stack)" in fprintf ppf "setfloatfield%s %i" init n | Pduprecord (rep, size) -> diff --git a/ocamldoc/odoc_ast.ml b/ocamldoc/odoc_ast.ml index 7e2a10eaaa47..14343c2065ff 100644 --- a/ocamldoc/odoc_ast.ml +++ b/ocamldoc/odoc_ast.ml @@ -50,7 +50,7 @@ module Typedtree_search = let iter_val_pattern = function | Typedtree.Tpat_any -> None - | Typedtree.Tpat_var (name, _) -> Some (Name.from_ident name) + | Typedtree.Tpat_var (name, _, _) -> Some (Name.from_ident name) | Typedtree.Tpat_tuple _ -> None (* FIXME when we will handle tuples *) | _ -> None @@ -241,14 +241,14 @@ module Analyser = let tt_param_info_from_pattern env f_desc pat = let rec iter_pattern pat = match pat.pat_desc with - Typedtree.Tpat_var (ident, _) -> + Typedtree.Tpat_var (ident, _, _) -> let name = Name.from_ident ident in Simple_name { sn_name = name ; sn_text = f_desc name ; sn_type = Odoc_env.subst_type env pat.pat_type } - | Typedtree.Tpat_alias (pat, _, _) -> + | Typedtree.Tpat_alias (pat, _, _, _) -> iter_pattern pat | Typedtree.Tpat_tuple patlist -> @@ -306,7 +306,7 @@ module Analyser = ( ( match func_body.exp_desc with - Typedtree.Texp_let (_, {vb_pat={pat_desc = Typedtree.Tpat_var (id, _) }; + Typedtree.Texp_let (_, {vb_pat={pat_desc = Typedtree.Tpat_var (id, _, _) }; vb_expr=exp} :: _, func_body2) -> let name = Name.from_ident id in let new_param = Simple_name @@ -336,7 +336,7 @@ module Analyser = let tt_analyse_value env current_module_name comment_opt loc pat_exp rec_flag = let (pat, exp) = pat_exp in match (pat.pat_desc, exp.exp_desc) with - (Typedtree.Tpat_var (ident, _), Typedtree.Texp_function { cases = pat_exp_list2; _ }) -> + (Typedtree.Tpat_var (ident, _, _), Typedtree.Texp_function { cases = pat_exp_list2; _ }) -> (* a new function is defined *) let name_pre = Name.from_ident ident in let name = Name.parens_if_infix name_pre in @@ -361,7 +361,7 @@ module Analyser = in [ new_value ] - | (Typedtree.Tpat_var (ident, _), _) -> + | (Typedtree.Tpat_var (ident, _, _), _) -> (* a new value is defined *) let name_pre = Name.from_ident ident in let name = Name.parens_if_infix name_pre in @@ -465,7 +465,7 @@ module Analyser = ( ( match body.exp_desc with - Typedtree.Texp_let (_, {vb_pat={pat_desc = Typedtree.Tpat_var (id, _) }; + Typedtree.Texp_let (_, {vb_pat={pat_desc = Typedtree.Tpat_var (id, _, _) }; vb_expr=exp} :: _, body2) -> let name = Name.from_ident id in let new_param = Simple_name @@ -726,11 +726,11 @@ module Analyser = a default value. In this case, we look for the good parameter pattern *) let (parameter, next_tt_class_exp) = match pat.Typedtree.pat_desc with - Typedtree.Tpat_var (ident, _) when Name.from_ident ident = "*opt*" -> + Typedtree.Tpat_var (ident, _, _) when Name.from_ident ident = "*opt*" -> ( (* there must be a Tcl_let just after *) match tt_class_expr2.Typedtree.cl_desc with - Typedtree.Tcl_let (_, {vb_pat={pat_desc = Typedtree.Tpat_var (id,_) }; + Typedtree.Tcl_let (_, {vb_pat={pat_desc = Typedtree.Tpat_var (id,_,_) }; vb_expr=exp} :: _, _, tt_class_expr3) -> let name = Name.from_ident id in let new_param = Simple_name diff --git a/otherlibs/dynlink/Makefile b/otherlibs/dynlink/Makefile index 4a82710d9bec..d28757caa5fa 100644 --- a/otherlibs/dynlink/Makefile +++ b/otherlibs/dynlink/Makefile @@ -96,6 +96,9 @@ COMPILERLIBS_SOURCES=\ parsing/docstrings.ml \ parsing/syntaxerr.ml \ parsing/ast_helper.ml \ + parsing/extensions_parsing.ml \ + parsing/extensions.ml \ + parsing/ast_iterator.ml \ parsing/builtin_attributes.ml \ parsing/ast_mapper.ml \ parsing/attr_helper.ml \ diff --git a/otherlibs/dynlink/dune b/otherlibs/dynlink/dune index e4b237b6df25..15d19aaad6b4 100644 --- a/otherlibs/dynlink/dune +++ b/otherlibs/dynlink/dune @@ -41,6 +41,9 @@ longident docstrings syntaxerr + extensions_parsing + extensions + ast_iterator ast_helper ast_mapper attr_helper @@ -120,6 +123,9 @@ (copy_files ../../parsing/longident.ml) (copy_files ../../parsing/docstrings.ml) (copy_files ../../parsing/syntaxerr.ml) +(copy_files ../../parsing/extensions_parsing.ml) +(copy_files ../../parsing/extensions.ml) +(copy_files ../../parsing/ast_iterator.ml) (copy_files ../../parsing/ast_helper.ml) (copy_files ../../parsing/ast_mapper.ml) (copy_files ../../parsing/attr_helper.ml) @@ -172,6 +178,9 @@ (copy_files ../../parsing/longident.mli) (copy_files ../../parsing/docstrings.mli) (copy_files ../../parsing/syntaxerr.mli) +(copy_files ../../parsing/extensions_parsing.mli) +(copy_files ../../parsing/extensions.mli) +(copy_files ../../parsing/ast_iterator.mli) (copy_files ../../parsing/ast_helper.mli) (copy_files ../../parsing/ast_mapper.mli) (copy_files ../../parsing/attr_helper.mli) @@ -274,6 +283,9 @@ .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Persistent_env.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Docstrings.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_helper.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Extensions_parsing.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Extensions.cmo + .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Ast_iterator.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Builtin_attributes.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Type_immediacy.cmo .dynlink_compilerlibs.objs/byte/dynlink_compilerlibs__Attr_helper.cmo @@ -341,6 +353,9 @@ .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Persistent_env.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Docstrings.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_helper.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Extensions_parsing.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Extensions.cmx + .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Ast_iterator.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Builtin_attributes.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Type_immediacy.cmx .dynlink_compilerlibs.objs/native/dynlink_compilerlibs__Attr_helper.cmx diff --git a/parsing/ast_helper.mli b/parsing/ast_helper.mli index fb726f45130b..8e778e8c4330 100644 --- a/parsing/ast_helper.mli +++ b/parsing/ast_helper.mli @@ -57,10 +57,6 @@ end (** {1 Attributes} *) module Attr : sig - (** This should be used by all external tools (e.g., ppxs) to create - attributes. Inside the compiler, this should be used only when it is - known the attribute does not need to be tracked for misplaced attribute - warnings. Otherwise, use [Builtin_attributes.mk_internal]. *) val mk: ?loc:loc -> str -> payload -> attribute end diff --git a/parsing/ast_invariants.ml b/parsing/ast_invariants.ml index d9b83c0edd0b..b4322fec13a3 100644 --- a/parsing/ast_invariants.ml +++ b/parsing/ast_invariants.ml @@ -26,6 +26,7 @@ let empty_type loc = err loc "Type declarations cannot be empty." let complex_id loc = err loc "Functor application not allowed here." let module_type_substitution_missing_rhs loc = err loc "Module type substitution with no right hand side" +let empty_comprehension loc = err loc "Comprehension with no clauses" let simple_longident id = let rec is_simple = function @@ -70,6 +71,15 @@ let iterator = List.iter (fun (id, _) -> simple_longident id) fields | _ -> () in + let eexpr _self loc (eexp : Extensions.Expression.t) = + match eexp with + | Eexp_comprehension + ( Cexp_list_comprehension {clauses = []; body = _} + | Cexp_array_comprehension (_, {clauses = []; body = _}) ) + -> + empty_comprehension loc + | Eexp_comprehension _ | Eexp_immutable_array _ -> () + in let expr self exp = begin match exp.pexp_desc with | Pexp_construct (_, Some ({pexp_desc = Pexp_tuple _} as e)) @@ -79,6 +89,9 @@ let iterator = super.expr self exp end; let loc = exp.pexp_loc in + match Extensions.Expression.of_ast exp with + | Some eexp -> eexpr self exp.pexp_loc eexp + | None -> match exp.pexp_desc with | Pexp_tuple ([] | [_]) -> invalid_tuple loc | Pexp_record ([], _) -> empty_record loc @@ -170,6 +183,14 @@ let iterator = "In object types, attaching attributes to inherited \ subtypes is not allowed." in + let attribute self attr = + (* The change to `self` here avoids registering attributes within attributes + for the purposes of warning 53, while keeping all the other invariant + checks for attribute payloads. See comment on [attr_tracking_time] in + [builtin_attributes.mli]. *) + super.attribute { self with attribute = super.attribute } attr; + Builtin_attributes.(register_attr Invariant_check attr.attr_name) + in { super with type_declaration ; typ @@ -185,6 +206,7 @@ let iterator = ; signature_item ; row_field ; object_field + ; attribute } let structure st = iterator.structure iterator st diff --git a/parsing/ast_iterator.ml b/parsing/ast_iterator.ml index 468baedce0e5..c1a52431fc89 100644 --- a/parsing/ast_iterator.ml +++ b/parsing/ast_iterator.ml @@ -41,6 +41,7 @@ type iterator = { class_type_field: iterator -> class_type_field -> unit; constructor_declaration: iterator -> constructor_declaration -> unit; expr: iterator -> expression -> unit; + expr_extension: iterator -> Extensions.Expression.t -> unit; extension: iterator -> extension -> unit; extension_constructor: iterator -> extension_constructor -> unit; include_declaration: iterator -> include_declaration -> unit; @@ -56,6 +57,7 @@ type iterator = { open_declaration: iterator -> open_declaration -> unit; open_description: iterator -> open_description -> unit; pat: iterator -> pattern -> unit; + pat_extension: iterator -> Extensions.Pattern.t -> unit; payload: iterator -> payload -> unit; signature: iterator -> signature -> unit; signature_item: iterator -> signature_item -> unit; @@ -345,9 +347,50 @@ end module E = struct (* Value expressions for the core language *) - let iter sub {pexp_loc = loc; pexp_desc = desc; pexp_attributes = attrs} = + module C = Extensions.Comprehensions + module IA = Extensions.Immutable_arrays + + let iter_iterator sub : C.iterator -> _ = function + | Range { start; stop; direction = _ } -> + sub.expr sub start; + sub.expr sub stop + | In expr -> sub.expr sub expr + + let iter_clause_binding sub + ({ pattern; iterator; attributes } : + C.clause_binding) = + sub.pat sub pattern; + iter_iterator sub iterator; + sub.attributes sub attributes + + let iter_clause sub : C.clause -> _ = function + | For cbs -> List.iter (iter_clause_binding sub) cbs + | When expr -> sub.expr sub expr + + let iter_comp sub + ({ body; clauses } : C.comprehension) = + sub.expr sub body; + List.iter (iter_clause sub) clauses + + let iter_comp_exp sub : C.expression -> _ = function + | Cexp_list_comprehension comp -> iter_comp sub comp + | Cexp_array_comprehension (_mut, comp) -> iter_comp sub comp + + let iter_iarr_exp sub : IA.expression -> _ = function + | Iaexp_immutable_array elts -> + List.iter (sub.expr sub) elts + + let iter_ext sub : Extensions.Expression.t -> _ = function + | Eexp_comprehension comp_exp -> iter_comp_exp sub comp_exp + | Eexp_immutable_array iarr_exp -> iter_iarr_exp sub iarr_exp + + let iter sub + ({pexp_loc = loc; pexp_desc = desc; pexp_attributes = attrs} as expr)= sub.location sub loc; sub.attributes sub attrs; + match Extensions.Expression.of_ast expr with + | Some eexp -> sub.expr_extension sub eexp + | None -> match desc with | Pexp_ident x -> iter_loc sub x | Pexp_constant _ -> () @@ -432,9 +475,22 @@ end module P = struct (* Patterns *) - let iter sub {ppat_desc = desc; ppat_loc = loc; ppat_attributes = attrs} = + module IA = Extensions.Immutable_arrays + + let iter_iapat sub : IA.pattern -> _ = function + | Iapat_immutable_array elts -> + List.iter (sub.pat sub) elts + + let iter_ext sub : Extensions.Pattern.t -> _ = function + | Epat_immutable_array iapat -> iter_iapat sub iapat + + let iter sub + ({ppat_desc = desc; ppat_loc = loc; ppat_attributes = attrs} as pat) = sub.location sub loc; sub.attributes sub attrs; + match Extensions.Pattern.of_ast pat with + | Some epat -> sub.pat_extension sub epat + | None -> match desc with | Ppat_any -> () | Ppat_var s -> iter_loc sub s @@ -567,7 +623,9 @@ let default_iterator = ); pat = P.iter; + pat_extension = P.iter_ext; expr = E.iter; + expr_extension = E.iter_ext; binding_op = E.iter_binding_op; module_declaration = diff --git a/parsing/ast_iterator.mli b/parsing/ast_iterator.mli index 638ac5e8b6cf..7b7324e51af8 100644 --- a/parsing/ast_iterator.mli +++ b/parsing/ast_iterator.mli @@ -44,6 +44,7 @@ type iterator = { class_type_field: iterator -> class_type_field -> unit; constructor_declaration: iterator -> constructor_declaration -> unit; expr: iterator -> expression -> unit; + expr_extension : iterator -> Extensions.Expression.t -> unit; extension: iterator -> extension -> unit; extension_constructor: iterator -> extension_constructor -> unit; include_declaration: iterator -> include_declaration -> unit; @@ -59,6 +60,7 @@ type iterator = { open_declaration: iterator -> open_declaration -> unit; open_description: iterator -> open_description -> unit; pat: iterator -> pattern -> unit; + pat_extension: iterator -> Extensions.Pattern.t -> unit; payload: iterator -> payload -> unit; signature: iterator -> signature -> unit; signature_item: iterator -> signature_item -> unit; diff --git a/parsing/ast_mapper.ml b/parsing/ast_mapper.ml index 724f72fdfb16..4e238f854082 100644 --- a/parsing/ast_mapper.ml +++ b/parsing/ast_mapper.ml @@ -46,6 +46,7 @@ type mapper = { constructor_declaration: mapper -> constructor_declaration -> constructor_declaration; expr: mapper -> expression -> expression; + expr_extension: mapper -> Location.t -> Extensions.Expression.t -> expression; extension: mapper -> extension -> extension; extension_constructor: mapper -> extension_constructor -> extension_constructor; @@ -63,6 +64,7 @@ type mapper = { open_declaration: mapper -> open_declaration -> open_declaration; open_description: mapper -> open_description -> open_description; pat: mapper -> pattern -> pattern; + pat_extension: mapper -> Location.t -> Extensions.Pattern.t -> pattern; payload: mapper -> payload -> payload; signature: mapper -> signature -> signature; signature_item: mapper -> signature_item -> signature_item; @@ -385,10 +387,52 @@ end module E = struct (* Value expressions for the core language *) - let map sub {pexp_loc = loc; pexp_desc = desc; pexp_attributes = attrs} = + module C = Extensions.Comprehensions + module IA = Extensions.Immutable_arrays + + let map_iterator sub : C.iterator -> C.iterator = function + | Range { start; stop; direction } -> + Range { start = sub.expr sub start; + stop = sub.expr sub stop; + direction } + | In expr -> In (sub.expr sub expr) + + let map_clause_binding sub : C.clause_binding -> C.clause_binding = function + | { pattern; iterator; attributes } -> + { pattern = sub.pat sub pattern; + iterator = map_iterator sub iterator; + attributes = sub.attributes sub attributes } + + let map_clause sub : C.clause -> C.clause = function + | For cbs -> For (List.map (map_clause_binding sub) cbs) + | When expr -> When (sub.expr sub expr) + + let map_comp sub : C.comprehension -> C.comprehension = function + | { body; clauses } -> { body = sub.expr sub body; + clauses = List.map (map_clause sub) clauses } + + let map_cexp sub : C.expression -> C.expression = function + | Cexp_list_comprehension comp -> + Cexp_list_comprehension (map_comp sub comp) + | Cexp_array_comprehension (mut, comp) -> + Cexp_array_comprehension (mut, map_comp sub comp) + + let map_iaexp sub : IA.expression -> IA.expression = function + | Iaexp_immutable_array elts -> + Iaexp_immutable_array (List.map (sub.expr sub) elts) + + let map_ext sub loc : Extensions.Expression.t -> _ = function + | Eexp_comprehension cexp -> C.expr_of ~loc (map_cexp sub cexp) + | Eexp_immutable_array iaexp -> IA.expr_of ~loc (map_iaexp sub iaexp) + + let map sub + ({pexp_loc = loc; pexp_desc = desc; pexp_attributes = attrs} as exp) = let open Exp in let loc = sub.location sub loc in let attrs = sub.attributes sub attrs in + match Extensions.Expression.of_ast exp with + | Some eexp -> sub.expr_extension sub loc eexp + | None -> match desc with | Pexp_ident x -> ident ~loc ~attrs (map_loc sub x) | Pexp_constant x -> constant ~loc ~attrs (sub.constant sub x) @@ -477,10 +521,23 @@ end module P = struct (* Patterns *) - let map sub {ppat_desc = desc; ppat_loc = loc; ppat_attributes = attrs} = + module IA = Extensions.Immutable_arrays + + let map_iapat sub : IA.pattern -> IA.pattern = function + | Iapat_immutable_array elts -> + Iapat_immutable_array (List.map (sub.pat sub) elts) + + let map_ext sub loc : Extensions.Pattern.t -> _ = function + | Epat_immutable_array iapat -> IA.pat_of ~loc (map_iapat sub iapat) + + let map sub + ({ppat_desc = desc; ppat_loc = loc; ppat_attributes = attrs} as pat) = let open Pat in let loc = sub.location sub loc in let attrs = sub.attributes sub attrs in + match Extensions.Pattern.of_ast pat with + | Some epat -> sub.pat_extension sub loc epat + | None -> match desc with | Ppat_any -> any ~loc ~attrs () | Ppat_var s -> var ~loc ~attrs (map_loc sub s) @@ -621,7 +678,9 @@ let default_mapper = ); pat = P.map; + pat_extension = P.map_ext; expr = E.map; + expr_extension = E.map_ext; binding_op = E.map_binding_op; module_declaration = @@ -769,7 +828,7 @@ let extension_of_error {kind; main; sub} = List.map (fun msg -> Str.extension (extension_of_sub msg)) sub) let attribute_of_warning loc s = - Builtin_attributes.mk_internal + Attr.mk {loc; txt = "ocaml.ppwarning" } (PStr ([Str.eval ~loc (Exp.constant (Pconst_string (s, loc, None)))])) diff --git a/parsing/ast_mapper.mli b/parsing/ast_mapper.mli index 69f6b017ab7d..550769e44ba2 100644 --- a/parsing/ast_mapper.mli +++ b/parsing/ast_mapper.mli @@ -75,6 +75,7 @@ type mapper = { constructor_declaration: mapper -> constructor_declaration -> constructor_declaration; expr: mapper -> expression -> expression; + expr_extension: mapper -> Location.t -> Extensions.Expression.t -> expression; extension: mapper -> extension -> extension; extension_constructor: mapper -> extension_constructor -> extension_constructor; @@ -92,6 +93,7 @@ type mapper = { open_declaration: mapper -> open_declaration -> open_declaration; open_description: mapper -> open_description -> open_description; pat: mapper -> pattern -> pattern; + pat_extension: mapper -> Location.t -> Extensions.Pattern.t -> pattern; payload: mapper -> payload -> payload; signature: mapper -> signature -> signature; signature_item: mapper -> signature_item -> signature_item; diff --git a/parsing/builtin_attributes.ml b/parsing/builtin_attributes.ml index b5b335888298..117e16dedbd7 100644 --- a/parsing/builtin_attributes.ml +++ b/parsing/builtin_attributes.ml @@ -92,11 +92,14 @@ let builtin_attrs = let is_builtin_attr s = Hashtbl.mem builtin_attrs s -let mk_internal ?(loc= !default_loc) name payload = - if is_builtin_attr name.txt - then Attribute_table.add unused_attrs name (); - Attr.mk ~loc name payload +type attr_tracking_time = Parser | Invariant_check +let register_attr attr_tracking_time name = + match attr_tracking_time with + | Parser when !Clflags.all_ppx <> [] -> () + | Parser | Invariant_check -> + if is_builtin_attr name.txt then + Attribute_table.replace unused_attrs name () let ident_of_payload = function | PStr[{pstr_desc=Pstr_eval({pexp_desc=Pexp_ident {txt=Lident id}},_)}] -> @@ -217,6 +220,16 @@ let mark_warn_on_literal_pattern_used l = | _ -> ()) l +let mark_payload_attrs_used payload = + let iter = + { Ast_iterator.default_iterator + with attribute = fun self a -> + mark_used a.attr_name; + Ast_iterator.default_iterator.attribute self a + } + in + iter.payload iter payload + let alerts_of_attrs l = List.fold_left (fun acc (_, kind, message) -> diff --git a/parsing/builtin_attributes.mli b/parsing/builtin_attributes.mli index 98eeb0a2c5ec..aee2c740a0bc 100644 --- a/parsing/builtin_attributes.mli +++ b/parsing/builtin_attributes.mli @@ -39,12 +39,26 @@ *) -(** Used by the compiler for attributes that may be compiler built-ins. These - are tracked for misplaced attribute warnings. This should be used rather - than Attr.mk for all built-in attributes. *) -val mk_internal: - ?loc:Location.t -> string Location.loc -> Parsetree.payload -> - Parsetree.attribute +(** [register_attr] must be called on the locations of all attributes that + should be tracked for the purpose of misplaced attribute warnings. In + particular, it should be called on all attributes that are present in the + source program except those that are contained in the payload of another + attribute (because these may be left behind by a ppx and intentionally + ignored by the compiler). + + The [attr_tracking_time] argument indicates when the attr is being added for + tracking - either when it is created in the parser or when we see it while + running the check in the [Ast_invariants] module. This ensures that we + track only attributes from the final version of the parse tree: we skip + adding attributes at parse time if we can see that a ppx will be run later, + because the [Ast_invariants] check is always run on the result of a ppx. + + Note that the [Ast_invariants] check is also run on parse trees created from + marshalled ast files if no ppx is being used, ensuring we don't miss + attributes in that case. +*) +type attr_tracking_time = Parser | Invariant_check +val register_attr : attr_tracking_time -> string Location.loc -> unit (** Marks alert attributes used for the purposes of misplaced attribute warnings. Call this when moving things with alert attributes into the @@ -57,6 +71,13 @@ val mark_alerts_used : Parsetree.attributes -> unit attributes into the environment. *) val mark_warn_on_literal_pattern_used : Parsetree.attributes -> unit +(** Marks the attributes hiding in the payload of another attribute used, for + the purposes of misplaced attribute warnings (see comment on + [attr_tracking_time] above). In the parser, it's simplest to add these to + the table and remove them later, rather than threading through state + tracking whether we're in an attribute payload. *) +val mark_payload_attrs_used : Parsetree.payload -> unit + (** Issue misplaced attribute warnings for all attributes created with [mk_internal] but not yet marked used. *) val warn_unused : unit -> unit diff --git a/parsing/depend.ml b/parsing/depend.ml index 55b4f410cdcd..98d8b3769ae0 100644 --- a/parsing/depend.ml +++ b/parsing/depend.ml @@ -166,6 +166,9 @@ let add_type_exception bv te = let pattern_bv = ref String.Map.empty let rec add_pattern bv pat = + match Extensions.Pattern.of_ast pat with + | Some epat -> add_pattern_extension bv epat + | None -> match pat.ppat_desc with Ppat_any -> () | Ppat_var _ -> () @@ -192,6 +195,9 @@ let rec add_pattern bv pat = | Ppat_open ( m, p) -> let bv = open_module bv m.txt in add_pattern bv p | Ppat_exception p -> add_pattern bv p | Ppat_extension e -> handle_extension e +and add_pattern_extension bv : Extensions.Pattern.t -> _ = function + | Epat_immutable_array (Iapat_immutable_array pl) -> + List.iter (add_pattern bv) pl let add_pattern bv pat = pattern_bv := bv; diff --git a/parsing/extensions.ml b/parsing/extensions.ml index 82133a5c57b0..5d5054a770c0 100644 --- a/parsing/extensions.ml +++ b/parsing/extensions.ml @@ -1,175 +1,348 @@ +open Asttypes open Parsetree +open Extensions_parsing -type extension_expr = -| Eexp_list_comprehension of expression * comprehension list -| Eexp_arr_comprehension of expression * comprehension list +(******************************************************************************) +(** Individual language extension modules *) -and comprehension = -{ - clauses: comprehension_clause list; - guard : expression option -} +(* Note [Check for immutable extension in comprehensions code] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -and comprehension_clause = -(*[ ... for i = E2 to E3 ] (flag = Upto) - [ ... for i = E2 downto E3 ] (flag = downto)*) -| From_to of pattern * expression * - expression * Asttypes.direction_flag -(*[ ... for i in E2 ] *) -| In of pattern * expression + When we spot a comprehension for an immutable array, we need to make sure + that both [comprehensions] and [immutable_arrays] are enabled. But our + general mechanism for checking for enabled extensions (in + Extensions_parsing.Translate(...).of_ast) won't work well here: it triggers + when converting from e.g. [[%extensions.comprehensions.array] ...] to the + comprehensions-specific AST. But if we spot a + [[%extensions.comprehensions.immutable]], there is no expression to + translate. So we just check for the immutable arrays extension when + processing a comprehension expression for an immutable array. + Note [Wrapping with make_extension] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -type error = - | Extension_not_existent of string - | Illegal_comprehension_extension_construct + The topmost node in the encoded AST must always look like e.g. + [%extension.comprehensions]. This allows the decoding machinery to know + what extension is being used and what function to call to do the decoding. + Accordingly, during encoding, after doing the hard work of converting the + extension syntax tree into e.g. Parsetree.expression, we need to make a final + step of wrapping the result in an [%extension.xyz] node. Ideally, this step + would be done by part of our general structure, like we separate [of_ast] + and [of_ast_internal] in the decode structure; this design would make it + structurally impossible/hard to forget taking this final step. -exception Error of Location.t * error + However, the final step is only one line of code (a call to + [make_extension]), but yet the name of the extension varies, as does the type + of the payload. It would thus take several lines of code to execute this + command otherwise, along with dozens of lines to create the structure in the + first place. And so instead we just manually call [make_extension] and refer + to this Note as a reminder to authors of future extensions to remember to do + this wrapping. +*) +(** List and array comprehensions *) +module Comprehensions = struct + let extension_string = Clflags.Extension.to_string Comprehensions -let structure_item_of_expr_desc ~loc expr_desc = - let expr = - { - pexp_desc=expr_desc; - pexp_loc=loc; - pexp_loc_stack=[]; - pexp_attributes=[]; - } - in - Ast_helper.Str.eval ~loc expr - -let structure_item_of_expr ~loc expr = - { - pstr_desc=Pstr_eval(expr, []); - pstr_loc=loc; - } - -let map_comprehension ~loc:orig_loc extension_name body comp_list : extension = - let loc = { orig_loc with Location.loc_ghost = true } in - (*This is unreachable and just used as a place holder.*) - let unreachable = - { - pexp_desc=Pexp_unreachable; - pexp_loc=loc; - pexp_loc_stack=[]; - pexp_attributes=[]; + type iterator = + | Range of { start : expression + ; stop : expression + ; direction : direction_flag } + | In of expression + + type clause_binding = + { pattern : pattern + ; iterator : iterator + ; attributes : attribute list } + + type clause = + | For of clause_binding list + | When of expression + + type comprehension = + { body : expression + ; clauses : clause list } - in - let list = - List.map (fun {clauses; guard} -> - let clauses = - List.map (fun comp_type -> - let expr_desc = - match comp_type with - | From_to (p, e2, e3, dir) -> - Pexp_for(p, e2, e3, dir, unreachable) - | In (p, e2) -> - Pexp_let(Nonrecursive, - [{ - pvb_pat=p; - pvb_expr=e2; - pvb_attributes=[]; - pvb_loc=loc; - }], unreachable) - in - structure_item_of_expr_desc ~loc expr_desc - ) clauses - in - let extension : extension = - match guard with - | None -> - let payload = PStr(clauses) in - { txt="extension_comprehension_block"; loc; }, payload - | Some guard -> - let payload = PStr((structure_item_of_expr ~loc guard)::clauses) in - { txt="extension_comprehension_guarded_block"; loc; }, payload - in - structure_item_of_expr_desc ~loc (Pexp_extension(extension)) - ) comp_list - in - let payload = PStr((structure_item_of_expr ~loc body)::list) in - { txt=extension_name; loc=orig_loc; }, payload - -let unwrap_expression ~loc = function -| Pstr_eval(exp, _) -> exp -| _ -> raise(Error(loc, Illegal_comprehension_extension_construct)) - -let unwrap_extension ~loc = function -| Pexp_extension(extension) -> extension -| _ -> raise(Error(loc, Illegal_comprehension_extension_construct)) - -let unwrap_structure ~loc = function -| PStr(structure) -> structure -| _ -> raise(Error(loc, Illegal_comprehension_extension_construct)) - -let unmap_comprehension ~loc payload = - let str = unwrap_structure ~loc payload in - let get_hd_and_tl = function - | [] -> Misc.fatal_error "Unexpected structure in comprehension extension." - | hd::tl -> hd, tl - in - let str_hd, str_tl = get_hd_and_tl str in - let body = unwrap_expression ~loc (str_hd.pstr_desc) in - let comp = List.map (fun {pstr_desc; pstr_loc=_;} -> - let name, payload = - unwrap_extension ~loc (unwrap_expression ~loc pstr_desc).pexp_desc - in - let str = unwrap_structure ~loc payload in - let str, guard = - match name.txt with - | "extension_comprehension_block" -> str, None - | "extension_comprehension_guarded_block" -> - let str_hd, str_tl = get_hd_and_tl str in - let guard = unwrap_expression ~loc (str_hd.pstr_desc) in - str_tl, Some guard - | _ -> raise(Error(loc, Illegal_comprehension_extension_construct)) - in - let clauses = - List.map (fun {pstr_desc; pstr_loc=_;} -> - match (unwrap_expression ~loc pstr_desc).pexp_desc with - | Pexp_for(p, e2, e3, dir, _) -> From_to (p, e2, e3, dir) - | Pexp_let(Nonrecursive, - [{ - pvb_pat=p; - pvb_expr=e2; - pvb_attributes=_; - pvb_loc=_; - }], _) -> In (p, e2) - | _ -> raise(Error(loc, Illegal_comprehension_extension_construct)) - ) str + + type expression = + | Cexp_list_comprehension of comprehension + | Cexp_array_comprehension of mutable_flag * comprehension + + (* The desugared-to-OCaml version of comprehensions is described by the + following BNF, where [{% '...' | expr %}] refers to the result of + [Expression.make_extension] (via [comprehension_expr]) as described at the + top of [extensions_parsing.mli]. + + {v + comprehension ::= + | {% 'comprehension.list' | '[' clauses ']' %} + | {% 'comprehension.array' | '[|' clauses '|]' %} + + clauses ::= + | {% 'comprehension.for' | 'let' iterator+ 'in' clauses %} + | {% 'comprehension.when' | expr ';' clauses %} + | {% 'comprehension.body' | expr %} + + iterator ::= + | pattern '=' {% 'comprehension.for.range.upto' | expr ',' expr %} + | pattern '=' {% 'comprehension.for.range.downto' | expr ',' expr %} + | pattern '=' {% 'comprehension.for.in' | expr %} + v} + *) + + let comprehension_expr ~loc names = + Expression.make_extension ~loc (extension_string :: names) + + (** First, we define how to go from the nice AST to the OCaml AST; this is + the [expr_of_...] family of expressions, culminating in + [expr_of_comprehension_expr]. *) + + let expr_of_iterator ~loc = function + | Range { start; stop; direction } -> + comprehension_expr + ~loc + [ "for" + ; "range" + ; match direction with + | Upto -> "upto" + | Downto -> "downto" ] + (Ast_helper.Exp.tuple [start; stop]) + | In seq -> + comprehension_expr ~loc ["for"; "in"] seq + + let expr_of_clause_binding ~loc { pattern; iterator; attributes } = + Ast_helper.Vb.mk + ~loc + ~attrs:attributes + pattern + (expr_of_iterator ~loc iterator) + + let expr_of_clause ~loc clause rest = match clause with + | For iterators -> + comprehension_expr + ~loc + ["for"] + (Ast_helper.Exp.let_ + Nonrecursive + (List.map (expr_of_clause_binding ~loc) iterators) + rest) + | When cond -> + comprehension_expr + ~loc + ["when"] + (Ast_helper.Exp.sequence cond rest) + + let expr_of_comprehension ~loc ~type_ { body; clauses } = + comprehension_expr + ~loc + type_ + (List.fold_right + (expr_of_clause ~loc) + clauses + (comprehension_expr ~loc ["body"] body)) + + let expr_of ~loc eexpr = + let ghost_loc = { loc with Location.loc_ghost = true } in + let expr_of_comprehension_type type_ = + expr_of_comprehension ~loc:ghost_loc ~type_ in - { clauses; guard; } - ) str_tl - in - body, comp - -let payload_of_extension_expr ~loc = function - | Eexp_list_comprehension(body, comp_list) -> - map_comprehension ~loc "extension.list_comprehension" body comp_list - | Eexp_arr_comprehension(body, comp_list) -> - map_comprehension ~loc "extension.arr_comprehension" body comp_list - -let extension_expr_of_payload ~loc ((name, payload) : extension) = - match name.txt with - | "extension.list_comprehension" -> - let body, comp = unmap_comprehension ~loc payload in - Eexp_list_comprehension(body, comp) - | "extension.arr_comprehension" -> - let body, comp = unmap_comprehension ~loc payload in - Eexp_arr_comprehension(body, comp) - | extension_name -> raise(Error(loc, Extension_not_existent extension_name)) - - -let report_error ~loc = function - | Extension_not_existent extension_name -> - Location.errorf ~loc "Extension %s does not exist." extension_name - | Illegal_comprehension_extension_construct -> - Location.errorf ~loc "Wrong extension syntax for comprehensions." - -let () = - Location.register_error_of_exn - (function - | Error (loc, err) -> - Some (report_error ~loc err) - | _ -> - None - ) + (* See Note [Wrapping with make_extension] *) + Expression.make_extension ~loc [extension_string] @@ + match eexpr with + | Cexp_list_comprehension comp -> + expr_of_comprehension_type ["list"] comp + | Cexp_array_comprehension (amut, comp) -> + expr_of_comprehension_type + [ "array" + ; match amut with + | Mutable -> + "mutable" + | Immutable -> + "immutable" + ] + comp + + (** Then, we define how to go from the OCaml AST to the nice AST; this is + the [..._of_expr] family of expressions, culminating in + [comprehension_expr_of_expr]. *) + + module Desugaring_error = struct + type error = + | Non_comprehension_extension_point of string list + | Non_extension + | Bad_comprehension_extension_point of string list + | No_clauses + + let report_error ~loc = function + | Non_comprehension_extension_point name -> + Location.errorf ~loc + "Tried to desugar the non-comprehension extension point \ + \"extension.%s\" as part of a comprehension expression" + (String.concat "." name) + | Non_extension -> + Location.errorf ~loc + "Tried to desugar a non-extension expression as part of a \ + comprehension expression" + | Bad_comprehension_extension_point name -> + Location.errorf ~loc + "Unknown, unexpected, or malformed comprehension extension point \ + \"extension.comprehension.%s\"" + (String.concat "." name) + | No_clauses -> + Location.errorf ~loc + "Tried to desugar a comprehension with no clauses" + + exception Error of Location.t * error + + let () = + Location.register_error_of_exn + (function + | Error(loc, err) -> Some (report_error ~loc err) + | _ -> None) + + let raise expr err = raise (Error(expr.pexp_loc, err)) + end + + let expand_comprehension_extension_expr expr = + match Expression.match_extension expr with + | Some (comprehensions :: name, expr) + when String.equal comprehensions extension_string -> + name, expr + | Some (name, _) -> + Desugaring_error.raise expr (Non_comprehension_extension_point name) + | None -> + Desugaring_error.raise expr Non_extension + + let iterator_of_expr expr = + match expand_comprehension_extension_expr expr with + | ["for"; "range"; "upto"], + { pexp_desc = Pexp_tuple [start; stop]; _ } -> + Range { start; stop; direction = Upto } + | ["for"; "range"; "downto"], + { pexp_desc = Pexp_tuple [start; stop]; _ } -> + Range { start; stop; direction = Downto } + | ["for"; "in"], seq -> + In seq + | bad, _ -> + Desugaring_error.raise expr (Bad_comprehension_extension_point bad) + + let clause_binding_of_vb { pvb_pat; pvb_expr; pvb_attributes; pvb_loc = _ } = + { pattern = pvb_pat + ; iterator = iterator_of_expr pvb_expr + ; attributes = pvb_attributes } + + let add_clause clause comp = { comp with clauses = clause :: comp.clauses } + + let rec raw_comprehension_of_expr expr = + match expand_comprehension_extension_expr expr with + | ["for"], { pexp_desc = Pexp_let(Nonrecursive, iterators, rest); _ } -> + add_clause + (For (List.map clause_binding_of_vb iterators)) + (raw_comprehension_of_expr rest) + | ["when"], { pexp_desc = Pexp_sequence(cond, rest); _ } -> + add_clause + (When cond) + (raw_comprehension_of_expr rest) + | ["body"], body -> + { body; clauses = [] } + | bad, _ -> + Desugaring_error.raise expr (Bad_comprehension_extension_point bad) + + let comprehension_of_expr expr = + match raw_comprehension_of_expr expr with + | { body = _; clauses = [] } -> + Desugaring_error.raise expr No_clauses + | comp -> comp + + let comprehension_expr_of_expr expr = + match expand_comprehension_extension_expr expr with + | ["list"], comp -> + Cexp_list_comprehension (comprehension_of_expr comp) + | ["array"; "mutable"], comp -> + Cexp_array_comprehension (Mutable, comprehension_of_expr comp) + | ["array"; "immutable"], comp -> + (* assert_extension_enabled: + See Note [Check for immutable extension in comprehensions code] *) + assert_extension_enabled ~loc:expr.pexp_loc Immutable_arrays; + Cexp_array_comprehension (Immutable, comprehension_of_expr comp) + | bad, _ -> + Desugaring_error.raise expr (Bad_comprehension_extension_point bad) +end + +(** Immutable arrays *) +module Immutable_arrays = struct + type nonrec expression = + | Iaexp_immutable_array of expression list + + type nonrec pattern = + | Iapat_immutable_array of pattern list + + let extension_string = Clflags.Extension.to_string Immutable_arrays + + let expr_of ~loc = function + | Iaexp_immutable_array elts -> + (* See Note [Wrapping with make_extension] *) + Expression.make_extension ~loc [extension_string] @@ + Ast_helper.Exp.array ~loc elts + + let of_expr expr = match expr.pexp_desc with + | Pexp_array elts -> Iaexp_immutable_array elts + | _ -> failwith "Malformed immutable array expression" + + let pat_of ~loc = function + | Iapat_immutable_array elts -> + (* See Note [Wrapping with make_extension] *) + Pattern.make_extension ~loc [extension_string] @@ + Ast_helper.Pat.array ~loc elts + + let of_pat expr = match expr.ppat_desc with + | Ppat_array elts -> Iapat_immutable_array elts + | _ -> failwith "Malformed immutable array expression" +end + +(******************************************************************************) +(** The interface to language extensions, which we export *) + +module type AST = sig + type t + type ast + + val of_ast : ast -> t option +end + +module Expression = struct + module M = struct + module AST = Extensions_parsing.Expression + + type t = + | Eexp_comprehension of Comprehensions.expression + | Eexp_immutable_array of Immutable_arrays.expression + + let of_ast_internal (ext : Clflags.Extension.t) expr = match ext with + | Comprehensions -> + Some (Eexp_comprehension (Comprehensions.comprehension_expr_of_expr expr)) + | Immutable_arrays -> + Some (Eexp_immutable_array (Immutable_arrays.of_expr expr)) + | _ -> None + end + + include M + include Make_of_ast(M) +end + +module Pattern = struct + module M = struct + module AST = Extensions_parsing.Pattern + + type t = + | Epat_immutable_array of Immutable_arrays.pattern + + let of_ast_internal (ext : Clflags.Extension.t) pat = match ext with + | Immutable_arrays -> + Some (Epat_immutable_array (Immutable_arrays.of_pat pat)) + | _ -> None + end + + include M + include Make_of_ast(M) +end diff --git a/parsing/extensions.mli b/parsing/extensions.mli index 2b1e1f08f06f..9934184a9867 100644 --- a/parsing/extensions.mli +++ b/parsing/extensions.mli @@ -1,21 +1,147 @@ -open Parsetree - -type extension_expr = -| Eexp_list_comprehension of expression * comprehension list -| Eexp_arr_comprehension of expression * comprehension list - -and comprehension = -{ - clauses: comprehension_clause list; - guard : expression option -} - -and comprehension_clause = -(*[ ... for i = E2 to E3 ] (flag = Upto) - [ ... for i = E2 downto E3 ] (flag = downto)*) -| From_to of pattern * expression * expression * Asttypes.direction_flag -(*[ ... for i in E3 ] *) -| In of pattern * expression - -val payload_of_extension_expr: loc:Warnings.loc -> extension_expr -> extension -val extension_expr_of_payload: loc:Warnings.loc -> extension -> extension_expr +(** Syntax for our custom ocaml-jst language extensions. This module provides + two things: + + 1. First-class ASTs for all syntax introduced by our language extensions, + one for each OCaml AST we extend, divided up into one extension per + module and all available at once through modules named after the + syntactic category ([Expression.t], etc.). + + 2. A way to interpret these values as terms of the coresponding OCaml ASTs, + and to match on terms of those OCaml ASTs to see if they're language + extension terms. + + We keep our language extensions separate so that we can avoid having to + modify the existing AST, as this would break compatibility with every + existing ppx. + + For details on the rationale behind this approach (and for some of the gory + details), see [Extensions_parsing]. *) + +(** The ASTs for list and array comprehensions *) +module Comprehensions : sig + type iterator = + | Range of { start : Parsetree.expression + ; stop : Parsetree.expression + ; direction : Asttypes.direction_flag } + (** "= START to STOP" (direction = Upto) + "= START downto STOP" (direction = Downto) *) + | In of Parsetree.expression + (** "in EXPR" *) + + (* In [Typedtree], the [pattern] moves into the [iterator]. *) + type clause_binding = + { pattern : Parsetree.pattern + ; iterator : iterator + ; attributes : Parsetree.attribute list } + (** PAT (in/=) ... [@...] *) + + type clause = + | For of clause_binding list + (** "for PAT (in/=) ... and PAT (in/=) ... and ..."; must be nonempty *) + | When of Parsetree.expression + (** "when EXPR" *) + + type comprehension = + { body : Parsetree.expression + (** The body/generator of the comprehension *) + ; clauses : clause list + (** The clauses of the comprehension; must be nonempty *) } + + type expression = + | Cexp_list_comprehension of comprehension + (** [BODY ...CLAUSES...] *) + | Cexp_array_comprehension of Asttypes.mutable_flag * comprehension + (** [|BODY ...CLAUSES...|] (flag = Mutable) + [:BODY ...CLAUSES...:] (flag = Immutable) + (only allowed with [-extension immutable_arrays]) *) + + val expr_of : loc:Location.t -> expression -> Parsetree.expression +end + +(** The ASTs for immutable arrays. When we merge this upstream, we'll merge + these into the existing [P{exp,pat}_array] constructors by adding a + [mutable_flag] argument (just as we did with [T{exp,pat}_array]). *) +module Immutable_arrays : sig + type expression = + | Iaexp_immutable_array of Parsetree.expression list + (** [: E1; ...; En :] *) + (* CR aspectorzabusky: Or [Iaexp_iarray]? *) + + type pattern = + | Iapat_immutable_array of Parsetree.pattern list + (** [: P1; ...; Pn :] **) + (* CR aspectorzabusky: Or [Iapat_iarray]? *) + + val expr_of : loc:Location.t -> expression -> Parsetree.expression + val pat_of : loc:Location.t -> pattern -> Parsetree.pattern +end + +(** The module type of language extension ASTs, instantiated once for each + syntactic category. We tend to call the pattern-matching functions here + with unusual indentation, not indenting the [None] branch further so as to + avoid merge conflicts with upstream. *) +module type AST = sig + (** The AST for all our ocaml-jst language extensions; one constructor per + language extension that extends the expression language. Some extensions + are handled separately and thus are not listed here. *) + type t + + (** The corresponding OCaml AST *) + type ast + + (** Given an OCaml AST node, check to see if it corresponds to a language + extension term. If it is, and the extension is enabled, then return it; + if it's not a language extension term, return [None]; if it's a disabled + language extension term, raise an error. + + AN IMPORTANT NOTE: We indent calls to this function *very* strangely: we + *do not change the indentation level* when we match on its result! + E.g. from [type_expect_] in [typecore.ml]: + + {[ + match Extensions.Expression.of_ast sexp with + | Some eexp -> + type_expect_extension + ~loc ~env ~expected_mode ~ty_expected ~explanation eexp + | None -> match sexp.pexp_desc with + | Pexp_ident lid -> + let path, mode, desc, kind = type_ident env ~recarg lid in + (* ... *) + | Pexp_constant(Pconst_string (str, _, _) as cst) -> + register_allocation expected_mode; + (* ... *) + | (* ... *) + | Pexp_unreachable -> + re { exp_desc = Texp_unreachable; + exp_loc = loc; exp_extra = []; + exp_type = instance ty_expected; + exp_mode = expected_mode.mode; + exp_attributes = sexp.pexp_attributes; + exp_env = env } + ]} + + Note that we match on the result of this function, forward to + [type_expect_extension] if we get something, and otherwise do the real + match on [sexp.pexp_desc] *without going up an indentation level*. This + is important to reduce the number of merge conflicts with upstream by + avoiding changing the body of every single important function in the type + checker to add pointless indentation. *) + val of_ast : ast -> t option +end + +(** Language extensions in expressions *) +module Expression : sig + type t = + | Eexp_comprehension of Comprehensions.expression + | Eexp_immutable_array of Immutable_arrays.expression + + include AST with type t := t and type ast := Parsetree.expression +end + +(** Language extensions in patterns *) +module Pattern : sig + type t = + | Epat_immutable_array of Immutable_arrays.pattern + + include AST with type t := t and type ast := Parsetree.pattern +end diff --git a/parsing/extensions_parsing.ml b/parsing/extensions_parsing.ml new file mode 100644 index 000000000000..6d558b5e87a5 --- /dev/null +++ b/parsing/extensions_parsing.ml @@ -0,0 +1,338 @@ +(** As mentioned in the .mli file, there are some gory details around the + particular translation scheme we adopt for moving to and from OCaml ASTs + ([Parsetree.expression], etc.). The general idea is that we adopt a scheme + where a language extension is represented as a pair of an extension node and + an AST item that serves as the "body". In particular, for an extension + named [EXTNAME] (i.e., one that is enabled by [-extension EXTNAME] on the + command line), the extension node used must be [[%extension.EXTNAME]]. We + also provide utilities for further desugaring similar applications where the + extension nodes have the longer form [[%extension.EXTNAME.ID1.ID2.….IDn]] + (with the outermost one being the [n = 0] case), as these might be used + inside the [EXPR]. (For example, within the outermost + [[%extension.comprehensions]] term for list and array comprehensions, we can + also use [[%extension.comprehensions.list]], + [[%extension.comprehensions.array]], [[%extensions.comprehensions.for.in]], + etc.). + + As mentioned, we represent terms as a "pair" and don't use the extension + node payload; this is so that ppxen can see inside these extension nodes. + If we put the subexpressions inside the extension node payload, then we + couldn't write something like [[[%string "Hello, %{x}!"] for x in names]], + as [ppx_string] wouldn't traverse inside the payload to find the [[%string]] + extension point. + + Language extensions are of course allowed to impose extra constraints + constraints on what legal bodies are; we're also happy for this translation + to error in various ways on malformed input, since nobody should ever be + writing these forms directly. They're just an implementation detail. + + See modules of type AST below to see how different syntactic categories + are represented. For example, expressions are rendered as an application + of the extension node to the body, i.e. [([%extension.EXTNAME] EXPR)]. + + We provide one module per syntactic category (e.g., [Expression]), of module + type [AST]. They also provide some simple machinery for working with the + general [%extension.EXTNAME.ID1.ID2.….IDn] wrapped forms. To construct + one, we provide [extension_expr]; to destructure one, we provide + [match_extension] in the various AST modules; to construct one, we provide + [make_extension] in the same places.. We still have to write the + transformations in both directions for all new syntax, lowering it to + extension nodes and then lifting it back out. *) + +open Parsetree + +(******************************************************************************) +module Error = struct + type malformed_extension = + | Has_payload of payload + | Wrong_arguments of (Asttypes.arg_label * expression) list + | Wrong_tuple of pattern list + + type error = + | Malformed_extension of string list * malformed_extension + | Unknown_extension of string + | Disabled_extension of Clflags.Extension.t + | Wrong_syntactic_category of Clflags.Extension.t * string + | Unnamed_extension + | Bad_introduction of string * string list + + exception Error of Location.t * error +end + +open Error + +let assert_extension_enabled ~loc ext = + if not (Clflags.Extension.is_enabled ext) then + raise (Error(loc, Disabled_extension ext)) +;; + +let report_error ~loc = function + | Malformed_extension(name, malformed) -> begin + let name = String.concat "." ("extension" :: name) in + match malformed with + | Has_payload _payload -> + Location.errorf + ~loc + "@[Modular extension nodes are not allowed to have a payload,@ \ + but \"%s\" does@]" + name + | Wrong_arguments arguments -> + Location.errorf + ~loc + "@[Expression modular extension nodes must be applied to exactly@ \ + one unlabeled argument, but \"%s\" was applied to@ %s@]" + name + (match arguments with + | [Labelled _, _] -> "a labeled argument" + | [Optional _, _] -> "an optional argument" + | _ -> Int.to_string (List.length arguments) ^ " arguments") + | Wrong_tuple patterns -> + Location.errorf + ~loc + "@[Pattern modular extension nodes must be the first component of@ \ + a pair, but \"%s\" was the first component of a %d-tuple@]" + name + (1 + List.length patterns) + end + | Unknown_extension name -> + Location.errorf + ~loc + "@[Unknown extension \"%s\" referenced via an@ [%%extension.%s] \ + extension node@]" + name + name + | Disabled_extension ext -> + Location.errorf + ~loc + "The extension \"%s\" is disabled and cannot be used" + (Clflags.Extension.to_string ext) + | Wrong_syntactic_category(ext, cat) -> + Location.errorf + ~loc + "The extension \"%s\" cannot appear in %s" + (Clflags.Extension.to_string ext) + cat + | Unnamed_extension -> + Location.errorf + ~loc + "Cannot have an extension node named [%%extension]" + | Bad_introduction(name, subnames) -> + Location.errorf + ~loc + "@[The extension \"%s\" was referenced improperly; it started with an@ \ + [%%extension.%s] extension node,@ not an [%%extension.%s] one@]" + name + (String.concat "." (name :: subnames)) + name + +let () = + Location.register_error_of_exn + (function + | Error(loc, err) -> Some (report_error ~loc err) + | _ -> None) + +(******************************************************************************) +(** Generically find and create the OCaml AST syntax used to encode one of our + language extensions. One module per variety of AST (expressions, patterns, + etc.). *) + +(** The parameters that define how to look for [[%extension.EXTNAME]] inside + ASTs of a certain syntactic category. See also the [Make_AST] functor, which + uses these definitions to make the e.g. [Expression] module. *) +module type AST_parameters = sig + (** The AST type (e.g., [Parsetree.expression]) *) + type ast + + (** The type of the subterms that occur in the "body" slot of an extension + use. This may just be [ast], but e.g. for expressions, we use function + applications, and the terms that a function is applied to contain label + information. *) + type raw_body + + (** The name for this syntactic category in the plural form; used for error + messages *) + val plural : string + + (** How to get the location attached to an AST node. Should just be + [fun tm -> tm.pCAT_loc] for the appropriate syntactic category [CAT]. *) + val location : ast -> Location.t + + (** How to construct an extension node for this AST (something of the shape + [[%name]] or [[%%name]], depending on the AST). Should just be + [Ast_helper.CAT.extension] for the appropriate syntactic category + [CAT]. *) + val make_extension_node : + ?loc:Location.t -> ?attrs:attributes -> extension -> ast + + (** Given an extension node (as created by [make_extension_node]) with an + appropriately-formed name and a body, combine them into the special + syntactic form we use for language extensions for this syntactic + category. Partial inverse of [match_extension_use]. *) + val make_extension_use : loc:Location.t -> extension_node:ast -> ast -> ast + + (** Given an AST node, check if it's of the special syntactic form indicating + that this is a language extension (as created by [make_extension_node]), + split it back up into the extension node and the possible body terms. + Doesn't do any checking about the name/format of the extension or the + possible body terms (see [AST.match_extension]). Partial inverse of + [make_extension_use]. *) + val match_extension_use : ast -> (extension * raw_body list) option + + (** Check if a [raw_body] term is legal to use as a body *) + val validate_extension_body : raw_body -> ast option + + (** The error to throw when the list of possible body terms is wrong: either + when the list isn't exactly one term long, or when that single term fails + [validate_extension_body] *) + val malformed_extension : raw_body list -> malformed_extension +end + +module type AST = sig + type ast + + val plural : string + + val location : ast -> Location.t + + val make_extension : loc:Location.t -> string list -> ast -> ast + + val match_extension : ast -> (string list * ast) option +end + +(* Some extensions written before this file existed are handled in their own + way; this function filters them out. *) +let uniformly_handled_extension names = + match names with + | [("local"|"global"|"nonlocal"|"escape"|"include_functor"|"curry")] -> false + | _ -> true + +(** Given the [AST_parameters] for a syntactic category, produce the + corresponding module, of type [AST], for lowering and lifting language + extension syntax from and to it. *) +module Make_AST (AST_parameters : AST_parameters) : + AST with type ast = AST_parameters.ast = struct + include AST_parameters + + let make_extension ~loc names = + make_extension_use + ~loc + ~extension_node: + (make_extension_node + ~loc + ({ txt = String.concat "." ("extension" :: names); loc }, PStr [])) + + (* This raises an error if the language extension node is malformed. Malformed + means either: + + 1. The [[%extension.NAME]] extension point has a payload; extensions must + be empty, so other ppxes can traverse "into" them. + + 2. The [[%extension.NAME]] extension point contains multiple body forms, or + body forms that are "shaped" incorrectly. *) + let match_extension ast = + match match_extension_use ast with + | Some (({txt = ext_name; loc = ext_loc}, ext_payload), body_list) -> begin + match String.split_on_char '.' ext_name with + | "extension" :: names when uniformly_handled_extension names -> begin + let raise_malformed err = + raise (Error(ext_loc, Malformed_extension(names, err))) + in + match ext_payload with + | PStr [] -> begin + match List.map validate_extension_body body_list with + | [Some body] -> Some (names, body) + | _ -> raise_malformed (malformed_extension body_list) + end + | _ -> raise_malformed (Has_payload ext_payload) + end + | _ -> None + end + | None -> None +end + +(** Expressions; embedded as [([%extension.EXTNAME] BODY)]. *) +module Expression = Make_AST(struct + type ast = expression + type raw_body = Asttypes.arg_label * expression (* Function arguments *) + + let plural = "expressions" + + let location expr = expr.pexp_loc + + let make_extension_node = Ast_helper.Exp.extension + + let make_extension_use ~loc ~extension_node expr = + Ast_helper.Exp.apply ~loc extension_node [Nolabel, expr] + + let match_extension_use expr = + match expr.pexp_desc with + | Pexp_apply({pexp_desc = Pexp_extension ext; _}, arguments) -> + Some (ext, arguments) + | _ -> + None + + let validate_extension_body = function + | Asttypes.Nolabel, body -> Some body + | _, _ -> None + + let malformed_extension args = Wrong_arguments args +end) + +(** Patterns; embedded as [[%extension.EXTNAME], BODY]. *) +module Pattern = Make_AST(struct + type ast = pattern + type raw_body = pattern + + let plural = "patterns" + + let location pat = pat.ppat_loc + + let make_extension_node = Ast_helper.Pat.extension + + let make_extension_use ~loc ~extension_node pat = + Ast_helper.Pat.tuple ~loc [extension_node; pat] + + let match_extension_use pat = + match pat.ppat_desc with + | Ppat_tuple({ppat_desc = Ppat_extension ext; _} :: patterns) -> + Some (ext, patterns) + | _ -> + None + + let validate_extension_body = Option.some + let malformed_extension pats = Wrong_tuple pats +end) + +(******************************************************************************) +(** Generically lift and lower our custom language extension ASTs from/to OCaml + ASTs. *) + +module type Of_ast_parameters = sig + module AST : AST + type t + val of_ast_internal : Clflags.Extension.t -> AST.ast -> t option +end + +module Make_of_ast (Params : Of_ast_parameters) : sig + val of_ast : Params.AST.ast -> Params.t option +end = struct + let of_ast ast = + let loc = Params.AST.location ast in + let raise_error err = raise (Error (loc, err)) in + match Params.AST.match_extension ast with + | None -> None + | Some ([name], ast) -> begin + match Clflags.Extension.of_string name with + | Some ext -> begin + assert_extension_enabled ~loc ext; + match Params.of_ast_internal ext ast with + | Some ext_ast -> Some ext_ast + | None -> raise_error (Wrong_syntactic_category(ext, Params.AST.plural)) + end + | None -> raise_error (Unknown_extension name) + end + | Some ([], _) -> + raise_error Unnamed_extension + | Some (name :: subnames, _) -> + raise_error (Bad_introduction(name, subnames)) +end diff --git a/parsing/extensions_parsing.mli b/parsing/extensions_parsing.mli new file mode 100644 index 000000000000..5db330698221 --- /dev/null +++ b/parsing/extensions_parsing.mli @@ -0,0 +1,182 @@ +(** This module handles the logic around the syntax of our extensions to OCaml + for [ocaml-jst], keeping the gory details wrapped up behind a clean + interface. + + As we've started to work on syntactic extensions to OCaml, three concerns + arose about the mechanics of how we wanted to maintain these changes in our + fork. + + 1. We don't want to extend the AST for our fork, as we really want to make + sure things like ppxen are cross-compatible between upstream and + [ocaml-jst]. Thankfully, OCaml already provides places to add extra + syntax: extension points and annotations! Thus, we have to come up with + a way of representing our new syntactic constructs in terms of extension + points (or annotations, but we went with the former). + + 2. We don't want to actually match on extension points whose names are + specific strings all over the compiler; that's incredibly messy, and it's + easy to miss cases, etc. + + 3. We want to keep different language extensions distinct so that we can add + them to upstream independently, work on them separately, and so on. + + We have come up with a design that addresses those concerns by providing + both a nice compiler-level interface for working with our syntactic + extensions as first-class AST nodes, as well as a uniform scheme for + translating this to and from OCaml AST values containing extension points. + One wrinkle is that OCaml has many ASTs, one for each syntactic category + (expressions, patterns, etc.); we have to provide this facility for each + syntactic category where we want to provide extensions. + + a. For each language extension, we will define a module (e.g., + [Comprehensions]), in which we define a proper AST type per syntactic + category we care about (e.g., [Comprehensions.expression] and its + subcomponents). This addresses concern (3); we've now contained each + extension in a module. But just that would leave them too siloed, so… + + b. We define an *overall auxiliary AST* for each syntactic category that's + just for our language extensions; for expressions, it's called + [Extensions.Expression.t]. It contains one constructor for each of the AST types + defined as described in design point (1). This addresses concern (2); we + can now match on actual OCaml constructors, as long as we can get a hold + of them. And to do that… + + c. We define a general scheme for how we represent language extensions in terms + of the existing ASTs, and provide a few primitives for consuming/creating + AST nodes of this form, for each syntactic category. There's not a lot + of abstraction to be done, or at least it's not (yet) apparent what + abstraction there is to do, so most of this remains manual. (Setting up + a full lens-based/otherwise bidirectional approach sounds like a great + opportunity for yak-shaving, but not *actually* a good idea.) This + solves concern (3), and by doing it uniformly helps us address multiple + cases at one stroke. + + Then, for each syntactic category, we define a module (in extensions.ml) + that contains functions for converting between the Parsetree representation + and the extension representation. A little functor magic (see [Make_of_ast]) + then allows us to make nice functions for export. + + This module contains the logic for moving to and from OCaml ASTs; the gory + details of the encoding are detailed in the implementation. All the actual + ASTs should live in [Extensions], which is the only module that should + directly depend on this one. + + When using this module, we often want to specify what our syntax extensions + look like when desugared into OCaml ASTs, so that we can validate the + translation code. We generally specify this as a BNF grammar, but we don't + want to depend on the specific details of the desugaring. Thus, instead of + writing out extension points or attributes directly, we write the result of + [Some_ast.make_extension ~loc [name1; name2; ...; NameN] a] as the special + syntax [{% 'name1.name2.....nameN' | a %}] in the BNF. Other pieces of the + OCaml AST are used as normal. *) + +(** Errors around the extension representation. These should mostly just be + fatal, but they're needed for one test case + (tests/ast-invariants/test.ml). *) +module Error : sig + (** Someone used [[%extension.EXTNAME]] wrong *) + type malformed_extension = + | Has_payload of Parsetree.payload + | Wrong_arguments of (Asttypes.arg_label * Parsetree.expression) list + | Wrong_tuple of Parsetree.pattern list + + (** An error triggered when desugaring a language extension from an OCaml AST *) + type error = + | Malformed_extension of string list * malformed_extension + | Unknown_extension of string + | Disabled_extension of Clflags.Extension.t + | Wrong_syntactic_category of Clflags.Extension.t * string + | Unnamed_extension + | Bad_introduction of string * string list + + (** The main exception type thrown when desugaring a language extension from an + OCaml AST; we also use the occasional [Misc.fatal_errorf]. *) + exception Error of Location.t * error +end + +(** The type of modules that lift and lower language extension terms from and + to an OCaml AST type ([ast]) *) +module type AST = sig + (** The AST type (e.g., [Parsetree.expression]) *) + type ast + + (** The name for this syntactic category in the plural form; used for error + messages (e.g., "expressions") *) + val plural : string + + (** How to get the location attached to an AST node *) + val location : ast -> Location.t + + (** Embed a language extension term in the AST with the given name + and body (the [ast]). The name will be joined with dots + and preceded by [extension.]. Partial inverse of [match_extension]. *) + val make_extension : loc:Location.t -> string list -> ast -> ast + + (** Given an AST node, check if it's a language extension term; if it is, + split it back up into its name (the [string list]) and the body (the + [ast]); the resulting name is split on dots and the leading [extension] + component is dropped. If the language extension term is malformed in any + way, raises an error; if the input isn't a language extension term, + returns [None]. Partial inverse of [make_extension]. *) + val match_extension : ast -> (string list * ast) option +end + +(** One [AST] module per syntactic category we currently care about; we're + adding these lazily as we need them. When you add another one, make + sure also to add special handling in [Ast_iterator] and [Ast_mapper]. *) + +module Expression : AST with type ast = Parsetree.expression +module Pattern : AST with type ast = Parsetree.pattern + +(** Each syntactic category will include a module that meets this signature. + Then, the [Make_of_ast] functor produces the functions that actually + convert from the Parsetree AST to the extensions one. *) +module type Of_ast_parameters = sig + + (** Which syntactic category is this concerning? e.g. [module AST = Expression] *) + module AST : AST + + (** The extension type of this syntactic category, shared across extensions. + e.g. [Extension.Expression.t] *) + type t + + (** A function to convert [Parsetree]'s AST to the extension's. + The choice of extension is extracted from the e.g. + [[%extensions.comprehensions]] node, and the argument to that + node is passed in as the [Parsetree] AST. + + So, for example, if [of_ast] spots the expression + + {[ + [%extensions.comprehensions] blah + ]} + + then it will call [of_ast_internal Comprehensions blah]. + + If the given extension does not actually extend the + syntactic category, return None; this will be reported + as an error. (Example: there are no pattern comprehensions, + so when building the pattern extension AST, this function will + return [None] when the extension in [Comprehensions].) + *) + val of_ast_internal : Clflags.Extension.t -> AST.ast -> t option +end + +(** Build the [of_ast] function from [Of_ast_parameters]. The result + of this functor should be [include]d in modules implementing [Extensions.AST]. +*) +module Make_of_ast (Params : Of_ast_parameters) : sig + + (** Interpret an AST term in the specified syntactic category as a term of the + appropriate auxiliary language extension AST if possible. Raises an error + if the extension it finds is disabled or if the language extension + embedding is malformed. *) + val of_ast : Params.AST.ast -> Params.t option +end + +(** Require that an extension is enabled, or else throw an exception (of an + unexported type) at the provided location saying otherwise. This is + intended to be used in "extensions.ml" when a certain piece of syntax + requires two extensions to be enabled at once (e.g., immutable array + comprehensions such as [[:x for x = 1 to 10:]]). *) +val assert_extension_enabled : loc:Location.t -> Clflags.Extension.t -> unit diff --git a/parsing/lexer.mll b/parsing/lexer.mll index 985b7928760c..e8f76f40c70d 100644 --- a/parsing/lexer.mll +++ b/parsing/lexer.mll @@ -546,6 +546,7 @@ rule token = parse | "=" { EQUAL } | "[" { LBRACKET } | "[|" { LBRACKETBAR } + | "[:" { LBRACKETCOLON } | "[<" { LBRACKETLESS } | "[>" { LBRACKETGREATER } | "]" { RBRACKET } @@ -554,6 +555,7 @@ rule token = parse | "|" { BAR } | "||" { BARBAR } | "|]" { BARRBRACKET } + | ":]" { COLONRBRACKET } | ">" { GREATER } | ">]" { GREATERRBRACKET } | "}" { RBRACE } diff --git a/parsing/parser.mly b/parsing/parser.mly index dd5a276533d3..adcb32bcf0d6 100644 --- a/parsing/parser.mly +++ b/parsing/parser.mly @@ -151,8 +151,12 @@ let mkuplus ~oploc name arg = let local_ext_loc loc = mkloc "extension.local" loc +let mk_attr ~loc name payload = + Builtin_attributes.(register_attr Parser name); + Attr.mk ~loc name payload + let local_attr loc = - Builtin_attributes.mk_internal ~loc (local_ext_loc loc) (PStr []) + mk_attr ~loc (local_ext_loc loc) (PStr []) let local_extension loc = Exp.mk ~loc:Location.none @@ -161,8 +165,7 @@ let local_extension loc = let include_functor_ext_loc loc = mkloc "extension.include_functor" loc let include_functor_attr loc = - Builtin_attributes.mk_internal ~loc:loc (include_functor_ext_loc loc) - (PStr []) + mk_attr ~loc:loc (include_functor_ext_loc loc) (PStr []) let mkexp_stack ~loc ~kwd_loc exp = ghexp ~loc (Pexp_apply(local_extension (make_loc kwd_loc), [Nolabel, exp])) @@ -189,8 +192,7 @@ let wrap_exp_local_if p exp loc = if p then wrap_exp_stack exp (make_loc loc) else exp let curry_attr loc = - Builtin_attributes.mk_internal ~loc:Location.none - (mkloc "extension.curry" loc) (PStr []) + mk_attr ~loc:Location.none (mkloc "extension.curry" loc) (PStr []) let is_curry_attr attr = attr.attr_name.txt = "extension.curry" @@ -208,12 +210,12 @@ let maybe_curry_typ typ loc = let global_loc loc = mkloc "extension.global" loc let global_attr loc = - Builtin_attributes.mk_internal ~loc:loc (global_loc loc) (PStr []) + mk_attr ~loc:loc (global_loc loc) (PStr []) let nonlocal_loc loc = mkloc "extension.nonlocal" loc let nonlocal_attr loc = - Builtin_attributes.mk_internal ~loc:Location.none (nonlocal_loc loc) (PStr []) + mk_attr ~loc:Location.none (nonlocal_loc loc) (PStr []) let mkld_global ld loc = { ld with pld_attributes = global_attr loc :: ld.pld_attributes } @@ -302,6 +304,50 @@ let unclosed opening_name opening_loc closing_name closing_loc = raise(Syntaxerr.Error(Syntaxerr.Unclosed(make_loc opening_loc, opening_name, make_loc closing_loc, closing_name))) +(* Normal mutable arrays and immutable arrays are parsed identically, just with + different delimiters. The parsing is done by the [array_exprs] rule, and the + [Generic_array] module provides (1) a type representing the possible results, + and (2) a function for going from that type to an AST fragment representing + an array. *) +module Generic_array = struct + (** The three possible ways to parse an array (writing [[? ... ?]] for either + [[| ... |]] or [[: ... :]]): *) + type (_, _) t = + | Literal : 'ast list -> ('ast, 'ast_desc) t + (** A plain array literal/pattern, [[? x; y; z ?]] *) + | Opened_literal : open_declaration * + Lexing.position * + Lexing.position * + expression list + -> (expression, expression_desc) t + (** An array literal with a local open, [Module.[? x; y; z ?]] (only valid in + expressions) *) + | Unclosed : (Lexing.position * Lexing.position) * + (Lexing.position * Lexing.position) + -> (_, _) t + (** Parse error: an unclosed array literal, [\[? x; y; z] with no closing + [?\]]. *) + + let to_ast (type ast ast_desc) + (open_ : string) (close : string) + (array : ast list -> ast_desc) + : (ast, ast_desc) t -> ast_desc = function + | Literal elts -> + array elts + | Opened_literal(od, startpos, endpos, elts) -> + (Pexp_open(od, mkexp ~loc:(startpos, endpos) (array elts)) : ast_desc) + | Unclosed(startpos, endpos) -> + unclosed open_ startpos close endpos + + let expression : _ -> _ -> _ -> (expression, expression_desc) t -> _ = to_ast + let pattern : _ -> _ -> _ -> (pattern, pattern_desc) t -> _ = to_ast +end + +let ppat_iarray loc elts = + (Extensions.Immutable_arrays.pat_of + ~loc:(make_loc loc) + (Iapat_immutable_array elts)).ppat_desc + let expecting loc nonterm = raise Syntaxerr.(Error(Expecting(make_loc loc, nonterm))) @@ -374,6 +420,8 @@ let bigarray_untuplify = function { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist | exp -> [exp] +(* Immutable array indexing is a regular operator, so it doesn't need a special + case here *) let builtin_arraylike_name loc _ ~assign paren_kind n = let opname = if assign then "set" else "get" in let opname = if !Clflags.unsafe then "unsafe_" ^ opname else opname in @@ -728,6 +776,7 @@ let mk_directive ~loc name arg = %token COLONCOLON "::" %token COLONEQUAL ":=" %token COLONGREATER ":>" +%token COLONRBRACKET ":]" %token COMMA "," %token CONSTRAINT "constraint" %token DO "do" @@ -771,6 +820,7 @@ let mk_directive ~loc name arg = %token LBRACELESS "{<" %token LBRACKET "[" %token LBRACKETBAR "[|" +%token LBRACKETCOLON "[:" %token LBRACKETLESS "[<" %token LBRACKETGREATER "[>" %token LBRACKETPERCENT "[%" @@ -905,7 +955,7 @@ The precedences must be listed from low to high. %nonassoc DOT DOTOP /* Finally, the first tokens of simple_expr are above everything else. */ %nonassoc BACKQUOTE BANG BEGIN CHAR FALSE FLOAT INT OBJECT - LBRACE LBRACELESS LBRACKET LBRACKETBAR LIDENT LPAREN + LBRACE LBRACELESS LBRACKET LBRACKETBAR LBRACKETCOLON LIDENT LPAREN NEW PREFIXOP STRING TRUE UIDENT LBRACKETPERCENT QUOTED_STRING_EXPR @@ -2471,6 +2521,8 @@ simple_expr: { mkexp_constraint ~loc:$sloc $2 $3 } | indexop_expr(DOT, seq_expr, { None }) { mk_indexop_expr builtin_indexing_operators ~loc:$sloc $1 } + (* Immutable array indexing is a regular operator, so it doesn't need its own + rule and is handled by the next case *) | indexop_expr(qualified_dotop, expr_semi_list, { None }) { mk_indexop_expr user_indexing_operators ~loc:$sloc $1 } | indexop_error (DOT, seq_expr) { $1 } @@ -2502,32 +2554,80 @@ simple_expr: { unclosed "object" $loc($1) "end" $loc($4) } ; +comprehension_iterator: + | EQUAL expr direction_flag expr + { Extensions.Comprehensions.Range { start = $2 ; stop = $4 ; direction = $3 } } + | IN expr + { Extensions.Comprehensions.In $2 } +; + +comprehension_clause_binding: + | attributes pattern comprehension_iterator + { Extensions.Comprehensions.{ pattern = $2 ; iterator = $3 ; attributes = $1 } } + (* We can't write [[e for local_ x = 1 to 10]], because the [local_] has to + move to the RHS and there's nowhere for it to move to; besides, you never + want that [int] to be [local_]. But we can parse [[e for local_ x in xs]]. + We have to have that as a separate rule here because it moves the [local_] + over to the RHS of the binding, so we need everything to be visible. *) + | attributes LOCAL pattern IN expr + { Extensions.Comprehensions. + { pattern = $3 + ; iterator = In (mkexp_stack ~loc:$sloc ~kwd_loc:($loc($2)) $5) + ; attributes = $1 + } + } +; + comprehension_clause: -| ext_attributes pattern EQUAL expr direction_flag expr - { Extensions.From_to($2, $4, $6, $5) } -| ext_attributes pattern IN expr { Extensions.In($2, $4) } + | FOR separated_nonempty_llist(AND, comprehension_clause_binding) + { Extensions.Comprehensions.For $2 } + | WHEN expr + { Extensions.Comprehensions.When $2 } + +%inline comprehension(lbracket, rbracket): + lbracket expr nonempty_llist(comprehension_clause) rbracket + { Extensions.Comprehensions.{ body = $2; clauses = $3 } } ; -comprehension_tail(bracket): -| FOR separated_nonempty_llist(AND, comprehension_clause) bracket - { [({clauses= $2; guard=None} : Extensions.comprehension)] } -| FOR separated_nonempty_llist(AND, comprehension_clause) WHEN expr bracket - { [({clauses= $2; guard= Some $4} : Extensions.comprehension)] } -| FOR separated_nonempty_llist(AND, comprehension_clause) comprehension_tail(bracket) - { ({clauses= $2; guard=None} : Extensions.comprehension) :: $3 } -| FOR separated_nonempty_llist(AND, comprehension_clause) WHEN expr comprehension_tail(bracket) - { ({clauses= $2; guard= Some $4}: Extensions.comprehension) :: $5 } +%inline comprehension_ext_expr: + | comprehension(LBRACKET,RBRACKET) + { Extensions.Comprehensions.Cexp_list_comprehension $1 } + | comprehension(LBRACKETBAR,BARRBRACKET) + { Extensions.Comprehensions.Cexp_array_comprehension (Mutable, $1) } + | comprehension(LBRACKETCOLON,COLONRBRACKET) + { Extensions.Comprehensions.Cexp_array_comprehension (Immutable, $1) } ; %inline comprehension_expr: -| LBRACKET expr comprehension_tail(RBRACKET) - { Pexp_extension( - Extensions.payload_of_extension_expr - ~loc:(make_loc $sloc) (Eexp_list_comprehension($2, $3))) } -| LBRACKETBAR expr comprehension_tail(BARRBRACKET) - { Pexp_extension( - Extensions.payload_of_extension_expr - ~loc:(make_loc $sloc) (Eexp_arr_comprehension($2, $3))) } + comprehension_ext_expr + { (Extensions.Comprehensions.expr_of ~loc:(make_loc $sloc) $1).pexp_desc } +; + +%inline array_simple(ARR_OPEN, ARR_CLOSE, contents_semi_list): + | ARR_OPEN contents_semi_list ARR_CLOSE + { Generic_array.Literal $2 } + | ARR_OPEN contents_semi_list error + { Generic_array.Unclosed($loc($1),$loc($3)) } + | ARR_OPEN ARR_CLOSE + { Generic_array.Literal [] } +; + +%inline array_exprs(ARR_OPEN, ARR_CLOSE): + | array_simple(ARR_OPEN, ARR_CLOSE, expr_semi_list) + { $1 } + | od=open_dot_declaration DOT ARR_OPEN expr_semi_list ARR_CLOSE + { Generic_array.Opened_literal(od, $startpos($3), $endpos, $4) } + | od=open_dot_declaration DOT ARR_OPEN ARR_CLOSE + { (* TODO: review the location of Pexp_array *) + Generic_array.Opened_literal(od, $startpos($3), $endpos, []) } + | mod_longident DOT + ARR_OPEN expr_semi_list error + { Generic_array.Unclosed($loc($3), $loc($5)) } +; + +%inline array_patterns(ARR_OPEN, ARR_CLOSE): + | array_simple(ARR_OPEN, ARR_CLOSE, pattern_semi_list) + { $1 } ; %inline simple_expr_: @@ -2579,20 +2679,19 @@ comprehension_tail(bracket): (Pexp_record(fields, exten))) } | mod_longident DOT LBRACE record_expr_content error { unclosed "{" $loc($3) "}" $loc($5) } - | LBRACKETBAR expr_semi_list BARRBRACKET - { Pexp_array($2) } - | LBRACKETBAR expr_semi_list error - { unclosed "[|" $loc($1) "|]" $loc($3) } - | LBRACKETBAR BARRBRACKET - { Pexp_array [] } - | od=open_dot_declaration DOT LBRACKETBAR expr_semi_list BARRBRACKET - { Pexp_open(od, mkexp ~loc:($startpos($3), $endpos) (Pexp_array($4))) } - | od=open_dot_declaration DOT LBRACKETBAR BARRBRACKET - { (* TODO: review the location of Pexp_array *) - Pexp_open(od, mkexp ~loc:($startpos($3), $endpos) (Pexp_array [])) } - | mod_longident DOT - LBRACKETBAR expr_semi_list error - { unclosed "[|" $loc($3) "|]" $loc($5) } + | array_exprs(LBRACKETBAR, BARRBRACKET) + { Generic_array.expression + "[|" "|]" + (fun elts -> Pexp_array elts) + $1 } + | array_exprs(LBRACKETCOLON, COLONRBRACKET) + { Generic_array.expression + "[:" ":]" + (fun elts -> + (Extensions.Immutable_arrays.expr_of + ~loc:(make_loc $sloc) + (Iaexp_immutable_array elts)).pexp_desc) + $1 } | LBRACKET expr_semi_list RBRACKET { fst (mktailexp $loc($3) $2) } | LBRACKET expr_semi_list error @@ -3006,12 +3105,16 @@ simple_delimited_pattern: { fst (mktailpat $loc($3) $2) } | LBRACKET pattern_semi_list error { unclosed "[" $loc($1) "]" $loc($3) } - | LBRACKETBAR pattern_semi_list BARRBRACKET - { Ppat_array $2 } - | LBRACKETBAR BARRBRACKET - { Ppat_array [] } - | LBRACKETBAR pattern_semi_list error - { unclosed "[|" $loc($1) "|]" $loc($3) } + | array_patterns(LBRACKETBAR, BARRBRACKET) + { Generic_array.pattern + "[|" "|]" + (fun elts -> Ppat_array elts) + $1 } + | array_patterns(LBRACKETCOLON, COLONRBRACKET) + { Generic_array.pattern + "[:" ":]" + (ppat_iarray $sloc) + $1 } ) { $1 } pattern_comma_list(self): @@ -4071,17 +4174,17 @@ attr_id: ) { $1 } ; attribute: - LBRACKETAT attr_id payload RBRACKET - { Builtin_attributes.mk_internal ~loc:(make_loc $sloc) $2 $3 } + LBRACKETAT attr_id attr_payload RBRACKET + { mk_attr ~loc:(make_loc $sloc) $2 $3 } ; post_item_attribute: - LBRACKETATAT attr_id payload RBRACKET - { Builtin_attributes.mk_internal ~loc:(make_loc $sloc) $2 $3 } + LBRACKETATAT attr_id attr_payload RBRACKET + { mk_attr ~loc:(make_loc $sloc) $2 $3 } ; floating_attribute: - LBRACKETATATAT attr_id payload RBRACKET + LBRACKETATATAT attr_id attr_payload RBRACKET { mark_symbol_docs $sloc; - Builtin_attributes.mk_internal ~loc:(make_loc $sloc) $2 $3 } + mk_attr ~loc:(make_loc $sloc) $2 $3 } ; %inline post_item_attributes: post_item_attribute* @@ -4121,4 +4224,10 @@ payload: | QUESTION pattern { PPat ($2, None) } | QUESTION pattern WHEN seq_expr { PPat ($2, Some $4) } ; +attr_payload: + payload + { Builtin_attributes.mark_payload_attrs_used $1; + $1 + } +; %% diff --git a/parsing/pprintast.ml b/parsing/pprintast.ml index eae3d1819802..2678c0760b3a 100644 --- a/parsing/pprintast.ml +++ b/parsing/pprintast.ml @@ -495,7 +495,9 @@ and pattern1 ctxt (f:Format.formatter) (x:pattern) : unit = and simple_pattern ctxt (f:Format.formatter) (x:pattern) : unit = if x.ppat_attributes <> [] then pattern ctxt f x - else match x.ppat_desc with + else match Extensions.Pattern.of_ast x with + | Some epat -> simple_pattern_extension ctxt f epat + | None -> match x.ppat_desc with | Ppat_construct (({txt=Lident ("()"|"[]" as x);_}), None) -> pp f "%s" x | Ppat_any -> pp f "_"; @@ -539,7 +541,11 @@ and simple_pattern ctxt (f:Format.formatter) (x:pattern) : unit = | Ppat_extension e -> extension ctxt f e | Ppat_open (lid, p) -> let with_paren = - match p.ppat_desc with + match Extensions.Pattern.of_ast p with + | Some epat -> begin match epat with + | Epat_immutable_array (Iapat_immutable_array _) -> false + end + | None -> match p.ppat_desc with | Ppat_array _ | Ppat_record _ | Ppat_construct (({txt=Lident ("()"|"[]");_}), None) -> false | _ -> true in @@ -547,6 +553,10 @@ and simple_pattern ctxt (f:Format.formatter) (x:pattern) : unit = (paren with_paren @@ pattern1 ctxt) p | _ -> paren true (pattern ctxt) f x +and simple_pattern_extension ctxt f : Extensions.Pattern.t -> unit = function + | Epat_immutable_array (Iapat_immutable_array l) -> + pp f "@[<2>[:%a:]@]" (list (pattern1 ctxt) ~sep:";") l + and maybe_local_pat ctxt is_local f p = if is_local then pp f "(local_ %a)" (simple_pattern ctxt) p @@ -665,7 +675,9 @@ and expression ctxt f x = if x.pexp_attributes <> [] then pp f "((%a)@,%a)" (expression ctxt) {x with pexp_attributes=[]} (attributes ctxt) x.pexp_attributes - else match x.pexp_desc with + else match Extensions.Expression.of_ast x with + | Some eexpr -> extension_expr ctxt f eexpr + | None -> match x.pexp_desc with | Pexp_function _ | Pexp_fun _ | Pexp_match _ | Pexp_try _ | Pexp_sequence _ | Pexp_newtype _ when ctxt.pipe || ctxt.semi -> @@ -1759,6 +1771,62 @@ and directive_argument f x = | Pdir_ident (li) -> pp f "@ %a" longident li | Pdir_bool (b) -> pp f "@ %s" (string_of_bool b) +and extension_expr ctxt f (x : Extensions.Expression.t) = + match x with + | Eexp_comprehension comp -> comprehension_expr ctxt f comp + | Eexp_immutable_array iaexp -> immutable_array_expr ctxt f iaexp + +and comprehension_expr ctxt f (x : Extensions.Comprehensions.expression) = + let punct, comp = match x with + | Cexp_list_comprehension comp -> + "", comp + | Cexp_array_comprehension (amut, comp) -> + let punct = match amut with + | Mutable -> "|" + | Immutable -> ":" + in + punct, comp + in + comprehension ctxt f ~open_:("[" ^ punct) ~close:(punct ^ "]") comp + +and comprehension ctxt f ~open_ ~close x = + let Extensions.Comprehensions.{ body; clauses } = x in + pp f "@[@[%s%a@ @[%a@]%s@]@]" + open_ + (expression ctxt) body + (list ~sep:"@ " (comprehension_clause ctxt)) clauses + close + +and comprehension_clause ctxt f (x : Extensions.Comprehensions.clause) = + match x with + | For bindings -> + pp f "@[for %a@]" (list ~sep:"@]@ @[and " (comprehension_binding ctxt)) bindings + | When cond -> + pp f "@[when %a@]" (expression ctxt) cond + +and comprehension_binding ctxt f x = + let Extensions.Comprehensions.{ pattern = pat; iterator; attributes = attrs } = x in + pp f "%a%a %a" + (attributes ctxt) attrs + (pattern ctxt) pat + (comprehension_iterator ctxt) iterator + +and comprehension_iterator ctxt f (x : Extensions.Comprehensions.iterator) = + match x with + | Range { start; stop; direction } -> + pp f "=@ %a %a%a" + (expression ctxt) start + direction_flag direction + (expression ctxt) stop + | In seq -> + pp f "in %a" (expression ctxt) seq + +and immutable_array_expr ctxt f (x : Extensions.Immutable_arrays.expression) = + match x with + | Iaexp_immutable_array elts -> + pp f "@[<0>@[<2>[:%a:]@]@]" + (list (simple_expr (under_semi ctxt)) ~sep:";") elts + let toplevel_phrase f x = match x with | Ptop_def (s) ->pp f "@[%a@]" (list (structure_item reset_ctxt)) s diff --git a/stdlib/.depend b/stdlib/.depend index 011e1538bf00..3dbf9ef3a6c5 100644 --- a/stdlib/.depend +++ b/stdlib/.depend @@ -23,10 +23,12 @@ stdlib__Arg.cmi : arg.mli \ stdlib__Array.cmo : array.ml \ stdlib.cmi \ stdlib__Seq.cmi \ + stdlib__Obj.cmi \ stdlib__Array.cmi stdlib__Array.cmx : array.ml \ stdlib.cmx \ stdlib__Seq.cmx \ + stdlib__Obj.cmx \ stdlib__Array.cmi stdlib__Array.cmi : array.mli \ stdlib.cmi \ @@ -139,11 +141,9 @@ camlinternalAtomic.cmx : \ camlinternalAtomic.cmi : camlinternalComprehension.cmo : \ stdlib.cmi \ - stdlib__List.cmi \ camlinternalComprehension.cmi camlinternalComprehension.cmx : \ stdlib.cmx \ - stdlib__List.cmx \ camlinternalComprehension.cmi camlinternalComprehension.cmi : camlinternalFormat.cmo : \ @@ -433,6 +433,32 @@ stdlib__Hashtbl.cmx : hashtbl.ml \ stdlib__Hashtbl.cmi : hashtbl.mli \ stdlib.cmi \ stdlib__Seq.cmi +stdlib__Iarray.cmo : iarray.ml \ + stdlib.cmi \ + stdlib__Seq.cmi \ + stdlib__Obj.cmi \ + stdlib__Array.cmi \ + stdlib__Iarray.cmi +stdlib__Iarray.cmx : iarray.ml \ + stdlib.cmx \ + stdlib__Seq.cmx \ + stdlib__Obj.cmx \ + stdlib__Array.cmx \ + stdlib__Iarray.cmi +stdlib__Iarray.cmi : iarray.mli \ + stdlib.cmi \ + stdlib__Seq.cmi +stdlib__IarrayLabels.cmo : iarrayLabels.ml \ + stdlib.cmi \ + stdlib__Iarray.cmi \ + stdlib__IarrayLabels.cmi +stdlib__IarrayLabels.cmx : iarrayLabels.ml \ + stdlib.cmx \ + stdlib__Iarray.cmx \ + stdlib__IarrayLabels.cmi +stdlib__IarrayLabels.cmi : iarrayLabels.mli \ + stdlib.cmi \ + stdlib__Seq.cmi stdlib__In_channel.cmo : in_channel.ml \ stdlib__Sys.cmi \ stdlib.cmi \ diff --git a/stdlib/StdlibModules b/stdlib/StdlibModules index d59f04953ee6..1d22a1f80ceb 100644 --- a/stdlib/StdlibModules +++ b/stdlib/StdlibModules @@ -38,13 +38,14 @@ STDLIB_MODULE_BASENAMES = \ stdlib pervasives either \ sys obj camlinternalLazy lazy \ seq option result bool char uchar \ - list int bytes string unit marshal array float int32 int64 nativeint \ + list int bytes string unit marshal array iarray float int32 int64 nativeint \ lexing parsing set map stack queue stream buffer \ camlinternalFormat printf arg atomic \ printexc fun gc digest random hashtbl weak \ format scanf callback camlinternalOO oo camlinternalMod genlex ephemeron \ - filename complex arrayLabels listLabels bytesLabels stringLabels moreLabels \ - stdLabels bigarray camlinternalComprehension in_channel out_channel + filename complex arrayLabels iarrayLabels listLabels bytesLabels \ + stringLabels moreLabels stdLabels bigarray camlinternalComprehension \ + in_channel out_channel STDLIB_PREFIXED_MODULES = \ $(filter-out stdlib camlinternal%, $(STDLIB_MODULE_BASENAMES)) diff --git a/stdlib/array.ml b/stdlib/array.ml index bd8b2518e45b..9d43f650c503 100644 --- a/stdlib/array.ml +++ b/stdlib/array.ml @@ -162,6 +162,15 @@ let of_list = function | hd::tl -> unsafe_set a i hd; fill (i+1) tl in fill 1 tl +(* Immutable and mutable arrays have the same runtime representation; we + construct immutable arrays by constructing mutable arrays and then blindly + casting them to become immutable. This is safe here because [copy]: + 1. doesn't mutate its input; + 2. doesn't hold on to its input; and + 3. returns a fresh array as its output. *) +let to_iarray = Obj.magic (copy : 'a array -> 'a array) +let of_iarray = Obj.magic (copy : 'a array -> 'a array) + let fold_left f x a = let r = ref x in for i = 0 to length a - 1 do diff --git a/stdlib/array.mli b/stdlib/array.mli index 5d388746d667..41916676f44e 100644 --- a/stdlib/array.mli +++ b/stdlib/array.mli @@ -24,6 +24,13 @@ open! Stdlib arrayLabels.mli instead. *) +(* CR aspectorzabusky: When I ran [tools/sync_stdlib_docs], it copied the + initial [# 1 "arrayLabels.mli"] line to [array.mli] without modifying the + filename, as well as copying the [[@@@ocaml.nolabels]] line. It also did + that to [{bytes,float,hashtbl,list,map,moreLabels,set,string}.mli]. It also + clobbered our local annotations in [float.mli]. Did I do something wrong or + did something change? *) + (** Array operations. The labeled version of this module can be used as described in the @@ -160,6 +167,16 @@ val of_list : 'a list -> 'a array @raise Invalid_argument if the length of [l] is greater than [Sys.max_array_length]. *) +(** {1 Converting to and from mutable arrays} *) + +val to_iarray : 'a array -> 'a iarray +(** [to_iarray a] returns an immutable copy of the (mutable) array [a]; that is, + a fresh immutable array containing the same elements as [a] *) + +val of_iarray : 'a iarray -> 'a array +(** [of_iarray ia] returns a mutable copy of the immutable array [ia]; that is, + a fresh (mutable) array containing the same elements as [ia] *) + (** {1 Iterators} *) val iter : ('a -> unit) -> 'a array -> unit diff --git a/stdlib/arrayLabels.mli b/stdlib/arrayLabels.mli index ec8bf5df33eb..9f01e8ecd616 100644 --- a/stdlib/arrayLabels.mli +++ b/stdlib/arrayLabels.mli @@ -162,6 +162,16 @@ val of_list : 'a list -> 'a array @raise Invalid_argument if the length of [l] is greater than [Sys.max_array_length]. *) +(** {1 Converting to and from mutable arrays} *) + +val to_iarray : 'a array -> 'a iarray +(** [to_iarray a] returns an immutable copy of the (mutable) array [a]; that is, + a fresh immutable array containing the same elements as [a] *) + +val of_iarray : 'a iarray -> 'a array +(** [of_iarray ia] returns a mutable copy of the immutable array [ia]; that is, + a fresh (mutable) array containing the same elements as [ia] *) + (** {1 Iterators} *) val iter : f:('a -> unit) -> 'a array -> unit diff --git a/stdlib/camlinternalComprehension.ml b/stdlib/camlinternalComprehension.ml index 6be8f4eb65df..879e691456ff 100644 --- a/stdlib/camlinternalComprehension.ml +++ b/stdlib/camlinternalComprehension.ml @@ -1,24 +1,39 @@ open! Stdlib -let rev = List.rev;; - -let map_cons f l acc = - List.fold_left (fun acc el -> (f el acc)) acc l - -let map_from_to_cons f from to_ acc= - let rec loop f from to_ acc = - if to_ < from - then acc - else loop f (from + 1) to_ (f from acc) - in - loop f from to_ acc +type 'a rev_list = + | Nil + | Snoc of { init : 'a rev_list; global_ last : 'a } + +type 'a rev_dlist = local_ 'a rev_list -> local_ 'a rev_list + +let rec rev_list_to_list' acc = function + | Nil -> acc + | Snoc { init; last } -> rev_list_to_list' (last :: acc) init +;; + +let rev_list_to_list rl = rev_list_to_list' [] rl + +(* Can be thought of as the combination of [map] and composition *) +let rec rev_dlist_concat_map l f acc = local_ + (* [List.fold_left (fun acc el -> f el acc) acc l], but more [local_] *) + match l with + | [] -> acc + | el :: l -> rev_dlist_concat_map l f (f el acc) +;; + +(* CR aspectorzabusky: At one point these functions were structured as + [let ... = let rec loop ... in loop ...], and I just inlined the [loop] + because it wasn't doing anything. But were there efficiency reasons I + missed? *) + +let rec rev_dlist_concat_iterate_up from to_ f acc = local_ + if to_ < from + then acc + else rev_dlist_concat_iterate_up (from + 1) to_ f (f from acc) ;; -let map_from_downto_cons f from to_ acc = - let rec loop f from to_ acc = - if to_ > from - then acc - else loop f (from - 1) to_ (f from acc) - in - loop f from to_ acc +let rec rev_dlist_concat_iterate_down from to_ f acc = local_ + if to_ > from + then acc + else rev_dlist_concat_iterate_down (from - 1) to_ f (f from acc) ;; diff --git a/stdlib/camlinternalComprehension.mli b/stdlib/camlinternalComprehension.mli index 2f936b7ebb46..055ab2ade531 100644 --- a/stdlib/camlinternalComprehension.mli +++ b/stdlib/camlinternalComprehension.mli @@ -1,9 +1,45 @@ +(** Supporting functions for list comprehensions *) -val rev : 'a list -> 'a list -val map_cons: - ('a -> 'b list -> 'b list) -> 'a list -> 'b list -> 'b list -val map_from_to_cons: - (int -> 'a list -> 'a list) -> int -> int -> 'a list -> 'a list -val map_from_downto_cons: - (int -> 'a list -> 'a list) -> int -> int -> 'a list -> 'a list +(** Backwards snoc lists that can be spine-local but element-global. This + allows list comprehensions to build their intermediate data structure on the + stack instead of the heap; since list comprehensions build their + intermediate lists backwards, we store these as snoc lists instead of cons + lists. *) +type 'a rev_list = + | Nil + | Snoc of { init : 'a rev_list; global_ last : 'a } +(** List comprehensions are conceptually desugared in terms of difference lists, + functions from ['a list -> 'a list], which have been built in reverse; we + use [rev_list] instead of [list] to keep track of the reversedness and get + stack allocation. All [rev_dlist] values should be [local_], as they're all + intermediate data structures and can also be stack allocated. *) +type 'a rev_dlist = local_ 'a rev_list -> local_ 'a rev_list + +(** Reverse a [local_] snoc list to get a global regular list. To turn a local + reversed difference list into a (global, normal, forwards) list, first + provide it the empty snoc list ([Nil]) and then use this function to get the + final result. *) +val rev_list_to_list : local_ 'a rev_list -> 'a list + +(** [rev_dlist_concat_map] is [concat_map] with its arguments swapped for + reversed difference lists. *) +val rev_dlist_concat_map + : 'a list -> local_ ('a -> local_ 'b rev_dlist) -> local_ 'b rev_dlist + +(** [rev_dlist_concat_iterate_up low high f] is the same as + [rev_dlist_concat_map range f] where [range] is the increasing range from + [low] to [high], inclusive. *) +val rev_dlist_concat_iterate_up + : int -> int -> local_ (int -> local_ 'a rev_dlist) -> local_ 'a rev_dlist + +(** [rev_dlist_concat_iterate_up high low f] is the same as + [rev_dlist_concat_map range f] where [range] is the decreasing range from + [high] to [low], inclusive. *) +val rev_dlist_concat_iterate_down + : int -> int -> local_ (int -> local_ 'a rev_dlist) -> local_ 'a rev_dlist + +(** List comprehensions always produce global values right now, but it would be + great if they could produce local values, too. (Then they'd be able to/have + to iterate over local lists.) That requires either some form of mode + polymorphism or code duplication, so it isn't present yet. *) diff --git a/stdlib/dune b/stdlib/dune index 74c6f660d84e..7ad3a3905e7c 100644 --- a/stdlib/dune +++ b/stdlib/dune @@ -114,6 +114,8 @@ genlex.mli hashtbl.ml hashtbl.mli + iarray.ml + iarray.mli in_channel.ml in_channel.mli int.ml @@ -253,6 +255,12 @@ .stdlib.objs/byte/stdlib__Hashtbl.cmi .stdlib.objs/byte/stdlib__Hashtbl.cmt .stdlib.objs/byte/stdlib__Hashtbl.cmti + .stdlib.objs/byte/stdlib__Iarray.cmi + .stdlib.objs/byte/stdlib__Iarray.cmt + .stdlib.objs/byte/stdlib__Iarray.cmti + .stdlib.objs/byte/stdlib__IarrayLabels.cmi + .stdlib.objs/byte/stdlib__IarrayLabels.cmt + .stdlib.objs/byte/stdlib__IarrayLabels.cmti .stdlib.objs/byte/stdlib__In_channel.cmi .stdlib.objs/byte/stdlib__In_channel.cmt .stdlib.objs/byte/stdlib__In_channel.cmti @@ -455,6 +463,8 @@ .stdlib.objs/native/stdlib__Either.cmx .stdlib.objs/native/stdlib__In_channel.cmx .stdlib.objs/native/stdlib__Out_channel.cmx + .stdlib.objs/native/stdlib__Iarray.cmx + .stdlib.objs/native/stdlib__IarrayLabels.cmx ) (section lib) (package ocaml_runtime_stdlib)) diff --git a/stdlib/iarray.ml b/stdlib/iarray.ml new file mode 100644 index 000000000000..b6586e07dd82 --- /dev/null +++ b/stdlib/iarray.ml @@ -0,0 +1,95 @@ +(* CR aspectorzabusky: This needs a copyright header; should I copy [array.ml]? *) + +open! Stdlib + +[@@@ocaml.flambda_o3] + +(* An alias for the type of immutable arrays. *) +type +'a t = 'a iarray + +(* Array operations *) + +external length : 'a iarray -> int = "%array_length" +external get : 'a iarray -> int -> 'a = "%array_safe_get" +external ( .:() ) : 'a iarray -> int -> 'a = "%array_safe_get" +external unsafe_get : 'a iarray -> int -> 'a = "%array_unsafe_get" + +(* Immutable and mutable arrays have the same runtime representation; we + construct immutable arrays by constructing mutable arrays and then blindly + casting them to become immutable. This is safe here because: + 1. None of these functions mutate their array inputs; + 2. None of these functions hold on to their array inputs; and + 3. All of these functions return fresh arrays if they return an array. *) +let init = + Obj.magic (Array.init : int -> (int -> 'a) -> 'a array) +let append = + Obj.magic (Array.append : 'a array -> 'a array -> 'a array) +let concat = + Obj.magic (Array.concat : 'a array list -> 'a array) +let sub = + Obj.magic (Array.sub : 'a array -> int -> int -> 'a array) +let to_list = + Obj.magic (Array.to_list : 'a array -> 'a list) +let of_list = + Obj.magic (Array.of_list : 'a list -> 'a array) +let iter = + Obj.magic (Array.iter : ('a -> unit) -> 'a array -> unit) +let iteri = + Obj.magic (Array.iteri : (int -> 'a -> unit) -> 'a array -> unit) +let map = + Obj.magic (Array.map : ('a -> 'b) -> 'a array -> 'b array) +let mapi = + Obj.magic (Array.mapi : (int -> 'a -> 'b) -> 'a array -> 'b array) +let fold_left = + Obj.magic (Array.fold_left : ('a -> 'b -> 'a) -> 'a -> 'b array -> 'a) +let fold_left_map = + Obj.magic (Array.fold_left_map : + ('a -> 'b -> 'a * 'c) -> 'a -> 'b array -> 'a * 'c array) +let fold_right = + Obj.magic (Array.fold_right : ('b -> 'a -> 'a) -> 'b array -> 'a -> 'a) +let iter2 = + Obj.magic (Array.iter2 : ('a -> 'b -> unit) -> 'a array -> 'b array -> unit) +let map2 = + Obj.magic (Array.map2 : ('a -> 'b -> 'c) -> 'a array -> 'b array -> 'c array) +let for_all = + Obj.magic (Array.for_all : ('a -> bool) -> 'a array -> bool) +let exists = + Obj.magic (Array.exists : ('a -> bool) -> 'a array -> bool) +let for_all2 = + Obj.magic (Array.for_all2 : ('a -> 'b -> bool) -> 'a array -> 'b array -> bool) +let exists2 = + Obj.magic (Array.exists2 : ('a -> 'b -> bool) -> 'a array -> 'b array -> bool) +let mem = + Obj.magic (Array.mem : 'a -> 'a array -> bool) +let memq = + Obj.magic (Array.memq : 'a -> 'a array -> bool) +let find_opt = + Obj.magic (Array.find_opt : ('a -> bool) -> 'a array -> 'a option) +let find_map = + Obj.magic (Array.find_map : ('a -> 'b option) -> 'a array -> 'b option) +let split = + Obj.magic (Array.split : ('a * 'b) array -> 'a array * 'b array) +let combine = + Obj.magic (Array.combine : 'a array -> 'b array -> ('a * 'b) array) +let to_seq = + Obj.magic (Array.to_seq : 'a array -> 'a Seq.t) +let to_seqi = + Obj.magic (Array.to_seqi : 'a array -> (int * 'a) Seq.t) +let of_seq = + Obj.magic (Array.of_seq : 'a Seq.t -> 'a array) + +(* Only safe if the array isn't used after this call *) +let unsafe_of_array : 'a array -> 'a iarray = Obj.magic + +(* Must be fully applied due to the value restriction *) +let lift_sort sorter cmp iarr = + let arr = Array.of_iarray iarr in + sorter cmp arr; + unsafe_of_array arr + +let sort cmp iarr = lift_sort Array.sort cmp iarr +let stable_sort cmp iarr = lift_sort Array.stable_sort cmp iarr +let fast_sort cmp iarr = lift_sort Array.fast_sort cmp iarr + +let to_array = Array.of_iarray +let of_array = Array.to_iarray diff --git a/stdlib/iarray.mli b/stdlib/iarray.mli new file mode 100644 index 000000000000..8648cabf8cb0 --- /dev/null +++ b/stdlib/iarray.mli @@ -0,0 +1,252 @@ +(* CR aspectorzabusky: This needs a copyright header; should I copy [array.mli]? *) + +open! Stdlib + +(* NOTE: + If this file is iarrayLabels.mli, run tools/sync_stdlib_docs after editing it + to generate iarray.mli. + + If this file is iarray.mli, do not edit it directly -- edit + iarrayLabels.mli instead. + *) + +(* If you update any types in this module, you need to update iarray.ml as well; + it uses Obj.magic, so changes won't be detected. *) + +(** Operations on immutable arrays. This module mirrors the API of [Array], but + omits functions that assume mutability; in particular, it omits [copy] along + with the functions [make], [create_float], and [make_matrix] that produce + all-constant arrays. *) + +type +'a t = 'a iarray +(** An alias for the type of immutable arrays. *) + +external length : 'a iarray -> int = "%array_length" +(** Return the length (number of elements) of the given immutable array. *) + +external get : 'a iarray -> int -> 'a = "%array_safe_get" +(** [get a n] returns the element number [n] of immutable array [a]. + The first element has number 0. + The last element has number [length a - 1]. + You can also write [a.:(n)] instead of [get a n]. + + @raise Invalid_argument + if [n] is outside the range 0 to [(length a - 1)]. *) + +external ( .:() ) : 'a iarray -> int -> 'a = "%array_safe_get" +(** A synonym for [get]. *) + +val init : int -> (int -> 'a) -> 'a iarray +(** [init n f] returns a fresh immutable array of length [n], + with element number [i] initialized to the result of [f i]. + In other terms, [init n f] tabulates the results of [f] + applied to the integers [0] to [n-1]. + + @raise Invalid_argument if [n < 0] or [n > Sys.max_array_length]. + If the return type of [f] is [float], then the maximum + size is only [Sys.max_array_length / 2]. *) + +val append : 'a iarray -> 'a iarray -> 'a iarray +(** [append v1 v2] returns a fresh immutable array containing the + concatenation of the immutable arrays [v1] and [v2]. + @raise Invalid_argument if + [length v1 + length v2 > Sys.max_array_length]. *) + +val concat : 'a iarray list -> 'a iarray +(** Same as {!append}, but concatenates a list of immutable arrays. *) + +val sub : 'a iarray -> int -> int -> 'a iarray +(** [sub a pos len] returns a fresh immutable array of length [len], + containing the elements number [pos] to [pos + len - 1] + of immutable array [a]. + + @raise Invalid_argument if [pos] and [len] do not + designate a valid subarray of [a]; that is, if + [pos < 0], or [len < 0], or [pos + len > length a]. *) + +val to_list : 'a iarray -> 'a list +(** [to_list a] returns the list of all the elements of [a]. *) + +val of_list : 'a list -> 'a iarray +(** [of_list l] returns a fresh immutable array containing the elements + of [l]. + + @raise Invalid_argument if the length of [l] is greater than + [Sys.max_array_length]. *) + +(** {1 Converting to and from mutable arrays} *) + +val to_array : 'a iarray -> 'a array +(** [to_array a] returns a mutable copy of the immutable array [a]; that is, a + fresh (mutable) array containing the same elements as [a] *) + +val of_array : 'a array -> 'a iarray +(** [of_array ma] returns an immutable copy of the mutable array [ma]; that is, + a fresh immutable array containing the same elements as [ma] *) + +(** {1 Iterators} *) + +val iter : ('a -> unit) -> 'a iarray -> unit +(** [iter f a] applies function [f] in turn to all + the elements of [a]. It is equivalent to + [f a.:(0); f a.:(1); ...; f a.:(length a - 1); ()]. *) + +val iteri : (int -> 'a -> unit) -> 'a iarray -> unit +(** Same as {!iter}, but the + function is applied to the index of the element as first argument, + and the element itself as second argument. *) + +val map : ('a -> 'b) -> 'a iarray -> 'b iarray +(** [map f a] applies function [f] to all the elements of [a], + and builds an immutable array with the results returned by [f]: + [[| f a.:(0); f a.:(1); ...; f a.:(length a - 1) |]]. *) + +val mapi : (int -> 'a -> 'b) -> 'a iarray -> 'b iarray +(** Same as {!map}, but the + function is applied to the index of the element as first argument, + and the element itself as second argument. *) + +val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b iarray -> 'a +(** [fold_left f init a] computes + [f (... (f (f init a.:(0)) a.:(1)) ...) a.:(n-1)], + where [n] is the length of the immutable array [a]. *) + +val fold_left_map : + ('a -> 'b -> 'a * 'c) -> 'a -> 'b iarray -> 'a * 'c iarray +(** [fold_left_map] is a combination of {!fold_left} and {!map} that threads an + accumulator through calls to [f]. *) + +val fold_right : ('b -> 'a -> 'a) -> 'b iarray -> 'a -> 'a +(** [fold_right f a init] computes + [f a.:(0) (f a.:(1) ( ... (f a.:(n-1) init) ...))], + where [n] is the length of the immutable array [a]. *) + + +(** {1 Iterators on two arrays} *) + + +val iter2 : ('a -> 'b -> unit) -> 'a iarray -> 'b iarray -> unit +(** [iter2 f a b] applies function [f] to all the elements of [a] + and [b]. + @raise Invalid_argument if the immutable arrays are not the same size. + *) + +val map2 : ('a -> 'b -> 'c) -> 'a iarray -> 'b iarray -> 'c iarray +(** [map2 f a b] applies function [f] to all the elements of [a] + and [b], and builds an immutable array with the results returned by [f]: + [[| f a.:(0) b.:(0); ...; f a.:(length a - 1) b.:(length b - 1)|]]. + @raise Invalid_argument if the immutable arrays are not the same size. *) + + +(** {1 Array scanning} *) + +val for_all : ('a -> bool) -> 'a iarray -> bool +(** [for_all f [|a1; ...; an|]] checks if all elements + of the immutable array satisfy the predicate [f]. That is, it returns + [(f a1) && (f a2) && ... && (f an)]. *) + +val exists : ('a -> bool) -> 'a iarray -> bool +(** [exists f [|a1; ...; an|]] checks if at least one element of + the immutable array satisfies the predicate [f]. That is, it returns + [(f a1) || (f a2) || ... || (f an)]. *) + +val for_all2 : ('a -> 'b -> bool) -> 'a iarray -> 'b iarray -> bool +(** Same as {!for_all}, but for a two-argument predicate. + @raise Invalid_argument if the two immutable arrays have different + lengths. *) + +val exists2 : ('a -> 'b -> bool) -> 'a iarray -> 'b iarray -> bool +(** Same as {!exists}, but for a two-argument predicate. + @raise Invalid_argument if the two immutable arrays have different + lengths. *) + +val mem : 'a -> 'a iarray -> bool +(** [mem a set] is true if and only if [a] is structurally equal + to an element of [l] (i.e. there is an [x] in [l] such that + [compare a x = 0]). *) + +val memq : 'a -> 'a iarray -> bool +(** Same as {!mem}, but uses physical equality + instead of structural equality to compare list elements. *) + +val find_opt : ('a -> bool) -> 'a iarray -> 'a option +(** [find_opt ~f a] returns the first element of the immutable array [a] that + satisfies the predicate [f], or [None] if there is no value that satisfies + [f] in the array [a]. *) + +val find_map : ('a -> 'b option) -> 'a iarray -> 'b option +(** [find_map ~f a] applies [f] to the elements of [a] in order, and returns the + first result of the form [Some v], or [None] if none exist. *) + +(** {1 Arrays of pairs} *) + +val split : ('a * 'b) iarray -> 'a iarray * 'b iarray +(** [split [:(a1,b1); ...; (an,bn):]] is + [([:a1; ...; an:], [:b1; ...; bn:])]. *) + +val combine : 'a iarray -> 'b iarray -> ('a * 'b) iarray +(** [combine [:a1; ...; an:] [:b1; ...; bn:]] is [[:(a1,b1); ...; (an,bn):]]. + Raise [Invalid_argument] if the two immutable iarrays have different + lengths. *) + +(** {1 Sorting} *) + +val sort : ('a -> 'a -> int) -> 'a iarray -> 'a iarray +(** Sort an immutable array in increasing order according to a comparison + function. The comparison function must return 0 if its arguments + compare as equal, a positive integer if the first is greater, + and a negative integer if the first is smaller (see below for a + complete specification). For example, {!Stdlib.compare} is + a suitable comparison function. The result of calling [sort] is a fresh + immutable array containing the same elements as the original sorted in + increasing order. Other than this fresh array, [sort] is guaranteed to run in + constant heap space and (at most) logarithmic stack space. + + The current implementation uses Heap Sort. It runs in constant + stack space. + + Specification of the comparison function: + Let [a] be the immutable array and [cmp] the comparison function. The + following must be true for all [x], [y], [z] in [a] : +- [cmp x y] > 0 if and only if [cmp y x] < 0 +- if [cmp x y] >= 0 and [cmp y z] >= 0 then [cmp x z] >= 0 + + The result of [sort], which we'll call [a'], contains the same elements as + [a], reordered in such a way that for all i and j valid indices of [a] (or + equivalently, of [a']): +- [cmp a'.:(i) a'.:(j)] >= 0 if and only if i >= j +*) + +val stable_sort : ('a -> 'a -> int) -> 'a iarray -> 'a iarray +(** Same as {!sort}, but the sorting algorithm is stable (i.e. + elements that compare equal are kept in their original order) and + not guaranteed to run in constant heap space. + + The current implementation uses Merge Sort. It uses a temporary array of + length [n/2], where [n] is the length of the immutable array. It is usually + faster than the current implementation of {!sort}. +*) + +val fast_sort : ('a -> 'a -> int) -> 'a iarray -> 'a iarray +(** Same as {!sort} or {!stable_sort}, whichever is + faster on typical input. *) + +(** {1 Iterators} *) + +val to_seq : 'a iarray -> 'a Seq.t +(** Iterate on the immutable array, in increasing order. *) + +val to_seqi : 'a iarray -> (int * 'a) Seq.t +(** Iterate on the immutable array, in increasing order, yielding indices along + elements. *) + +val of_seq : 'a Seq.t -> 'a iarray +(** Create an immutable array from the generator *) + +(**/**) + +(** {1 Undocumented functions} *) + +(* The following is for system use only. Do not call directly. *) + +external unsafe_get : 'a iarray -> int -> 'a = "%array_unsafe_get" diff --git a/stdlib/iarrayLabels.ml b/stdlib/iarrayLabels.ml new file mode 100644 index 000000000000..337caa1ad4e1 --- /dev/null +++ b/stdlib/iarrayLabels.ml @@ -0,0 +1,11 @@ +(* CR aspectorzabusky: This needs a copyright header; should I copy [array.ml]? *) + +open! Stdlib + +[@@@ocaml.flambda_o3] + +(* Module [IarrayLabels]: labelled Iarray module *) + +[@@@ocaml.nolabels] + +include Iarray diff --git a/stdlib/iarrayLabels.mli b/stdlib/iarrayLabels.mli new file mode 100644 index 000000000000..16efb5c0282e --- /dev/null +++ b/stdlib/iarrayLabels.mli @@ -0,0 +1,255 @@ +(* CR aspectorzabusky: This needs a copyright header; should I copy [arrayLabels.mli]? *) + +open! Stdlib + +(* NOTE: + If this file is iarrayLabels.mli, run tools/sync_stdlib_docs after editing it + to generate iarray.mli. + + If this file is iarray.mli, do not edit it directly -- edit + iarrayLabels.mli instead. + *) + +(* If you update any types in this module, you need to update iarray.ml as well; + it uses Obj.magic, so changes won't be detected. *) + +(** Operations on immutable arrays. This module mirrors the API of [Array], but + omits functions that assume mutability; in addition to obviously mutating + functions, it omits [copy] along with the functions [make], [create_float], + and [make_matrix] that produce all-constant arrays. The exception is the + sorting functions, which are given a copying API to replace the in-place + one. *) + +type +'a t = 'a iarray +(** An alias for the type of immutable arrays. *) + +external length : 'a iarray -> int = "%array_length" +(** Return the length (number of elements) of the given immutable array. *) + +external get : 'a iarray -> int -> 'a = "%array_safe_get" +(** [get a n] returns the element number [n] of immutable array [a]. + The first element has number 0. + The last element has number [length a - 1]. + You can also write [a.:(n)] instead of [get a n]. + + @raise Invalid_argument + if [n] is outside the range 0 to [(length a - 1)]. *) + +external ( .:() ) : 'a iarray -> int -> 'a = "%array_safe_get" +(** A synonym for [get]. *) + +val init : int -> f:(int -> 'a) -> 'a iarray +(** [init n ~f] returns a fresh immutable array of length [n], + with element number [i] initialized to the result of [f i]. + In other terms, [init n ~f] tabulates the results of [f] + applied to the integers [0] to [n-1]. + + @raise Invalid_argument if [n < 0] or [n > Sys.max_array_length]. + If the return type of [f] is [float], then the maximum + size is only [Sys.max_array_length / 2]. *) + +val append : 'a iarray -> 'a iarray -> 'a iarray +(** [append v1 v2] returns a fresh immutable array containing the + concatenation of the immutable arrays [v1] and [v2]. + @raise Invalid_argument if + [length v1 + length v2 > Sys.max_array_length]. *) + +val concat : 'a iarray list -> 'a iarray +(** Same as {!append}, but concatenates a list of immutable arrays. *) + +val sub : 'a iarray -> pos:int -> len:int -> 'a iarray +(** [sub a ~pos ~len] returns a fresh immutable array of length [len], + containing the elements number [pos] to [pos + len - 1] + of immutable array [a]. This creates a copy of the selected + portion of the immutable array. + + @raise Invalid_argument if [pos] and [len] do not + designate a valid subarray of [a]; that is, if + [pos < 0], or [len < 0], or [pos + len > length a]. *) + +val to_list : 'a iarray -> 'a list +(** [to_list a] returns the list of all the elements of [a]. *) + +val of_list : 'a list -> 'a iarray +(** [of_list l] returns a fresh immutable array containing the elements + of [l]. + + @raise Invalid_argument if the length of [l] is greater than + [Sys.max_array_length]. *) + +(** {1 Converting to and from mutable arrays} *) + +val to_array : 'a iarray -> 'a array +(** [to_array a] returns a mutable copy of the immutable array [a]; that is, a + fresh (mutable) array containing the same elements as [a] *) + +val of_array : 'a array -> 'a iarray +(** [of_array ma] returns an immutable copy of the mutable array [ma]; that is, + a fresh immutable array containing the same elements as [ma] *) + +(** {1 Iterators} *) + +val iter : f:('a -> unit) -> 'a iarray -> unit +(** [iter ~f a] applies function [f] in turn to all + the elements of [a]. It is equivalent to + [f a.:(0); f a.:(1); ...; f a.:(length a - 1); ()]. *) + +val iteri : f:(int -> 'a -> unit) -> 'a iarray -> unit +(** Same as {!iter}, but the + function is applied to the index of the element as first argument, + and the element itself as second argument. *) + +val map : f:('a -> 'b) -> 'a iarray -> 'b iarray +(** [map ~f a] applies function [f] to all the elements of [a], + and builds an immutable array with the results returned by [f]: + [[| f a.:(0); f a.:(1); ...; f a.:(length a - 1) |]]. *) + +val mapi : f:(int -> 'a -> 'b) -> 'a iarray -> 'b iarray +(** Same as {!map}, but the + function is applied to the index of the element as first argument, + and the element itself as second argument. *) + +val fold_left : f:('a -> 'b -> 'a) -> init:'a -> 'b iarray -> 'a +(** [fold_left ~f ~init a] computes + [f (... (f (f init a.:(0)) a.:(1)) ...) a.:(n-1)], + where [n] is the length of the immutable array [a]. *) + +val fold_left_map : + f:('a -> 'b -> 'a * 'c) -> init:'a -> 'b iarray -> 'a * 'c iarray +(** [fold_left_map] is a combination of {!fold_left} and {!map} that threads an + accumulator through calls to [f]. *) + +val fold_right : f:('b -> 'a -> 'a) -> 'b iarray -> init:'a -> 'a +(** [fold_right ~f a ~init] computes + [f a.:(0) (f a.:(1) ( ... (f a.:(n-1) init) ...))], + where [n] is the length of the immutable array [a]. *) + + +(** {1 Iterators on two arrays} *) + + +val iter2 : f:('a -> 'b -> unit) -> 'a iarray -> 'b iarray -> unit +(** [iter2 ~f a b] applies function [f] to all the elements of [a] + and [b]. + @raise Invalid_argument if the immutable arrays are not the same size. + *) + +val map2 : f:('a -> 'b -> 'c) -> 'a iarray -> 'b iarray -> 'c iarray +(** [map2 ~f a b] applies function [f] to all the elements of [a] + and [b], and builds an immutable array with the results returned by [f]: + [[| f a.:(0) b.:(0); ...; f a.:(length a - 1) b.:(length b - 1)|]]. + @raise Invalid_argument if the immutable arrays are not the same size. *) + + +(** {1 Array scanning} *) + +val for_all : f:('a -> bool) -> 'a iarray -> bool +(** [for_all ~f [|a1; ...; an|]] checks if all elements + of the immutable array satisfy the predicate [f]. That is, it returns + [(f a1) && (f a2) && ... && (f an)]. *) + +val exists : f:('a -> bool) -> 'a iarray -> bool +(** [exists ~f [|a1; ...; an|]] checks if at least one element of + the immutable array satisfies the predicate [f]. That is, it returns + [(f a1) || (f a2) || ... || (f an)]. *) + +val for_all2 : f:('a -> 'b -> bool) -> 'a iarray -> 'b iarray -> bool +(** Same as {!for_all}, but for a two-argument predicate. + @raise Invalid_argument if the two immutable arrays have different + lengths. *) + +val exists2 : f:('a -> 'b -> bool) -> 'a iarray -> 'b iarray -> bool +(** Same as {!exists}, but for a two-argument predicate. + @raise Invalid_argument if the two immutable arrays have different + lengths. *) + +val mem : 'a -> set:'a iarray -> bool +(** [mem a ~set] is true if and only if [a] is structurally equal + to an element of [l] (i.e. there is an [x] in [l] such that + [compare a x = 0]). *) + +val memq : 'a -> set:'a iarray -> bool +(** Same as {!mem}, but uses physical equality + instead of structural equality to compare list elements. *) + +val find_opt : f:('a -> bool) -> 'a iarray -> 'a option +(** [find_opt ~f a] returns the first element of the immutable array [a] that + satisfies the predicate [f], or [None] if there is no value that satisfies + [f] in the array [a]. *) + +val find_map : f:('a -> 'b option) -> 'a iarray -> 'b option +(** [find_map ~f a] applies [f] to the elements of [a] in order, and returns the + first result of the form [Some v], or [None] if none exist. *) + +(** {1 Arrays of pairs} *) + +val split : ('a * 'b) iarray -> 'a iarray * 'b iarray +(** [split [:(a1,b1); ...; (an,bn):]] is + [([:a1; ...; an:], [:b1; ...; bn:])]. *) + +val combine : 'a iarray -> 'b iarray -> ('a * 'b) iarray +(** [combine [:a1; ...; an:] [:b1; ...; bn:]] is [[:(a1,b1); ...; (an,bn):]]. + Raise [Invalid_argument] if the two immutable iarrays have different + lengths. *) + +(** {1 Sorting} *) + +val sort : cmp:('a -> 'a -> int) -> 'a iarray -> 'a iarray +(** Sort an immutable array in increasing order according to a comparison + function. The comparison function must return 0 if its arguments + compare as equal, a positive integer if the first is greater, + and a negative integer if the first is smaller (see below for a + complete specification). For example, {!Stdlib.compare} is + a suitable comparison function. The result of calling [sort] is a fresh + immutable array containing the same elements as the original sorted in + increasing order. Other than this fresh array, [sort] is guaranteed to run in + constant heap space and (at most) logarithmic stack space. + + The current implementation uses Heap Sort. It runs in constant + stack space. + + Specification of the comparison function: + Let [a] be the immutable array and [cmp] the comparison function. The + following must be true for all [x], [y], [z] in [a] : +- [cmp x y] > 0 if and only if [cmp y x] < 0 +- if [cmp x y] >= 0 and [cmp y z] >= 0 then [cmp x z] >= 0 + + The result of [sort], which we'll call [a'], contains the same elements as + [a], reordered in such a way that for all i and j valid indices of [a] (or + equivalently, of [a']): +- [cmp a'.:(i) a'.:(j)] >= 0 if and only if i >= j +*) + +val stable_sort : cmp:('a -> 'a -> int) -> 'a iarray -> 'a iarray +(** Same as {!sort}, but the sorting algorithm is stable (i.e. + elements that compare equal are kept in their original order) and + not guaranteed to run in constant heap space. + + The current implementation uses Merge Sort. It uses a temporary array of + length [n/2], where [n] is the length of the immutable array. It is usually + faster than the current implementation of {!sort}. +*) + +val fast_sort : cmp:('a -> 'a -> int) -> 'a iarray -> 'a iarray +(** Same as {!sort} or {!stable_sort}, whichever is + faster on typical input. *) + +(** {1 Iterators} *) + +val to_seq : 'a iarray -> 'a Seq.t +(** Iterate on the immutable array, in increasing order. *) + +val to_seqi : 'a iarray -> (int * 'a) Seq.t +(** Iterate on the immutable array, in increasing order, yielding indices along + elements. *) + +val of_seq : 'a Seq.t -> 'a iarray +(** Create an immutable array from the generator *) + +(**/**) + +(** {1 Undocumented functions} *) + +(* The following is for system use only. Do not call directly. *) + +external unsafe_get : 'a iarray -> int -> 'a = "%array_unsafe_get" diff --git a/stdlib/stdlib.ml b/stdlib/stdlib.ml index aab00bf3da75..de508be84d13 100644 --- a/stdlib/stdlib.ml +++ b/stdlib/stdlib.ml @@ -229,6 +229,10 @@ external unsafe_char_of_int : int -> char = "%identity" let char_of_int n = if n < 0 || n > 255 then invalid_arg "char_of_int" else unsafe_char_of_int n +(* Array operations -- more in modules Array and Iarray *) + +external ( .:() ) : 'a iarray -> int -> 'a = "%array_safe_get" + (* Unit operations *) external ignore : 'a -> unit = "%ignore" @@ -604,6 +608,8 @@ module Gc = Gc module Genlex = Genlex module Hashtbl = Hashtbl module In_channel = In_channel +module Iarray = Iarray +module IarrayLabels = IarrayLabels module Int = Int module Int32 = Int32 module Int64 = Int64 diff --git a/stdlib/stdlib.mli b/stdlib/stdlib.mli index 8bd7485e93f6..58589bf38dc3 100644 --- a/stdlib/stdlib.mli +++ b/stdlib/stdlib.mli @@ -724,6 +724,21 @@ val char_of_int : int -> char outside the range 0--255. *) +(** {1 Array operations} + + More array operations are provided in modules {!Array} and {!Iarray}. +*) + +external ( .:() ) : 'a iarray -> int -> 'a = "%array_safe_get" +(** [a.:(n)] returns the element number [n] of immutable array [a]. + The first element has number 0. + The last element has number [length a - 1]. + You can also write [a.:(n)] instead of [get a n]. + + @raise Invalid_argument + if [n] is outside the range 0 to [(length a - 1)]. *) + + (** {1 Unit operations} *) external ignore : 'a -> unit = "%ignore" @@ -1421,6 +1436,8 @@ module Genlex = Genlex [@@deprecated "Use the camlp-streams library instead."] module Hashtbl = Hashtbl module In_channel = In_channel +module Iarray = Iarray +module IarrayLabels = IarrayLabels module Int = Int module Int32 = Int32 module Int64 = Int64 diff --git a/testsuite/tests/array-functions/test_iarray.ml b/testsuite/tests/array-functions/test_iarray.ml new file mode 100644 index 000000000000..e096c26daa5b --- /dev/null +++ b/testsuite/tests/array-functions/test_iarray.ml @@ -0,0 +1,272 @@ +(* TEST + flags = "-extension immutable_arrays_experimental" +*) + +(* Copied from [test.ml], but with all the [Array.fill] tests deleted *) + +(* [iarray]s don't have the [make*] functions, so we redefine them here *) +let make n x = Iarray.init n (fun _ -> x);; +let make_matrix m n x = make m (make n x);; + +let () = + let a = [:0;1;2;3;4;5;6;7;8;9:] in + assert (Iarray.exists (fun a -> a < 10) a); + assert (Iarray.exists (fun a -> a > 0) a); + assert (Iarray.exists (fun a -> a = 0) a); + assert (Iarray.exists (fun a -> a = 1) a); + assert (Iarray.exists (fun a -> a = 2) a); + assert (Iarray.exists (fun a -> a = 3) a); + assert (Iarray.exists (fun a -> a = 4) a); + assert (Iarray.exists (fun a -> a = 5) a); + assert (Iarray.exists (fun a -> a = 6) a); + assert (Iarray.exists (fun a -> a = 7) a); + assert (Iarray.exists (fun a -> a = 8) a); + assert (Iarray.exists (fun a -> a = 9) a); + assert (not (Iarray.exists (fun a -> a < 0) a)); + assert (not (Iarray.exists (fun a -> a > 9) a)); + assert (Iarray.exists (fun _ -> true) a); +;; + +let () = + let a = [:1;2;3:] in + assert (Iarray.exists (fun a -> a < 3) a); + assert (Iarray.exists (fun a -> a < 2) a); + assert (not (Iarray.exists (fun a -> a < 1) a)); + assert (Iarray.exists (fun a -> a mod 2 = 0) [:1;4;5:]); + assert (not (Iarray.exists (fun a -> a mod 2 = 0) [:1;3;5:])); + assert (not (Iarray.exists (fun _ -> true) [::])); + assert (Iarray.exists (fun a -> a.:(9) = 1) (make_matrix 10 10 1));; +;; + +let () = + let a: int iarray = [::] in + assert (not (Iarray.exists (fun a -> a = 0) a)); + assert (not (Iarray.exists (fun a -> a = 1) a)); + assert (not (Iarray.exists (fun a -> a = 2) a)); + assert (not (Iarray.exists (fun a -> a = 3) a)); + assert (not (Iarray.exists (fun a -> a = 4) a)); + assert (not (Iarray.exists (fun a -> a = 5) a)); + assert (not (Iarray.exists (fun a -> a = 6) a)); + assert (not (Iarray.exists (fun a -> a = 7) a)); + assert (not (Iarray.exists (fun a -> a = 8) a)); + assert (not (Iarray.exists (fun a -> a = 9) a)); + assert (not (Iarray.exists (fun a -> a <> 0) a)); + assert (not (Iarray.exists (fun a -> a <> 1) a)); + assert (not (Iarray.exists (fun a -> a <> 2) a)); + assert (not (Iarray.exists (fun a -> a <> 3) a)); + assert (not (Iarray.exists (fun a -> a <> 4) a)); + assert (not (Iarray.exists (fun a -> a <> 5) a)); + assert (not (Iarray.exists (fun a -> a <> 6) a)); + assert (not (Iarray.exists (fun a -> a <> 7) a)); + assert (not (Iarray.exists (fun a -> a <> 8) a)); + assert (not (Iarray.exists (fun a -> a <> 9) a)); + assert (not (Iarray.exists (fun a -> a < 0) a)); + assert (not (Iarray.exists (fun a -> a < 1) a)); + assert (not (Iarray.exists (fun a -> a < 2) a)); + assert (not (Iarray.exists (fun a -> a < 3) a)); + assert (not (Iarray.exists (fun a -> a < 4) a)); + assert (not (Iarray.exists (fun a -> a < 5) a)); + assert (not (Iarray.exists (fun a -> a < 6) a)); + assert (not (Iarray.exists (fun a -> a < 7) a)); + assert (not (Iarray.exists (fun a -> a < 8) a)); + assert (not (Iarray.exists (fun a -> a < 9) a)); + assert (not (Iarray.exists (fun a -> a > 0) a)); + assert (not (Iarray.exists (fun a -> a > 1) a)); + assert (not (Iarray.exists (fun a -> a > 2) a)); + assert (not (Iarray.exists (fun a -> a > 3) a)); + assert (not (Iarray.exists (fun a -> a > 4) a)); + assert (not (Iarray.exists (fun a -> a > 5) a)); + assert (not (Iarray.exists (fun a -> a > 6) a)); + assert (not (Iarray.exists (fun a -> a > 7) a)); + assert (not (Iarray.exists (fun a -> a > 8) a)); + assert (not (Iarray.exists (fun a -> a > 9) a)); +;; + +let () = + let a = [:0;1;2;3;4;5;6;7;8;9:] in + assert (Iarray.for_all (fun a -> a < 10) a); + assert (Iarray.for_all (fun a -> a >= 0) a); + assert (not (Iarray.for_all (fun a -> a = 0) a)); + assert (not (Iarray.for_all (fun a -> a = 1) a)); + assert (not (Iarray.for_all (fun a -> a = 2) a)); + assert (not (Iarray.for_all (fun a -> a = 3) a)); + assert (not (Iarray.for_all (fun a -> a = 4) a)); + assert (not (Iarray.for_all (fun a -> a = 5) a)); + assert (not (Iarray.for_all (fun a -> a = 6) a)); + assert (not (Iarray.for_all (fun a -> a = 7) a)); + assert (not (Iarray.for_all (fun a -> a = 8) a)); + assert (not (Iarray.for_all (fun a -> a = 9) a)); + assert (Iarray.for_all (fun a -> a <> 10) a); + assert (Iarray.for_all (fun a -> a <> (-1)) a); + assert (Iarray.for_all (fun _ -> true) a); +;; + +let () = + assert (Iarray.for_all (fun x -> x mod 2 = 0) [:2;4;6:]); + assert (not (Iarray.for_all (fun x -> x mod 2 = 0) [:2;3;6:])); + assert (Iarray.for_all (fun _ -> false) [::]); + assert (Iarray.for_all (fun a -> a.:(9) = 1) (make_matrix 10 10 1)); +;; +;; + +let () = + let a = [::] in + assert (Iarray.for_all (fun a -> a < 10) a); + assert (Iarray.for_all (fun a -> a >= 0) a); + assert (Iarray.for_all (fun a -> a = 0) a); + assert (Iarray.for_all (fun a -> a = 1) a); + assert (Iarray.for_all (fun a -> a = 2) a); + assert (Iarray.for_all (fun a -> a = 3) a); + assert (Iarray.for_all (fun a -> a = 4) a); + assert (Iarray.for_all (fun a -> a = 5) a); + assert (Iarray.for_all (fun a -> a = 6) a); + assert (Iarray.for_all (fun a -> a = 7) a); + assert (Iarray.for_all (fun a -> a = 8) a); + assert (Iarray.for_all (fun a -> a = 9) a); + assert (Iarray.for_all (fun a -> a <> 10) a); + assert (Iarray.for_all (fun a -> a <> (-1)) a); + assert (Iarray.for_all (fun _ -> true) a); +;; + +let does_raise3 f a b c = + try + ignore (f a b c); + false + with _ -> + true + +let () = + let a = [:1;2;3;4;5;6;7;8;9:] + and b = [:1;2;3;4;5;6;7;8;9:] in + assert (Iarray.exists2 (fun a b -> a = b) a b); + assert (Iarray.exists2 (fun a b -> a - b = 0) a b); + assert (Iarray.exists2 (fun a b -> a = 1 && b = 1) a b); + assert (Iarray.exists2 (fun a b -> a = 2 && b = 2) a b); + assert (Iarray.exists2 (fun a b -> a = 3 && b = 3) a b); + assert (Iarray.exists2 (fun a b -> a = 4 && b = 4) a b); + assert (Iarray.exists2 (fun a b -> a = 5 && b = 5) a b); + assert (Iarray.exists2 (fun a b -> a = 6 && b = 6) a b); + assert (Iarray.exists2 (fun a b -> a = 7 && b = 7) a b); + assert (Iarray.exists2 (fun a b -> a = 8 && b = 8) a b); + assert (Iarray.exists2 (fun a b -> a = 9 && b = 9) a b); + assert (not (Iarray.exists2 (fun a b -> a <> b) a b)); +;; + +let () = + let a = [:1:] + and b = [:1;2:] in + assert (does_raise3 Iarray.exists2 (fun a b -> a = b) a b); + assert (does_raise3 Iarray.exists2 (fun _ _ -> true) a b); + assert (does_raise3 Iarray.exists2 (fun _ _ -> false) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 1 && b = 1) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 2 && b = 2) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 3 && b = 3) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 4 && b = 4) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 5 && b = 5) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 6 && b = 6) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 7 && b = 7) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 8 && b = 8) a b); + assert (does_raise3 Iarray.exists2 (fun a b -> a = 9 && b = 9) a b); +;; + +let () = + assert (Iarray.exists2 (=) [:1;2;3:] [:3;2;1:]); + assert (not (Iarray.exists2 (<>) [:1;2;3:] [:1;2;3:])); + assert (does_raise3 Iarray.exists2 (=) [:1;2:] [:3:]); +;; + +let () = + let a = [:1;2;3;4;5;6;7;8;9:] + and b = [:1;2;3;4;5;6;7;8;9:] in + assert (Iarray.for_all2 (fun a b -> a = b) a b); + assert (Iarray.for_all2 (fun a b -> a - b = 0) a b); + assert (Iarray.for_all2 (fun a b -> a > 0 && b > 0) a b); + assert (Iarray.for_all2 (fun a b -> a < 10 && b < 10) a b); + assert (Iarray.for_all2 (fun a b -> if a = 1 then b = 1 else b <> 1) a b); + assert (Iarray.for_all2 (fun a b -> if a = 2 then b = 2 else b <> 2) a b); + assert (Iarray.for_all2 (fun a b -> if a = 3 then b = 3 else b <> 3) a b); + assert (Iarray.for_all2 (fun a b -> if a = 4 then b = 4 else b <> 4) a b); + assert (Iarray.for_all2 (fun a b -> if a = 5 then b = 5 else b <> 5) a b); + assert (Iarray.for_all2 (fun a b -> if a = 6 then b = 6 else b <> 6) a b); + assert (Iarray.for_all2 (fun a b -> if a = 7 then b = 7 else b <> 7) a b); + assert (Iarray.for_all2 (fun a b -> if a = 8 then b = 8 else b <> 8) a b); + assert (Iarray.for_all2 (fun a b -> if a = 9 then b = 9 else b <> 9) a b); + assert (not (Iarray.for_all2 (fun a b -> a <> b) a b)); +;; + +let () = + let a = [:1:] + and b = [:1;2:] in + assert (does_raise3 Iarray.for_all2 (fun a b -> a = b) a b); + assert (does_raise3 Iarray.for_all2 (fun _ _ -> true) a b); + assert (does_raise3 Iarray.for_all2 (fun _ _ -> false) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 1 && b = 1) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 2 && b = 2) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 3 && b = 3) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 4 && b = 4) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 5 && b = 5) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 6 && b = 6) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 7 && b = 7) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 8 && b = 8) a b); + assert (does_raise3 Iarray.for_all2 (fun a b -> a = 9 && b = 9) a b); +;; + +let () = + assert (not (Iarray.for_all2 (=) [:1;2;3:] [:3;2;1:])); + assert (Iarray.for_all2 (=) [:1;2;3:] [:1;2;3:]); + assert (not (Iarray.for_all2 (<>) [:1;2;3:] [:3;2;1:])); + assert (does_raise3 Iarray.for_all2 (=) [:1;2;3:] [:1;2;3;4:]); + assert (does_raise3 Iarray.for_all2 (=) [:1;2:] [::]); +;; + +let () = + let a = [:1;2;3;4;5;6;7;8;9:] in + assert (Iarray.mem 1 a); + assert (Iarray.mem 2 a); + assert (Iarray.mem 3 a); + assert (Iarray.mem 4 a); + assert (Iarray.mem 5 a); + assert (Iarray.mem 6 a); + assert (Iarray.mem 7 a); + assert (Iarray.mem 8 a); + assert (Iarray.mem 9 a); + assert (not (Iarray.mem 0 a)); + assert (not (Iarray.mem 10 a)); +;; + +let () = + assert (Iarray.mem 2 [:1;2;3:]); + assert (not (Iarray.mem 2 [::])); + assert (Iarray.mem (ref 3) [:ref 1; ref 2; ref 3:]); + assert (Iarray.mem [:1;2;3:] [:[:1;2;3:];[:2;3;4:];[:0:]:]); + assert (Iarray.mem 1 (make 100 1)); + assert (Iarray.mem (ref 1) (make 100 (ref 1))); +;; + +let () = + let a = [:1;2;3;4;5;6;7;8;9:] in + assert (Iarray.memq 1 a); + assert (Iarray.memq 2 a); + assert (Iarray.memq 3 a); + assert (Iarray.memq 4 a); + assert (Iarray.memq 5 a); + assert (Iarray.memq 6 a); + assert (Iarray.memq 7 a); + assert (Iarray.memq 8 a); + assert (Iarray.memq 9 a); + assert (not (Iarray.memq 0 a)); + assert (not (Iarray.memq 10 a)); +;; + +let () = + assert (Iarray.memq 2 [:1;2;3:]); + assert (not (Iarray.memq 2 [::])); + assert (not (Iarray.memq (ref 3) [:ref 1; ref 2; ref 3:])); + (* The below tests immutable arrays of *mutable* arrays because physical + equality is only guaranteed to be distinct for mutable values *) + assert (not (Iarray.memq [|1;2;3|] [:[|1;2;3|];[|2;3;4|];[|0|]:])); + assert (Iarray.memq 1 (make 100 1)); + assert (not (Iarray.memq (ref 1) (make 100 (ref 1)))); +;; + +let () = print_endline "OK" diff --git a/testsuite/tests/array-functions/test_iarray.reference b/testsuite/tests/array-functions/test_iarray.reference new file mode 100644 index 000000000000..d86bac9de59a --- /dev/null +++ b/testsuite/tests/array-functions/test_iarray.reference @@ -0,0 +1 @@ +OK diff --git a/testsuite/tests/ast-invariants/test.ml b/testsuite/tests/ast-invariants/test.ml index b5dbd1cbbbab..06d9271554bd 100644 --- a/testsuite/tests/ast-invariants/test.ml +++ b/testsuite/tests/ast-invariants/test.ml @@ -44,8 +44,9 @@ let check_file kind fn = close_in ic; try invariants kind ast - with exn -> - Location.report_exception Format.std_formatter exn + with + | exn -> + Location.report_exception Format.std_formatter exn type file_kind = | Regular_file @@ -59,7 +60,13 @@ let kind fn = | { Unix.st_kind = Unix.S_REG } -> Regular_file | { Unix.st_kind = _ } -> Other +(* some test directories contain files that intentionally violate the + expectations of ast-invariants *) +let is_ok_dir dir = + not (String.ends_with ~suffix:"tests/jst-modular-extensions" dir) + let rec walk dir = + if is_ok_dir dir then Array.iter (fun fn -> if fn = "" || fn.[0] = '.' then @@ -77,4 +84,6 @@ let rec walk dir = end) (Sys.readdir dir) -let () = walk root +let () = + List.iter Clflags.Extension.enable_t Clflags.Extension.all; + walk root diff --git a/testsuite/tests/backtrace/pr2195-locs.byte.reference b/testsuite/tests/backtrace/pr2195-locs.byte.reference index 85b19d3e6d62..d9900743dd6b 100644 --- a/testsuite/tests/backtrace/pr2195-locs.byte.reference +++ b/testsuite/tests/backtrace/pr2195-locs.byte.reference @@ -1,4 +1,4 @@ Fatal error: exception Stdlib.Exit -Raised by primitive operation at Stdlib.open_in_gen in file "stdlib.ml", line 408, characters 28-54 +Raised by primitive operation at Stdlib.open_in_gen in file "stdlib.ml", line 412, characters 28-54 Called from Pr2195 in file "pr2195.ml", line 24, characters 6-19 Re-raised at Pr2195 in file "pr2195.ml", line 29, characters 4-41 diff --git a/testsuite/tests/backtrace/pr2195.opt.reference b/testsuite/tests/backtrace/pr2195.opt.reference index 8b2573370f79..bbdea9f0b9a7 100644 --- a/testsuite/tests/backtrace/pr2195.opt.reference +++ b/testsuite/tests/backtrace/pr2195.opt.reference @@ -1,5 +1,5 @@ Fatal error: exception Stdlib.Exit -Raised by primitive operation at Stdlib.open_in_gen in file "stdlib.ml", line 408, characters 28-54 -Called from Stdlib.open_in in file "stdlib.ml" (inlined), line 413, characters 2-45 +Raised by primitive operation at Stdlib.open_in_gen in file "stdlib.ml", line 412, characters 28-54 +Called from Stdlib.open_in in file "stdlib.ml" (inlined), line 417, characters 2-45 Called from Pr2195 in file "pr2195.ml", line 24, characters 6-19 Re-raised at Pr2195 in file "pr2195.ml", line 29, characters 4-41 diff --git a/testsuite/tests/basic-modules/anonymous.ocamlc.reference b/testsuite/tests/basic-modules/anonymous.ocamlc.reference index 4791ff655910..21f0f499ebce 100644 --- a/testsuite/tests/basic-modules/anonymous.ocamlc.reference +++ b/testsuite/tests/basic-modules/anonymous.ocamlc.reference @@ -20,12 +20,13 @@ (module-defn(B) Anonymous anonymous.ml(33):703-773 (let (x =[(consts ()) (non_consts ([0: *, *]))] [0: "foo" "bar"]) (makeblock 0)))) - (let (f = (function param : int 0) s = (makemutable 0 "")) + (let + (f = (function {nlocal = 0} param : int 0) s = (makemutable 0 "")) (seq (ignore (let (*match* = (setfield_ptr 0 s "Hello World!")) (makeblock 0))) (let - (drop = (function param : int 0) + (drop = (function {nlocal = 0} param : int 0) *match* = (apply drop (field_mut 0 s))) (makeblock 0 A B f s drop)))))))) diff --git a/testsuite/tests/basic-modules/anonymous.ocamlopt.flambda.reference b/testsuite/tests/basic-modules/anonymous.ocamlopt.flambda.reference index 9d63af390518..6dde715a8126 100644 --- a/testsuite/tests/basic-modules/anonymous.ocamlopt.flambda.reference +++ b/testsuite/tests/basic-modules/anonymous.ocamlopt.flambda.reference @@ -19,11 +19,11 @@ (module-defn(B) Anonymous anonymous.ml(33):703-773 (let (x =[(consts ()) (non_consts ([0: *, *]))] [0: "foo" "bar"]) (makeblock 0)))) - (let (f = (function param : int 0) s = (makemutable 0 "")) + (let (f = (function {nlocal = 0} param : int 0) s = (makemutable 0 "")) (seq (ignore (let (*match* = (setfield_ptr 0 s "Hello World!")) (makeblock 0))) (let - (drop = (function param : int 0) + (drop = (function {nlocal = 0} param : int 0) *match* = (apply drop (field_mut 0 s))) (makeblock 0 A B f s drop))))))) diff --git a/testsuite/tests/basic-modules/anonymous.ocamlopt.reference b/testsuite/tests/basic-modules/anonymous.ocamlopt.reference index 384bd9660ae4..9e1eea8d6ae5 100644 --- a/testsuite/tests/basic-modules/anonymous.ocamlopt.reference +++ b/testsuite/tests/basic-modules/anonymous.ocamlopt.reference @@ -19,7 +19,7 @@ (makeblock 0))) (setfield_ptr(root-init) 0 (global Anonymous!) A) (setfield_ptr(root-init) 1 (global Anonymous!) B) - (let (f = (function param : int 0)) + (let (f = (function {nlocal = 0} param : int 0)) (setfield_ptr(root-init) 2 (global Anonymous!) f)) (let (s = (makemutable 0 "")) (setfield_ptr(root-init) 3 (global Anonymous!) s)) @@ -28,7 +28,7 @@ (*match* = (setfield_ptr 0 (field 3 (global Anonymous!)) "Hello World!")) (makeblock 0))) - (let (drop = (function param : int 0)) + (let (drop = (function {nlocal = 0} param : int 0)) (setfield_ptr(root-init) 4 (global Anonymous!) drop)) (let (*match* = diff --git a/testsuite/tests/basic/patmatch_for_multiple.ml b/testsuite/tests/basic/patmatch_for_multiple.ml index 2dfa26ea48af..9e7bc9d1a7cc 100644 --- a/testsuite/tests/basic/patmatch_for_multiple.ml +++ b/testsuite/tests/basic/patmatch_for_multiple.ml @@ -26,15 +26,15 @@ match (3, 2, 1) with | _ -> false ;; [%%expect{| -(let (*match*/274 = 3 *match*/275 = 2 *match*/276 = 1) +(let (*match*/277 = 3 *match*/278 = 2 *match*/279 = 1) (catch (catch - (catch (if (!= *match*/275 3) (exit 3) (exit 1)) with (3) - (if (!= *match*/274 1) (exit 2) (exit 1))) + (catch (if (!= *match*/278 3) (exit 3) (exit 1)) with (3) + (if (!= *match*/277 1) (exit 2) (exit 1))) with (2) 0) with (1) 1)) -(let (*match*/274 = 3 *match*/275 = 2 *match*/276 = 1) - (catch (if (!= *match*/275 3) (if (!= *match*/274 1) 0 (exit 1)) (exit 1)) +(let (*match*/277 = 3 *match*/278 = 2 *match*/279 = 1) + (catch (if (!= *match*/278 3) (if (!= *match*/277 1) 0 (exit 1)) (exit 1)) with (1) 1)) - : bool = false |}];; @@ -47,32 +47,32 @@ match (3, 2, 1) with | _ -> false ;; [%%expect{| -(let (*match*/279 = 3 *match*/280 = 2 *match*/281 = 1) +(let (*match*/282 = 3 *match*/283 = 2 *match*/284 = 1) (catch (catch (catch - (if (!= *match*/280 3) (exit 6) + (if (!= *match*/283 3) (exit 6) (let - (x/283 =a[(consts ()) (non_consts ([0: [int], [int], [int]]))] - (makeblock 0 *match*/279 *match*/280 *match*/281)) - (exit 4 x/283))) + (x/286 =a[(consts ()) (non_consts ([0: [int], [int], [int]]))] + (makeblock 0 *match*/282 *match*/283 *match*/284)) + (exit 4 x/286))) with (6) - (if (!= *match*/279 1) (exit 5) + (if (!= *match*/282 1) (exit 5) (let - (x/282 =a[(consts ()) (non_consts ([0: [int], [int], [int]]))] - (makeblock 0 *match*/279 *match*/280 *match*/281)) - (exit 4 x/282)))) + (x/285 =a[(consts ()) (non_consts ([0: [int], [int], [int]]))] + (makeblock 0 *match*/282 *match*/283 *match*/284)) + (exit 4 x/285)))) with (5) 0) - with (4 x/277[(consts ()) (non_consts ([0: [int], [int], [int]]))]) - (seq (ignore x/277) 1))) -(let (*match*/279 = 3 *match*/280 = 2 *match*/281 = 1) + with (4 x/280[(consts ()) (non_consts ([0: [int], [int], [int]]))]) + (seq (ignore x/280) 1))) +(let (*match*/282 = 3 *match*/283 = 2 *match*/284 = 1) (catch - (if (!= *match*/280 3) - (if (!= *match*/279 1) 0 - (exit 4 (makeblock 0 *match*/279 *match*/280 *match*/281))) - (exit 4 (makeblock 0 *match*/279 *match*/280 *match*/281))) - with (4 x/277[(consts ()) (non_consts ([0: [int], [int], [int]]))]) - (seq (ignore x/277) 1))) + (if (!= *match*/283 3) + (if (!= *match*/282 1) 0 + (exit 4 (makeblock 0 *match*/282 *match*/283 *match*/284))) + (exit 4 (makeblock 0 *match*/282 *match*/283 *match*/284))) + with (4 x/280[(consts ()) (non_consts ([0: [int], [int], [int]]))]) + (seq (ignore x/280) 1))) - : bool = false |}];; @@ -82,8 +82,8 @@ let _ = fun a b -> | ((true, _) as _g) | ((false, _) as _g) -> () [%%expect{| -(function a/284[int] b/285 : int 0) -(function a/284[int] b/285 : int 0) +(function {nlocal = 0} a/287[int] b/288 : int 0) +(function {nlocal = 0} a/287[int] b/288 : int 0) - : bool -> 'a -> unit = |}];; @@ -102,15 +102,15 @@ let _ = fun a b -> match a, b with | (false, _) as p -> p (* outside, trivial *) [%%expect {| -(function a/288[int] b/289 +(function {nlocal = 0} a/291[int] b/292 [(consts ()) (non_consts ([0: [int], *]))](let - (p/290 =a[(consts ()) + (p/293 =a[(consts ()) (non_consts ( [0: [int], *]))] - (makeblock 0 a/288 b/289)) - p/290)) -(function a/288[int] b/289 - [(consts ()) (non_consts ([0: [int], *]))](makeblock 0 a/288 b/289)) + (makeblock 0 a/291 b/292)) + p/293)) +(function {nlocal = 0} a/291[int] b/292 + [(consts ()) (non_consts ([0: [int], *]))](makeblock 0 a/291 b/292)) - : bool -> 'a -> bool * 'a = |}] @@ -119,15 +119,15 @@ let _ = fun a b -> match a, b with | ((false, _) as p) -> p (* inside, trivial *) [%%expect{| -(function a/292[int] b/293 +(function {nlocal = 0} a/295[int] b/296 [(consts ()) (non_consts ([0: [int], *]))](let - (p/294 =a[(consts ()) + (p/297 =a[(consts ()) (non_consts ( [0: [int], *]))] - (makeblock 0 a/292 b/293)) - p/294)) -(function a/292[int] b/293 - [(consts ()) (non_consts ([0: [int], *]))](makeblock 0 a/292 b/293)) + (makeblock 0 a/295 b/296)) + p/297)) +(function {nlocal = 0} a/295[int] b/296 + [(consts ()) (non_consts ([0: [int], *]))](makeblock 0 a/295 b/296)) - : bool -> 'a -> bool * 'a = |}];; @@ -136,20 +136,20 @@ let _ = fun a b -> match a, b with | (false as x, _) as p -> x, p (* outside, simple *) [%%expect {| -(function a/298[int] b/299 +(function {nlocal = 0} a/301[int] b/302 [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], *]))]]))] (let - (x/300 =a[int] a/298 - p/301 =a[(consts ()) (non_consts ([0: [int], *]))] - (makeblock 0 a/298 b/299)) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) x/300 - p/301))) -(function a/298[int] b/299 + (x/303 =a[int] a/301 + p/304 =a[(consts ()) (non_consts ([0: [int], *]))] + (makeblock 0 a/301 b/302)) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) x/303 + p/304))) +(function {nlocal = 0} a/301[int] b/302 [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], *]))]]))] - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) a/298 - (makeblock 0 a/298 b/299))) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) a/301 + (makeblock 0 a/301 b/302))) - : bool -> 'a -> bool * (bool * 'a) = |}] @@ -158,20 +158,20 @@ let _ = fun a b -> match a, b with | ((false as x, _) as p) -> x, p (* inside, simple *) [%%expect {| -(function a/304[int] b/305 +(function {nlocal = 0} a/307[int] b/308 [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], *]))]]))] (let - (x/306 =a[int] a/304 - p/307 =a[(consts ()) (non_consts ([0: [int], *]))] - (makeblock 0 a/304 b/305)) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) x/306 - p/307))) -(function a/304[int] b/305 + (x/309 =a[int] a/307 + p/310 =a[(consts ()) (non_consts ([0: [int], *]))] + (makeblock 0 a/307 b/308)) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) x/309 + p/310))) +(function {nlocal = 0} a/307[int] b/308 [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], *]))]]))] - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) a/304 - (makeblock 0 a/304 b/305))) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) a/307 + (makeblock 0 a/307 b/308))) - : bool -> 'a -> bool * (bool * 'a) = |}] @@ -180,30 +180,30 @@ let _ = fun a b -> match a, b with | (false, x) as p -> x, p (* outside, complex *) [%%expect{| -(function a/314[int] b/315[int] +(function {nlocal = 0} a/317[int] b/318[int] [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], [int]]))]]))] - (if a/314 + (if a/317 (let - (x/316 =a[int] a/314 - p/317 =a[(consts ()) (non_consts ([0: [int], [int]]))] - (makeblock 0 a/314 b/315)) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/316 - p/317)) + (x/319 =a[int] a/317 + p/320 =a[(consts ()) (non_consts ([0: [int], [int]]))] + (makeblock 0 a/317 b/318)) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/319 + p/320)) (let - (x/318 =a[(consts ()) (non_consts ([0: ]))] b/315 - p/319 =a[(consts ()) (non_consts ([0: [int], [int]]))] - (makeblock 0 a/314 b/315)) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/318 - p/319)))) -(function a/314[int] b/315[int] + (x/321 =a[(consts ()) (non_consts ([0: ]))] b/318 + p/322 =a[(consts ()) (non_consts ([0: [int], [int]]))] + (makeblock 0 a/317 b/318)) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/321 + p/322)))) +(function {nlocal = 0} a/317[int] b/318[int] [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], [int]]))]]))] - (if a/314 - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) a/314 - (makeblock 0 a/314 b/315)) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) b/315 - (makeblock 0 a/314 b/315)))) + (if a/317 + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) a/317 + (makeblock 0 a/317 b/318)) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) b/318 + (makeblock 0 a/317 b/318)))) - : bool -> bool -> bool * (bool * bool) = |}] @@ -213,33 +213,33 @@ let _ = fun a b -> match a, b with -> x, p (* inside, complex *) [%%expect{| -(function a/320[int] b/321[int] +(function {nlocal = 0} a/323[int] b/324[int] [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], [int]]))]]))] (catch - (if a/320 + (if a/323 (let - (x/328 =a[int] a/320 - p/329 =a[(consts ()) (non_consts ([0: [int], [int]]))] - (makeblock 0 a/320 b/321)) - (exit 10 x/328 p/329)) + (x/331 =a[int] a/323 + p/332 =a[(consts ()) (non_consts ([0: [int], [int]]))] + (makeblock 0 a/323 b/324)) + (exit 10 x/331 p/332)) (let - (x/326 =a[(consts ()) (non_consts ([0: ]))] b/321 - p/327 =a[(consts ()) (non_consts ([0: [int], [int]]))] - (makeblock 0 a/320 b/321)) - (exit 10 x/326 p/327))) - with (10 x/322[int] p/323[(consts ()) (non_consts ([0: [int], [int]]))]) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/322 - p/323))) -(function a/320[int] b/321[int] + (x/329 =a[(consts ()) (non_consts ([0: ]))] b/324 + p/330 =a[(consts ()) (non_consts ([0: [int], [int]]))] + (makeblock 0 a/323 b/324)) + (exit 10 x/329 p/330))) + with (10 x/325[int] p/326[(consts ()) (non_consts ([0: [int], [int]]))]) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/325 + p/326))) +(function {nlocal = 0} a/323[int] b/324[int] [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], [int]]))]]))] (catch - (if a/320 (exit 10 a/320 (makeblock 0 a/320 b/321)) - (exit 10 b/321 (makeblock 0 a/320 b/321))) - with (10 x/322[int] p/323[(consts ()) (non_consts ([0: [int], [int]]))]) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/322 - p/323))) + (if a/323 (exit 10 a/323 (makeblock 0 a/323 b/324)) + (exit 10 b/324 (makeblock 0 a/323 b/324))) + with (10 x/325[int] p/326[(consts ()) (non_consts ([0: [int], [int]]))]) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/325 + p/326))) - : bool -> bool -> bool * (bool * bool) = |}] @@ -252,30 +252,30 @@ let _ = fun a b -> match a, b with | (false as x, _) as p -> x, p (* outside, onecase *) [%%expect {| -(function a/330[int] b/331[int] +(function {nlocal = 0} a/333[int] b/334[int] [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], [int]]))]]))] - (if a/330 + (if a/333 (let - (x/332 =a[int] a/330 - _p/333 =a[(consts ()) (non_consts ([0: [int], [int]]))] - (makeblock 0 a/330 b/331)) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/332 + (x/335 =a[int] a/333 + _p/336 =a[(consts ()) (non_consts ([0: [int], [int]]))] + (makeblock 0 a/333 b/334)) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/335 [0: 1 1])) (let - (x/334 =a[int] a/330 - p/335 =a[(consts ()) (non_consts ([0: [int], [int]]))] - (makeblock 0 a/330 b/331)) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/334 - p/335)))) -(function a/330[int] b/331[int] + (x/337 =a[int] a/333 + p/338 =a[(consts ()) (non_consts ([0: [int], [int]]))] + (makeblock 0 a/333 b/334)) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) x/337 + p/338)))) +(function {nlocal = 0} a/333[int] b/334[int] [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], [int]]))]]))] - (if a/330 - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) a/330 + (if a/333 + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) a/333 [0: 1 1]) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) a/330 - (makeblock 0 a/330 b/331)))) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], [int]]))]) a/333 + (makeblock 0 a/333 b/334)))) - : bool -> bool -> bool * (bool * bool) = |}] @@ -284,20 +284,20 @@ let _ = fun a b -> match a, b with | ((false as x, _) as p) -> x, p (* inside, onecase *) [%%expect{| -(function a/336[int] b/337 +(function {nlocal = 0} a/339[int] b/340 [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], *]))]]))] (let - (x/338 =a[int] a/336 - p/339 =a[(consts ()) (non_consts ([0: [int], *]))] - (makeblock 0 a/336 b/337)) - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) x/338 - p/339))) -(function a/336[int] b/337 + (x/341 =a[int] a/339 + p/342 =a[(consts ()) (non_consts ([0: [int], *]))] + (makeblock 0 a/339 b/340)) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) x/341 + p/342))) +(function {nlocal = 0} a/339[int] b/340 [(consts ()) (non_consts ([0: [int], [(consts ()) (non_consts ([0: [int], *]))]]))] - (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) a/336 - (makeblock 0 a/336 b/337))) + (makeblock 0 (int,[(consts ()) (non_consts ([0: [int], *]))]) a/339 + (makeblock 0 a/339 b/340))) - : bool -> 'a -> bool * (bool * 'a) = |}] @@ -314,23 +314,23 @@ let _ =fun a b -> match a, b with | (_, _) as p -> p (* outside, tuplist *) [%%expect {| -(function a/349[int] - b/350[(consts (0)) +(function {nlocal = 0} a/352[int] + b/353[(consts (0)) (non_consts ([0: [(consts ()) (non_consts ([0: *, *]))]]))] [(consts ()) (non_consts ([0: [int], [(consts (0)) (non_consts ([0: *]))]]))](catch - (if a/349 - (if b/350 + (if a/352 + (if b/353 (let - (p/351 =a + (p/354 =a (field 0 - b/350)) - p/351) + b/353)) + p/354) (exit 12)) (exit 12)) with (12) (let - (p/352 =a + (p/355 =a [(consts ()) (non_consts ( [0: @@ -339,24 +339,24 @@ let _ =fun a b -> match a, b with (non_consts ( [0: *]))]]))] (makeblock 0 - a/349 - b/350)) - p/352))) -(function a/349[int] - b/350[(consts (0)) + a/352 + b/353)) + p/355))) +(function {nlocal = 0} a/352[int] + b/353[(consts (0)) (non_consts ([0: [(consts ()) (non_consts ([0: *, *]))]]))] [(consts ()) (non_consts ([0: [int], [(consts (0)) (non_consts ([0: *]))]]))](catch - (if a/349 - (if b/350 + (if a/352 + (if b/353 (field 0 - b/350) + b/353) (exit 12)) (exit 12)) with (12) (makeblock 0 - a/349 - b/350))) + a/352 + b/353))) - : bool -> bool tuplist -> bool * bool tuplist = |}] @@ -365,25 +365,25 @@ let _ = fun a b -> match a, b with | ((_, _) as p) -> p (* inside, tuplist *) [%%expect{| -(function a/353[int] - b/354[(consts (0)) +(function {nlocal = 0} a/356[int] + b/357[(consts (0)) (non_consts ([0: [(consts ()) (non_consts ([0: *, *]))]]))] [(consts ()) (non_consts ([0: [int], [(consts (0)) (non_consts ([0: *]))]]))](catch (catch - (if a/353 - (if b/354 + (if a/356 + (if b/357 (let - (p/358 =a + (p/361 =a (field 0 - b/354)) + b/357)) (exit 13 - p/358)) + p/361)) (exit 14)) (exit 14)) with (14) (let - (p/357 =a + (p/360 =a [(consts ()) (non_consts ( [0: @@ -392,11 +392,11 @@ let _ = fun a b -> match a, b with (non_consts ( [0: *]))]]))] (makeblock 0 - a/353 - b/354)) + a/356 + b/357)) (exit 13 - p/357))) - with (13 p/355 + p/360))) + with (13 p/358 [(consts ()) (non_consts ( [0: @@ -404,26 +404,26 @@ let _ = fun a b -> match a, b with [(consts (0)) (non_consts ( [0: *]))]]))]) - p/355)) -(function a/353[int] - b/354[(consts (0)) + p/358)) +(function {nlocal = 0} a/356[int] + b/357[(consts (0)) (non_consts ([0: [(consts ()) (non_consts ([0: *, *]))]]))] [(consts ()) (non_consts ([0: [int], [(consts (0)) (non_consts ([0: *]))]]))](catch (catch - (if a/353 - (if b/354 + (if a/356 + (if b/357 (exit 13 (field 0 - b/354)) + b/357)) (exit 14)) (exit 14)) with (14) (exit 13 (makeblock 0 - a/353 - b/354))) - with (13 p/355 + a/356 + b/357))) + with (13 p/358 [(consts ()) (non_consts ( [0: @@ -431,6 +431,6 @@ let _ = fun a b -> match a, b with [(consts (0)) (non_consts ( [0: *]))]]))]) - p/355)) + p/358)) - : bool -> bool tuplist -> bool * bool tuplist = |}] diff --git a/testsuite/tests/basic/patmatch_split_no_or.ml b/testsuite/tests/basic/patmatch_split_no_or.ml index 7a6fa874197a..2b2e0dd8d26e 100644 --- a/testsuite/tests/basic/patmatch_split_no_or.ml +++ b/testsuite/tests/basic/patmatch_split_no_or.ml @@ -16,7 +16,8 @@ let last_is_anys = function [%%expect{| (let (last_is_anys/11 = - (function param/13[(consts ()) (non_consts ([0: [int], [int]]))] : int + (function {nlocal = 0} + param/13[(consts ()) (non_consts ([0: [int], [int]]))] : int (catch (if (field 0 param/13) (if (field 1 param/13) (exit 1) 1) (if (field 1 param/13) (exit 1) 2)) @@ -33,7 +34,8 @@ let last_is_vars = function [%%expect{| (let (last_is_vars/18 = - (function param/22[(consts ()) (non_consts ([0: [int], [int]]))] : int + (function {nlocal = 0} + param/22[(consts ()) (non_consts ([0: [int], [int]]))] : int (catch (if (field 0 param/22) (if (field 1 param/22) (exit 3) 1) (if (field 1 param/22) (exit 3) 2)) @@ -75,8 +77,8 @@ let f = function B/27 = (apply (field 0 (global Toploop!)) "B/27") A/26 = (apply (field 0 (global Toploop!)) "A/26") f/29 = - (function param/31[(consts ()) (non_consts ([0: *, [int], [int]]))] - : int + (function {nlocal = 0} + param/31[(consts ()) (non_consts ([0: *, [int], [int]]))] : int (let (*match*/32 =a (field 0 param/31)) (catch (if (== *match*/32 A/26) (if (field 1 param/31) 1 (exit 8)) diff --git a/testsuite/tests/comprehensions/array_comprehensions_pure.ml b/testsuite/tests/comprehensions/array_comprehensions_pure.ml new file mode 100644 index 000000000000..8fe089a21e06 --- /dev/null +++ b/testsuite/tests/comprehensions/array_comprehensions_pure.ml @@ -0,0 +1,411 @@ +(* TEST + flags = "-extension comprehensions_experimental" + * expect +*) + +(****************************************************************************** + * ******** ATTENTION! ******** * + * * + * This file should be kept in sync with the files * + * "list_comprehensions_pure.ml" and "iarray_comprehensions_pure.ml". If * + * you're adding a test to one, add it to the others as well; if the test * + * output changes in one file and not the others (except as documented in * + * comments), this is a bug. * + ******************************************************************************) + +(******************************************************************************) +(**** Basic behavior ****) + +[|i for i = 0 to 9|];; +[%%expect{| +- : int array = [|0; 1; 2; 3; 4; 5; 6; 7; 8; 9|] +|}];; + +[|i for i = 9 downto 0|];; +[%%expect{| +- : int array = [|9; 8; 7; 6; 5; 4; 3; 2; 1; 0|] +|}];; + +[|s for s in [|"hello"; "world"; "!"|]|];; +[%%expect{| +- : string array = [|"hello"; "world"; "!"|] +|}];; + +[|i,s for i = 0 to 3 and s in [|'a'; 'b'; 'c'|]|];; +[%%expect{| +- : (int * char) array = +[|(0, 'a'); (0, 'b'); (0, 'c'); (1, 'a'); (1, 'b'); (1, 'c'); (2, 'a'); + (2, 'b'); (2, 'c'); (3, 'a'); (3, 'b'); (3, 'c')|] +|}];; + +[|i,s for i = 0 to 3 for s in [|'a'; 'b'; 'c'|]|];; +[%%expect{| +- : (int * char) array = +[|(0, 'a'); (0, 'b'); (0, 'c'); (1, 'a'); (1, 'b'); (1, 'c'); (2, 'a'); + (2, 'b'); (2, 'c'); (3, 'a'); (3, 'b'); (3, 'c')|] +|}];; + +[|i,j for i = 1 to 3 for j in [|i*10; i*100|]|];; +[%%expect{| +- : (int * int) array = +[|(1, 10); (1, 100); (2, 20); (2, 200); (3, 30); (3, 300)|] +|}];; + +[|x for xs in [|[|"this"; "is"; "one"|]; + [|"way"|]; + [|"to"; "flatten"|]; + [|"a"; "nested"; "array"|]|] + for x in xs|];; +[%%expect{| +- : string array = +[|"this"; "is"; "one"; "way"; "to"; "flatten"; "a"; "nested"; "array"|] +|}];; + +[|i for i = 0 to 10 when i mod 2 = 0|];; +[%%expect{| +- : int array = [|0; 2; 4; 6; 8; 10|] +|}];; + +[|() for _ = 1 to 10|];; +[%%expect{| +- : unit array = [|(); (); (); (); (); (); (); (); (); ()|] +|}];; + +(******************************************************************************) +(**** More complex behavior ****) + +let pythagorean_triples n = + [|a,b,c for a = 1 to n for b = a to n for c = b to n when a*a + b*b = c*c|] +in +pythagorean_triples 10;; +[%%expect{| +- : (int * int * int) array = [|(3, 4, 5); (6, 8, 10)|] +|}];; + +let tails xs = + let len = Array.length xs in + Array.init (len + 1) (fun i -> Array.sub xs i (len - i)) +in +let sum = Array.fold_left ( + ) 0 in +[|sum xs for xs in tails [|1; 20; 300; 4_000; 50_000; 600_000; 7_000_000|]|];; +[%%expect{| +- : int array = +[|7654321; 7654320; 7654300; 7654000; 7650000; 7600000; 7000000; 0|] +|}];; + +let xs = [|2;7;18;28|] in +[|x + 1000*y for x in xs and y in xs|];; +[%%expect{| +- : int array = +[|2002; 7002; 18002; 28002; 2007; 7007; 18007; 28007; 2018; 7018; 18018; + 28018; 2028; 7028; 18028; 28028|] +|}];; + +(******************************************************************************) +(**** Edge cases ****) + +[|42 when true|];; +[%%expect{| +- : int array = [|42|] +|}];; + +[|42 when false|];; +[%%expect{| +- : int array = [||] +|}];; + +[|x for x in [||]|];; +[%%expect{| +- : '_weak1 array = [||] +|}];; + +[|i for i = 0 to -1|];; +[%%expect{| +- : int array = [||] +|}];; + +[|i for i = 0 downto 1|];; +[%%expect{| +- : int array = [||] +|}];; + +[|i for i = 0 to 0|];; +[%%expect{| +- : int array = [|0|] +|}];; + +[|i for i = 0 downto 0|];; +[%%expect{| +- : int array = [|0|] +|}];; + +(* This would take ~forever if the empty array were iterated over later; + however, for arrays, using [and] lets us get more flexibility (see below). *) +[|i,j,k for i in [||] for j = 0 to Int.max_int for k = 0 downto Int.min_int|];; +[%%expect{| +- : ('_weak2 * int * int) array = [||] +|}];; + +(* This works no matter where the empty array is, but would take ~forever for + lists if the empty list were iterated over later; see + "(i)array_comprehensions_special.ml" for more nuance on what can happen here + with arrays. *) +[|i,j,k for i in [||] and j = 0 to Int.max_int and k = 0 downto Int.min_int|];; +[%%expect{| +- : ('_weak3 * int * int) array = [||] +|}];; + +[|x for x in [|"one"; "two"; "three"|] for x in [|10; 20; 30|]|];; +[%%expect{| +Line 1, characters 8-9: +1 | [|x for x in [|"one"; "two"; "three"|] for x in [|10; 20; 30|]|];; + ^ +Warning 26 [unused-var]: unused variable x. +- : int array = [|10; 20; 30; 10; 20; 30; 10; 20; 30|] +|}];; + +(******************************************************************************) +(**** Variable shadowing ****) + +(* QuickCheck found that Python doesn't shadow variables in list comprehensions; + instead, using the same variable name as the binder in two `for`-clauses + doesn't shadow, but rather overwrites the same mutable cell. To confirm that + we handle the subtle issue of shadowing correctly, we preserve here the cases + that Python does not, as found by QuickCheck. *) + +(* Python: {v + [a for a in [0] for a in [1]] == [1] + v} *) +[|a for a in [|0|] for a in [|1|]|];; +[%%expect{| +Line 1, characters 8-9: +1 | [|a for a in [|0|] for a in [|1|]|];; + ^ +Warning 26 [unused-var]: unused variable a. +- : int array = [|1|] +|}];; + +(* Python: {v + [(a, b) + for b in [0] + for _ in [0, 0] + for a in [b] + for b in range(0, -2, -1)] + == [(0, 0), (0, -1), (-1, 0), (-1, -1)] + v} *) +[|(a, b) for b in [|0|] for _ in [|0; 0|] for a in [|b|] and b = 0 downto -1|];; +[%%expect{| +- : (int * int) array = [|(0, 0); (0, -1); (0, 0); (0, -1)|] +|}];; + +(* Python: {v + [(a, b) for b in [1] for b in [0] for a in [b]] == [(0, 0)] + v} *) +[|(a, b) for b in [|1|] for b in [|0|] and a in [|b|]|];; +[%%expect{| +- : (int * int) array = [|(1, 0)|] +|}];; + +(* Python: {v + [a for a in [1] for _ in [0, 0] if a > 0 for a in [0]] == [0] + v} *) +[|a for a in [|1|] and _ in [|0; 0|] when a > 0 for a in [|0|]|];; +[%%expect{| +- : int array = [|0; 0|] +|}];; + +(* Python: {v + [a for a in [0] for _ in [0, 0] for a in [a, 1]] == [0, 1, 1, 1] + v} *) +[|a for a in [|0|] and _ in [|0; 0|] for a in [|a; 1|]|];; +[%%expect{| +- : int array = [|0; 1; 0; 1|] +|}];; + +(******************************************************************************) +(**** Bugs found by QuickCheck ****) + +(* At one time, this was incorrectly returning the empty array as an array + comprehension, but correctly returning a singleton list as a list + comprehension. *) +[|() for _ = 0 to 0|]; +[%%expect{| +- : unit array = [|()|] +|}];; + +(******************************************************************************) +(**** Errors ****) + +(* Can't iterate over non-arrays *) + +[|x for x in 100|];; +[%%expect{| +Line 1, characters 13-16: +1 | [|x for x in 100|];; + ^^^ +Error: This expression has type int but an expression was expected of type + 'a array + because it is in a for-in iterator in an array comprehension +|}];; + +(* No mixing arrays and lists *) + +(* It's unclear why these are different based on principality *) +[|x for x in []|];; +[%%expect{| +Line 1, characters 13-15: +1 | [|x for x in []|];; + ^^ +Error: This expression has type 'a list + but an expression was expected of type 'b array +|}, Principal{| +Line 1, characters 13-15: +1 | [|x for x in []|];; + ^^ +Error: This expression has type 'a list + but an expression was expected of type 'b array + because it is in a for-in iterator in an array comprehension +|}];; + +(* As above, but don't trigger type-based disambiguation; this affects the error + message for array comprehensions, but is invisible for list comprehensions *) +let empty = [] in +[|x for x in empty|];; +[%%expect{| +Line 2, characters 13-18: +2 | [|x for x in empty|];; + ^^^^^ +Error: This expression has type 'a list + but an expression was expected of type 'b array + because it is in a for-in iterator in an array comprehension +|}];; + +List.length [|i for i = 0 to 3|];; +[%%expect{| +Line 1, characters 12-32: +1 | List.length [|i for i = 0 to 3|];; + ^^^^^^^^^^^^^^^^^^^^ +Error: This expression has type 'a array + but an expression was expected of type 'b list +|}];; + +(* to/downto are only for ints *) + +[|x for x = 1.5 to 4.2|];; +[%%expect{| +Line 1, characters 12-15: +1 | [|x for x = 1.5 to 4.2|];; + ^^^ +Error: This expression has type float but an expression was expected of type + int + because it is in a range-based for iterator start index in a comprehension +|}];; + +[|x for x = 4.2 downto 1.5|];; +[%%expect{| +Line 1, characters 12-15: +1 | [|x for x = 4.2 downto 1.5|];; + ^^^ +Error: This expression has type float but an expression was expected of type + int + because it is in a range-based for iterator start index in a comprehension +|}];; + +(* No duplicating variables in a for-and clause *) + +[|i for i = 1 to 3 and i = 3 downto 1|];; +[%%expect{| +Line 1, characters 0-39: +1 | [|i for i = 1 to 3 and i = 3 downto 1|];; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: Variable i is bound several times in this matching +|}];; + +[|i for i = 1 to 3 and i in [|10; 20; 30|]|];; +[%%expect{| +Line 1, characters 23-24: +1 | [|i for i = 1 to 3 and i in [|10; 20; 30|]|];; + ^ +Error: Variable i is bound several times in this matching +|}];; + +[|i for i in [|1; 2; 3|] and i = 3 downto 1|];; +[%%expect{| +Line 1, characters 0-45: +1 | [|i for i in [|1; 2; 3|] and i = 3 downto 1|];; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: Variable i is bound several times in this matching +|}];; + +[|i for i in [|1; 2; 3|] and i in [|10; 20; 30|]|];; +[%%expect{| +Line 1, characters 29-30: +1 | [|i for i in [|1; 2; 3|] and i in [|10; 20; 30|]|];; + ^ +Error: Variable i is bound several times in this matching +|}];; + +[|i for i, j in [|1, 10; 2, 20; 3, 30|] and k, i in [|10, 1; 20, 2; 30, 3|]|]; +[%%expect{| +Line 1, characters 47-48: +1 | [|i for i, j in [|1, 10; 2, 20; 3, 30|] and k, i in [|10, 1; 20, 2; 30, 3|]|]; + ^ +Error: Variable i is bound several times in this matching +|}];; + +(* Variables bind from left to right, not right to left *) + +[|outer,inner for outer = inner to 3 for inner = 1 to 3|];; +[%%expect{| +Line 1, characters 26-31: +1 | [|outer,inner for outer = inner to 3 for inner = 1 to 3|];; + ^^^^^ +Error: Unbound value inner +Hint: Did you mean incr? +|}];; + +(* The element type is handled correctly *) + +Array.append [|true|] [|i for i = 0 to 10|];; +[%%expect{| +Line 1, characters 24-25: +1 | Array.append [|true|] [|i for i = 0 to 10|];; + ^ +Error: This expression has type int but an expression was expected of type + bool +|}];; + +(******************************************************************************) +(**** Test that types are being propagated inwards correctly ****) + +(* Prepare a module for later use *) +module M = struct + type t = A | B +end;; +[%%expect{| +module M : sig type t = A | B end +|}];; + +let x : M.t array = [|A for _ = 1 to 3|];; +[%%expect{| +val x : M.t array = [|M.A; M.A; M.A|] +|}];; + +[|A for _ = 1 to 3|];; +[%%expect{| +Line 1, characters 2-3: +1 | [|A for _ = 1 to 3|];; + ^ +Error: Unbound constructor A +|}];; + +Array.append [|M.B|] [|A for _ = 1 to 3|];; +[%%expect{| +- : M.t array = [|M.B; M.A; M.A; M.A|] +|}, Principal{| +Line 1, characters 23-24: +1 | Array.append [|M.B|] [|A for _ = 1 to 3|];; + ^ +Warning 18 [not-principal]: this type-based constructor disambiguation is not principal. +- : M.t array = [|M.B; M.A; M.A; M.A|] +|}];; diff --git a/testsuite/tests/comprehensions/array_comprehensions_side_effects.ml b/testsuite/tests/comprehensions/array_comprehensions_side_effects.ml new file mode 100644 index 000000000000..811c6285cfb5 --- /dev/null +++ b/testsuite/tests/comprehensions/array_comprehensions_side_effects.ml @@ -0,0 +1,93 @@ +(* TEST + flags = "-extension comprehensions_experimental" +*) + +(****************************************************************************** + * ******** ATTENTION! ******** * + * * + * This file should be kept in sync with the files * + * "list_comprehensions_side_effects.ml" and * + * "iarray_comprehensions_side_effects.ml". If you're adding a test to one, * + * add it to the others as well; if the test output changes in one file and * + * not the others (except as documented in comments), this is a bug. * + ******************************************************************************) + +(******************************************************************************) +(**** Test the order of evaluation ****) + +let say fmt = + Printf.kfprintf (fun stdout -> Printf.fprintf stdout "\n") stdout fmt +;; + +let surround l r m = l ^ m ^ r;; + +let show_list show_item xs = + xs + |> Array.map show_item + |> Array.to_list + |> String.concat "; " + |> surround "[" "]" +;; + +let show_as_tuple show_item xs = + xs + |> Array.map show_item + |> Array.to_list + |> String.concat ", " +;; + +let out3 (i, j, k) = say " %d, %d, %d;" i j k;; + +let out6 (i, j, k, x, y, z) = say " %d, %d, %d, %d, %d, %d;" i j k x y z;; + +let report out f = + let result = f () in + say ""; + say "result = [|"; + Array.iter out result; + say "|]" +;; + +report out3 (fun () -> + [| begin + say ">>> i = %d, j = %d, k = %d" i j k; + i, j, k + end + for i = (say "first (from)"; 0) to (say "second (to)"; 3) + and j in (say "third (in)"; [|10;20;30|]) + when (say "> i = %d, j = %d | when even i" i j; i mod 2 = 0) + for k = (say ">> first (from)"; -1) downto (say ">> second (to)"; -3) + |] +) +;; + +say "";; + +report out3 (fun () -> + [| begin + say ">>> i = %d, j = %d, k = %d" i j k; + i, j, k + end + for i = (say "first (from)"; 0) to (say "second (to)"; 3) + and j in (say "third (in)"; [|10;20;30|]) + and k = (say "fourth (downfrom)"; 100) downto (say "fifth (downto)"; 97) + |] +) +;; + +say "";; + +report out6 (fun () -> + [| begin + say ">>> i = %d, j = %d, k = %d, x = %d, y = %d, z = %d" i j k x y z; + i, j, k, x, y, z + end + for i = (say "first (from)"; 0) to (say "second (to)"; 1) + and j in (say "third (in)"; [|10;20|]) + and k = (say "fourth (downfrom)"; 100) downto (say "fifth (downto)"; 99) + for x = (say "> first (downfrom)"; 1) downto (say "> second (downto)"; 0) + and y in (say "> third (in)"; [|20;10|]) + and z = (say "> fourth (from)"; 99) to (say "> fifth (to)"; 100) + |] +) +;; diff --git a/testsuite/tests/comprehensions/array_comprehensions_side_effects.reference b/testsuite/tests/comprehensions/array_comprehensions_side_effects.reference new file mode 100644 index 000000000000..11a2ca8b281b --- /dev/null +++ b/testsuite/tests/comprehensions/array_comprehensions_side_effects.reference @@ -0,0 +1,348 @@ +first (from) +second (to) +third (in) +> i = 0, j = 10 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 10, k = -1 +>>> i = 0, j = 10, k = -2 +>>> i = 0, j = 10, k = -3 +> i = 0, j = 20 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 20, k = -1 +>>> i = 0, j = 20, k = -2 +>>> i = 0, j = 20, k = -3 +> i = 0, j = 30 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 30, k = -1 +>>> i = 0, j = 30, k = -2 +>>> i = 0, j = 30, k = -3 +> i = 1, j = 10 | when even i +> i = 1, j = 20 | when even i +> i = 1, j = 30 | when even i +> i = 2, j = 10 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 10, k = -1 +>>> i = 2, j = 10, k = -2 +>>> i = 2, j = 10, k = -3 +> i = 2, j = 20 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 20, k = -1 +>>> i = 2, j = 20, k = -2 +>>> i = 2, j = 20, k = -3 +> i = 2, j = 30 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 30, k = -1 +>>> i = 2, j = 30, k = -2 +>>> i = 2, j = 30, k = -3 +> i = 3, j = 10 | when even i +> i = 3, j = 20 | when even i +> i = 3, j = 30 | when even i + +result = [| + 0, 10, -1; + 0, 10, -2; + 0, 10, -3; + 0, 20, -1; + 0, 20, -2; + 0, 20, -3; + 0, 30, -1; + 0, 30, -2; + 0, 30, -3; + 2, 10, -1; + 2, 10, -2; + 2, 10, -3; + 2, 20, -1; + 2, 20, -2; + 2, 20, -3; + 2, 30, -1; + 2, 30, -2; + 2, 30, -3; +|] + +first (from) +second (to) +third (in) +fourth (downfrom) +fifth (downto) +>>> i = 0, j = 10, k = 100 +>>> i = 0, j = 10, k = 99 +>>> i = 0, j = 10, k = 98 +>>> i = 0, j = 10, k = 97 +>>> i = 0, j = 20, k = 100 +>>> i = 0, j = 20, k = 99 +>>> i = 0, j = 20, k = 98 +>>> i = 0, j = 20, k = 97 +>>> i = 0, j = 30, k = 100 +>>> i = 0, j = 30, k = 99 +>>> i = 0, j = 30, k = 98 +>>> i = 0, j = 30, k = 97 +>>> i = 1, j = 10, k = 100 +>>> i = 1, j = 10, k = 99 +>>> i = 1, j = 10, k = 98 +>>> i = 1, j = 10, k = 97 +>>> i = 1, j = 20, k = 100 +>>> i = 1, j = 20, k = 99 +>>> i = 1, j = 20, k = 98 +>>> i = 1, j = 20, k = 97 +>>> i = 1, j = 30, k = 100 +>>> i = 1, j = 30, k = 99 +>>> i = 1, j = 30, k = 98 +>>> i = 1, j = 30, k = 97 +>>> i = 2, j = 10, k = 100 +>>> i = 2, j = 10, k = 99 +>>> i = 2, j = 10, k = 98 +>>> i = 2, j = 10, k = 97 +>>> i = 2, j = 20, k = 100 +>>> i = 2, j = 20, k = 99 +>>> i = 2, j = 20, k = 98 +>>> i = 2, j = 20, k = 97 +>>> i = 2, j = 30, k = 100 +>>> i = 2, j = 30, k = 99 +>>> i = 2, j = 30, k = 98 +>>> i = 2, j = 30, k = 97 +>>> i = 3, j = 10, k = 100 +>>> i = 3, j = 10, k = 99 +>>> i = 3, j = 10, k = 98 +>>> i = 3, j = 10, k = 97 +>>> i = 3, j = 20, k = 100 +>>> i = 3, j = 20, k = 99 +>>> i = 3, j = 20, k = 98 +>>> i = 3, j = 20, k = 97 +>>> i = 3, j = 30, k = 100 +>>> i = 3, j = 30, k = 99 +>>> i = 3, j = 30, k = 98 +>>> i = 3, j = 30, k = 97 + +result = [| + 0, 10, 100; + 0, 10, 99; + 0, 10, 98; + 0, 10, 97; + 0, 20, 100; + 0, 20, 99; + 0, 20, 98; + 0, 20, 97; + 0, 30, 100; + 0, 30, 99; + 0, 30, 98; + 0, 30, 97; + 1, 10, 100; + 1, 10, 99; + 1, 10, 98; + 1, 10, 97; + 1, 20, 100; + 1, 20, 99; + 1, 20, 98; + 1, 20, 97; + 1, 30, 100; + 1, 30, 99; + 1, 30, 98; + 1, 30, 97; + 2, 10, 100; + 2, 10, 99; + 2, 10, 98; + 2, 10, 97; + 2, 20, 100; + 2, 20, 99; + 2, 20, 98; + 2, 20, 97; + 2, 30, 100; + 2, 30, 99; + 2, 30, 98; + 2, 30, 97; + 3, 10, 100; + 3, 10, 99; + 3, 10, 98; + 3, 10, 97; + 3, 20, 100; + 3, 20, 99; + 3, 20, 98; + 3, 20, 97; + 3, 30, 100; + 3, 30, 99; + 3, 30, 98; + 3, 30, 97; +|] + +first (from) +second (to) +third (in) +fourth (downfrom) +fifth (downto) +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 10, k = 100, x = 1, y = 20, z = 99 +>>> i = 0, j = 10, k = 100, x = 1, y = 20, z = 100 +>>> i = 0, j = 10, k = 100, x = 1, y = 10, z = 99 +>>> i = 0, j = 10, k = 100, x = 1, y = 10, z = 100 +>>> i = 0, j = 10, k = 100, x = 0, y = 20, z = 99 +>>> i = 0, j = 10, k = 100, x = 0, y = 20, z = 100 +>>> i = 0, j = 10, k = 100, x = 0, y = 10, z = 99 +>>> i = 0, j = 10, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 10, k = 99, x = 1, y = 20, z = 99 +>>> i = 0, j = 10, k = 99, x = 1, y = 20, z = 100 +>>> i = 0, j = 10, k = 99, x = 1, y = 10, z = 99 +>>> i = 0, j = 10, k = 99, x = 1, y = 10, z = 100 +>>> i = 0, j = 10, k = 99, x = 0, y = 20, z = 99 +>>> i = 0, j = 10, k = 99, x = 0, y = 20, z = 100 +>>> i = 0, j = 10, k = 99, x = 0, y = 10, z = 99 +>>> i = 0, j = 10, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 20, k = 100, x = 1, y = 20, z = 99 +>>> i = 0, j = 20, k = 100, x = 1, y = 20, z = 100 +>>> i = 0, j = 20, k = 100, x = 1, y = 10, z = 99 +>>> i = 0, j = 20, k = 100, x = 1, y = 10, z = 100 +>>> i = 0, j = 20, k = 100, x = 0, y = 20, z = 99 +>>> i = 0, j = 20, k = 100, x = 0, y = 20, z = 100 +>>> i = 0, j = 20, k = 100, x = 0, y = 10, z = 99 +>>> i = 0, j = 20, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 20, k = 99, x = 1, y = 20, z = 99 +>>> i = 0, j = 20, k = 99, x = 1, y = 20, z = 100 +>>> i = 0, j = 20, k = 99, x = 1, y = 10, z = 99 +>>> i = 0, j = 20, k = 99, x = 1, y = 10, z = 100 +>>> i = 0, j = 20, k = 99, x = 0, y = 20, z = 99 +>>> i = 0, j = 20, k = 99, x = 0, y = 20, z = 100 +>>> i = 0, j = 20, k = 99, x = 0, y = 10, z = 99 +>>> i = 0, j = 20, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 10, k = 100, x = 1, y = 20, z = 99 +>>> i = 1, j = 10, k = 100, x = 1, y = 20, z = 100 +>>> i = 1, j = 10, k = 100, x = 1, y = 10, z = 99 +>>> i = 1, j = 10, k = 100, x = 1, y = 10, z = 100 +>>> i = 1, j = 10, k = 100, x = 0, y = 20, z = 99 +>>> i = 1, j = 10, k = 100, x = 0, y = 20, z = 100 +>>> i = 1, j = 10, k = 100, x = 0, y = 10, z = 99 +>>> i = 1, j = 10, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 10, k = 99, x = 1, y = 20, z = 99 +>>> i = 1, j = 10, k = 99, x = 1, y = 20, z = 100 +>>> i = 1, j = 10, k = 99, x = 1, y = 10, z = 99 +>>> i = 1, j = 10, k = 99, x = 1, y = 10, z = 100 +>>> i = 1, j = 10, k = 99, x = 0, y = 20, z = 99 +>>> i = 1, j = 10, k = 99, x = 0, y = 20, z = 100 +>>> i = 1, j = 10, k = 99, x = 0, y = 10, z = 99 +>>> i = 1, j = 10, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 20, k = 100, x = 1, y = 20, z = 99 +>>> i = 1, j = 20, k = 100, x = 1, y = 20, z = 100 +>>> i = 1, j = 20, k = 100, x = 1, y = 10, z = 99 +>>> i = 1, j = 20, k = 100, x = 1, y = 10, z = 100 +>>> i = 1, j = 20, k = 100, x = 0, y = 20, z = 99 +>>> i = 1, j = 20, k = 100, x = 0, y = 20, z = 100 +>>> i = 1, j = 20, k = 100, x = 0, y = 10, z = 99 +>>> i = 1, j = 20, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 20, k = 99, x = 1, y = 20, z = 99 +>>> i = 1, j = 20, k = 99, x = 1, y = 20, z = 100 +>>> i = 1, j = 20, k = 99, x = 1, y = 10, z = 99 +>>> i = 1, j = 20, k = 99, x = 1, y = 10, z = 100 +>>> i = 1, j = 20, k = 99, x = 0, y = 20, z = 99 +>>> i = 1, j = 20, k = 99, x = 0, y = 20, z = 100 +>>> i = 1, j = 20, k = 99, x = 0, y = 10, z = 99 +>>> i = 1, j = 20, k = 99, x = 0, y = 10, z = 100 + +result = [| + 0, 10, 100, 1, 20, 99; + 0, 10, 100, 1, 20, 100; + 0, 10, 100, 1, 10, 99; + 0, 10, 100, 1, 10, 100; + 0, 10, 100, 0, 20, 99; + 0, 10, 100, 0, 20, 100; + 0, 10, 100, 0, 10, 99; + 0, 10, 100, 0, 10, 100; + 0, 10, 99, 1, 20, 99; + 0, 10, 99, 1, 20, 100; + 0, 10, 99, 1, 10, 99; + 0, 10, 99, 1, 10, 100; + 0, 10, 99, 0, 20, 99; + 0, 10, 99, 0, 20, 100; + 0, 10, 99, 0, 10, 99; + 0, 10, 99, 0, 10, 100; + 0, 20, 100, 1, 20, 99; + 0, 20, 100, 1, 20, 100; + 0, 20, 100, 1, 10, 99; + 0, 20, 100, 1, 10, 100; + 0, 20, 100, 0, 20, 99; + 0, 20, 100, 0, 20, 100; + 0, 20, 100, 0, 10, 99; + 0, 20, 100, 0, 10, 100; + 0, 20, 99, 1, 20, 99; + 0, 20, 99, 1, 20, 100; + 0, 20, 99, 1, 10, 99; + 0, 20, 99, 1, 10, 100; + 0, 20, 99, 0, 20, 99; + 0, 20, 99, 0, 20, 100; + 0, 20, 99, 0, 10, 99; + 0, 20, 99, 0, 10, 100; + 1, 10, 100, 1, 20, 99; + 1, 10, 100, 1, 20, 100; + 1, 10, 100, 1, 10, 99; + 1, 10, 100, 1, 10, 100; + 1, 10, 100, 0, 20, 99; + 1, 10, 100, 0, 20, 100; + 1, 10, 100, 0, 10, 99; + 1, 10, 100, 0, 10, 100; + 1, 10, 99, 1, 20, 99; + 1, 10, 99, 1, 20, 100; + 1, 10, 99, 1, 10, 99; + 1, 10, 99, 1, 10, 100; + 1, 10, 99, 0, 20, 99; + 1, 10, 99, 0, 20, 100; + 1, 10, 99, 0, 10, 99; + 1, 10, 99, 0, 10, 100; + 1, 20, 100, 1, 20, 99; + 1, 20, 100, 1, 20, 100; + 1, 20, 100, 1, 10, 99; + 1, 20, 100, 1, 10, 100; + 1, 20, 100, 0, 20, 99; + 1, 20, 100, 0, 20, 100; + 1, 20, 100, 0, 10, 99; + 1, 20, 100, 0, 10, 100; + 1, 20, 99, 1, 20, 99; + 1, 20, 99, 1, 20, 100; + 1, 20, 99, 1, 10, 99; + 1, 20, 99, 1, 10, 100; + 1, 20, 99, 0, 20, 99; + 1, 20, 99, 0, 20, 100; + 1, 20, 99, 0, 10, 99; + 1, 20, 99, 0, 10, 100; +|] diff --git a/testsuite/tests/comprehensions/array_comprehensions_special.ml b/testsuite/tests/comprehensions/array_comprehensions_special.ml new file mode 100644 index 000000000000..86cac2dbecc2 --- /dev/null +++ b/testsuite/tests/comprehensions/array_comprehensions_special.ml @@ -0,0 +1,139 @@ +(* TEST + flags = "-extension comprehensions_experimental" + * expect +*) + +(* Tests for special array comprehension behavior that don't have a direct + analog for lists. For array comprehensions, we pre-allocate the resulting + array if it has a statically-knowable size, which we can see by including 0 + in something that would otherwise run for close enough to forever. However, + even if one of the sequences being iterated through is empty, these optimized + comprehensions will still fail if any individual [for]-[to] or [for]-[downto] + iterator would overflow an [int]. *) + +(* Zeros, even though we'd normally expect this to run for ~forever *) + +[|i,j,k for i = 1 to 0 + and j = 0 to Int.max_int / 256 + and k = 1 to 2 |];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[|i,j,k for i = 0 to Int.max_int / 256 + and j = 1 to 0 + and k = 1 to 2 |];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[|i,j,k for i = 0 to Int.max_int / 256 + and j = 1 to 2 + and k = 1 to 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +(* Zeros, even though we'd normally expect the array size to overflow *) + +[|i,j,k for i = 1 to 0 + and j = 0 to Int.max_int - 1 + and k = 0 downto Int.min_int + 2|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[|i,j,k for i = 0 to Int.max_int - 1 + and j = 1 to 0 + and k = 0 downto Int.min_int + 2|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[|i,j,k for i = 0 to Int.max_int - 1 + and j = 0 downto Int.min_int + 2 + and k = 1 to 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +(* Zeros, even though we'd normally expect the individual iterator sizes to + overflow *) + +[|i,j,k for i = 1 to 0 + and j = 0 to Int.max_int + and k = 0 downto Int.min_int|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[|i,j,k for i = 0 to Int.max_int + and j = 1 to 0 + and k = 0 downto Int.min_int|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[|i,j,k for i = 0 to Int.max_int + and j = 0 downto Int.min_int + and k = 1 to 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +(* Various kind of overflow *) + +[|i for i = 0 to Int.max_int |];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +[|i for i = 0 downto Int.min_int |];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +[|i for i = 0 downto Int.min_int + 1 |];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +[|i,j for i = 0 to Int.max_int / 256 + and j = 0 to 1023 |];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +[|i,j for i = 0 to 1023 + and j = 0 to Int.max_int / 256 |];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +(* One case that works, whose output should be unremarkable *) + +[|i,j,k for i = 0 to 3 and j = 0 to 3 and k = 0 to 3|];; +[%%expect{| +- : (int * int * int) array = +[|(0, 0, 0); (0, 0, 1); (0, 0, 2); (0, 0, 3); (0, 1, 0); (0, 1, 1); + (0, 1, 2); (0, 1, 3); (0, 2, 0); (0, 2, 1); (0, 2, 2); (0, 2, 3); + (0, 3, 0); (0, 3, 1); (0, 3, 2); (0, 3, 3); (1, 0, 0); (1, 0, 1); + (1, 0, 2); (1, 0, 3); (1, 1, 0); (1, 1, 1); (1, 1, 2); (1, 1, 3); + (1, 2, 0); (1, 2, 1); (1, 2, 2); (1, 2, 3); (1, 3, 0); (1, 3, 1); + (1, 3, 2); (1, 3, 3); (2, 0, 0); (2, 0, 1); (2, 0, 2); (2, 0, 3); + (2, 1, 0); (2, 1, 1); (2, 1, 2); (2, 1, 3); (2, 2, 0); (2, 2, 1); + (2, 2, 2); (2, 2, 3); (2, 3, 0); (2, 3, 1); (2, 3, 2); (2, 3, 3); + (3, 0, 0); (3, 0, 1); (3, 0, 2); (3, 0, 3); (3, 1, 0); (3, 1, 1); + (3, 1, 2); (3, 1, 3); (3, 2, 0); (3, 2, 1); (3, 2, 2); (3, 2, 3); + (3, 3, 0); (3, 3, 1); (3, 3, 2); (3, 3, 3)|] +|}];; diff --git a/testsuite/tests/comprehensions/comprehensions.ml b/testsuite/tests/comprehensions/comprehensions.ml deleted file mode 100644 index bcb858368640..000000000000 --- a/testsuite/tests/comprehensions/comprehensions.ml +++ /dev/null @@ -1,590 +0,0 @@ -(* TEST - flags = "-extension comprehensions" - * expect -*) -(*Type checking tests.*) -true::[i for i = 10 downto 0];; -[%%expect{| -Line 1, characters 7-8: -1 | true::[i for i = 10 downto 0];; - ^ -Error: This expression has type int but an expression was expected of type - bool -|}];; - -module M = struct type t = A | B end;; -let x : M.t list = [A for i = 1 to 1];; -[%%expect{| -module M : sig type t = A | B end -val x : M.t list = [M.A] -|}];; - -[A for i = 1 to 1];; -[%%expect{| -Line 1, characters 1-2: -1 | [A for i = 1 to 1];; - ^ -Error: Unbound constructor A -|}];; - -M.B::[A for i = 1 to 1];; -[%%expect{| -- : M.t list = [M.B; M.A] -|}, Principal{| -Line 1, characters 6-7: -1 | M.B::[A for i = 1 to 1];; - ^ -Warning 18 [not-principal]: this type-based constructor disambiguation is not principal. -- : M.t list = [M.B; M.A] -|}];; - -let y = 10;; -[i for i in y];; -[%%expect{| -val y : int = 10 -Line 2, characters 12-13: -2 | [i for i in y];; - ^ -Error: This expression has type int but an expression was expected of type - 'a list - because it is in the iteration argument of a comprehension -|}];; - -let y = [1;2;3];; -true::[i for i in y];; -[%%expect{| -val y : int list = [1; 2; 3] -Line 2, characters 7-8: -2 | true::[i for i in y];; - ^ -Error: This expression has type int but an expression was expected of type - bool -|}];; - -let y = [[1]];; -true::[i for i in z for z in y];; -[%%expect{| -val y : int list list = [[1]] -Line 2, characters 7-8: -2 | true::[i for i in z for z in y];; - ^ -Error: This expression has type int but an expression was expected of type - bool -|}];; - -let y = [[]];; -[i for i in z and z in y];; -[%%expect{| -val y : 'a list list = [[]] -Line 2, characters 12-13: -2 | [i for i in z and z in y];; - ^ -Error: Unbound value z -|}];; - -[() for i in [1]];; -[%%expect{| -Line 1, characters 8-9: -1 | [() for i in [1]];; - ^ -Warning 26 [unused-var]: unused variable i. -- : unit list = [()] -|}];; - -[|() for i in [|1|]|];; -[%%expect{| -Line 1, characters 9-10: -1 | [|() for i in [|1|]|];; - ^ -Warning 26 [unused-var]: unused variable i. -- : unit array = [|()|] -|}];; - -[() for i = 0 to 10] [@warning "+a"];; -[%%expect{| -Line 1, characters 0-20: -1 | [() for i = 0 to 10] [@warning "+a"];; - ^^^^^^^^^^^^^^^^^^^^ -Warning 35 [unused-for-index]: unused for-loop index i. -- : unit list = [(); (); (); (); (); (); (); (); (); (); ()] -|}];; - -[|() for i = 0 to 10|] [@warning "+a"];; -[%%expect{| -Line 1, characters 0-22: -1 | [|() for i = 0 to 10|] [@warning "+a"];; - ^^^^^^^^^^^^^^^^^^^^^^ -Warning 35 [unused-for-index]: unused for-loop index i. -- : unit array = [|(); (); (); (); (); (); (); (); (); (); ()|] -|}];; - -(*List construction tests.*) - -[i for i = 0 to 10];; -[%%expect{| -- : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10] -|}];; - -[i for i = 10 downto 0];; -[%%expect{| -- : int list = [10; 9; 8; 7; 6; 5; 4; 3; 2; 1; 0] -|}];; - -let y = [1;2;3];; -[i for i in y];; -[%%expect{| -val y : int list = [1; 2; 3] -- : int list = [1; 2; 3] -|}];; - -let y = [0;1;2;3];; -[ (k*4*4 + j*4 + i) for i in y for j in y for k in y];; -[%%expect{| -val y : int list = [0; 1; 2; 3] -- : int list = -[0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; - 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; - 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; - 59; 60; 61; 62; 63] -|}];; - -let y = [0;1;2;3];; -[ (k*4*4 + j*4 + i) for i in y and j in y and k in y];; -[%%expect{| -val y : int list = [0; 1; 2; 3] -- : int list = -[0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; - 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; - 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; - 59; 60; 61; 62; 63] -|}];; - -(*Array construction tests*) - -let y = [|0;1;2;3|];; -[| (k*4*4 + j*4 + i) for i in y for j in y for k in y |];; -[%%expect{| -val y : int array = [|0; 1; 2; 3|] -- : int array = -[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; - 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; - 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; - 59; 60; 61; 62; 63|] -|}];; - -let y = [|0;1;2;3|];; -[| (k*4*4 + j*4 + i) for i in y and j in y and k in y|];; -[%%expect{| -val y : int array = [|0; 1; 2; 3|] -- : int array = -[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; - 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; - 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; - 59; 60; 61; 62; 63|] -|}];; - -let y = [|0;1;2;3|];; -[| (k*4*4 + j*4 + i) for i in y for j in y and k in y|];; -[%%expect{| -val y : int array = [|0; 1; 2; 3|] -- : int array = -[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; - 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; - 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; - 59; 60; 61; 62; 63|] -|}];; - -let y = [|0;1;2;3|];; -[| (k*4*4 + j*4 + i) for i in y and j in y for k in y|];; -[%%expect{| -val y : int array = [|0; 1; 2; 3|] -- : int array = -[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; - 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; - 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; - 59; 60; 61; 62; 63|] -|}];; - - -[| (k*4*4 + j*4 + i) for i = 0 to 3 and j = 0 to 3 for k = 0 to 3 |];; -[%%expect{| -- : int array = -[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; - 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; - 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; - 59; 60; 61; 62; 63|] -|}];; - -[| (float_of_int (k*4*4 + j*4 + i)) for i = 0 to 3 and j = 0 to 3 for k = 0 to 3 |];; -[%%expect{| -- : float array = -[|0.; 1.; 2.; 3.; 4.; 5.; 6.; 7.; 8.; 9.; 10.; 11.; 12.; 13.; 14.; 15.; 16.; - 17.; 18.; 19.; 20.; 21.; 22.; 23.; 24.; 25.; 26.; 27.; 28.; 29.; 30.; 31.; - 32.; 33.; 34.; 35.; 36.; 37.; 38.; 39.; 40.; 41.; 42.; 43.; 44.; 45.; 46.; - 47.; 48.; 49.; 50.; 51.; 52.; 53.; 54.; 55.; 56.; 57.; 58.; 59.; 60.; 61.; - 62.; 63.|] -|}];; - -let y = [| [| [| 1;2;|]; [| 3;4; |] |]; [| [| 5;6;|]; [| 7;8; |] |] |];; -[| i for i in x for x in z for z in y |];; -[%%expect{| -val y : int array array array = - [|[|[|1; 2|]; [|3; 4|]|]; [|[|5; 6|]; [|7; 8|]|]|] -- : int array = [|1; 2; 3; 4; 5; 6; 7; 8|] -|}];; - -let y = [| [| [| 1;2;|]; [| 3;4; |] |]; [| [| 5;6;|]; [| 7;8; |] |] |];; -[| (i,j) for i in x and j in x for x in z for z in y |];; -[%%expect{| -val y : int array array array = - [|[|[|1; 2|]; [|3; 4|]|]; [|[|5; 6|]; [|7; 8|]|]|] -- : (int * int) array = -[|(1, 1); (2, 1); (1, 2); (2, 2); (3, 3); (4, 3); (3, 4); (4, 4); (5, 5); - (6, 5); (5, 6); (6, 6); (7, 7); (8, 7); (7, 8); (8, 8)|] -|}];; - -let y = [| [| [| 1;2;|]; [| 3;4; |] |]; [| [| 5;6;|]; [| 7;8; |] |] |];; -[| (string_of_int i,j) for i in x and j in x for x in z for z in y |];; -[%%expect{| -val y : int array array array = - [|[|[|1; 2|]; [|3; 4|]|]; [|[|5; 6|]; [|7; 8|]|]|] -- : (string * int) array = -[|("1", 1); ("2", 1); ("1", 2); ("2", 2); ("3", 3); ("4", 3); ("3", 4); - ("4", 4); ("5", 5); ("6", 5); ("5", 6); ("6", 6); ("7", 7); ("8", 7); - ("7", 8); ("8", 8)|] -|}];; - - -(*Testcase with empty intermediate array.*) -[| ( j * 3 + i) for i = 0 to (j-1) for j = 0 to 2|];; -[%%expect{| -- : int array = [|3; 6; 7|] -|}];; - -(* When clauses*) - -[(j,i) for j = 0 to i when (i >= 4 && j >= 4) for i = 0 to 9 when (i mod 2 = 0)];; -[%%expect{| -- : (int * int) list = -[(4, 4); (4, 6); (5, 6); (6, 6); (4, 8); (5, 8); (6, 8); (7, 8); (8, 8)] -|}];; - -[| (j,i) for j = 0 to i when (i >= 4 && j >= 4) for i = 0 to 9 when (i mod 2 = 0) |];; -[%%expect{| -- : (int * int) array = -[|(4, 4); (4, 6); (5, 6); (6, 6); (4, 8); (5, 8); (6, 8); (7, 8); (8, 8)|] -|}];; - -[ (j,i) for j = 0 to i when (i > 4) for i = 0 to 10 when (j = 0) ];; -[%%expect{| -Line 1, characters 58-59: -1 | [ (j,i) for j = 0 to i when (i > 4) for i = 0 to 10 when (j = 0) ];; - ^ -Error: Unbound value j -|}];; - -[| (i,j) for i = 0 to 10 when (i mod 2 = 0) for j = 0 to 5 when (j = 1 || j = 2)|];; -[%%expect{| -- : (int * int) array = -[|(0, 1); (2, 1); (4, 1); (6, 1); (8, 1); (10, 1); (0, 2); (2, 2); (4, 2); - (6, 2); (8, 2); (10, 2)|] -|}];; - -[| (i) for i = 0 to 10 when (i mod 2 = 0)|];; -[%%expect{| -- : int array = [|0; 2; 4; 6; 8; 10|] -|}];; - -[ (i,j,k) for i = 0 to 5 when (i mod 2 = 0) for j = 0 to 5 when (j mod 2 = 0) for k = 0 to 5 when (k mod 2 = 0)];; -[%%expect{| -- : (int * int * int) list = -[(0, 0, 0); (2, 0, 0); (4, 0, 0); (0, 2, 0); (2, 2, 0); (4, 2, 0); (0, 4, 0); - (2, 4, 0); (4, 4, 0); (0, 0, 2); (2, 0, 2); (4, 0, 2); (0, 2, 2); (2, 2, 2); - (4, 2, 2); (0, 4, 2); (2, 4, 2); (4, 4, 2); (0, 0, 4); (2, 0, 4); (4, 0, 4); - (0, 2, 4); (2, 2, 4); (4, 2, 4); (0, 4, 4); (2, 4, 4); (4, 4, 4)] -|}];; - -[| (i,j,k) for i = 0 to 5 when (i mod 2 = 0) for j = 0 to 5 when (j mod 2 = 0) for k = 0 to 5 when (k mod 2 = 0)|];; -[%%expect{| -- : (int * int * int) array = -[|(0, 0, 0); (2, 0, 0); (4, 0, 0); (0, 2, 0); (2, 2, 0); (4, 2, 0); - (0, 4, 0); (2, 4, 0); (4, 4, 0); (0, 0, 2); (2, 0, 2); (4, 0, 2); - (0, 2, 2); (2, 2, 2); (4, 2, 2); (0, 4, 2); (2, 4, 2); (4, 4, 2); - (0, 0, 4); (2, 0, 4); (4, 0, 4); (0, 2, 4); (2, 2, 4); (4, 2, 4); - (0, 4, 4); (2, 4, 4); (4, 4, 4)|] -|}];; - -[ (i,j,k) for i = 0 to 5 and j = 0 to 5 and k = 0 to 5 when ((k mod 2 = 0) && (i mod 2 = 0) && (j mod 2 = 0))];; -[%%expect{| -- : (int * int * int) list = -[(0, 0, 0); (2, 0, 0); (4, 0, 0); (0, 2, 0); (2, 2, 0); (4, 2, 0); (0, 4, 0); - (2, 4, 0); (4, 4, 0); (0, 0, 2); (2, 0, 2); (4, 0, 2); (0, 2, 2); (2, 2, 2); - (4, 2, 2); (0, 4, 2); (2, 4, 2); (4, 4, 2); (0, 0, 4); (2, 0, 4); (4, 0, 4); - (0, 2, 4); (2, 2, 4); (4, 2, 4); (0, 4, 4); (2, 4, 4); (4, 4, 4)] -|}];; - -[| (i,j,k) for i = 0 to 5 and j = 0 to 5 and k = 0 to 5 when ((k mod 2 = 0) && (i mod 2 = 0) && (j mod 2 = 0) )|];; -[%%expect{| -- : (int * int * int) array = -[|(0, 0, 0); (2, 0, 0); (4, 0, 0); (0, 2, 0); (2, 2, 0); (4, 2, 0); - (0, 4, 0); (2, 4, 0); (4, 4, 0); (0, 0, 2); (2, 0, 2); (4, 0, 2); - (0, 2, 2); (2, 2, 2); (4, 2, 2); (0, 4, 2); (2, 4, 2); (4, 4, 2); - (0, 0, 4); (2, 0, 4); (4, 0, 4); (0, 2, 4); (2, 2, 4); (4, 2, 4); - (0, 4, 4); (2, 4, 4); (4, 4, 4)|] -|}];; - -[| (i,j,k) for i = 0 to 5 when ((k mod 2 = 0) && (i mod 2 = 0) && (j mod 2 = 0)) for j = 0 to 5 for k = 0 to 5 |];; -[%%expect{| -- : (int * int * int) array = -[|(0, 0, 0); (2, 0, 0); (4, 0, 0); (0, 2, 0); (2, 2, 0); (4, 2, 0); - (0, 4, 0); (2, 4, 0); (4, 4, 0); (0, 0, 2); (2, 0, 2); (4, 0, 2); - (0, 2, 2); (2, 2, 2); (4, 2, 2); (0, 4, 2); (2, 4, 2); (4, 4, 2); - (0, 0, 4); (2, 0, 4); (4, 0, 4); (0, 2, 4); (2, 2, 4); (4, 2, 4); - (0, 4, 4); (2, 4, 4); (4, 4, 4)|] -|}];; - -let f f = - [ (f i j k) for i = 0 to 3 when (i mod 2 = 0) for j = 0 to 3 when (j mod 2 = 0) for k = 0 to 3 when (k mod 2 = 0)];; -[%%expect{| -val f : (int -> int -> int -> 'a) -> 'a list = -|}];; - -f (fun i j k -> (i,j,k) ) -[%%expect{| -- : (int * int * int) list = -[(0, 0, 0); (2, 0, 0); (0, 2, 0); (2, 2, 0); (0, 0, 2); (2, 0, 2); (0, 2, 2); - (2, 2, 2)] -|}];; - -f (fun i j k -> i ) -[%%expect{| -- : int list = [0; 2; 0; 2; 0; 2; 0; 2] -|}];; - -f (fun i j k -> float_of_int i ) -[%%expect{| -- : float list = [0.; 2.; 0.; 2.; 0.; 2.; 0.; 2.] -|}];; - -f (fun i j k -> [|string_of_int i|] ) -[%%expect{| -- : string array list = -[[|"0"|]; [|"2"|]; [|"0"|]; [|"2"|]; [|"0"|]; [|"2"|]; [|"0"|]; [|"2"|]] -|}];; - - -(*Make sure stuff is called in correct order/ correct number of times.*) - -let var = ref [];; -let f x = var := x::!var; x;; -[%%expect{| -val var : '_weak1 list ref = {contents = []} -val f : '_weak1 -> '_weak1 = -|}];; - -let z = [|1;2;3|];; -[| i for i in (f z) |];; -List.rev !var;; -[%%expect{| -val z : int array = [|1; 2; 3|] -- : int array = [|1; 2; 3|] -- : int array list = [[|1; 2; 3|]] -|}];; - -var := [];; -let z = [|1;2;3|];; -[| i for i in (f z) for i = 0 to 1 |];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int array = [|1; 2; 3|] -- : int array = [|1; 2; 3; 1; 2; 3|] -- : int array list = [[|1; 2; 3|]; [|1; 2; 3|]] -|}];; - -var := [];; -let z = [|1;2;3|];; -[| i for i in (f z) for i = 0 to 6 when (i mod 2 = 0) |];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int array = [|1; 2; 3|] -- : int array = [|1; 2; 3; 1; 2; 3; 1; 2; 3; 1; 2; 3|] -- : int array list = [[|1; 2; 3|]; [|1; 2; 3|]; [|1; 2; 3|]; [|1; 2; 3|]] -|}];; - -var := [];; -let z = [|1;2;3|];; -[| i for i in (f z) and i = 0 to 1 |];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int array = [|1; 2; 3|] -- : int array = [|1; 2; 3; 1; 2; 3|] -- : int array list = [[|1; 2; 3|]] -|}];; - -var := [];; -let z = [|1;2;3|];; -[| i for i in (f z) and i = 0 to 6 when (i mod 2 = 0) |];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int array = [|1; 2; 3|] -- : int array = [|2; 2; 2; 2; 2; 2; 2|] -- : int array list = [[|1; 2; 3|]] -|}];; - -var := [];; -let z = [|[|1;2;3|];[|4;5;6|]|];; -[| i for i in (f y) for y in z |];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int array array = [|[|1; 2; 3|]; [|4; 5; 6|]|] -- : int array = [|1; 2; 3; 4; 5; 6|] -- : int array list = [[|1; 2; 3|]; [|4; 5; 6|]] -|}];; - - -let var = ref [];; -let f x = var := x::!var; x;; -[%%expect{| -val var : '_weak2 list ref = {contents = []} -val f : '_weak2 -> '_weak2 = -|}];; - -let z = [1;2;3];; -[ i for i in (f z) ];; -List.rev !var;; -[%%expect{| -val z : int list = [1; 2; 3] -- : int list = [1; 2; 3] -- : int list list = [[1; 2; 3]] -|}];; - -var := [];; -let z = [1;2;3];; -[ i for i in (f z) for i = 0 to 1 ];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int list = [1; 2; 3] -- : int list = [1; 2; 3; 1; 2; 3] -- : int list list = [[1; 2; 3]; [1; 2; 3]] -|}];; - -var := [];; -let z = [1;2;3];; -[ i for i in (f z) for i = 0 to 6 when (i mod 2 = 0) ];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int list = [1; 2; 3] -- : int list = [1; 2; 3; 1; 2; 3; 1; 2; 3; 1; 2; 3] -- : int list list = [[1; 2; 3]; [1; 2; 3]; [1; 2; 3]; [1; 2; 3]] -|}];; - -var := [];; -let z = [1;2;3];; -[ i for i in (f z) and i = 0 to 1 ];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int list = [1; 2; 3] -- : int list = [1; 2; 3; 1; 2; 3] -- : int list list = [[1; 2; 3]] -|}];; - -var := [];; -let z = [1;2;3];; -[ i for i in (f z) and i = 0 to 6 when (i mod 2 = 0) ];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int list = [1; 2; 3] -- : int list = [2; 2; 2; 2; 2; 2; 2] -- : int list list = [[1; 2; 3]] -|}];; - -var := [];; -let z = [[1;2;3];[4;5;6]];; -[ i for i in (f y) for y in z ];; -List.rev !var;; -[%%expect{| -- : unit = () -val z : int list list = [[1; 2; 3]; [4; 5; 6]] -- : int list = [1; 2; 3; 4; 5; 6] -- : int list list = [[1; 2; 3]; [4; 5; 6]] -|}];; - -let var = ref [];; -let f x = var := x::!var; x;; -[%%expect{| -val var : '_weak3 list ref = {contents = []} -val f : '_weak3 -> '_weak3 = -|}];; - - -var := [];; -[ i for i = (f 0) to (f 5) ];; -List.rev !var;; -[%%expect{| -- : unit = () -- : int list = [0; 1; 2; 3; 4; 5] -- : int list = [0; 5] -|}];; - -var := [];; -[ i for i = (f 0) to (f 5) and j = (f 3) to (f 4) ];; -List.rev !var;; -[%%expect{| -- : unit = () -- : int list = [0; 1; 2; 3; 4; 5; 0; 1; 2; 3; 4; 5] -- : int list = [3; 4; 0; 5] -|}];; - -var := [];; -[ i for i = (f 0) to (f 5) for j = (f 3) to (f 4) ];; -List.rev !var;; -[%%expect{| -- : unit = () -- : int list = [0; 1; 2; 3; 4; 5; 0; 1; 2; 3; 4; 5] -- : int list = [3; 4; 0; 5; 0; 5] -|}];; - -var := [];; -[| i for i = (f 0) to (f 5) |];; -List.rev !var;; -[%%expect{| -- : unit = () -- : int array = [|0; 1; 2; 3; 4; 5|] -- : int list = [0; 5] -|}];; - -var := [];; -[| i for i = (f 0) to (f 5) and j = (f 3) to (f 4) |];; -List.rev !var;; -[%%expect{| -- : unit = () -- : int array = [|0; 1; 2; 3; 4; 5; 0; 1; 2; 3; 4; 5|] -- : int list = [3; 4; 0; 5] -|}];; - -var := [];; -[| i for i = (f 0) to (f 5) for j = (f 3) to (f 4) |];; -List.rev !var;; -[%%expect{| -- : unit = () -- : int array = [|0; 1; 2; 3; 4; 5; 0; 1; 2; 3; 4; 5|] -- : int list = [3; 4; 0; 5; 0; 5] -|}];; - -var := [];; -[| i for i = (f 5) downto (f 0) for j = (f 3) to (f 4) |];; -List.rev !var;; -[%%expect{| -- : unit = () -- : int array = [|5; 4; 3; 2; 1; 0; 5; 4; 3; 2; 1; 0|] -- : int list = [3; 4; 5; 0; 5; 0] -|}];; diff --git a/testsuite/tests/comprehensions/comprehensions_from_quickcheck.ml b/testsuite/tests/comprehensions/comprehensions_from_quickcheck.ml new file mode 100644 index 000000000000..634f9d6a8526 --- /dev/null +++ b/testsuite/tests/comprehensions/comprehensions_from_quickcheck.ml @@ -0,0 +1,11361 @@ +(* TEST + flags = "-extension comprehensions_experimental -extension immutable_arrays_experimental" + * expect +*) + +(* Generated by quickcheck_lists_arrays_haskell_python.ml; filtered down to all + tests of reasonable size; and reflowed to fit in 80-character lines. This + still wasn't enough to get this file to execute in a reasonable amount of + time, and most of the test cases return empty lists, so this file also had a + lot of tests that looked uninteresting removed: + + - Most tests that were just a single [for] iterator. + - All but one test whose first [for] iterator was over an empty sequence, and + all but one other test whose first [for]-[and] iterator had an empty + sequence after an [and]. + - As above, but for empty [to]/[downto] ranges. + + This brought the file down to a manageable size, although in a quick test it + was still the 14th-slowest test in the compiler. *) + +[(e, f, h, o, t, w) + for f in [-3; -1; 3] and w in [2; 1; -3] + for e in [] and o = -3 downto -1 + for t in [3; 1; -3; 2] + for h = 2 downto 0];; +[%%expect{| +- : ('a * int * int * int * int * int) list = [] +|}];; + +[|(e, f, h, o, t, w) + for f in [|-3; -1; 3|] and w in [|2; 1; -3|] + for e in [||] and o = -3 downto -1 + for t in [|3; 1; -3; 2|] + for h = 2 downto 0|];; +[%%expect{| +- : ('_weak1 * int * int * int * int * int) array = [||] +|}];; + +[:(e, f, h, o, t, w) + for f in [:-3; -1; 3:] and w in [:2; 1; -3:] + for e in [::] and o = -3 downto -1 + for t in [:3; 1; -3; 2:] + for h = 2 downto 0:];; +[%%expect{| +- : ('a * int * int * int * int * int) iarray = [::] +|}];; + +[(e, q, t) + for e = 3 to -3 + when e <> 0 + for q = 3 downto 0 and t in [e] + when abs q mod 2 = 1 + when abs e mod 2 = 1];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(e, q, t) + for e = 3 to -3 + when e <> 0 + for q = 3 downto 0 and t in [|e|] + when abs q mod 2 = 1 + when abs e mod 2 = 1|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(e, q, t) + for e = 3 to -3 + when e <> 0 + for q = 3 downto 0 and t in [:e:] + when abs q mod 2 = 1 + when abs e mod 2 = 1:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(a, j, s, u, z) + for j = 1 downto 1 + for s in [-1] and a in [0; 3; 3; j; -1] + when abs s mod 2 = 0 + for u = -3 to 0 and z = 0 downto -2 + for _ = 2 downto 1];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(a, j, s, u, z) + for j = 1 downto 1 + for s in [|-1|] and a in [|0; 3; 3; j; -1|] + when abs s mod 2 = 0 + for u = -3 to 0 and z = 0 downto -2 + for _ = 2 downto 1|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(a, j, s, u, z) + for j = 1 downto 1 + for s in [:-1:] and a in [:0; 3; 3; j; -1:] + when abs s mod 2 = 0 + for u = -3 to 0 and z = 0 downto -2 + for _ = 2 downto 1:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(a, g, r, s) + for s in [-1; -2; 3] and a in [0] + for g = a downto 2 and r = 3 to 1 + when abs r mod 2 = 0 + when a <> 0];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(a, g, r, s) + for s in [|-1; -2; 3|] and a in [|0|] + for g = a downto 2 and r = 3 to 1 + when abs r mod 2 = 0 + when a <> 0|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(a, g, r, s) + for s in [:-1; -2; 3:] and a in [:0:] + for g = a downto 2 and r = 3 to 1 + when abs r mod 2 = 0 + when a <> 0:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(f, g, w) for g = 1 downto 1 and w in [-3; -3] and f in [1; 1]];; +[%%expect{| +- : (int * int * int) list = [(1, 1, -3); (1, 1, -3); (1, 1, -3); (1, 1, -3)] +|}];; + +[|(f, g, w) for g = 1 downto 1 and w in [|-3; -3|] and f in [|1; 1|]|];; +[%%expect{| +- : (int * int * int) array = +[|(1, 1, -3); (1, 1, -3); (1, 1, -3); (1, 1, -3)|] +|}];; + +[:(f, g, w) for g = 1 downto 1 and w in [:-3; -3:] and f in [:1; 1:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(1, 1, -3); (1, 1, -3); (1, 1, -3); (1, 1, -3):] +|}];; + +[(f, h, i, k, m, y) + for k in [-2; 2; 2] + for y = -3 downto -2 and m = 2 downto -1 and i = 2 downto -2 + for f = -3 downto 2 and h in [1; 1; 2] and y = -1 to 1 + when k <> 0];; +[%%expect{| +Lines 1-5, characters 0-15: +1 | [(f, h, i, k, m, y) +2 | for k in [-2; 2; 2] +3 | for y = -3 downto -2 and m = 2 downto -1 and i = 2 downto -2 +4 | for f = -3 downto 2 and h in [1; 1; 2] and y = -1 to 1 +5 | when k <> 0].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(f, h, i, k, m, y) + for k in [|-2; 2; 2|] + for y = -3 downto -2 and m = 2 downto -1 and i = 2 downto -2 + for f = -3 downto 2 and h in [|1; 1; 2|] and y = -1 to 1 + when k <> 0|];; +[%%expect{| +Lines 1-5, characters 0-17: +1 | [|(f, h, i, k, m, y) +2 | for k in [|-2; 2; 2|] +3 | for y = -3 downto -2 and m = 2 downto -1 and i = 2 downto -2 +4 | for f = -3 downto 2 and h in [|1; 1; 2|] and y = -1 to 1 +5 | when k <> 0|].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(f, h, i, k, m, y) + for k in [:-2; 2; 2:] + for y = -3 downto -2 and m = 2 downto -1 and i = 2 downto -2 + for f = -3 downto 2 and h in [:1; 1; 2:] and y = -1 to 1 + when k <> 0:];; +[%%expect{| +Lines 1-5, characters 0-17: +1 | [:(f, h, i, k, m, y) +2 | for k in [:-2; 2; 2:] +3 | for y = -3 downto -2 and m = 2 downto -1 and i = 2 downto -2 +4 | for f = -3 downto 2 and h in [:1; 1; 2:] and y = -1 to 1 +5 | when k <> 0:].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, j, r, s, w) + for r = 2 downto 1 and w in [0; 3] + for r in [-2; -3] and d = 0 downto 1 and j = 0 downto w + for s = -3 to j + when abs r mod 2 = 1];; +[%%expect{| +Lines 1-5, characters 0-24: +1 | [(d, j, r, s, w) +2 | for r = 2 downto 1 and w in [0; 3] +3 | for r in [-2; -3] and d = 0 downto 1 and j = 0 downto w +4 | for s = -3 to j +5 | when abs r mod 2 = 1].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int) list = [] +|}];; + +[|(d, j, r, s, w) + for r = 2 downto 1 and w in [|0; 3|] + for r in [|-2; -3|] and d = 0 downto 1 and j = 0 downto w + for s = -3 to j + when abs r mod 2 = 1|];; +[%%expect{| +Lines 1-5, characters 0-26: +1 | [|(d, j, r, s, w) +2 | for r = 2 downto 1 and w in [|0; 3|] +3 | for r in [|-2; -3|] and d = 0 downto 1 and j = 0 downto w +4 | for s = -3 to j +5 | when abs r mod 2 = 1|].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int) array = [||] +|}];; + +[:(d, j, r, s, w) + for r = 2 downto 1 and w in [:0; 3:] + for r in [:-2; -3:] and d = 0 downto 1 and j = 0 downto w + for s = -3 to j + when abs r mod 2 = 1:];; +[%%expect{| +Lines 1-5, characters 0-26: +1 | [:(d, j, r, s, w) +2 | for r = 2 downto 1 and w in [:0; 3:] +3 | for r in [:-2; -3:] and d = 0 downto 1 and j = 0 downto w +4 | for s = -3 to j +5 | when abs r mod 2 = 1:].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(i, k, m, r) + for i in [2; 2; -2; 1; 2] and r in [] and k in [-1] + for m in [r; -3; -2; 1; 1] and i = 0 downto -1 + when i < 0 + for k in []];; +[%%expect{| +Line 2, characters 7-8: +2 | for i in [2; 2; -2; 1; 2] and r in [] and k in [-1] + ^ +Warning 26 [unused-var]: unused variable i. +Line 2, characters 45-46: +2 | for i in [2; 2; -2; 1; 2] and r in [] and k in [-1] + ^ +Warning 26 [unused-var]: unused variable k. +- : (int * 'a * int * int) list = [] +|}];; + +[|(i, k, m, r) + for i in [|2; 2; -2; 1; 2|] and r in [||] and k in [|-1|] + for m in [|r; -3; -2; 1; 1|] and i = 0 downto -1 + when i < 0 + for k in [||]|];; +[%%expect{| +Line 2, characters 8-9: +2 | for i in [|2; 2; -2; 1; 2|] and r in [||] and k in [|-1|] + ^ +Warning 26 [unused-var]: unused variable i. +Line 2, characters 50-51: +2 | for i in [|2; 2; -2; 1; 2|] and r in [||] and k in [|-1|] + ^ +Warning 26 [unused-var]: unused variable k. +- : (int * '_weak2 * int * int) array = [||] +|}];; + +[:(i, k, m, r) + for i in [:2; 2; -2; 1; 2:] and r in [::] and k in [:-1:] + for m in [:r; -3; -2; 1; 1:] and i = 0 downto -1 + when i < 0 + for k in [::]:];; +[%%expect{| +Line 2, characters 8-9: +2 | for i in [:2; 2; -2; 1; 2:] and r in [::] and k in [:-1:] + ^ +Warning 26 [unused-var]: unused variable i. +Line 2, characters 50-51: +2 | for i in [:2; 2; -2; 1; 2:] and r in [::] and k in [:-1:] + ^ +Warning 26 [unused-var]: unused variable k. +- : (int * 'a * int * int) iarray = [::] +|}];; + +[q for q = 3 downto -1 when q > 0 when q <> 0];; +[%%expect{| +- : int list = [3; 2; 1] +|}];; + +[|q for q = 3 downto -1 when q > 0 when q <> 0|];; +[%%expect{| +- : int array = [|3; 2; 1|] +|}];; + +[:q for q = 3 downto -1 when q > 0 when q <> 0:];; +[%%expect{| +- : int iarray = [:3; 2; 1:] +|}];; + +[(g, i, n, t) + for g in [-2; 0; 2; -3; 0; 2; -3] and t in [-2; 3; -3; -2; 1] + for i = g downto 3 + for n = g downto 3];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(g, i, n, t) + for g in [|-2; 0; 2; -3; 0; 2; -3|] and t in [|-2; 3; -3; -2; 1|] + for i = g downto 3 + for n = g downto 3|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(g, i, n, t) + for g in [:-2; 0; 2; -3; 0; 2; -3:] and t in [:-2; 3; -3; -2; 1:] + for i = g downto 3 + for n = g downto 3:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[a for a = 0 to -2];; +[%%expect{| +- : int list = [] +|}];; + +[|a for a = 0 to -2|];; +[%%expect{| +- : int array = [||] +|}];; + +[:a for a = 0 to -2:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(g, k, u, x, y) + for x = 2 downto 2 and u = 0 downto -1 and y = 2 downto 1 + for k in [] + for g in []];; +[%%expect{| +- : ('a * 'b * int * int * int) list = [] +|}];; + +[|(g, k, u, x, y) + for x = 2 downto 2 and u = 0 downto -1 and y = 2 downto 1 + for k in [||] + for g in [||]|];; +[%%expect{| +- : ('_weak3 * '_weak4 * int * int * int) array = [||] +|}];; + +[:(g, k, u, x, y) + for x = 2 downto 2 and u = 0 downto -1 and y = 2 downto 1 + for k in [::] + for g in [::]:];; +[%%expect{| +- : ('a * 'b * int * int * int) iarray = [::] +|}];; + +[(g, n, u, v) + for u = -3 to -3 + and v = 0 downto -3 + and n = 1 downto 0 + and g in [-3; -1; -3; -2; -1] + when n > 0];; +[%%expect{| +- : (int * int * int * int) list = +[(-3, 1, -3, 0); (-1, 1, -3, 0); (-3, 1, -3, 0); (-2, 1, -3, 0); + (-1, 1, -3, 0); (-3, 1, -3, -1); (-1, 1, -3, -1); (-3, 1, -3, -1); + (-2, 1, -3, -1); (-1, 1, -3, -1); (-3, 1, -3, -2); (-1, 1, -3, -2); + (-3, 1, -3, -2); (-2, 1, -3, -2); (-1, 1, -3, -2); (-3, 1, -3, -3); + (-1, 1, -3, -3); (-3, 1, -3, -3); (-2, 1, -3, -3); (-1, 1, -3, -3)] +|}];; + +[|(g, n, u, v) + for u = -3 to -3 + and v = 0 downto -3 + and n = 1 downto 0 + and g in [|-3; -1; -3; -2; -1|] + when n > 0|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-3, 1, -3, 0); (-1, 1, -3, 0); (-3, 1, -3, 0); (-2, 1, -3, 0); + (-1, 1, -3, 0); (-3, 1, -3, -1); (-1, 1, -3, -1); (-3, 1, -3, -1); + (-2, 1, -3, -1); (-1, 1, -3, -1); (-3, 1, -3, -2); (-1, 1, -3, -2); + (-3, 1, -3, -2); (-2, 1, -3, -2); (-1, 1, -3, -2); (-3, 1, -3, -3); + (-1, 1, -3, -3); (-3, 1, -3, -3); (-2, 1, -3, -3); (-1, 1, -3, -3)|] +|}];; + +[:(g, n, u, v) + for u = -3 to -3 + and v = 0 downto -3 + and n = 1 downto 0 + and g in [:-3; -1; -3; -2; -1:] + when n > 0:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-3, 1, -3, 0); (-1, 1, -3, 0); (-3, 1, -3, 0); (-2, 1, -3, 0); + (-1, 1, -3, 0); (-3, 1, -3, -1); (-1, 1, -3, -1); (-3, 1, -3, -1); + (-2, 1, -3, -1); (-1, 1, -3, -1); (-3, 1, -3, -2); (-1, 1, -3, -2); + (-3, 1, -3, -2); (-2, 1, -3, -2); (-1, 1, -3, -2); (-3, 1, -3, -3); + (-1, 1, -3, -3); (-3, 1, -3, -3); (-2, 1, -3, -3); (-1, 1, -3, -3):] +|}];; + +[(h, y) for y = 3 downto 3 when y > 0 when y > 0 for h = -1 downto -3];; +[%%expect{| +- : (int * int) list = [(-1, 3); (-2, 3); (-3, 3)] +|}];; + +[|(h, y) for y = 3 downto 3 when y > 0 when y > 0 for h = -1 downto -3|];; +[%%expect{| +- : (int * int) array = [|(-1, 3); (-2, 3); (-3, 3)|] +|}];; + +[:(h, y) for y = 3 downto 3 when y > 0 when y > 0 for h = -1 downto -3:];; +[%%expect{| +- : (int * int) iarray = [:(-1, 3); (-2, 3); (-3, 3):] +|}];; + +[(e, k, o, x) + for o = 0 downto -1 and k in [3; 2; 3; -1; 1; -2; -3] + when abs k mod 2 = 0 + for e in [-3; -1; -3] + for x in [0]];; +[%%expect{| +- : (int * int * int * int) list = +[(-3, 2, 0, 0); (-1, 2, 0, 0); (-3, 2, 0, 0); (-3, -2, 0, 0); (-1, -2, 0, 0); + (-3, -2, 0, 0); (-3, 2, -1, 0); (-1, 2, -1, 0); (-3, 2, -1, 0); + (-3, -2, -1, 0); (-1, -2, -1, 0); (-3, -2, -1, 0)] +|}];; + +[|(e, k, o, x) + for o = 0 downto -1 and k in [|3; 2; 3; -1; 1; -2; -3|] + when abs k mod 2 = 0 + for e in [|-3; -1; -3|] + for x in [|0|]|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-3, 2, 0, 0); (-1, 2, 0, 0); (-3, 2, 0, 0); (-3, -2, 0, 0); + (-1, -2, 0, 0); (-3, -2, 0, 0); (-3, 2, -1, 0); (-1, 2, -1, 0); + (-3, 2, -1, 0); (-3, -2, -1, 0); (-1, -2, -1, 0); (-3, -2, -1, 0)|] +|}];; + +[:(e, k, o, x) + for o = 0 downto -1 and k in [:3; 2; 3; -1; 1; -2; -3:] + when abs k mod 2 = 0 + for e in [:-3; -1; -3:] + for x in [:0:]:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-3, 2, 0, 0); (-1, 2, 0, 0); (-3, 2, 0, 0); (-3, -2, 0, 0); + (-1, -2, 0, 0); (-3, -2, 0, 0); (-3, 2, -1, 0); (-1, 2, -1, 0); + (-3, 2, -1, 0); (-3, -2, -1, 0); (-1, -2, -1, 0); (-3, -2, -1, 0):] +|}];; + +[(j, s, x, y, z) + for s = 1 downto 0 and x = -2 to 0 and z = 3 downto 0 and j in [3; -1] + for y = -2 downto 3 + when abs z mod 2 = 0];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(j, s, x, y, z) + for s = 1 downto 0 and x = -2 to 0 and z = 3 downto 0 and j in [|3; -1|] + for y = -2 downto 3 + when abs z mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(j, s, x, y, z) + for s = 1 downto 0 and x = -2 to 0 and z = 3 downto 0 and j in [:3; -1:] + for y = -2 downto 3 + when abs z mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(g, l, w, z) + for z = -1 downto -2 + for z = -1 downto 2 and l in [1; -2] + for g = 1 downto 1 + when z < 0 + for w in [3; 3]];; +[%%expect{| +Lines 1-6, characters 0-19: +1 | [(g, l, w, z) +2 | for z = -1 downto -2 +3 | for z = -1 downto 2 and l in [1; -2] +4 | for g = 1 downto 1 +5 | when z < 0 +6 | for w in [3; 3]].. +Warning 26 [unused-var]: unused variable z. +- : (int * int * int * int) list = [] +|}];; + +[|(g, l, w, z) + for z = -1 downto -2 + for z = -1 downto 2 and l in [|1; -2|] + for g = 1 downto 1 + when z < 0 + for w in [|3; 3|]|];; +[%%expect{| +Lines 1-6, characters 0-23: +1 | [|(g, l, w, z) +2 | for z = -1 downto -2 +3 | for z = -1 downto 2 and l in [|1; -2|] +4 | for g = 1 downto 1 +5 | when z < 0 +6 | for w in [|3; 3|]|].. +Warning 26 [unused-var]: unused variable z. +- : (int * int * int * int) array = [||] +|}];; + +[:(g, l, w, z) + for z = -1 downto -2 + for z = -1 downto 2 and l in [:1; -2:] + for g = 1 downto 1 + when z < 0 + for w in [:3; 3:]:];; +[%%expect{| +Lines 1-6, characters 0-23: +1 | [:(g, l, w, z) +2 | for z = -1 downto -2 +3 | for z = -1 downto 2 and l in [:1; -2:] +4 | for g = 1 downto 1 +5 | when z < 0 +6 | for w in [:3; 3:]:].. +Warning 26 [unused-var]: unused variable z. +- : (int * int * int * int) iarray = [::] +|}];; + +[(g, h, t) for h = -2 downto 3 and g = 1 to 2 for t in [-2; -1; -2; 0; h; g]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(d, l, p) for l = 1 to 3 for d = 2 downto 1 and p = -1 downto 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(d, l, p) for l = 1 to 3 for d = 2 downto 1 and p = -1 downto 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(h, m, n, o, p, y) + for m in [] and h = 2 downto -1 + for m in [h; m] + for p = 2 downto 2 and n in [3; 2; h; -2; 0; 1; 3] + for o = 1 to n and y in [-1] + for n = 2 to 2];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(h, m, n, o, p, y) + for m in [||] and h = 2 downto -1 + for m in [|h; m|] + for p = 2 downto 2 and n in [|3; 2; h; -2; 0; 1; 3|] + for o = 1 to n and y in [|-1|] + for n = 2 to 2|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(h, m, n, o, p, y) + for m in [::] and h = 2 downto -1 + for m in [:h; m:] + for p = 2 downto 2 and n in [:3; 2; h; -2; 0; 1; 3:] + for o = 1 to n and y in [:-1:] + for n = 2 to 2:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, f, g, q, y) + for g in [1; 2; 3] and q in [3; 3] + for y = 3 to 0 and a in [] and f = -1 downto -3];; +[%%expect{| +- : ('a * int * int * int * int) list = [] +|}];; + +[|(a, f, g, q, y) + for g in [|1; 2; 3|] and q in [|3; 3|] + for y = 3 to 0 and a in [||] and f = -1 downto -3|];; +[%%expect{| +- : ('_weak5 * int * int * int * int) array = [||] +|}];; + +[:(a, f, g, q, y) + for g in [:1; 2; 3:] and q in [:3; 3:] + for y = 3 to 0 and a in [::] and f = -1 downto -3:];; +[%%expect{| +- : ('a * int * int * int * int) iarray = [::] +|}];; + +[(c, e, o) for c in [-1] and o in [] and e = -2 to -3];; +[%%expect{| +- : (int * int * 'a) list = [] +|}];; + +[|(c, e, o) for c in [|-1|] and o in [||] and e = -2 to -3|];; +[%%expect{| +- : (int * int * '_weak6) array = [||] +|}];; + +[:(c, e, o) for c in [:-1:] and o in [::] and e = -2 to -3:];; +[%%expect{| +- : (int * int * 'a) iarray = [::] +|}];; + +[(o, y) for y = 2 to 2 and o in [0; 0; -3; 2; 1; 1]];; +[%%expect{| +- : (int * int) list = [(0, 2); (0, 2); (-3, 2); (2, 2); (1, 2); (1, 2)] +|}];; + +[|(o, y) for y = 2 to 2 and o in [|0; 0; -3; 2; 1; 1|]|];; +[%%expect{| +- : (int * int) array = [|(0, 2); (0, 2); (-3, 2); (2, 2); (1, 2); (1, 2)|] +|}];; + +[:(o, y) for y = 2 to 2 and o in [:0; 0; -3; 2; 1; 1:]:];; +[%%expect{| +- : (int * int) iarray = [:(0, 2); (0, 2); (-3, 2); (2, 2); (1, 2); (1, 2):] +|}];; + +[(e, j, m, p, q, s, u, w) + for w in [2; 3; 1] and p = -2 to 3 + for w = 0 downto p and j in [0; -1; 2; -2] + for s = -1 to 2 + for e = 0 downto 0 and m in [3; w; 2; -1; -2; s] + for u = 1 to -2 and q in [3; e; -1]];; +[%%expect{| +Line 2, characters 7-8: +2 | for w in [2; 3; 1] and p = -2 to 3 + ^ +Warning 26 [unused-var]: unused variable w. +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(e, j, m, p, q, s, u, w) + for w in [|2; 3; 1|] and p = -2 to 3 + for w = 0 downto p and j in [|0; -1; 2; -2|] + for s = -1 to 2 + for e = 0 downto 0 and m in [|3; w; 2; -1; -2; s|] + for u = 1 to -2 and q in [|3; e; -1|]|];; +[%%expect{| +Line 2, characters 8-9: +2 | for w in [|2; 3; 1|] and p = -2 to 3 + ^ +Warning 26 [unused-var]: unused variable w. +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(e, j, m, p, q, s, u, w) + for w in [:2; 3; 1:] and p = -2 to 3 + for w = 0 downto p and j in [:0; -1; 2; -2:] + for s = -1 to 2 + for e = 0 downto 0 and m in [:3; w; 2; -1; -2; s:] + for u = 1 to -2 and q in [:3; e; -1:]:];; +[%%expect{| +Line 2, characters 8-9: +2 | for w in [:2; 3; 1:] and p = -2 to 3 + ^ +Warning 26 [unused-var]: unused variable w. +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, i, o, p, q, v) + for p in [-1; 2] and o = 1 downto 0 + for i = 2 downto 3 and v in [2] and e = -2 to 1 and q in [2] + for p = v downto 0];; +[%%expect{| +Line 2, characters 7-8: +2 | for p in [-1; 2] and o = 1 downto 0 + ^ +Warning 26 [unused-var]: unused variable p. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(e, i, o, p, q, v) + for p in [|-1; 2|] and o = 1 downto 0 + for i = 2 downto 3 and v in [|2|] and e = -2 to 1 and q in [|2|] + for p = v downto 0|];; +[%%expect{| +Line 2, characters 8-9: +2 | for p in [|-1; 2|] and o = 1 downto 0 + ^ +Warning 26 [unused-var]: unused variable p. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(e, i, o, p, q, v) + for p in [:-1; 2:] and o = 1 downto 0 + for i = 2 downto 3 and v in [:2:] and e = -2 to 1 and q in [:2:] + for p = v downto 0:];; +[%%expect{| +Line 2, characters 8-9: +2 | for p in [:-1; 2:] and o = 1 downto 0 + ^ +Warning 26 [unused-var]: unused variable p. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(f, m, o, v) + for v in [3; 0; -3; -3; -1; -1; 0] + when v < 0 + for o = 3 to 2 and m in [-1; -1; -1; 1; -2; -1; -1] and f in [v; -2; -1]];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(f, m, o, v) + for v in [|3; 0; -3; -3; -1; -1; 0|] + when v < 0 + for o = 3 to 2 + and m in [|-1; -1; -1; 1; -2; -1; -1|] + and f in [|v; -2; -1|]|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(f, m, o, v) + for v in [:3; 0; -3; -3; -1; -1; 0:] + when v < 0 + for o = 3 to 2 + and m in [:-1; -1; -1; 1; -2; -1; -1:] + and f in [:v; -2; -1:]:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(e, h, k, p, u, z) + for p in [1] and h in [3; 3; 2; 3; -3; 1] + for z = 3 to -3 + for u = 1 to -2 and e = 2 to 3 + for k in []];; +[%%expect{| +- : (int * int * 'a * int * int * int) list = [] +|}];; + +[|(e, h, k, p, u, z) + for p in [|1|] and h in [|3; 3; 2; 3; -3; 1|] + for z = 3 to -3 + for u = 1 to -2 and e = 2 to 3 + for k in [||]|];; +[%%expect{| +- : (int * int * '_weak7 * int * int * int) array = [||] +|}];; + +[:(e, h, k, p, u, z) + for p in [:1:] and h in [:3; 3; 2; 3; -3; 1:] + for z = 3 to -3 + for u = 1 to -2 and e = 2 to 3 + for k in [::]:];; +[%%expect{| +- : (int * int * 'a * int * int * int) iarray = [::] +|}];; + +[(j, k, r, t) + for t = -1 downto -1 + for j in [-1; -2; 2; 1; 0; 2] + for r = 1 to 0 + for k in [0] + when j > 0];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(j, k, r, t) + for t = -1 downto -1 + for j in [|-1; -2; 2; 1; 0; 2|] + for r = 1 to 0 + for k in [|0|] + when j > 0|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(j, k, r, t) + for t = -1 downto -1 + for j in [:-1; -2; 2; 1; 0; 2:] + for r = 1 to 0 + for k in [:0:] + when j > 0:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(f, l) for f in [2; -3; -1; 2; 2; -2] and l in [-1; -1; -1; -2]];; +[%%expect{| +- : (int * int) list = +[(2, -1); (2, -1); (2, -1); (2, -2); (-3, -1); (-3, -1); (-3, -1); (-3, -2); + (-1, -1); (-1, -1); (-1, -1); (-1, -2); (2, -1); (2, -1); (2, -1); (2, -2); + (2, -1); (2, -1); (2, -1); (2, -2); (-2, -1); (-2, -1); (-2, -1); (-2, -2)] +|}];; + +[|(f, l) for f in [|2; -3; -1; 2; 2; -2|] and l in [|-1; -1; -1; -2|]|];; +[%%expect{| +- : (int * int) array = +[|(2, -1); (2, -1); (2, -1); (2, -2); (-3, -1); (-3, -1); (-3, -1); (-3, -2); + (-1, -1); (-1, -1); (-1, -1); (-1, -2); (2, -1); (2, -1); (2, -1); + (2, -2); (2, -1); (2, -1); (2, -1); (2, -2); (-2, -1); (-2, -1); (-2, -1); + (-2, -2)|] +|}];; + +[:(f, l) for f in [:2; -3; -1; 2; 2; -2:] and l in [:-1; -1; -1; -2:]:];; +[%%expect{| +- : (int * int) iarray = +[:(2, -1); (2, -1); (2, -1); (2, -2); (-3, -1); (-3, -1); (-3, -1); (-3, -2); + (-1, -1); (-1, -1); (-1, -1); (-1, -2); (2, -1); (2, -1); (2, -1); + (2, -2); (2, -1); (2, -1); (2, -1); (2, -2); (-2, -1); (-2, -1); (-2, -1); + (-2, -2):] +|}];; + +[(b, r, u) + for u in [-3; 0; -1; -2] and b in [-1; -3; 3] + for r = b to -3];; +[%%expect{| +- : (int * int * int) list = +[(-3, -3, -3); (-3, -3, 0); (-3, -3, -1); (-3, -3, -2)] +|}];; + +[|(b, r, u) + for u in [|-3; 0; -1; -2|] and b in [|-1; -3; 3|] + for r = b to -3|];; +[%%expect{| +- : (int * int * int) array = +[|(-3, -3, -3); (-3, -3, 0); (-3, -3, -1); (-3, -3, -2)|] +|}];; + +[:(b, r, u) + for u in [:-3; 0; -1; -2:] and b in [:-1; -3; 3:] + for r = b to -3:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-3, -3, -3); (-3, -3, 0); (-3, -3, -1); (-3, -3, -2):] +|}];; + +[x for x in [3; 1; -2; 2; 0]];; +[%%expect{| +- : int list = [3; 1; -2; 2; 0] +|}];; + +[|x for x in [|3; 1; -2; 2; 0|]|];; +[%%expect{| +- : int array = [|3; 1; -2; 2; 0|] +|}];; + +[:x for x in [:3; 1; -2; 2; 0:]:];; +[%%expect{| +- : int iarray = [:3; 1; -2; 2; 0:] +|}];; + +[(g, q, r, s, x, y, z) + for z = 1 to 3 and x = 2 downto 1 + for r = z downto 2 and q in [-1] + when abs z mod 2 = 0 + for s = r to -1 and g in [r; -3; 3; 0; 1] + for y = -3 downto 3];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(g, q, r, s, x, y, z) + for z = 1 to 3 and x = 2 downto 1 + for r = z downto 2 and q in [|-1|] + when abs z mod 2 = 0 + for s = r to -1 and g in [|r; -3; 3; 0; 1|] + for y = -3 downto 3|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(g, q, r, s, x, y, z) + for z = 1 to 3 and x = 2 downto 1 + for r = z downto 2 and q in [:-1:] + when abs z mod 2 = 0 + for s = r to -1 and g in [:r; -3; 3; 0; 1:] + for y = -3 downto 3:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, e, k, u, x) + for k in [1; -1; 1; -3] and u in [2; -1; 3; -2; -3; 2] + for x = -3 downto k and d in [-2; 2; 0; 1] + for e = 0 to 2 + for e in [] and x in [0; 2] + when u <> 0];; +[%%expect{| +Lines 1-6, characters 0-15: +1 | [(d, e, k, u, x) +2 | for k in [1; -1; 1; -3] and u in [2; -1; 3; -2; -3; 2] +3 | for x = -3 downto k and d in [-2; 2; 0; 1] +4 | for e = 0 to 2 +5 | for e in [] and x in [0; 2] +6 | when u <> 0].. +Warning 26 [unused-var]: unused variable x. +Lines 1-6, characters 0-15: +1 | [(d, e, k, u, x) +2 | for k in [1; -1; 1; -3] and u in [2; -1; 3; -2; -3; 2] +3 | for x = -3 downto k and d in [-2; 2; 0; 1] +4 | for e = 0 to 2 +5 | for e in [] and x in [0; 2] +6 | when u <> 0].. +Warning 26 [unused-var]: unused variable e. +- : (int * 'a * int * int * int) list = [] +|}];; + +[|(d, e, k, u, x) + for k in [|1; -1; 1; -3|] and u in [|2; -1; 3; -2; -3; 2|] + for x = -3 downto k and d in [|-2; 2; 0; 1|] + for e = 0 to 2 + for e in [||] and x in [|0; 2|] + when u <> 0|];; +[%%expect{| +Lines 1-6, characters 0-17: +1 | [|(d, e, k, u, x) +2 | for k in [|1; -1; 1; -3|] and u in [|2; -1; 3; -2; -3; 2|] +3 | for x = -3 downto k and d in [|-2; 2; 0; 1|] +4 | for e = 0 to 2 +5 | for e in [||] and x in [|0; 2|] +6 | when u <> 0|].. +Warning 26 [unused-var]: unused variable x. +Lines 1-6, characters 0-17: +1 | [|(d, e, k, u, x) +2 | for k in [|1; -1; 1; -3|] and u in [|2; -1; 3; -2; -3; 2|] +3 | for x = -3 downto k and d in [|-2; 2; 0; 1|] +4 | for e = 0 to 2 +5 | for e in [||] and x in [|0; 2|] +6 | when u <> 0|].. +Warning 26 [unused-var]: unused variable e. +- : (int * '_weak8 * int * int * int) array = [||] +|}];; + +[:(d, e, k, u, x) + for k in [:1; -1; 1; -3:] and u in [:2; -1; 3; -2; -3; 2:] + for x = -3 downto k and d in [:-2; 2; 0; 1:] + for e = 0 to 2 + for e in [::] and x in [:0; 2:] + when u <> 0:];; +[%%expect{| +Lines 1-6, characters 0-17: +1 | [:(d, e, k, u, x) +2 | for k in [:1; -1; 1; -3:] and u in [:2; -1; 3; -2; -3; 2:] +3 | for x = -3 downto k and d in [:-2; 2; 0; 1:] +4 | for e = 0 to 2 +5 | for e in [::] and x in [:0; 2:] +6 | when u <> 0:].. +Warning 26 [unused-var]: unused variable x. +Lines 1-6, characters 0-17: +1 | [:(d, e, k, u, x) +2 | for k in [:1; -1; 1; -3:] and u in [:2; -1; 3; -2; -3; 2:] +3 | for x = -3 downto k and d in [:-2; 2; 0; 1:] +4 | for e = 0 to 2 +5 | for e in [::] and x in [:0; 2:] +6 | when u <> 0:].. +Warning 26 [unused-var]: unused variable e. +- : (int * 'a * int * int * int) iarray = [::] +|}];; + +[(h, l, m, p, q) + for _ = -1 to 2 and l = -3 to -1 + for p in [] + for h in [-3; -2; 1] + for q in [p; 1; -3; 1; l; 2] + for m in [-1; -2; 2]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(h, l, m, p, q) + for _ = -1 to 2 and l = -3 to -1 + for p in [||] + for h in [|-3; -2; 1|] + for q in [|p; 1; -3; 1; l; 2|] + for m in [|-1; -2; 2|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(h, l, m, p, q) + for _ = -1 to 2 and l = -3 to -1 + for p in [::] + for h in [:-3; -2; 1:] + for q in [:p; 1; -3; 1; l; 2:] + for m in [:-1; -2; 2:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(b, e, f, x, y, z) + for x = 2 downto 0 + for y = x to x and f = -1 to -3 + for b in [1; 2; 2; -3; -2; 0] and _ = -3 downto 3 and e in [-1; -3; -2; 1] + for z in [0; -2]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|p for _ in [|-3; 2|] and p = -1 to 1 when abs p mod 2 = 1|];; +[%%expect{| +- : int array = [|-1; 1; -1; 1|] +|}];; + +[:p for _ in [:-3; 2:] and p = -1 to 1 when abs p mod 2 = 1:];; +[%%expect{| +- : int iarray = [:-1; 1; -1; 1:] +|}];; + +[(i, m, o, q, s, t, w) + for q in [3; -3; -2] and t in [-1; 3; 1] + for w in [0; -3; 2] and _ = -3 downto 1 + for m in [] and s in [-1; -1; 3; t] + when s > 0 + for i = 1 to -2 and o in [-1; q; 0; 1]];; +[%%expect{| +- : (int * 'a * int * int * int * int * int) list = [] +|}];; + +[|(i, m, o, q, s, t, w) + for q in [|3; -3; -2|] and t in [|-1; 3; 1|] + for w in [|0; -3; 2|] and _ = -3 downto 1 + for m in [||] and s in [|-1; -1; 3; t|] + when s > 0 + for i = 1 to -2 and o in [|-1; q; 0; 1|]|];; +[%%expect{| +- : (int * '_weak9 * int * int * int * int * int) array = [||] +|}];; + +[:(i, m, o, q, s, t, w) + for q in [:3; -3; -2:] and t in [:-1; 3; 1:] + for w in [:0; -3; 2:] and _ = -3 downto 1 + for m in [::] and s in [:-1; -1; 3; t:] + when s > 0 + for i = 1 to -2 and o in [:-1; q; 0; 1:]:];; +[%%expect{| +- : (int * 'a * int * int * int * int * int) iarray = [::] +|}];; + +[v for v in [3; 0; 2; -3; 1] for _ = 2 downto 2];; +[%%expect{| +- : int list = [3; 0; 2; -3; 1] +|}];; + +[|v for v in [|3; 0; 2; -3; 1|] for _ = 2 downto 2|];; +[%%expect{| +- : int array = [|3; 0; 2; -3; 1|] +|}];; + +[:v for v in [:3; 0; 2; -3; 1:] for _ = 2 downto 2:];; +[%%expect{| +- : int iarray = [:3; 0; 2; -3; 1:] +|}];; + +[(a, i, v) + for a = -3 to 0 + when a <> 0 + for i in [1; -2; -1; -3; 1] + when i < 0 + for v = -3 to 2];; +[%%expect{| +- : (int * int * int) list = +[(-3, -2, -3); (-3, -2, -2); (-3, -2, -1); (-3, -2, 0); (-3, -2, 1); + (-3, -2, 2); (-3, -1, -3); (-3, -1, -2); (-3, -1, -1); (-3, -1, 0); + (-3, -1, 1); (-3, -1, 2); (-3, -3, -3); (-3, -3, -2); (-3, -3, -1); + (-3, -3, 0); (-3, -3, 1); (-3, -3, 2); (-2, -2, -3); (-2, -2, -2); + (-2, -2, -1); (-2, -2, 0); (-2, -2, 1); (-2, -2, 2); (-2, -1, -3); + (-2, -1, -2); (-2, -1, -1); (-2, -1, 0); (-2, -1, 1); (-2, -1, 2); + (-2, -3, -3); (-2, -3, -2); (-2, -3, -1); (-2, -3, 0); (-2, -3, 1); + (-2, -3, 2); (-1, -2, -3); (-1, -2, -2); (-1, -2, -1); (-1, -2, 0); + (-1, -2, 1); (-1, -2, 2); (-1, -1, -3); (-1, -1, -2); (-1, -1, -1); + (-1, -1, 0); (-1, -1, 1); (-1, -1, 2); (-1, -3, -3); (-1, -3, -2); + (-1, -3, -1); (-1, -3, 0); (-1, -3, 1); (-1, -3, 2)] +|}];; + +[|(a, i, v) + for a = -3 to 0 + when a <> 0 + for i in [|1; -2; -1; -3; 1|] + when i < 0 + for v = -3 to 2|];; +[%%expect{| +- : (int * int * int) array = +[|(-3, -2, -3); (-3, -2, -2); (-3, -2, -1); (-3, -2, 0); (-3, -2, 1); + (-3, -2, 2); (-3, -1, -3); (-3, -1, -2); (-3, -1, -1); (-3, -1, 0); + (-3, -1, 1); (-3, -1, 2); (-3, -3, -3); (-3, -3, -2); (-3, -3, -1); + (-3, -3, 0); (-3, -3, 1); (-3, -3, 2); (-2, -2, -3); (-2, -2, -2); + (-2, -2, -1); (-2, -2, 0); (-2, -2, 1); (-2, -2, 2); (-2, -1, -3); + (-2, -1, -2); (-2, -1, -1); (-2, -1, 0); (-2, -1, 1); (-2, -1, 2); + (-2, -3, -3); (-2, -3, -2); (-2, -3, -1); (-2, -3, 0); (-2, -3, 1); + (-2, -3, 2); (-1, -2, -3); (-1, -2, -2); (-1, -2, -1); (-1, -2, 0); + (-1, -2, 1); (-1, -2, 2); (-1, -1, -3); (-1, -1, -2); (-1, -1, -1); + (-1, -1, 0); (-1, -1, 1); (-1, -1, 2); (-1, -3, -3); (-1, -3, -2); + (-1, -3, -1); (-1, -3, 0); (-1, -3, 1); (-1, -3, 2)|] +|}];; + +[:(a, i, v) + for a = -3 to 0 + when a <> 0 + for i in [:1; -2; -1; -3; 1:] + when i < 0 + for v = -3 to 2:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-3, -2, -3); (-3, -2, -2); (-3, -2, -1); (-3, -2, 0); (-3, -2, 1); + (-3, -2, 2); (-3, -1, -3); (-3, -1, -2); (-3, -1, -1); (-3, -1, 0); + (-3, -1, 1); (-3, -1, 2); (-3, -3, -3); (-3, -3, -2); (-3, -3, -1); + (-3, -3, 0); (-3, -3, 1); (-3, -3, 2); (-2, -2, -3); (-2, -2, -2); + (-2, -2, -1); (-2, -2, 0); (-2, -2, 1); (-2, -2, 2); (-2, -1, -3); + (-2, -1, -2); (-2, -1, -1); (-2, -1, 0); (-2, -1, 1); (-2, -1, 2); + (-2, -3, -3); (-2, -3, -2); (-2, -3, -1); (-2, -3, 0); (-2, -3, 1); + (-2, -3, 2); (-1, -2, -3); (-1, -2, -2); (-1, -2, -1); (-1, -2, 0); + (-1, -2, 1); (-1, -2, 2); (-1, -1, -3); (-1, -1, -2); (-1, -1, -1); + (-1, -1, 0); (-1, -1, 1); (-1, -1, 2); (-1, -3, -3); (-1, -3, -2); + (-1, -3, -1); (-1, -3, 0); (-1, -3, 1); (-1, -3, 2):] +|}];; + +[(a, d, i, v, y) + for d = -2 to -2 + for a in [] and i = d to -3 and v in [2; 0; -1] + when abs v mod 2 = 1 + for y in [-2]];; +[%%expect{| +- : ('a * int * int * int * int) list = [] +|}];; + +[|(a, d, i, v, y) + for d = -2 to -2 + for a in [||] and i = d to -3 and v in [|2; 0; -1|] + when abs v mod 2 = 1 + for y in [|-2|]|];; +[%%expect{| +- : ('_weak10 * int * int * int * int) array = [||] +|}];; + +[:(a, d, i, v, y) + for d = -2 to -2 + for a in [::] and i = d to -3 and v in [:2; 0; -1:] + when abs v mod 2 = 1 + for y in [:-2:]:];; +[%%expect{| +- : ('a * int * int * int * int) iarray = [::] +|}];; + +[(l, m, n, y) + for l in [2; 3; -2] + when l < 0 + for n = -2 downto 1 + for m in [n; 2; n; 1; -2; -1; -1] and y in [] + when abs y mod 2 = 0];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(l, m, n, y) + for l in [|2; 3; -2|] + when l < 0 + for n = -2 downto 1 + for m in [|n; 2; n; 1; -2; -1; -1|] and y in [||] + when abs y mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(l, m, n, y) + for l in [:2; 3; -2:] + when l < 0 + for n = -2 downto 1 + for m in [:n; 2; n; 1; -2; -1; -1:] and y in [::] + when abs y mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(c, f, j, k, q, x) + for q = -3 to -2 + for k = -1 to -3 and c in [0] + for x in [-1; 1; -3; -3] + for f in [3; 0; 2; 3] and j in [-3] + when c < 0];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(c, f, j, k, q, x) + for q = -3 to -2 + for k = -1 to -3 and c in [|0|] + for x in [|-1; 1; -3; -3|] + for f in [|3; 0; 2; 3|] and j in [|-3|] + when c < 0|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(c, f, j, k, q, x) + for q = -3 to -2 + for k = -1 to -3 and c in [:0:] + for x in [:-1; 1; -3; -3:] + for f in [:3; 0; 2; 3:] and j in [:-3:] + when c < 0:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(c, g) for c in [-2; -2] and g = 0 to 2];; +[%%expect{| +- : (int * int) list = [(-2, 0); (-2, 1); (-2, 2); (-2, 0); (-2, 1); (-2, 2)] +|}];; + +[|(c, g) for c in [|-2; -2|] and g = 0 to 2|];; +[%%expect{| +- : (int * int) array = +[|(-2, 0); (-2, 1); (-2, 2); (-2, 0); (-2, 1); (-2, 2)|] +|}];; + +[:(c, g) for c in [:-2; -2:] and g = 0 to 2:];; +[%%expect{| +- : (int * int) iarray = +[:(-2, 0); (-2, 1); (-2, 2); (-2, 0); (-2, 1); (-2, 2):] +|}];; + +[r for r = -1 downto 3 when r > 0];; +[%%expect{| +- : int list = [] +|}];; + +[|r for r = -1 downto 3 when r > 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:r for r = -1 downto 3 when r > 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(n, s, u) for u = 1 downto -1 and s in [-1] and n = -2 to 1];; +[%%expect{| +- : (int * int * int) list = +[(-2, -1, 1); (-1, -1, 1); (0, -1, 1); (1, -1, 1); (-2, -1, 0); (-1, -1, 0); + (0, -1, 0); (1, -1, 0); (-2, -1, -1); (-1, -1, -1); (0, -1, -1); + (1, -1, -1)] +|}];; + +[|(n, s, u) for u = 1 downto -1 and s in [|-1|] and n = -2 to 1|];; +[%%expect{| +- : (int * int * int) array = +[|(-2, -1, 1); (-1, -1, 1); (0, -1, 1); (1, -1, 1); (-2, -1, 0); (-1, -1, 0); + (0, -1, 0); (1, -1, 0); (-2, -1, -1); (-1, -1, -1); (0, -1, -1); + (1, -1, -1)|] +|}];; + +[:(n, s, u) for u = 1 downto -1 and s in [:-1:] and n = -2 to 1:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-2, -1, 1); (-1, -1, 1); (0, -1, 1); (1, -1, 1); (-2, -1, 0); (-1, -1, 0); + (0, -1, 0); (1, -1, 0); (-2, -1, -1); (-1, -1, -1); (0, -1, -1); + (1, -1, -1):] +|}];; + +[w for w = 0 to -2 and _ in [3; -1] when w > 0 when abs w mod 2 = 1];; +[%%expect{| +- : int list = [] +|}];; + +[|w for w = 0 to -2 and _ in [|3; -1|] when w > 0 when abs w mod 2 = 1|];; +[%%expect{| +- : int array = [||] +|}];; + +[:w for w = 0 to -2 and _ in [:3; -1:] when w > 0 when abs w mod 2 = 1:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(e, h, k, p, s) + for p = -2 downto -3 and k in [-1; 2; -1; 2; 2; 0] + for _ in [] + for e = 2 to 1 + for h in [3; 1; 0; 2; 0; 1] and s in [-2; p; 0; -1; 2; -3; 3] + for p in [0; h]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(e, h, k, p, s) + for p = -2 downto -3 and k in [|-1; 2; -1; 2; 2; 0|] + for _ in [||] + for e = 2 to 1 + for h in [|3; 1; 0; 2; 0; 1|] and s in [|-2; p; 0; -1; 2; -3; 3|] + for p in [|0; h|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(e, h, k, p, s) + for p = -2 downto -3 and k in [:-1; 2; -1; 2; 2; 0:] + for _ in [::] + for e = 2 to 1 + for h in [:3; 1; 0; 2; 0; 1:] and s in [:-2; p; 0; -1; 2; -3; 3:] + for p in [:0; h:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(j, m, y) for y = 3 to 3 and j in [-2; 3; -1; -2; 1] and m = -2 to 2];; +[%%expect{| +- : (int * int * int) list = +[(-2, -2, 3); (-2, -1, 3); (-2, 0, 3); (-2, 1, 3); (-2, 2, 3); (3, -2, 3); + (3, -1, 3); (3, 0, 3); (3, 1, 3); (3, 2, 3); (-1, -2, 3); (-1, -1, 3); + (-1, 0, 3); (-1, 1, 3); (-1, 2, 3); (-2, -2, 3); (-2, -1, 3); (-2, 0, 3); + (-2, 1, 3); (-2, 2, 3); (1, -2, 3); (1, -1, 3); (1, 0, 3); (1, 1, 3); + (1, 2, 3)] +|}];; + +[|(j, m, y) for y = 3 to 3 and j in [|-2; 3; -1; -2; 1|] and m = -2 to 2|];; +[%%expect{| +- : (int * int * int) array = +[|(-2, -2, 3); (-2, -1, 3); (-2, 0, 3); (-2, 1, 3); (-2, 2, 3); (3, -2, 3); + (3, -1, 3); (3, 0, 3); (3, 1, 3); (3, 2, 3); (-1, -2, 3); (-1, -1, 3); + (-1, 0, 3); (-1, 1, 3); (-1, 2, 3); (-2, -2, 3); (-2, -1, 3); (-2, 0, 3); + (-2, 1, 3); (-2, 2, 3); (1, -2, 3); (1, -1, 3); (1, 0, 3); (1, 1, 3); + (1, 2, 3)|] +|}];; + +[:(j, m, y) for y = 3 to 3 and j in [:-2; 3; -1; -2; 1:] and m = -2 to 2:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-2, -2, 3); (-2, -1, 3); (-2, 0, 3); (-2, 1, 3); (-2, 2, 3); (3, -2, 3); + (3, -1, 3); (3, 0, 3); (3, 1, 3); (3, 2, 3); (-1, -2, 3); (-1, -1, 3); + (-1, 0, 3); (-1, 1, 3); (-1, 2, 3); (-2, -2, 3); (-2, -1, 3); (-2, 0, 3); + (-2, 1, 3); (-2, 2, 3); (1, -2, 3); (1, -1, 3); (1, 0, 3); (1, 1, 3); + (1, 2, 3):] +|}];; + +[(r, x) for x in [2] and r = -1 downto -1];; +[%%expect{| +- : (int * int) list = [(-1, 2)] +|}];; + +[|(r, x) for x in [|2|] and r = -1 downto -1|];; +[%%expect{| +- : (int * int) array = [|(-1, 2)|] +|}];; + +[:(r, x) for x in [:2:] and r = -1 downto -1:];; +[%%expect{| +- : (int * int) iarray = [:(-1, 2):] +|}];; + +[(q, w, z) + for w = -1 downto -1 and z in [0; -1; -2; 2; -3; 1] + for q in [-3; 3] and z = -3 downto -1 + when q <> 0];; +[%%expect{| +Line 2, characters 28-29: +2 | for w = -1 downto -1 and z in [0; -1; -2; 2; -3; 1] + ^ +Warning 26 [unused-var]: unused variable z. +- : (int * int * int) list = [] +|}];; + +[|(q, w, z) + for w = -1 downto -1 and z in [|0; -1; -2; 2; -3; 1|] + for q in [|-3; 3|] and z = -3 downto -1 + when q <> 0|];; +[%%expect{| +Line 2, characters 29-30: +2 | for w = -1 downto -1 and z in [|0; -1; -2; 2; -3; 1|] + ^ +Warning 26 [unused-var]: unused variable z. +- : (int * int * int) array = [||] +|}];; + +[:(q, w, z) + for w = -1 downto -1 and z in [:0; -1; -2; 2; -3; 1:] + for q in [:-3; 3:] and z = -3 downto -1 + when q <> 0:];; +[%%expect{| +Line 2, characters 29-30: +2 | for w = -1 downto -1 and z in [:0; -1; -2; 2; -3; 1:] + ^ +Warning 26 [unused-var]: unused variable z. +- : (int * int * int) iarray = [::] +|}];; + +[(o, p, u, w) + for o = 0 downto -2 + when o > 0 + when abs o mod 2 = 1 + for u = -1 to 0 + for w = -3 downto 2 and p in [o; -1]];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(o, p, u, w) + for o = 0 downto -2 + when o > 0 + when abs o mod 2 = 1 + for u = -1 to 0 + for w = -3 downto 2 and p in [|o; -1|]|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(o, p, u, w) + for o = 0 downto -2 + when o > 0 + when abs o mod 2 = 1 + for u = -1 to 0 + for w = -3 downto 2 and p in [:o; -1:]:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(h, j, k, m, n, z) + for z = 2 downto 0 and h = -1 downto 2 and j in [1; 2] + for n in [0; -2] and k = -3 to -3 + when abs k mod 2 = 1 + for h in [h; j; -1; -1; 3; -3] and m in [z; -3; 2; -1; -3; 3; -2]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(h, j, k, m, n, z) + for z = 2 downto 0 and h = -1 downto 2 and j in [|1; 2|] + for n in [|0; -2|] and k = -3 to -3 + when abs k mod 2 = 1 + for h in [|h; j; -1; -1; 3; -3|] and m in [|z; -3; 2; -1; -3; 3; -2|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(h, j, k, m, n, z) + for z = 2 downto 0 and h = -1 downto 2 and j in [:1; 2:] + for n in [:0; -2:] and k = -3 to -3 + when abs k mod 2 = 1 + for h in [:h; j; -1; -1; 3; -3:] and m in [:z; -3; 2; -1; -3; 3; -2:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, n, p) + for p in [1; 3; 0; 2; -1; -2] + for d in [2; -2; 3] + when d < 0 + when d < 0 + for n = -1 downto -2];; +[%%expect{| +- : (int * int * int) list = +[(-2, -1, 1); (-2, -2, 1); (-2, -1, 3); (-2, -2, 3); (-2, -1, 0); + (-2, -2, 0); (-2, -1, 2); (-2, -2, 2); (-2, -1, -1); (-2, -2, -1); + (-2, -1, -2); (-2, -2, -2)] +|}];; + +[|(d, n, p) + for p in [|1; 3; 0; 2; -1; -2|] + for d in [|2; -2; 3|] + when d < 0 + when d < 0 + for n = -1 downto -2|];; +[%%expect{| +- : (int * int * int) array = +[|(-2, -1, 1); (-2, -2, 1); (-2, -1, 3); (-2, -2, 3); (-2, -1, 0); + (-2, -2, 0); (-2, -1, 2); (-2, -2, 2); (-2, -1, -1); (-2, -2, -1); + (-2, -1, -2); (-2, -2, -2)|] +|}];; + +[:(d, n, p) + for p in [:1; 3; 0; 2; -1; -2:] + for d in [:2; -2; 3:] + when d < 0 + when d < 0 + for n = -1 downto -2:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-2, -1, 1); (-2, -2, 1); (-2, -1, 3); (-2, -2, 3); (-2, -1, 0); + (-2, -2, 0); (-2, -1, 2); (-2, -2, 2); (-2, -1, -1); (-2, -2, -1); + (-2, -1, -2); (-2, -2, -2):] +|}];; + +[(e, i, k, n, r, w, x, y) + for i in [3; -2; -3; -3] and w in [0; -1; 1; 3; -2] and x in [1; -2; 1; 3; 0] + for x in [0; -1; 3] and e in [x; -2; -2; 1] and y in [1; 3; -3; 3; w] + for n = -1 to -3 + for n = n to -3 and r = -2 to 2 and k in [i; -1; i; 2; 3; 2]];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(e, i, k, n, r, w, x, y) + for i in [|3; -2; -3; -3|] + and w in [|0; -1; 1; 3; -2|] + and x in [|1; -2; 1; 3; 0|] + for x in [|0; -1; 3|] + and e in [|x; -2; -2; 1|] + and y in [|1; 3; -3; 3; w|] + for n = -1 to -3 + for n = n to -3 + and r = -2 to 2 + and k in [|i; -1; i; 2; 3; 2|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(e, i, k, n, r, w, x, y) + for i in [:3; -2; -3; -3:] + and w in [:0; -1; 1; 3; -2:] + and x in [:1; -2; 1; 3; 0:] + for x in [:0; -1; 3:] + and e in [:x; -2; -2; 1:] + and y in [:1; 3; -3; 3; w:] + for n = -1 to -3 + for n = n to -3 + and r = -2 to 2 + and k in [:i; -1; i; 2; 3; 2:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(r, s, v, w) + for s = -1 to 2 + when s > 0 + for r in [-1] and v in [] and w = -3 to 1 + for r in [-3; r; 2; -1; -1; 2; 0]];; +[%%expect{| +- : (int * int * 'a * int) list = [] +|}];; + +[|(r, s, v, w) + for s = -1 to 2 + when s > 0 + for r in [|-1|] and v in [||] and w = -3 to 1 + for r in [|-3; r; 2; -1; -1; 2; 0|]|];; +[%%expect{| +- : (int * int * '_weak11 * int) array = [||] +|}];; + +[:(r, s, v, w) + for s = -1 to 2 + when s > 0 + for r in [:-1:] and v in [::] and w = -3 to 1 + for r in [:-3; r; 2; -1; -1; 2; 0:]:];; +[%%expect{| +- : (int * int * 'a * int) iarray = [::] +|}];; + +[(d, e, n, p, w) + for w in [3; -3; -3] + for p in [0; -2; w; -2; 1; -2] + for e = 3 to 0 + for n = 1 to w + for d in [-2; -2; 3; 2; 2; -1; 3]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(d, e, n, p, w) + for w in [|3; -3; -3|] + for p in [|0; -2; w; -2; 1; -2|] + for e = 3 to 0 + for n = 1 to w + for d in [|-2; -2; 3; 2; 2; -1; 3|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(d, e, n, p, w) + for w in [:3; -3; -3:] + for p in [:0; -2; w; -2; 1; -2:] + for e = 3 to 0 + for n = 1 to w + for d in [:-2; -2; 3; 2; 2; -1; 3:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(d, e, f, i, k, m, q, y) + for q in [1; 3; -1] and i = 3 downto 2 + for m = -3 to -3 and f in [-3; -2] + for e = -3 to 3 and d = -1 downto -3 + for k in [] + for y in [0; -3; 2] and f = 1 to f];; +[%%expect{| +- : (int * int * int * int * 'a * int * int * int) list = [] +|}];; + +[|(d, e, f, i, k, m, q, y) + for q in [|1; 3; -1|] and i = 3 downto 2 + for m = -3 to -3 and f in [|-3; -2|] + for e = -3 to 3 and d = -1 downto -3 + for k in [||] + for y in [|0; -3; 2|] and f = 1 to f|];; +[%%expect{| +- : (int * int * int * int * '_weak12 * int * int * int) array = [||] +|}];; + +[:(d, e, f, i, k, m, q, y) + for q in [:1; 3; -1:] and i = 3 downto 2 + for m = -3 to -3 and f in [:-3; -2:] + for e = -3 to 3 and d = -1 downto -3 + for k in [::] + for y in [:0; -3; 2:] and f = 1 to f:];; +[%%expect{| +- : (int * int * int * int * 'a * int * int * int) iarray = [::] +|}];; + +[f for f in [-1] when abs f mod 2 = 0];; +[%%expect{| +- : int list = [] +|}];; + +[|f for f in [|-1|] when abs f mod 2 = 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:f for f in [:-1:] when abs f mod 2 = 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(k, m) for m = -3 to 2 when m > 0 for k in [1]];; +[%%expect{| +- : (int * int) list = [(1, 1); (1, 2)] +|}];; + +[|(k, m) for m = -3 to 2 when m > 0 for k in [|1|]|];; +[%%expect{| +- : (int * int) array = [|(1, 1); (1, 2)|] +|}];; + +[:(k, m) for m = -3 to 2 when m > 0 for k in [:1:]:];; +[%%expect{| +- : (int * int) iarray = [:(1, 1); (1, 2):] +|}];; + +[(f, o, p, t, y) + for t in [2; 1; 1; 3; 3; -2] and p in [0; 3] + when p <> 0 + for t in [1] and o = 2 to -2 + for f in [2; -1; 3; 0; -2; -3; 1] and y in [p; 2; 3; -2] + when abs f mod 2 = 0];; +[%%expect{| +Line 2, characters 7-8: +2 | for t in [2; 1; 1; 3; 3; -2] and p in [0; 3] + ^ +Warning 26 [unused-var]: unused variable t. +- : (int * int * int * int * int) list = [] +|}];; + +[|(f, o, p, t, y) + for t in [|2; 1; 1; 3; 3; -2|] and p in [|0; 3|] + when p <> 0 + for t in [|1|] and o = 2 to -2 + for f in [|2; -1; 3; 0; -2; -3; 1|] and y in [|p; 2; 3; -2|] + when abs f mod 2 = 0|];; +[%%expect{| +Line 2, characters 8-9: +2 | for t in [|2; 1; 1; 3; 3; -2|] and p in [|0; 3|] + ^ +Warning 26 [unused-var]: unused variable t. +- : (int * int * int * int * int) array = [||] +|}];; + +[:(f, o, p, t, y) + for t in [:2; 1; 1; 3; 3; -2:] and p in [:0; 3:] + when p <> 0 + for t in [:1:] and o = 2 to -2 + for f in [:2; -1; 3; 0; -2; -3; 1:] and y in [:p; 2; 3; -2:] + when abs f mod 2 = 0:];; +[%%expect{| +Line 2, characters 8-9: +2 | for t in [:2; 1; 1; 3; 3; -2:] and p in [:0; 3:] + ^ +Warning 26 [unused-var]: unused variable t. +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(d, j, o, z) + for o = 2 downto -3 + for j = -2 to 3 + for z in [2; 3; -3] and d = 0 downto 1];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(d, j, o, z) + for o = 2 downto -3 + for j = -2 to 3 + for z in [|2; 3; -3|] and d = 0 downto 1|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(d, j, o, z) + for o = 2 downto -3 + for j = -2 to 3 + for z in [:2; 3; -3:] and d = 0 downto 1:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[j for j in [-3; 0; 3; 2; -1] when abs j mod 2 = 1];; +[%%expect{| +- : int list = [-3; 3; -1] +|}];; + +[|j for j in [|-3; 0; 3; 2; -1|] when abs j mod 2 = 1|];; +[%%expect{| +- : int array = [|-3; 3; -1|] +|}];; + +[:j for j in [:-3; 0; 3; 2; -1:] when abs j mod 2 = 1:];; +[%%expect{| +- : int iarray = [:-3; 3; -1:] +|}];; + +[(e, f, l, t) + for t in [1; 1; -2; 1; -2] and e = 0 to 3 and f = 2 downto 0 and l = -1 to -1 + when t > 0 + when e <> 0];; +[%%expect{| +- : (int * int * int * int) list = +[(1, 2, -1, 1); (1, 1, -1, 1); (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); + (2, 0, -1, 1); (3, 2, -1, 1); (3, 1, -1, 1); (3, 0, -1, 1); (1, 2, -1, 1); + (1, 1, -1, 1); (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); (2, 0, -1, 1); + (3, 2, -1, 1); (3, 1, -1, 1); (3, 0, -1, 1); (1, 2, -1, 1); (1, 1, -1, 1); + (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); (2, 0, -1, 1); (3, 2, -1, 1); + (3, 1, -1, 1); (3, 0, -1, 1)] +|}];; + +[|(e, f, l, t) + for t in [|1; 1; -2; 1; -2|] + and e = 0 to 3 + and f = 2 downto 0 + and l = -1 to -1 + when t > 0 + when e <> 0|];; +[%%expect{| +- : (int * int * int * int) array = +[|(1, 2, -1, 1); (1, 1, -1, 1); (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); + (2, 0, -1, 1); (3, 2, -1, 1); (3, 1, -1, 1); (3, 0, -1, 1); (1, 2, -1, 1); + (1, 1, -1, 1); (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); (2, 0, -1, 1); + (3, 2, -1, 1); (3, 1, -1, 1); (3, 0, -1, 1); (1, 2, -1, 1); (1, 1, -1, 1); + (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); (2, 0, -1, 1); (3, 2, -1, 1); + (3, 1, -1, 1); (3, 0, -1, 1)|] +|}];; + +[:(e, f, l, t) + for t in [:1; 1; -2; 1; -2:] + and e = 0 to 3 + and f = 2 downto 0 + and l = -1 to -1 + when t > 0 + when e <> 0:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(1, 2, -1, 1); (1, 1, -1, 1); (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); + (2, 0, -1, 1); (3, 2, -1, 1); (3, 1, -1, 1); (3, 0, -1, 1); (1, 2, -1, 1); + (1, 1, -1, 1); (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); (2, 0, -1, 1); + (3, 2, -1, 1); (3, 1, -1, 1); (3, 0, -1, 1); (1, 2, -1, 1); (1, 1, -1, 1); + (1, 0, -1, 1); (2, 2, -1, 1); (2, 1, -1, 1); (2, 0, -1, 1); (3, 2, -1, 1); + (3, 1, -1, 1); (3, 0, -1, 1):] +|}];; + +[(e, g, n, o, p, s) + for o in [1] and n = -1 to -1 + when abs n mod 2 = 0 + for s = -1 downto 1 and p = 1 to 1 + for g in [1; -2; 3; -3; 0; 0] + for _ = 0 downto 0 and e in [0; 3; 1; p]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(e, g, n, o, p, s) + for o in [|1|] and n = -1 to -1 + when abs n mod 2 = 0 + for s = -1 downto 1 and p = 1 to 1 + for g in [|1; -2; 3; -3; 0; 0|] + for _ = 0 downto 0 and e in [|0; 3; 1; p|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(e, g, n, o, p, s) + for o in [:1:] and n = -1 to -1 + when abs n mod 2 = 0 + for s = -1 downto 1 and p = 1 to 1 + for g in [:1; -2; 3; -3; 0; 0:] + for _ = 0 downto 0 and e in [:0; 3; 1; p:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(b, c, e, g, k, q, t) + for b in [-2; -2; -1; 1; -2] and k in [-2; 3; 3] + for e in [0; 1; -3; -2; 1] and t in [0] + for g = b downto 1 and q = 3 to 2 and c = -3 downto 2];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(b, c, e, g, k, q, t) + for b in [|-2; -2; -1; 1; -2|] and k in [|-2; 3; 3|] + for e in [|0; 1; -3; -2; 1|] and t in [|0|] + for g = b downto 1 and q = 3 to 2 and c = -3 downto 2|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(b, c, e, g, k, q, t) + for b in [:-2; -2; -1; 1; -2:] and k in [:-2; 3; 3:] + for e in [:0; 1; -3; -2; 1:] and t in [:0:] + for g = b downto 1 and q = 3 to 2 and c = -3 downto 2:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(f, t, u, z) + for z in [2; 1; -1; 0; -3] and f in [2; 3; -1] + for u = -1 downto 3 and t = -2 downto 3];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(f, t, u, z) + for z in [|2; 1; -1; 0; -3|] and f in [|2; 3; -1|] + for u = -1 downto 3 and t = -2 downto 3|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(f, t, u, z) + for z in [:2; 1; -1; 0; -3:] and f in [:2; 3; -1:] + for u = -1 downto 3 and t = -2 downto 3:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(l, o, q) for q in [-3; 2] and o in [3; -1; 1; 0; 1; -2] for l = -1 to -1];; +[%%expect{| +- : (int * int * int) list = +[(-1, 3, -3); (-1, -1, -3); (-1, 1, -3); (-1, 0, -3); (-1, 1, -3); + (-1, -2, -3); (-1, 3, 2); (-1, -1, 2); (-1, 1, 2); (-1, 0, 2); (-1, 1, 2); + (-1, -2, 2)] +|}];; + +[|(l, o, q) + for q in [|-3; 2|] and o in [|3; -1; 1; 0; 1; -2|] + for l = -1 to -1|];; +[%%expect{| +- : (int * int * int) array = +[|(-1, 3, -3); (-1, -1, -3); (-1, 1, -3); (-1, 0, -3); (-1, 1, -3); + (-1, -2, -3); (-1, 3, 2); (-1, -1, 2); (-1, 1, 2); (-1, 0, 2); (-1, 1, 2); + (-1, -2, 2)|] +|}];; + +[:(l, o, q) + for q in [:-3; 2:] and o in [:3; -1; 1; 0; 1; -2:] + for l = -1 to -1:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-1, 3, -3); (-1, -1, -3); (-1, 1, -3); (-1, 0, -3); (-1, 1, -3); + (-1, -2, -3); (-1, 3, 2); (-1, -1, 2); (-1, 1, 2); (-1, 0, 2); (-1, 1, 2); + (-1, -2, 2):] +|}];; + +[(a, s, v) + for s in [2; -1; 2; -2] + and a in [1; 2] + and _ = 3 downto 2 + and v in [2; 0; 0; 1]];; +[%%expect{| +- : (int * int * int) list = +[(1, 2, 2); (1, 2, 0); (1, 2, 0); (1, 2, 1); (1, 2, 2); (1, 2, 0); (1, 2, 0); + (1, 2, 1); (2, 2, 2); (2, 2, 0); (2, 2, 0); (2, 2, 1); (2, 2, 2); (2, 2, 0); + (2, 2, 0); (2, 2, 1); (1, -1, 2); (1, -1, 0); (1, -1, 0); (1, -1, 1); + (1, -1, 2); (1, -1, 0); (1, -1, 0); (1, -1, 1); (2, -1, 2); (2, -1, 0); + (2, -1, 0); (2, -1, 1); (2, -1, 2); (2, -1, 0); (2, -1, 0); (2, -1, 1); + (1, 2, 2); (1, 2, 0); (1, 2, 0); (1, 2, 1); (1, 2, 2); (1, 2, 0); (1, 2, 0); + (1, 2, 1); (2, 2, 2); (2, 2, 0); (2, 2, 0); (2, 2, 1); (2, 2, 2); (2, 2, 0); + (2, 2, 0); (2, 2, 1); (1, -2, 2); (1, -2, 0); (1, -2, 0); (1, -2, 1); + (1, -2, 2); (1, -2, 0); (1, -2, 0); (1, -2, 1); (2, -2, 2); (2, -2, 0); + (2, -2, 0); (2, -2, 1); (2, -2, 2); (2, -2, 0); (2, -2, 0); (2, -2, 1)] +|}];; + +[|(a, s, v) + for s in [|2; -1; 2; -2|] + and a in [|1; 2|] + and _ = 3 downto 2 + and v in [|2; 0; 0; 1|]|];; +[%%expect{| +- : (int * int * int) array = +[|(1, 2, 2); (1, 2, 0); (1, 2, 0); (1, 2, 1); (1, 2, 2); (1, 2, 0); + (1, 2, 0); (1, 2, 1); (2, 2, 2); (2, 2, 0); (2, 2, 0); (2, 2, 1); + (2, 2, 2); (2, 2, 0); (2, 2, 0); (2, 2, 1); (1, -1, 2); (1, -1, 0); + (1, -1, 0); (1, -1, 1); (1, -1, 2); (1, -1, 0); (1, -1, 0); (1, -1, 1); + (2, -1, 2); (2, -1, 0); (2, -1, 0); (2, -1, 1); (2, -1, 2); (2, -1, 0); + (2, -1, 0); (2, -1, 1); (1, 2, 2); (1, 2, 0); (1, 2, 0); (1, 2, 1); + (1, 2, 2); (1, 2, 0); (1, 2, 0); (1, 2, 1); (2, 2, 2); (2, 2, 0); + (2, 2, 0); (2, 2, 1); (2, 2, 2); (2, 2, 0); (2, 2, 0); (2, 2, 1); + (1, -2, 2); (1, -2, 0); (1, -2, 0); (1, -2, 1); (1, -2, 2); (1, -2, 0); + (1, -2, 0); (1, -2, 1); (2, -2, 2); (2, -2, 0); (2, -2, 0); (2, -2, 1); + (2, -2, 2); (2, -2, 0); (2, -2, 0); (2, -2, 1)|] +|}];; + +[:(a, s, v) + for s in [:2; -1; 2; -2:] + and a in [:1; 2:] + and _ = 3 downto 2 + and v in [:2; 0; 0; 1:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(1, 2, 2); (1, 2, 0); (1, 2, 0); (1, 2, 1); (1, 2, 2); (1, 2, 0); + (1, 2, 0); (1, 2, 1); (2, 2, 2); (2, 2, 0); (2, 2, 0); (2, 2, 1); + (2, 2, 2); (2, 2, 0); (2, 2, 0); (2, 2, 1); (1, -1, 2); (1, -1, 0); + (1, -1, 0); (1, -1, 1); (1, -1, 2); (1, -1, 0); (1, -1, 0); (1, -1, 1); + (2, -1, 2); (2, -1, 0); (2, -1, 0); (2, -1, 1); (2, -1, 2); (2, -1, 0); + (2, -1, 0); (2, -1, 1); (1, 2, 2); (1, 2, 0); (1, 2, 0); (1, 2, 1); + (1, 2, 2); (1, 2, 0); (1, 2, 0); (1, 2, 1); (2, 2, 2); (2, 2, 0); + (2, 2, 0); (2, 2, 1); (2, 2, 2); (2, 2, 0); (2, 2, 0); (2, 2, 1); + (1, -2, 2); (1, -2, 0); (1, -2, 0); (1, -2, 1); (1, -2, 2); (1, -2, 0); + (1, -2, 0); (1, -2, 1); (2, -2, 2); (2, -2, 0); (2, -2, 0); (2, -2, 1); + (2, -2, 2); (2, -2, 0); (2, -2, 0); (2, -2, 1):] +|}];; + +[(i, k, p, q, t, v) + for v = 2 downto -2 and p = 2 downto -1 + for p = 0 to -2 + for q in [3; -2; 3; -3] + for i = 2 downto q + for k in [2] and t = 3 to -3];; +[%%expect{| +Lines 1-6, characters 0-32: +1 | [(i, k, p, q, t, v) +2 | for v = 2 downto -2 and p = 2 downto -1 +3 | for p = 0 to -2 +4 | for q in [3; -2; 3; -3] +5 | for i = 2 downto q +6 | for k in [2] and t = 3 to -3].. +Warning 26 [unused-var]: unused variable p. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(i, k, p, q, t, v) + for v = 2 downto -2 and p = 2 downto -1 + for p = 0 to -2 + for q in [|3; -2; 3; -3|] + for i = 2 downto q + for k in [|2|] and t = 3 to -3|];; +[%%expect{| +Lines 1-6, characters 0-36: +1 | [|(i, k, p, q, t, v) +2 | for v = 2 downto -2 and p = 2 downto -1 +3 | for p = 0 to -2 +4 | for q in [|3; -2; 3; -3|] +5 | for i = 2 downto q +6 | for k in [|2|] and t = 3 to -3|].. +Warning 26 [unused-var]: unused variable p. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(i, k, p, q, t, v) + for v = 2 downto -2 and p = 2 downto -1 + for p = 0 to -2 + for q in [:3; -2; 3; -3:] + for i = 2 downto q + for k in [:2:] and t = 3 to -3:];; +[%%expect{| +Lines 1-6, characters 0-36: +1 | [:(i, k, p, q, t, v) +2 | for v = 2 downto -2 and p = 2 downto -1 +3 | for p = 0 to -2 +4 | for q in [:3; -2; 3; -3:] +5 | for i = 2 downto q +6 | for k in [:2:] and t = 3 to -3:].. +Warning 26 [unused-var]: unused variable p. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, n, w) for w = -2 downto 2 and d = -3 to 3 and n = 3 downto 1 when d <> 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, i, j, k, n, t, u, v) + for n in [|-1|] and i in [|1; -2; 3; 1; 2; 3; -2|] + for t in [|-3; -2; 0|] + for j = 1 downto -1 and v = 1 to -3 and a = 2 to t + for u = -2 to 2 and k in [|-1|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, i, j, k, n, t, u, v) + for n in [:-1:] and i in [:1; -2; 3; 1; 2; 3; -2:] + for t in [:-3; -2; 0:] + for j = 1 downto -1 and v = 1 to -3 and a = 2 to t + for u = -2 to 2 and k in [:-1:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, l, q, z) + for l in [-2; -3] + for q = 3 to 0 + when l < 0 + for e in [1; 1; -1; 2; 0; -1] + for z in [0]];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(e, l, q, z) + for l in [|-2; -3|] + for q = 3 to 0 + when l < 0 + for e in [|1; 1; -1; 2; 0; -1|] + for z in [|0|]|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(e, l, q, z) + for l in [:-2; -3:] + for q = 3 to 0 + when l < 0 + for e in [:1; 1; -1; 2; 0; -1:] + for z in [:0:]:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(o, r, t, v, w) + for r in [-3; -1; 2; 3] and o = 3 downto 0 + when r > 0 + for w in [2] + for v = 0 to r and t = 3 to -2 + for t = 0 downto t];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(o, r, t, v, w) + for r in [|-3; -1; 2; 3|] and o = 3 downto 0 + when r > 0 + for w in [|2|] + for v = 0 to r and t = 3 to -2 + for t = 0 downto t|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(o, r, t, v, w) + for r in [:-3; -1; 2; 3:] and o = 3 downto 0 + when r > 0 + for w in [:2:] + for v = 0 to r and t = 3 to -2 + for t = 0 downto t:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(s, u) for u = 3 downto 2 and s = 2 downto -2];; +[%%expect{| +- : (int * int) list = +[(2, 3); (1, 3); (0, 3); (-1, 3); (-2, 3); (2, 2); (1, 2); (0, 2); (-1, 2); + (-2, 2)] +|}];; + +[|(s, u) for u = 3 downto 2 and s = 2 downto -2|];; +[%%expect{| +- : (int * int) array = +[|(2, 3); (1, 3); (0, 3); (-1, 3); (-2, 3); (2, 2); (1, 2); (0, 2); (-1, 2); + (-2, 2)|] +|}];; + +[:(s, u) for u = 3 downto 2 and s = 2 downto -2:];; +[%%expect{| +- : (int * int) iarray = +[:(2, 3); (1, 3); (0, 3); (-1, 3); (-2, 3); (2, 2); (1, 2); (0, 2); (-1, 2); + (-2, 2):] +|}];; + +[(k, l, o) + for l in [2; -2; 3; 3; 3] + when l > 0 + for _ = 1 to l and k = -3 downto -2 and o = -1 to 2];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(k, l, o) + for l in [|2; -2; 3; 3; 3|] + when l > 0 + for _ = 1 to l and k = -3 downto -2 and o = -1 to 2|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(k, l, o) + for l in [:2; -2; 3; 3; 3:] + when l > 0 + for _ = 1 to l and k = -3 downto -2 and o = -1 to 2:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(a, b, v) + for v in [3; 1; 0; -1; 1] + and b in [0; 1; -1; 1; -3; -1] + and a in [1; 1; 3; -3; 0; -2; 0] + when abs b mod 2 = 0];; +[%%expect{| +- : (int * int * int) list = +[(1, 0, 3); (1, 0, 3); (3, 0, 3); (-3, 0, 3); (0, 0, 3); (-2, 0, 3); + (0, 0, 3); (1, 0, 1); (1, 0, 1); (3, 0, 1); (-3, 0, 1); (0, 0, 1); + (-2, 0, 1); (0, 0, 1); (1, 0, 0); (1, 0, 0); (3, 0, 0); (-3, 0, 0); + (0, 0, 0); (-2, 0, 0); (0, 0, 0); (1, 0, -1); (1, 0, -1); (3, 0, -1); + (-3, 0, -1); (0, 0, -1); (-2, 0, -1); (0, 0, -1); (1, 0, 1); (1, 0, 1); + (3, 0, 1); (-3, 0, 1); (0, 0, 1); (-2, 0, 1); (0, 0, 1)] +|}];; + +[|(a, b, v) + for v in [|3; 1; 0; -1; 1|] + and b in [|0; 1; -1; 1; -3; -1|] + and a in [|1; 1; 3; -3; 0; -2; 0|] + when abs b mod 2 = 0|];; +[%%expect{| +- : (int * int * int) array = +[|(1, 0, 3); (1, 0, 3); (3, 0, 3); (-3, 0, 3); (0, 0, 3); (-2, 0, 3); + (0, 0, 3); (1, 0, 1); (1, 0, 1); (3, 0, 1); (-3, 0, 1); (0, 0, 1); + (-2, 0, 1); (0, 0, 1); (1, 0, 0); (1, 0, 0); (3, 0, 0); (-3, 0, 0); + (0, 0, 0); (-2, 0, 0); (0, 0, 0); (1, 0, -1); (1, 0, -1); (3, 0, -1); + (-3, 0, -1); (0, 0, -1); (-2, 0, -1); (0, 0, -1); (1, 0, 1); (1, 0, 1); + (3, 0, 1); (-3, 0, 1); (0, 0, 1); (-2, 0, 1); (0, 0, 1)|] +|}];; + +[:(a, b, v) + for v in [:3; 1; 0; -1; 1:] + and b in [:0; 1; -1; 1; -3; -1:] + and a in [:1; 1; 3; -3; 0; -2; 0:] + when abs b mod 2 = 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(1, 0, 3); (1, 0, 3); (3, 0, 3); (-3, 0, 3); (0, 0, 3); (-2, 0, 3); + (0, 0, 3); (1, 0, 1); (1, 0, 1); (3, 0, 1); (-3, 0, 1); (0, 0, 1); + (-2, 0, 1); (0, 0, 1); (1, 0, 0); (1, 0, 0); (3, 0, 0); (-3, 0, 0); + (0, 0, 0); (-2, 0, 0); (0, 0, 0); (1, 0, -1); (1, 0, -1); (3, 0, -1); + (-3, 0, -1); (0, 0, -1); (-2, 0, -1); (0, 0, -1); (1, 0, 1); (1, 0, 1); + (3, 0, 1); (-3, 0, 1); (0, 0, 1); (-2, 0, 1); (0, 0, 1):] +|}];; + +[(b, c, i, p, w) + for b = 3 downto 3 and p in [-1; 0] + when b < 0 + when abs p mod 2 = 0 + for w = 0 to 2 + for i in [1; 3; 3; -3; -1; b] and c in [-3; 2; p; b; 2; 1; 1]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(b, c, i, p, w) + for b = 3 downto 3 and p in [|-1; 0|] + when b < 0 + when abs p mod 2 = 0 + for w = 0 to 2 + for i in [|1; 3; 3; -3; -1; b|] and c in [|-3; 2; p; b; 2; 1; 1|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(b, c, i, p, w) + for b = 3 downto 3 and p in [:-1; 0:] + when b < 0 + when abs p mod 2 = 0 + for w = 0 to 2 + for i in [:1; 3; 3; -3; -1; b:] and c in [:-3; 2; p; b; 2; 1; 1:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(e, h, k, u) + for k = 1 downto -3 + when k <> 0 + for e in [] and h in [-1; -1; 3; -1; 3] + for u = -1 downto k + when k < 0];; +[%%expect{| +- : ('a * int * int * int) list = [] +|}];; + +[|(e, h, k, u) + for k = 1 downto -3 + when k <> 0 + for e in [||] and h in [|-1; -1; 3; -1; 3|] + for u = -1 downto k + when k < 0|];; +[%%expect{| +- : ('_weak13 * int * int * int) array = [||] +|}];; + +[:(e, h, k, u) + for k = 1 downto -3 + when k <> 0 + for e in [::] and h in [:-1; -1; 3; -1; 3:] + for u = -1 downto k + when k < 0:];; +[%%expect{| +- : ('a * int * int * int) iarray = [::] +|}];; + +[(d, k, x) + for k in [3; 2; -3] and x in [0; -1; 0; 2; -3; -3; -3] + for d in [2; -3; -3] + when abs d mod 2 = 0];; +[%%expect{| +- : (int * int * int) list = +[(2, 3, 0); (2, 3, -1); (2, 3, 0); (2, 3, 2); (2, 3, -3); (2, 3, -3); + (2, 3, -3); (2, 2, 0); (2, 2, -1); (2, 2, 0); (2, 2, 2); (2, 2, -3); + (2, 2, -3); (2, 2, -3); (2, -3, 0); (2, -3, -1); (2, -3, 0); (2, -3, 2); + (2, -3, -3); (2, -3, -3); (2, -3, -3)] +|}];; + +[|(d, k, x) + for k in [|3; 2; -3|] and x in [|0; -1; 0; 2; -3; -3; -3|] + for d in [|2; -3; -3|] + when abs d mod 2 = 0|];; +[%%expect{| +- : (int * int * int) array = +[|(2, 3, 0); (2, 3, -1); (2, 3, 0); (2, 3, 2); (2, 3, -3); (2, 3, -3); + (2, 3, -3); (2, 2, 0); (2, 2, -1); (2, 2, 0); (2, 2, 2); (2, 2, -3); + (2, 2, -3); (2, 2, -3); (2, -3, 0); (2, -3, -1); (2, -3, 0); (2, -3, 2); + (2, -3, -3); (2, -3, -3); (2, -3, -3)|] +|}];; + +[:(d, k, x) + for k in [:3; 2; -3:] and x in [:0; -1; 0; 2; -3; -3; -3:] + for d in [:2; -3; -3:] + when abs d mod 2 = 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(2, 3, 0); (2, 3, -1); (2, 3, 0); (2, 3, 2); (2, 3, -3); (2, 3, -3); + (2, 3, -3); (2, 2, 0); (2, 2, -1); (2, 2, 0); (2, 2, 2); (2, 2, -3); + (2, 2, -3); (2, 2, -3); (2, -3, 0); (2, -3, -1); (2, -3, 0); (2, -3, 2); + (2, -3, -3); (2, -3, -3); (2, -3, -3):] +|}];; + +[(a, x, z) for a = 2 to 2 for z = 3 to 2 and x = -2 to 3 when abs a mod 2 = 1];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, x, z) + for a = 2 to 2 + for z = 3 to 2 and x = -2 to 3 + when abs a mod 2 = 1|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(a, x, z) + for a = 2 to 2 + for z = 3 to 2 and x = -2 to 3 + when abs a mod 2 = 1:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(e, g, h, j, y, z) + for g in [1; 3; 0; -2] and j in [-1] + for y = 3 to -2 and z = 2 to g + for e = 3 downto -1 + for h in [-3; 0] + when abs h mod 2 = 0];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(e, g, h, j, y, z) + for g in [|1; 3; 0; -2|] and j in [|-1|] + for y = 3 to -2 and z = 2 to g + for e = 3 downto -1 + for h in [|-3; 0|] + when abs h mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(e, g, h, j, y, z) + for g in [:1; 3; 0; -2:] and j in [:-1:] + for y = 3 to -2 and z = 2 to g + for e = 3 downto -1 + for h in [:-3; 0:] + when abs h mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[l for _ in [1; 2; 0; 2; 0] and l in [-1; -3; 0; 0]];; +[%%expect{| +- : int list = +[-1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0] +|}];; + +[|l for _ in [|1; 2; 0; 2; 0|] and l in [|-1; -3; 0; 0|]|];; +[%%expect{| +- : int array = +[|-1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0|] +|}];; + +[:l for _ in [:1; 2; 0; 2; 0:] and l in [:-1; -3; 0; 0:]:];; +[%%expect{| +- : int iarray = +[:-1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0; -1; -3; 0; 0:] +|}];; + +[(c, d, f, g, m, o, q, r, y) + for m in [-3; 2; -2; 0; 3; 1; -3] and o in [-2] and f = 2 downto 1 + for r = 1 to m and _ in [0] and c in [0; f; 2] and g = o downto 0 + for y = 1 downto 2 and d in [r; -2; 1; 0] and q in [-3; -1; 2; -1; -2; -3]];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(c, d, f, g, m, o, q, r, y) + for m in [|-3; 2; -2; 0; 3; 1; -3|] + and o in [|-2|] + and f = 2 downto 1 + for r = 1 to m + and _ in [|0|] + and c in [|0; f; 2|] + and g = o downto 0 + for y = 1 downto 2 + and d in [|r; -2; 1; 0|] + and q in [|-3; -1; 2; -1; -2; -3|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(c, d, f, g, m, o, q, r, y) + for m in [:-3; 2; -2; 0; 3; 1; -3:] + and o in [:-2:] + and f = 2 downto 1 + for r = 1 to m + and _ in [:0:] + and c in [:0; f; 2:] + and g = o downto 0 + for y = 1 downto 2 + and d in [:r; -2; 1; 0:] + and q in [:-3; -1; 2; -1; -2; -3:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(h, k, n) + for k in [-1; -2; 0; 2; -1] + when abs k mod 2 = 1 + when k <> 0 + for n in [1; -2] + for h in [-3; 3; 1; n; 0; 1; -1]];; +[%%expect{| +- : (int * int * int) list = +[(-3, -1, 1); (3, -1, 1); (1, -1, 1); (1, -1, 1); (0, -1, 1); (1, -1, 1); + (-1, -1, 1); (-3, -1, -2); (3, -1, -2); (1, -1, -2); (-2, -1, -2); + (0, -1, -2); (1, -1, -2); (-1, -1, -2); (-3, -1, 1); (3, -1, 1); (1, -1, 1); + (1, -1, 1); (0, -1, 1); (1, -1, 1); (-1, -1, 1); (-3, -1, -2); (3, -1, -2); + (1, -1, -2); (-2, -1, -2); (0, -1, -2); (1, -1, -2); (-1, -1, -2)] +|}];; + +[|(h, k, n) + for k in [|-1; -2; 0; 2; -1|] + when abs k mod 2 = 1 + when k <> 0 + for n in [|1; -2|] + for h in [|-3; 3; 1; n; 0; 1; -1|]|];; +[%%expect{| +- : (int * int * int) array = +[|(-3, -1, 1); (3, -1, 1); (1, -1, 1); (1, -1, 1); (0, -1, 1); (1, -1, 1); + (-1, -1, 1); (-3, -1, -2); (3, -1, -2); (1, -1, -2); (-2, -1, -2); + (0, -1, -2); (1, -1, -2); (-1, -1, -2); (-3, -1, 1); (3, -1, 1); + (1, -1, 1); (1, -1, 1); (0, -1, 1); (1, -1, 1); (-1, -1, 1); (-3, -1, -2); + (3, -1, -2); (1, -1, -2); (-2, -1, -2); (0, -1, -2); (1, -1, -2); + (-1, -1, -2)|] +|}];; + +[:(h, k, n) + for k in [:-1; -2; 0; 2; -1:] + when abs k mod 2 = 1 + when k <> 0 + for n in [:1; -2:] + for h in [:-3; 3; 1; n; 0; 1; -1:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-3, -1, 1); (3, -1, 1); (1, -1, 1); (1, -1, 1); (0, -1, 1); (1, -1, 1); + (-1, -1, 1); (-3, -1, -2); (3, -1, -2); (1, -1, -2); (-2, -1, -2); + (0, -1, -2); (1, -1, -2); (-1, -1, -2); (-3, -1, 1); (3, -1, 1); + (1, -1, 1); (1, -1, 1); (0, -1, 1); (1, -1, 1); (-1, -1, 1); (-3, -1, -2); + (3, -1, -2); (1, -1, -2); (-2, -1, -2); (0, -1, -2); (1, -1, -2); + (-1, -1, -2):] +|}];; + +[(a, h, l, o) + for o in [-1; 2; -3; 2; -3; 2] + for h in [1] and l = 0 to -1 + for a = 0 downto 1];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(a, h, l, o) + for o in [|-1; 2; -3; 2; -3; 2|] + for h in [|1|] and l = 0 to -1 + for a = 0 downto 1|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(a, h, l, o) + for o in [:-1; 2; -3; 2; -3; 2:] + for h in [:1:] and l = 0 to -1 + for a = 0 downto 1:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(m, o, v) + for o = 3 downto -1 + for v in [-1; -3; 1; 3] and o in [] and m = o to o];; +[%%expect{| +- : (int * 'a * int) list = [] +|}];; + +[|(m, o, v) + for o = 3 downto -1 + for v in [|-1; -3; 1; 3|] and o in [||] and m = o to o|];; +[%%expect{| +- : (int * '_weak14 * int) array = [||] +|}];; + +[:(m, o, v) + for o = 3 downto -1 + for v in [:-1; -3; 1; 3:] and o in [::] and m = o to o:];; +[%%expect{| +- : (int * 'a * int) iarray = [::] +|}];; + +[(b, d, i, l, o, q, u, y) + for l in [2; -1; -3; 1; -1; 2] and y in [2; -3; 3; -1; 1; -2; 3] + for o = 0 downto -2 + for b in [-2; -1; -1; -1] and d in [-1; -1] + for u = -3 to y + for q in [-3; -3] and i = 0 downto 1];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(b, d, i, l, o, q, u, y) + for l in [|2; -1; -3; 1; -1; 2|] and y in [|2; -3; 3; -1; 1; -2; 3|] + for o = 0 downto -2 + for b in [|-2; -1; -1; -1|] and d in [|-1; -1|] + for u = -3 to y + for q in [|-3; -3|] and i = 0 downto 1|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(b, d, i, l, o, q, u, y) + for l in [:2; -1; -3; 1; -1; 2:] and y in [:2; -3; 3; -1; 1; -2; 3:] + for o = 0 downto -2 + for b in [:-2; -1; -1; -1:] and d in [:-1; -1:] + for u = -3 to y + for q in [:-3; -3:] and i = 0 downto 1:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(g, o, p) for g = 1 to 2 and p in [1; 1; 0] for o in [1; 0; p]];; +[%%expect{| +- : (int * int * int) list = +[(1, 1, 1); (1, 0, 1); (1, 1, 1); (1, 1, 1); (1, 0, 1); (1, 1, 1); (1, 1, 0); + (1, 0, 0); (1, 0, 0); (2, 1, 1); (2, 0, 1); (2, 1, 1); (2, 1, 1); (2, 0, 1); + (2, 1, 1); (2, 1, 0); (2, 0, 0); (2, 0, 0)] +|}];; + +[|(g, o, p) for g = 1 to 2 and p in [|1; 1; 0|] for o in [|1; 0; p|]|];; +[%%expect{| +- : (int * int * int) array = +[|(1, 1, 1); (1, 0, 1); (1, 1, 1); (1, 1, 1); (1, 0, 1); (1, 1, 1); + (1, 1, 0); (1, 0, 0); (1, 0, 0); (2, 1, 1); (2, 0, 1); (2, 1, 1); + (2, 1, 1); (2, 0, 1); (2, 1, 1); (2, 1, 0); (2, 0, 0); (2, 0, 0)|] +|}];; + +[:(g, o, p) for g = 1 to 2 and p in [:1; 1; 0:] for o in [:1; 0; p:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(1, 1, 1); (1, 0, 1); (1, 1, 1); (1, 1, 1); (1, 0, 1); (1, 1, 1); + (1, 1, 0); (1, 0, 0); (1, 0, 0); (2, 1, 1); (2, 0, 1); (2, 1, 1); + (2, 1, 1); (2, 0, 1); (2, 1, 1); (2, 1, 0); (2, 0, 0); (2, 0, 0):] +|}];; + +[(a, c, f, l, r, v, y) + for v in [-2; 0; 1; -3] and _ in [-3; 1; 0; 0; -3] + for a = -3 downto 3 and c = 1 downto -2 + for y in [0; 0; c; c; 3; 3] and _ in [2; v; c; 2; v] + for r = -1 downto 2 and l = -3 downto -1 + for f in [0; 2; 2; 0; 0]];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, c, f, l, r, v, y) + for v in [|-2; 0; 1; -3|] and _ in [|-3; 1; 0; 0; -3|] + for a = -3 downto 3 and c = 1 downto -2 + for y in [|0; 0; c; c; 3; 3|] and _ in [|2; v; c; 2; v|] + for r = -1 downto 2 and l = -3 downto -1 + for f in [|0; 2; 2; 0; 0|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, c, f, l, r, v, y) + for v in [:-2; 0; 1; -3:] and _ in [:-3; 1; 0; 0; -3:] + for a = -3 downto 3 and c = 1 downto -2 + for y in [:0; 0; c; c; 3; 3:] and _ in [:2; v; c; 2; v:] + for r = -1 downto 2 and l = -3 downto -1 + for f in [:0; 2; 2; 0; 0:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(r, t, v) + for r = 0 downto -3 and v = -3 to 2 + when r <> 0 + for t = 2 to -2 + when r <> 0 + when abs v mod 2 = 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(r, t, v) + for r = 0 downto -3 and v = -3 to 2 + when r <> 0 + for t = 2 to -2 + when r <> 0 + when abs v mod 2 = 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(r, t, v) + for r = 0 downto -3 and v = -3 to 2 + when r <> 0 + for t = 2 to -2 + when r <> 0 + when abs v mod 2 = 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(a, b, d, g, o, t, z) + for t = -2 to 2 and o in [2] + for g in [-3; 3; 0; 1; 2] and a in [-2] + when abs o mod 2 = 0 + for b in [-1; -3; 0] and d = 1 to -1 + for z in [b; -2; 0; -1; -3; -1; d]];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, b, d, g, o, t, z) + for t = -2 to 2 and o in [|2|] + for g in [|-3; 3; 0; 1; 2|] and a in [|-2|] + when abs o mod 2 = 0 + for b in [|-1; -3; 0|] and d = 1 to -1 + for z in [|b; -2; 0; -1; -3; -1; d|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, b, d, g, o, t, z) + for t = -2 to 2 and o in [:2:] + for g in [:-3; 3; 0; 1; 2:] and a in [:-2:] + when abs o mod 2 = 0 + for b in [:-1; -3; 0:] and d = 1 to -1 + for z in [:b; -2; 0; -1; -3; -1; d:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(c, f, l, p, x) + for c in [-3; 3; -2; -2; -1; 3; 2] + for _ = -1 to -1 + for f = 1 to -1 + for x in [2; -3; -3; f; c; 1] + for l = 1 downto 2 and p in [-1]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(c, f, l, p, x) + for c in [|-3; 3; -2; -2; -1; 3; 2|] + for _ = -1 to -1 + for f = 1 to -1 + for x in [|2; -3; -3; f; c; 1|] + for l = 1 downto 2 and p in [|-1|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(c, f, l, p, x) + for c in [:-3; 3; -2; -2; -1; 3; 2:] + for _ = -1 to -1 + for f = 1 to -1 + for x in [:2; -3; -3; f; c; 1:] + for l = 1 downto 2 and p in [:-1:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(c, d, f, h, k, l, n, r, w, y) + for r = 0 to 2 and n in [-3; 3; 0; 3] + for d = 1 downto -1 and c in [3; 1; -2; -2] + for h = n downto -3 and w = 2 to -1 and l = r downto 0 + for y in [-1; 2; -3; -1; 1] and k = d downto 2 and f = 3 downto -2];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(c, d, f, h, k, l, n, r, w, y) + for r = 0 to 2 and n in [|-3; 3; 0; 3|] + for d = 1 downto -1 and c in [|3; 1; -2; -2|] + for h = n downto -3 and w = 2 to -1 and l = r downto 0 + for y in [|-1; 2; -3; -1; 1|] and k = d downto 2 and f = 3 downto -2|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(c, d, f, h, k, l, n, r, w, y) + for r = 0 to 2 and n in [:-3; 3; 0; 3:] + for d = 1 downto -1 and c in [:3; 1; -2; -2:] + for h = n downto -3 and w = 2 to -1 and l = r downto 0 + for y in [:-1; 2; -3; -1; 1:] and k = d downto 2 and f = 3 downto -2:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, b) for b in [2; -1; 2; -2; 3; 0; 0] and a = 3 to 3];; +[%%expect{| +- : (int * int) list = +[(3, 2); (3, -1); (3, 2); (3, -2); (3, 3); (3, 0); (3, 0)] +|}];; + +[|(a, b) for b in [|2; -1; 2; -2; 3; 0; 0|] and a = 3 to 3|];; +[%%expect{| +- : (int * int) array = +[|(3, 2); (3, -1); (3, 2); (3, -2); (3, 3); (3, 0); (3, 0)|] +|}];; + +[:(a, b) for b in [:2; -1; 2; -2; 3; 0; 0:] and a = 3 to 3:];; +[%%expect{| +- : (int * int) iarray = +[:(3, 2); (3, -1); (3, 2); (3, -2); (3, 3); (3, 0); (3, 0):] +|}];; + +[(m, r) for r in [] and m in []];; +[%%expect{| +- : ('a * 'b) list = [] +|}];; + +[|(m, r) for r in [||] and m in [||]|];; +[%%expect{| +- : ('_weak15 * '_weak16) array = [||] +|}];; + +[:(m, r) for r in [::] and m in [::]:];; +[%%expect{| +- : ('a * 'b) iarray = [::] +|}];; + +[(d, j, l, o, u, v, w) + for o in [1; 3; -2] + and j = 1 downto -2 + and w in [-3; -1] + and u = -3 downto -3 + for l = -3 downto 0 + and d = -2 downto -3 + and v in [j; 1; 2; -1; -1; 0] + when o > 0];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(d, j, l, o, u, v, w) + for o in [|1; 3; -2|] + and j = 1 downto -2 + and w in [|-3; -1|] + and u = -3 downto -3 + for l = -3 downto 0 + and d = -2 downto -3 + and v in [|j; 1; 2; -1; -1; 0|] + when o > 0|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(d, j, l, o, u, v, w) + for o in [:1; 3; -2:] + and j = 1 downto -2 + and w in [:-3; -1:] + and u = -3 downto -3 + for l = -3 downto 0 + and d = -2 downto -3 + and v in [:j; 1; 2; -1; -1; 0:] + when o > 0:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(b, p, s, u) + for s = -2 downto -2 + for b in [-2; 1; 0; s] + for p in [] + when s <> 0 + for u = 3 downto p];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(b, p, s, u) + for s = -2 downto -2 + for b in [|-2; 1; 0; s|] + for p in [||] + when s <> 0 + for u = 3 downto p|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(b, p, s, u) + for s = -2 downto -2 + for b in [:-2; 1; 0; s:] + for p in [::] + when s <> 0 + for u = 3 downto p:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(a, b, f, p, u, z) + for u = -3 to 0 and a in [-3; -3; -1; 2; -3; 3; 3] + when a <> 0 + for p = -1 downto a + for f = -3 to 2 + for b = 3 downto 2 and z = 3 to p];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, b, f, p, u, z) + for u = -3 to 0 and a in [|-3; -3; -1; 2; -3; 3; 3|] + when a <> 0 + for p = -1 downto a + for f = -3 to 2 + for b = 3 downto 2 and z = 3 to p|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, b, f, p, u, z) + for u = -3 to 0 and a in [:-3; -3; -1; 2; -3; 3; 3:] + when a <> 0 + for p = -1 downto a + for f = -3 to 2 + for b = 3 downto 2 and z = 3 to p:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(g, h, n) + for h in [-3; 1] and g in [3; 2; -2; 0] + when h > 0 + when abs h mod 2 = 0 + for n = 3 to 3];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(g, h, n) + for h in [|-3; 1|] and g in [|3; 2; -2; 0|] + when h > 0 + when abs h mod 2 = 0 + for n = 3 to 3|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(g, h, n) + for h in [:-3; 1:] and g in [:3; 2; -2; 0:] + when h > 0 + when abs h mod 2 = 0 + for n = 3 to 3:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(b, x) + for x = -2 to 3 and b = -1 downto -1 + when abs x mod 2 = 1 + when abs b mod 2 = 1 + when b > 0];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(b, x) + for x = -2 to 3 and b = -1 downto -1 + when abs x mod 2 = 1 + when abs b mod 2 = 1 + when b > 0|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(b, x) + for x = -2 to 3 and b = -1 downto -1 + when abs x mod 2 = 1 + when abs b mod 2 = 1 + when b > 0:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[w for w in [0; -3; 2] when w < 0];; +[%%expect{| +- : int list = [-3] +|}];; + +[|w for w in [|0; -3; 2|] when w < 0|];; +[%%expect{| +- : int array = [|-3|] +|}];; + +[:w for w in [:0; -3; 2:] when w < 0:];; +[%%expect{| +- : int iarray = [:-3:] +|}];; + +[(c, u, v, w, z) + for z in [2; 1; 2; -3] + for v = 1 to -2 and u in [2; 1] and c in [-3] + for w = 3 to 0 + when abs u mod 2 = 0];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(c, u, v, w, z) + for z in [|2; 1; 2; -3|] + for v = 1 to -2 and u in [|2; 1|] and c in [|-3|] + for w = 3 to 0 + when abs u mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(c, u, v, w, z) + for z in [:2; 1; 2; -3:] + for v = 1 to -2 and u in [:2; 1:] and c in [:-3:] + for w = 3 to 0 + when abs u mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(d, k, p, r, x) + for x = 2 downto -1 and k = -1 to -1 and _ in [-2; 3; -3] + for r = 2 to 1 and d in [] and p in [-1; -1; 2; 2; -1; -3; -2]];; +[%%expect{| +- : ('a * int * int * int * int) list = [] +|}];; + +[|(d, k, p, r, x) + for x = 2 downto -1 and k = -1 to -1 and _ in [|-2; 3; -3|] + for r = 2 to 1 and d in [||] and p in [|-1; -1; 2; 2; -1; -3; -2|]|];; +[%%expect{| +- : ('_weak17 * int * int * int * int) array = [||] +|}];; + +[:(d, k, p, r, x) + for x = 2 downto -1 and k = -1 to -1 and _ in [:-2; 3; -3:] + for r = 2 to 1 and d in [::] and p in [:-1; -1; 2; 2; -1; -3; -2:]:];; +[%%expect{| +- : ('a * int * int * int * int) iarray = [::] +|}];; + +[(b, e, g, r, s, t) + for b in [-1; 0; 0] + for t = 0 to -1 and s = -3 downto 3 and g in [] and r = 2 downto -1 + for e in [1; 3]];; +[%%expect{| +- : (int * int * 'a * int * int * int) list = [] +|}];; + +[|(b, e, g, r, s, t) + for b in [|-1; 0; 0|] + for t = 0 to -1 and s = -3 downto 3 and g in [||] and r = 2 downto -1 + for e in [|1; 3|]|];; +[%%expect{| +- : (int * int * '_weak18 * int * int * int) array = [||] +|}];; + +[:(b, e, g, r, s, t) + for b in [:-1; 0; 0:] + for t = 0 to -1 and s = -3 downto 3 and g in [::] and r = 2 downto -1 + for e in [:1; 3:]:];; +[%%expect{| +- : (int * int * 'a * int * int * int) iarray = [::] +|}];; + +[(h, t) + for t in [0; 1; -2; 2] and h in [3; -2; -1; -3; -2; 0] + when h <> 0 + for t = 3 downto t];; +[%%expect{| +- : (int * int) list = +[(3, 3); (3, 2); (3, 1); (3, 0); (-2, 3); (-2, 2); (-2, 1); (-2, 0); + (-1, 3); (-1, 2); (-1, 1); (-1, 0); (-3, 3); (-3, 2); (-3, 1); (-3, 0); + (-2, 3); (-2, 2); (-2, 1); (-2, 0); (3, 3); (3, 2); (3, 1); (-2, 3); + (-2, 2); (-2, 1); (-1, 3); (-1, 2); (-1, 1); (-3, 3); (-3, 2); (-3, 1); + (-2, 3); (-2, 2); (-2, 1); (3, 3); (3, 2); (3, 1); (3, 0); (3, -1); + (3, -2); (-2, 3); (-2, 2); (-2, 1); (-2, 0); (-2, -1); (-2, -2); (-1, 3); + (-1, 2); (-1, 1); (-1, 0); (-1, -1); (-1, -2); (-3, 3); (-3, 2); (-3, 1); + (-3, 0); (-3, -1); (-3, -2); (-2, 3); (-2, 2); (-2, 1); (-2, 0); (-2, -1); + (-2, -2); (3, 3); (3, 2); (-2, 3); (-2, 2); (-1, 3); (-1, 2); (-3, 3); + (-3, 2); (-2, 3); (-2, 2)] +|}];; + +[|(h, t) + for t in [|0; 1; -2; 2|] and h in [|3; -2; -1; -3; -2; 0|] + when h <> 0 + for t = 3 downto t|];; +[%%expect{| +- : (int * int) array = +[|(3, 3); (3, 2); (3, 1); (3, 0); (-2, 3); (-2, 2); (-2, 1); (-2, 0); + (-1, 3); (-1, 2); (-1, 1); (-1, 0); (-3, 3); (-3, 2); (-3, 1); (-3, 0); + (-2, 3); (-2, 2); (-2, 1); (-2, 0); (3, 3); (3, 2); (3, 1); (-2, 3); + (-2, 2); (-2, 1); (-1, 3); (-1, 2); (-1, 1); (-3, 3); (-3, 2); (-3, 1); + (-2, 3); (-2, 2); (-2, 1); (3, 3); (3, 2); (3, 1); (3, 0); (3, -1); + (3, -2); (-2, 3); (-2, 2); (-2, 1); (-2, 0); (-2, -1); (-2, -2); (-1, 3); + (-1, 2); (-1, 1); (-1, 0); (-1, -1); (-1, -2); (-3, 3); (-3, 2); (-3, 1); + (-3, 0); (-3, -1); (-3, -2); (-2, 3); (-2, 2); (-2, 1); (-2, 0); (-2, -1); + (-2, -2); (3, 3); (3, 2); (-2, 3); (-2, 2); (-1, 3); (-1, 2); (-3, 3); + (-3, 2); (-2, 3); (-2, 2)|] +|}];; + +[:(h, t) + for t in [:0; 1; -2; 2:] and h in [:3; -2; -1; -3; -2; 0:] + when h <> 0 + for t = 3 downto t:];; +[%%expect{| +- : (int * int) iarray = +[:(3, 3); (3, 2); (3, 1); (3, 0); (-2, 3); (-2, 2); (-2, 1); (-2, 0); + (-1, 3); (-1, 2); (-1, 1); (-1, 0); (-3, 3); (-3, 2); (-3, 1); (-3, 0); + (-2, 3); (-2, 2); (-2, 1); (-2, 0); (3, 3); (3, 2); (3, 1); (-2, 3); + (-2, 2); (-2, 1); (-1, 3); (-1, 2); (-1, 1); (-3, 3); (-3, 2); (-3, 1); + (-2, 3); (-2, 2); (-2, 1); (3, 3); (3, 2); (3, 1); (3, 0); (3, -1); + (3, -2); (-2, 3); (-2, 2); (-2, 1); (-2, 0); (-2, -1); (-2, -2); (-1, 3); + (-1, 2); (-1, 1); (-1, 0); (-1, -1); (-1, -2); (-3, 3); (-3, 2); (-3, 1); + (-3, 0); (-3, -1); (-3, -2); (-2, 3); (-2, 2); (-2, 1); (-2, 0); (-2, -1); + (-2, -2); (3, 3); (3, 2); (-2, 3); (-2, 2); (-1, 3); (-1, 2); (-3, 3); + (-3, 2); (-2, 3); (-2, 2):] +|}];; + +[(a, c, f, j, o, s) + for j = 2 downto -2 and o in [-2; 2; 2; 0; -3] and a in [0; -1; 3] + for s in [] and f = j downto 1 and j = -2 downto -1 and c = 2 downto j + when f < 0];; +[%%expect{| +- : (int * int * int * int * int * 'a) list = [] +|}];; + +[|(a, c, f, j, o, s) + for j = 2 downto -2 and o in [|-2; 2; 2; 0; -3|] and a in [|0; -1; 3|] + for s in [||] and f = j downto 1 and j = -2 downto -1 and c = 2 downto j + when f < 0|];; +[%%expect{| +- : (int * int * int * int * int * '_weak19) array = [||] +|}];; + +[:(a, c, f, j, o, s) + for j = 2 downto -2 and o in [:-2; 2; 2; 0; -3:] and a in [:0; -1; 3:] + for s in [::] and f = j downto 1 and j = -2 downto -1 and c = 2 downto j + when f < 0:];; +[%%expect{| +- : (int * int * int * int * int * 'a) iarray = [::] +|}];; + +[(h, m, o) + for h in [0] + when h > 0 + when abs h mod 2 = 1 + for m in [h; 1] + for o = 1 to 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(h, m, o) + for h in [|0|] + when h > 0 + when abs h mod 2 = 1 + for m in [|h; 1|] + for o = 1 to 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(h, m, o) + for h in [:0:] + when h > 0 + when abs h mod 2 = 1 + for m in [:h; 1:] + for o = 1 to 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(o, s) for o = 2 to -3 for s in [1; -3; 3; o; 0]];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(o, s) for o = 2 to -3 for s in [|1; -3; 3; o; 0|]|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(o, s) for o = 2 to -3 for s in [:1; -3; 3; o; 0:]:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[a for a in [] when a < 0];; +[%%expect{| +- : int list = [] +|}];; + +[|a for a in [||] when a < 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:a for a in [::] when a < 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(d, g, i, n, o, p) + for i in [-1; 3; -3; -1] and g in [3; -1; -2; -1; 1] and p = 0 to 3 + for d = -1 downto 2 and n = i downto 1 and o in [2; g] and i in [1; -2; 2]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(d, g, i, n, o, p) + for i in [|-1; 3; -3; -1|] + and g in [|3; -1; -2; -1; 1|] + and p = 0 to 3 + for d = -1 downto 2 + and n = i downto 1 + and o in [|2; g|] + and i in [|1; -2; 2|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(d, g, i, n, o, p) + for i in [:-1; 3; -3; -1:] + and g in [:3; -1; -2; -1; 1:] + and p = 0 to 3 + for d = -1 downto 2 + and n = i downto 1 + and o in [:2; g:] + and i in [:1; -2; 2:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(b, g, p, q, w) + for _ = -1 downto -1 and p in [0; -3; -3] + when p < 0 + for q in [-1; -1; 1] + for w = 3 downto q and b in [p] + for g = 1 downto 1];; +[%%expect{| +- : (int * int * int * int * int) list = +[(-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); + (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); (-3, 1, -3, -1, 3); + (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); (-3, 1, -3, -1, 0); + (-3, 1, -3, -1, -1); (-3, 1, -3, 1, 3); (-3, 1, -3, 1, 2); + (-3, 1, -3, 1, 1); (-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); + (-3, 1, -3, -1, 1); (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); + (-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); + (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); (-3, 1, -3, 1, 3); + (-3, 1, -3, 1, 2); (-3, 1, -3, 1, 1)] +|}];; + +[|(b, g, p, q, w) + for _ = -1 downto -1 and p in [|0; -3; -3|] + when p < 0 + for q in [|-1; -1; 1|] + for w = 3 downto q and b in [|p|] + for g = 1 downto 1|];; +[%%expect{| +- : (int * int * int * int * int) array = +[|(-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); + (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); (-3, 1, -3, -1, 3); + (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); (-3, 1, -3, -1, 0); + (-3, 1, -3, -1, -1); (-3, 1, -3, 1, 3); (-3, 1, -3, 1, 2); + (-3, 1, -3, 1, 1); (-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); + (-3, 1, -3, -1, 1); (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); + (-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); + (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); (-3, 1, -3, 1, 3); + (-3, 1, -3, 1, 2); (-3, 1, -3, 1, 1)|] +|}];; + +[:(b, g, p, q, w) + for _ = -1 downto -1 and p in [:0; -3; -3:] + when p < 0 + for q in [:-1; -1; 1:] + for w = 3 downto q and b in [:p:] + for g = 1 downto 1:];; +[%%expect{| +- : (int * int * int * int * int) iarray = +[:(-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); + (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); (-3, 1, -3, -1, 3); + (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); (-3, 1, -3, -1, 0); + (-3, 1, -3, -1, -1); (-3, 1, -3, 1, 3); (-3, 1, -3, 1, 2); + (-3, 1, -3, 1, 1); (-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); + (-3, 1, -3, -1, 1); (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); + (-3, 1, -3, -1, 3); (-3, 1, -3, -1, 2); (-3, 1, -3, -1, 1); + (-3, 1, -3, -1, 0); (-3, 1, -3, -1, -1); (-3, 1, -3, 1, 3); + (-3, 1, -3, 1, 2); (-3, 1, -3, 1, 1):] +|}];; + +[(i, p, v) for p = 2 to -2 for v = -3 downto 2 and i in [0; 2; 3; 0; -2; 0]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, c, g, o, p, v) + for o in [|-2; -2; -2; 2; 0; 0; 3|] + for p = -3 downto -1 and _ in [|0; 1; o; 1; -2|] and g in [|2; -3; -3; 3|] + for a in [|2; o; 1; 3|] + for v = 3 downto 2 and c in [|2; 1; 1; 1|] and p in [|-1; 1; -2; -2|]|];; +[%%expect{| +Lines 1-5, characters 0-75: +1 | [|(a, c, g, o, p, v) +2 | for o in [|-2; -2; -2; 2; 0; 0; 3|] +3 | for p = -3 downto -1 and _ in [|0; 1; o; 1; -2|] and g in [|2; -3; -3; 3|] +4 | for a in [|2; o; 1; 3|] +5 | for v = 3 downto 2 and c in [|2; 1; 1; 1|] and p in [|-1; 1; -2; -2|]|].. +Warning 26 [unused-var]: unused variable p. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, c, g, o, p, v) + for o in [:-2; -2; -2; 2; 0; 0; 3:] + for p = -3 downto -1 and _ in [:0; 1; o; 1; -2:] and g in [:2; -3; -3; 3:] + for a in [:2; o; 1; 3:] + for v = 3 downto 2 and c in [:2; 1; 1; 1:] and p in [:-1; 1; -2; -2:]:];; +[%%expect{| +Lines 1-5, characters 0-75: +1 | [:(a, c, g, o, p, v) +2 | for o in [:-2; -2; -2; 2; 0; 0; 3:] +3 | for p = -3 downto -1 and _ in [:0; 1; o; 1; -2:] and g in [:2; -3; -3; 3:] +4 | for a in [:2; o; 1; 3:] +5 | for v = 3 downto 2 and c in [:2; 1; 1; 1:] and p in [:-1; 1; -2; -2:]:].. +Warning 26 [unused-var]: unused variable p. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(l, m, q) + for l in [-3; 2; -2; 1; -2] + when abs l mod 2 = 1 + for q in [] and m = l downto -3];; +[%%expect{| +- : (int * int * 'a) list = [] +|}];; + +[|(l, m, q) + for l in [|-3; 2; -2; 1; -2|] + when abs l mod 2 = 1 + for q in [||] and m = l downto -3|];; +[%%expect{| +- : (int * int * '_weak20) array = [||] +|}];; + +[:(l, m, q) + for l in [:-3; 2; -2; 1; -2:] + when abs l mod 2 = 1 + for q in [::] and m = l downto -3:];; +[%%expect{| +- : (int * int * 'a) iarray = [::] +|}];; + +[(b, e, g, h) + for b in [-2; -1] + and h in [1] + and e in [3] + and g in [1; 2; -3; 1; -2] + and _ in [-1; 1; -2; 0; 2]];; +[%%expect{| +- : (int * int * int * int) list = +[(-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); + (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); + (-2, 3, -3, 1); (-2, 3, -3, 1); (-2, 3, -3, 1); (-2, 3, -3, 1); + (-2, 3, -3, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); + (-2, 3, 1, 1); (-2, 3, -2, 1); (-2, 3, -2, 1); (-2, 3, -2, 1); + (-2, 3, -2, 1); (-2, 3, -2, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); + (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 2, 1); (-1, 3, 2, 1); (-1, 3, 2, 1); + (-1, 3, 2, 1); (-1, 3, 2, 1); (-1, 3, -3, 1); (-1, 3, -3, 1); + (-1, 3, -3, 1); (-1, 3, -3, 1); (-1, 3, -3, 1); (-1, 3, 1, 1); + (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, -2, 1); + (-1, 3, -2, 1); (-1, 3, -2, 1); (-1, 3, -2, 1); (-1, 3, -2, 1)] +|}];; + +[|(b, e, g, h) + for b in [|-2; -1|] + and h in [|1|] + and e in [|3|] + and g in [|1; 2; -3; 1; -2|] + and _ in [|-1; 1; -2; 0; 2|]|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); + (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); + (-2, 3, -3, 1); (-2, 3, -3, 1); (-2, 3, -3, 1); (-2, 3, -3, 1); + (-2, 3, -3, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); + (-2, 3, 1, 1); (-2, 3, -2, 1); (-2, 3, -2, 1); (-2, 3, -2, 1); + (-2, 3, -2, 1); (-2, 3, -2, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); + (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 2, 1); (-1, 3, 2, 1); + (-1, 3, 2, 1); (-1, 3, 2, 1); (-1, 3, 2, 1); (-1, 3, -3, 1); + (-1, 3, -3, 1); (-1, 3, -3, 1); (-1, 3, -3, 1); (-1, 3, -3, 1); + (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); + (-1, 3, -2, 1); (-1, 3, -2, 1); (-1, 3, -2, 1); (-1, 3, -2, 1); + (-1, 3, -2, 1)|] +|}];; + +[:(b, e, g, h) + for b in [:-2; -1:] + and h in [:1:] + and e in [:3:] + and g in [:1; 2; -3; 1; -2:] + and _ in [:-1; 1; -2; 0; 2:]:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); + (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); (-2, 3, 2, 1); + (-2, 3, -3, 1); (-2, 3, -3, 1); (-2, 3, -3, 1); (-2, 3, -3, 1); + (-2, 3, -3, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); (-2, 3, 1, 1); + (-2, 3, 1, 1); (-2, 3, -2, 1); (-2, 3, -2, 1); (-2, 3, -2, 1); + (-2, 3, -2, 1); (-2, 3, -2, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); + (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 2, 1); (-1, 3, 2, 1); + (-1, 3, 2, 1); (-1, 3, 2, 1); (-1, 3, 2, 1); (-1, 3, -3, 1); + (-1, 3, -3, 1); (-1, 3, -3, 1); (-1, 3, -3, 1); (-1, 3, -3, 1); + (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); (-1, 3, 1, 1); + (-1, 3, -2, 1); (-1, 3, -2, 1); (-1, 3, -2, 1); (-1, 3, -2, 1); + (-1, 3, -2, 1):] +|}];; + +[(a, q, r, u, z) + for r in [2; 0; -2] + for _ in [3; -1; 3] and a = -2 to -3 and u in [-1; 1; -3; 2; 1; 1; -3] + for q = 2 to -3 and u = 3 to -1 and z in [0]];; +[%%expect{| +Line 3, characters 44-45: +3 | for _ in [3; -1; 3] and a = -2 to -3 and u in [-1; 1; -3; 2; 1; 1; -3] + ^ +Warning 26 [unused-var]: unused variable u. +- : (int * int * int * int * int) list = [] +|}];; + +[|(a, q, r, u, z) + for r in [|2; 0; -2|] + for _ in [|3; -1; 3|] and a = -2 to -3 and u in [|-1; 1; -3; 2; 1; 1; -3|] + for q = 2 to -3 and u = 3 to -1 and z in [|0|]|];; +[%%expect{| +Line 3, characters 47-48: +3 | for _ in [|3; -1; 3|] and a = -2 to -3 and u in [|-1; 1; -3; 2; 1; 1; -3|] + ^ +Warning 26 [unused-var]: unused variable u. +- : (int * int * int * int * int) array = [||] +|}];; + +[:(a, q, r, u, z) + for r in [:2; 0; -2:] + for _ in [:3; -1; 3:] and a = -2 to -3 and u in [:-1; 1; -3; 2; 1; 1; -3:] + for q = 2 to -3 and u = 3 to -1 and z in [:0:]:];; +[%%expect{| +Line 3, characters 47-48: +3 | for _ in [:3; -1; 3:] and a = -2 to -3 and u in [:-1; 1; -3; 2; 1; 1; -3:] + ^ +Warning 26 [unused-var]: unused variable u. +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(a, c, d, h, n, u, z) + for u in [0; 3; -3; 1] and a in [1; -3] and h in [1; -2; 0; -3] + for c = 1 to -2 and z = 0 to a + for d in [0; a; -3; -1; -1] + for n = 2 to 1];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, c, d, h, n, u, z) + for u in [|0; 3; -3; 1|] and a in [|1; -3|] and h in [|1; -2; 0; -3|] + for c = 1 to -2 and z = 0 to a + for d in [|0; a; -3; -1; -1|] + for n = 2 to 1|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, c, d, h, n, u, z) + for u in [:0; 3; -3; 1:] and a in [:1; -3:] and h in [:1; -2; 0; -3:] + for c = 1 to -2 and z = 0 to a + for d in [:0; a; -3; -1; -1:] + for n = 2 to 1:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(c, d, m, p, v) + for v in [-3; -1; 0; 2; 2; 2; -3] + for m = -2 to -3 + and p in [-1; 3; -2; -2] + and d in [-1; 1; 1; v; 0] + and c in [1] + for _ in [-3; 3; -3; 0] + and c in [1; -1; -1; d; 2; 1]];; +[%%expect{| +Line 6, characters 7-8: +6 | and c in [1] + ^ +Warning 26 [unused-var]: unused variable c. +- : (int * int * int * int * int) list = [] +|}];; + +[|(c, d, m, p, v) + for v in [|-3; -1; 0; 2; 2; 2; -3|] + for m = -2 to -3 + and p in [|-1; 3; -2; -2|] + and d in [|-1; 1; 1; v; 0|] + and c in [|1|] + for _ in [|-3; 3; -3; 0|] + and c in [|1; -1; -1; d; 2; 1|]|];; +[%%expect{| +Line 6, characters 8-9: +6 | and c in [|1|] + ^ +Warning 26 [unused-var]: unused variable c. +- : (int * int * int * int * int) array = [||] +|}];; + +[:(c, d, m, p, v) + for v in [:-3; -1; 0; 2; 2; 2; -3:] + for m = -2 to -3 + and p in [:-1; 3; -2; -2:] + and d in [:-1; 1; 1; v; 0:] + and c in [:1:] + for _ in [:-3; 3; -3; 0:] + and c in [:1; -1; -1; d; 2; 1:]:];; +[%%expect{| +Line 6, characters 8-9: +6 | and c in [:1:] + ^ +Warning 26 [unused-var]: unused variable c. +- : (int * int * int * int * int) iarray = [::] +|}];; + +[d for d in [-1; 0; -2; 2; -3; 2] when d > 0];; +[%%expect{| +- : int list = [2; 2] +|}];; + +[|d for d in [|-1; 0; -2; 2; -3; 2|] when d > 0|];; +[%%expect{| +- : int array = [|2; 2|] +|}];; + +[:d for d in [:-1; 0; -2; 2; -3; 2:] when d > 0:];; +[%%expect{| +- : int iarray = [:2; 2:] +|}];; + +[(l, p, t, x, z) + for z = 1 to 2 and _ in [1] + when abs z mod 2 = 1 + for t = 0 to 0 and l in [] + for x in [3; -3; -1; -2; -2; 0] and p in [2] + when x <> 0];; +[%%expect{| +- : ('a * int * int * int * int) list = [] +|}];; + +[|(l, p, t, x, z) + for z = 1 to 2 and _ in [|1|] + when abs z mod 2 = 1 + for t = 0 to 0 and l in [||] + for x in [|3; -3; -1; -2; -2; 0|] and p in [|2|] + when x <> 0|];; +[%%expect{| +- : ('_weak21 * int * int * int * int) array = [||] +|}];; + +[:(l, p, t, x, z) + for z = 1 to 2 and _ in [:1:] + when abs z mod 2 = 1 + for t = 0 to 0 and l in [::] + for x in [:3; -3; -1; -2; -2; 0:] and p in [:2:] + when x <> 0:];; +[%%expect{| +- : ('a * int * int * int * int) iarray = [::] +|}];; + +[(f, h, l, m, u) + for l in [-3; -2; 1; 1] + for m = 2 downto -3 + for f = 2 to -3 and h in [-3; 1; 2; 0] + when abs l mod 2 = 1 + for u in [-2; 1; -2]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(f, h, l, m, u) + for l in [|-3; -2; 1; 1|] + for m = 2 downto -3 + for f = 2 to -3 and h in [|-3; 1; 2; 0|] + when abs l mod 2 = 1 + for u in [|-2; 1; -2|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(f, h, l, m, u) + for l in [:-3; -2; 1; 1:] + for m = 2 downto -3 + for f = 2 to -3 and h in [:-3; 1; 2; 0:] + when abs l mod 2 = 1 + for u in [:-2; 1; -2:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(e, o) for e = 0 to -2 when e < 0 for o = -2 downto 3];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(e, o) for e = 0 to -2 when e < 0 for o = -2 downto 3|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(e, o) for e = 0 to -2 when e < 0 for o = -2 downto 3:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[d + for _ = 2 downto 2 and d = 3 downto -1 + for d = d to 0 + when d < 0 + for _ = -2 downto 0 + when d < 0];; +[%%expect{| +- : int list = [] +|}];; + +[|d + for _ = 2 downto 2 and d = 3 downto -1 + for d = d to 0 + when d < 0 + for _ = -2 downto 0 + when d < 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:d + for _ = 2 downto 2 and d = 3 downto -1 + for d = d to 0 + when d < 0 + for _ = -2 downto 0 + when d < 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(e, h, s, v, x, y) + for x in [3; 1; -2; -1; -3; 2] + for e = -3 downto 2 + for y = -2 downto 3 and s = 1 to 1 + when abs y mod 2 = 0 + for v in [-2; 1] and h in [-1; 3; e; 2]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(e, h, s, v, x, y) + for x in [|3; 1; -2; -1; -3; 2|] + for e = -3 downto 2 + for y = -2 downto 3 and s = 1 to 1 + when abs y mod 2 = 0 + for v in [|-2; 1|] and h in [|-1; 3; e; 2|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(e, h, s, v, x, y) + for x in [:3; 1; -2; -1; -3; 2:] + for e = -3 downto 2 + for y = -2 downto 3 and s = 1 to 1 + when abs y mod 2 = 0 + for v in [:-2; 1:] and h in [:-1; 3; e; 2:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(b, g, l, s, v, x) + for s in [0; 0; 1] and v = 3 downto -2 + for l = -3 downto v and x in [3; -1; -3] and g in [s; -2] + for b in [s; -3; 1]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(b, g, l, s, v, x) + for s in [|0; 0; 1|] and v = 3 downto -2 + for l = -3 downto v and x in [|3; -1; -3|] and g in [|s; -2|] + for b in [|s; -3; 1|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(b, g, l, s, v, x) + for s in [:0; 0; 1:] and v = 3 downto -2 + for l = -3 downto v and x in [:3; -1; -3:] and g in [:s; -2:] + for b in [:s; -3; 1:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, e, g, q, s, t) + for q = -2 to 3 + for s in [] + for e in [-2; 2; 0; 0; 1; -3] and d in [] + for t = -1 downto -2 and g in [1; -3; 0; -1; -2]];; +[%%expect{| +- : ('a * int * int * int * 'b * int) list = [] +|}];; + +[|(d, e, g, q, s, t) + for q = -2 to 3 + for s in [||] + for e in [|-2; 2; 0; 0; 1; -3|] and d in [||] + for t = -1 downto -2 and g in [|1; -3; 0; -1; -2|]|];; +[%%expect{| +- : ('_weak22 * int * int * int * '_weak23 * int) array = [||] +|}];; + +[:(d, e, g, q, s, t) + for q = -2 to 3 + for s in [::] + for e in [:-2; 2; 0; 0; 1; -3:] and d in [::] + for t = -1 downto -2 and g in [:1; -3; 0; -1; -2:]:];; +[%%expect{| +- : ('a * int * int * int * 'b * int) iarray = [::] +|}];; + +[(c, e, f, n) + for f in [0; 0] and e in [-2; 2; -1; 0; 0] + for c in [] and n = e to -2 + for f in [3; 1; 3] + when abs n mod 2 = 1];; +[%%expect{| +Line 2, characters 7-8: +2 | for f in [0; 0] and e in [-2; 2; -1; 0; 0] + ^ +Warning 26 [unused-var]: unused variable f. +- : ('a * int * int * int) list = [] +|}];; + +[|(c, e, f, n) + for f in [|0; 0|] and e in [|-2; 2; -1; 0; 0|] + for c in [||] and n = e to -2 + for f in [|3; 1; 3|] + when abs n mod 2 = 1|];; +[%%expect{| +Line 2, characters 8-9: +2 | for f in [|0; 0|] and e in [|-2; 2; -1; 0; 0|] + ^ +Warning 26 [unused-var]: unused variable f. +- : ('_weak24 * int * int * int) array = [||] +|}];; + +[:(c, e, f, n) + for f in [:0; 0:] and e in [:-2; 2; -1; 0; 0:] + for c in [::] and n = e to -2 + for f in [:3; 1; 3:] + when abs n mod 2 = 1:];; +[%%expect{| +Line 2, characters 8-9: +2 | for f in [:0; 0:] and e in [:-2; 2; -1; 0; 0:] + ^ +Warning 26 [unused-var]: unused variable f. +- : ('a * int * int * int) iarray = [::] +|}];; + +[(d, g, m, n, o, r) + for d in [3; 3; 0; -2; -3; 3] and n in [1; 3; 3; 2; -2] and m in [2; 1; 1] + for r in [0; -2; 2; -2; 0] + for g = -2 downto 1 and o in [3; 3; r; 3; 0]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(d, g, m, n, o, r) + for d in [|3; 3; 0; -2; -3; 3|] + and n in [|1; 3; 3; 2; -2|] + and m in [|2; 1; 1|] + for r in [|0; -2; 2; -2; 0|] + for g = -2 downto 1 + and o in [|3; 3; r; 3; 0|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(d, g, m, n, o, r) + for d in [:3; 3; 0; -2; -3; 3:] + and n in [:1; 3; 3; 2; -2:] + and m in [:2; 1; 1:] + for r in [:0; -2; 2; -2; 0:] + for g = -2 downto 1 + and o in [:3; 3; r; 3; 0:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[c for c = -3 to -2 when c > 0];; +[%%expect{| +- : int list = [] +|}];; + +[|c for c = -3 to -2 when c > 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:c for c = -3 to -2 when c > 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(a, b, e, k) + for k = 2 downto -2 and b in [-1] + when abs k mod 2 = 0 + for e = 0 to 0 + when k <> 0 + for a in [2; 3]];; +[%%expect{| +- : (int * int * int * int) list = +[(2, -1, 0, 2); (3, -1, 0, 2); (2, -1, 0, -2); (3, -1, 0, -2)] +|}];; + +[|(a, b, e, k) + for k = 2 downto -2 and b in [|-1|] + when abs k mod 2 = 0 + for e = 0 to 0 + when k <> 0 + for a in [|2; 3|]|];; +[%%expect{| +- : (int * int * int * int) array = +[|(2, -1, 0, 2); (3, -1, 0, 2); (2, -1, 0, -2); (3, -1, 0, -2)|] +|}];; + +[:(a, b, e, k) + for k = 2 downto -2 and b in [:-1:] + when abs k mod 2 = 0 + for e = 0 to 0 + when k <> 0 + for a in [:2; 3:]:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(2, -1, 0, 2); (3, -1, 0, 2); (2, -1, 0, -2); (3, -1, 0, -2):] +|}];; + +[(e, i, x) + for x in [0; 0; 3; 0; 1; -3] and i in [3; 1; 0; -2; -1; 0; 3] + for e in [3] + when e < 0 + when x < 0 + for i = 3 to -2];; +[%%expect{| +Line 2, characters 36-37: +2 | for x in [0; 0; 3; 0; 1; -3] and i in [3; 1; 0; -2; -1; 0; 3] + ^ +Warning 26 [unused-var]: unused variable i. +- : (int * int * int) list = [] +|}];; + +[|(e, i, x) + for x in [|0; 0; 3; 0; 1; -3|] and i in [|3; 1; 0; -2; -1; 0; 3|] + for e in [|3|] + when e < 0 + when x < 0 + for i = 3 to -2|];; +[%%expect{| +Line 2, characters 39-40: +2 | for x in [|0; 0; 3; 0; 1; -3|] and i in [|3; 1; 0; -2; -1; 0; 3|] + ^ +Warning 26 [unused-var]: unused variable i. +- : (int * int * int) array = [||] +|}];; + +[:(e, i, x) + for x in [:0; 0; 3; 0; 1; -3:] and i in [:3; 1; 0; -2; -1; 0; 3:] + for e in [:3:] + when e < 0 + when x < 0 + for i = 3 to -2:];; +[%%expect{| +Line 2, characters 39-40: +2 | for x in [:0; 0; 3; 0; 1; -3:] and i in [:3; 1; 0; -2; -1; 0; 3:] + ^ +Warning 26 [unused-var]: unused variable i. +- : (int * int * int) iarray = [::] +|}];; + +[(a, k, p, z) + for z = 0 downto 0 and _ = -3 to -3 + when abs z mod 2 = 1 + for k = z downto 1 and p = 1 to 2 + for z = k to z + for a = 1 to 1];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(a, k, p, z) + for z = 0 downto 0 and _ = -3 to -3 + when abs z mod 2 = 1 + for k = z downto 1 and p = 1 to 2 + for z = k to z + for a = 1 to 1|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(a, k, p, z) + for z = 0 downto 0 and _ = -3 to -3 + when abs z mod 2 = 1 + for k = z downto 1 and p = 1 to 2 + for z = k to z + for a = 1 to 1:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(b, e, q, u) + for e = -3 to 3 + for b = -3 downto -3 and q in [2; -1; 1; -1; -2] and u in [-3; 0; 2] + when b <> 0 + when u < 0];; +[%%expect{| +- : (int * int * int * int) list = +[(-3, -3, 2, -3); (-3, -3, -1, -3); (-3, -3, 1, -3); (-3, -3, -1, -3); + (-3, -3, -2, -3); (-3, -2, 2, -3); (-3, -2, -1, -3); (-3, -2, 1, -3); + (-3, -2, -1, -3); (-3, -2, -2, -3); (-3, -1, 2, -3); (-3, -1, -1, -3); + (-3, -1, 1, -3); (-3, -1, -1, -3); (-3, -1, -2, -3); (-3, 0, 2, -3); + (-3, 0, -1, -3); (-3, 0, 1, -3); (-3, 0, -1, -3); (-3, 0, -2, -3); + (-3, 1, 2, -3); (-3, 1, -1, -3); (-3, 1, 1, -3); (-3, 1, -1, -3); + (-3, 1, -2, -3); (-3, 2, 2, -3); (-3, 2, -1, -3); (-3, 2, 1, -3); + (-3, 2, -1, -3); (-3, 2, -2, -3); (-3, 3, 2, -3); (-3, 3, -1, -3); + (-3, 3, 1, -3); (-3, 3, -1, -3); (-3, 3, -2, -3)] +|}];; + +[|(b, e, q, u) + for e = -3 to 3 + for b = -3 downto -3 and q in [|2; -1; 1; -1; -2|] and u in [|-3; 0; 2|] + when b <> 0 + when u < 0|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-3, -3, 2, -3); (-3, -3, -1, -3); (-3, -3, 1, -3); (-3, -3, -1, -3); + (-3, -3, -2, -3); (-3, -2, 2, -3); (-3, -2, -1, -3); (-3, -2, 1, -3); + (-3, -2, -1, -3); (-3, -2, -2, -3); (-3, -1, 2, -3); (-3, -1, -1, -3); + (-3, -1, 1, -3); (-3, -1, -1, -3); (-3, -1, -2, -3); (-3, 0, 2, -3); + (-3, 0, -1, -3); (-3, 0, 1, -3); (-3, 0, -1, -3); (-3, 0, -2, -3); + (-3, 1, 2, -3); (-3, 1, -1, -3); (-3, 1, 1, -3); (-3, 1, -1, -3); + (-3, 1, -2, -3); (-3, 2, 2, -3); (-3, 2, -1, -3); (-3, 2, 1, -3); + (-3, 2, -1, -3); (-3, 2, -2, -3); (-3, 3, 2, -3); (-3, 3, -1, -3); + (-3, 3, 1, -3); (-3, 3, -1, -3); (-3, 3, -2, -3)|] +|}];; + +[:(b, e, q, u) + for e = -3 to 3 + for b = -3 downto -3 and q in [:2; -1; 1; -1; -2:] and u in [:-3; 0; 2:] + when b <> 0 + when u < 0:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-3, -3, 2, -3); (-3, -3, -1, -3); (-3, -3, 1, -3); (-3, -3, -1, -3); + (-3, -3, -2, -3); (-3, -2, 2, -3); (-3, -2, -1, -3); (-3, -2, 1, -3); + (-3, -2, -1, -3); (-3, -2, -2, -3); (-3, -1, 2, -3); (-3, -1, -1, -3); + (-3, -1, 1, -3); (-3, -1, -1, -3); (-3, -1, -2, -3); (-3, 0, 2, -3); + (-3, 0, -1, -3); (-3, 0, 1, -3); (-3, 0, -1, -3); (-3, 0, -2, -3); + (-3, 1, 2, -3); (-3, 1, -1, -3); (-3, 1, 1, -3); (-3, 1, -1, -3); + (-3, 1, -2, -3); (-3, 2, 2, -3); (-3, 2, -1, -3); (-3, 2, 1, -3); + (-3, 2, -1, -3); (-3, 2, -2, -3); (-3, 3, 2, -3); (-3, 3, -1, -3); + (-3, 3, 1, -3); (-3, 3, -1, -3); (-3, 3, -2, -3):] +|}];; + +[(a, d, e, j, n, p, s, v, y, z) + for e in [2] and s in [-1] and v in [1; -2; 2; -1; 0; 0; 1] + for p = -1 to -1 and a = e to 1 and y = 0 to 2 + for j in [-2; -1; -1; -3; p] + for z = 3 downto 2 and d = y downto -3 and n = 1 to 1];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, d, e, j, n, p, s, v, y, z) + for e in [|2|] and s in [|-1|] and v in [|1; -2; 2; -1; 0; 0; 1|] + for p = -1 to -1 and a = e to 1 and y = 0 to 2 + for j in [|-2; -1; -1; -3; p|] + for z = 3 downto 2 and d = y downto -3 and n = 1 to 1|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, d, e, j, n, p, s, v, y, z) + for e in [:2:] and s in [:-1:] and v in [:1; -2; 2; -1; 0; 0; 1:] + for p = -1 to -1 and a = e to 1 and y = 0 to 2 + for j in [:-2; -1; -1; -3; p:] + for z = 3 downto 2 and d = y downto -3 and n = 1 to 1:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[i for i = 3 downto 1 when i < 0];; +[%%expect{| +- : int list = [] +|}];; + +[|i for i = 3 downto 1 when i < 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:i for i = 3 downto 1 when i < 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(f, l, m, s) + for s = -1 downto -1 + for f in [s; 1; -2; 2; 2] and l = 2 downto -1 + when abs s mod 2 = 1 + when l > 0 + for m = -1 to 0];; +[%%expect{| +- : (int * int * int * int) list = +[(-1, 2, -1, -1); (-1, 2, 0, -1); (-1, 1, -1, -1); (-1, 1, 0, -1); + (1, 2, -1, -1); (1, 2, 0, -1); (1, 1, -1, -1); (1, 1, 0, -1); + (-2, 2, -1, -1); (-2, 2, 0, -1); (-2, 1, -1, -1); (-2, 1, 0, -1); + (2, 2, -1, -1); (2, 2, 0, -1); (2, 1, -1, -1); (2, 1, 0, -1); + (2, 2, -1, -1); (2, 2, 0, -1); (2, 1, -1, -1); (2, 1, 0, -1)] +|}];; + +[|(f, l, m, s) + for s = -1 downto -1 + for f in [|s; 1; -2; 2; 2|] and l = 2 downto -1 + when abs s mod 2 = 1 + when l > 0 + for m = -1 to 0|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-1, 2, -1, -1); (-1, 2, 0, -1); (-1, 1, -1, -1); (-1, 1, 0, -1); + (1, 2, -1, -1); (1, 2, 0, -1); (1, 1, -1, -1); (1, 1, 0, -1); + (-2, 2, -1, -1); (-2, 2, 0, -1); (-2, 1, -1, -1); (-2, 1, 0, -1); + (2, 2, -1, -1); (2, 2, 0, -1); (2, 1, -1, -1); (2, 1, 0, -1); + (2, 2, -1, -1); (2, 2, 0, -1); (2, 1, -1, -1); (2, 1, 0, -1)|] +|}];; + +[:(f, l, m, s) + for s = -1 downto -1 + for f in [:s; 1; -2; 2; 2:] and l = 2 downto -1 + when abs s mod 2 = 1 + when l > 0 + for m = -1 to 0:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-1, 2, -1, -1); (-1, 2, 0, -1); (-1, 1, -1, -1); (-1, 1, 0, -1); + (1, 2, -1, -1); (1, 2, 0, -1); (1, 1, -1, -1); (1, 1, 0, -1); + (-2, 2, -1, -1); (-2, 2, 0, -1); (-2, 1, -1, -1); (-2, 1, 0, -1); + (2, 2, -1, -1); (2, 2, 0, -1); (2, 1, -1, -1); (2, 1, 0, -1); + (2, 2, -1, -1); (2, 2, 0, -1); (2, 1, -1, -1); (2, 1, 0, -1):] +|}];; + +[(e, j, o, p, q, t, v, x, y) + for j in [0; 0; 2; -3; 2] and q = -3 to -3 + for q in [2; -1] and e in [-1; 2; -2] and y in [1; q] + for y in [] and x = 2 to 0 and o in [-1] + for p in [-2; y; -3; -1; 1; -3] and v in [3; -3] and t = 2 downto -1];; +[%%expect{| +Line 3, characters 45-46: +3 | for q in [2; -1] and e in [-1; 2; -2] and y in [1; q] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(e, j, o, p, q, t, v, x, y) + for j in [|0; 0; 2; -3; 2|] and q = -3 to -3 + for q in [|2; -1|] and e in [|-1; 2; -2|] and y in [|1; q|] + for y in [||] and x = 2 to 0 and o in [|-1|] + for p in [|-2; y; -3; -1; 1; -3|] and v in [|3; -3|] and t = 2 downto -1|];; +[%%expect{| +Line 3, characters 50-51: +3 | for q in [|2; -1|] and e in [|-1; 2; -2|] and y in [|1; q|] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(e, j, o, p, q, t, v, x, y) + for j in [:0; 0; 2; -3; 2:] and q = -3 to -3 + for q in [:2; -1:] and e in [:-1; 2; -2:] and y in [:1; q:] + for y in [::] and x = 2 to 0 and o in [:-1:] + for p in [:-2; y; -3; -1; 1; -3:] and v in [:3; -3:] and t = 2 downto -1:];; +[%%expect{| +Line 3, characters 50-51: +3 | for q in [:2; -1:] and e in [:-1; 2; -2:] and y in [:1; q:] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, e, i, j, s, u, w) + for w in [-1; 3; -2] + for i in [-1; 3; -3; 3] and s in [3; -1; -3; -3; 2; 2; 0] + for u = 3 downto 3 and d in [3; 3; 0; 3; 3; 0; -2] + for e in [-3; 0; 2; 2; 1] and j = -1 to -2 + when s < 0];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(d, e, i, j, s, u, w) + for w in [|-1; 3; -2|] + for i in [|-1; 3; -3; 3|] and s in [|3; -1; -3; -3; 2; 2; 0|] + for u = 3 downto 3 and d in [|3; 3; 0; 3; 3; 0; -2|] + for e in [|-3; 0; 2; 2; 1|] and j = -1 to -2 + when s < 0|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(d, e, i, j, s, u, w) + for w in [:-1; 3; -2:] + for i in [:-1; 3; -3; 3:] and s in [:3; -1; -3; -3; 2; 2; 0:] + for u = 3 downto 3 and d in [:3; 3; 0; 3; 3; 0; -2:] + for e in [:-3; 0; 2; 2; 1:] and j = -1 to -2 + when s < 0:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, b) for b in [-1] and a in [0; 1; -3; 1; -3; 1; 1] when b <> 0];; +[%%expect{| +- : (int * int) list = +[(0, -1); (1, -1); (-3, -1); (1, -1); (-3, -1); (1, -1); (1, -1)] +|}];; + +[|(a, b) for b in [|-1|] and a in [|0; 1; -3; 1; -3; 1; 1|] when b <> 0|];; +[%%expect{| +- : (int * int) array = +[|(0, -1); (1, -1); (-3, -1); (1, -1); (-3, -1); (1, -1); (1, -1)|] +|}];; + +[:(a, b) for b in [:-1:] and a in [:0; 1; -3; 1; -3; 1; 1:] when b <> 0:];; +[%%expect{| +- : (int * int) iarray = +[:(0, -1); (1, -1); (-3, -1); (1, -1); (-3, -1); (1, -1); (1, -1):] +|}];; + +[(b, e, o, x, z) + for o in [0; -2] + for e in [3; 2; 0] and z = 0 to -2 and x = -3 to 1 and b = -1 downto 1];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(b, e, o, x, z) + for o in [|0; -2|] + for e in [|3; 2; 0|] and z = 0 to -2 and x = -3 to 1 and b = -1 downto 1|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(b, e, o, x, z) + for o in [:0; -2:] + for e in [:3; 2; 0:] and z = 0 to -2 and x = -3 to 1 and b = -1 downto 1:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(f, s, z) + for _ = 2 downto 2 + and z in [-3; 1; -1; 3; 1; 2; -2] + and f = -3 to -1 + and _ in [-3; 2] + and s = 0 to 0];; +[%%expect{| +- : (int * int * int) list = +[(-3, 0, -3); (-3, 0, -3); (-2, 0, -3); (-2, 0, -3); (-1, 0, -3); + (-1, 0, -3); (-3, 0, 1); (-3, 0, 1); (-2, 0, 1); (-2, 0, 1); (-1, 0, 1); + (-1, 0, 1); (-3, 0, -1); (-3, 0, -1); (-2, 0, -1); (-2, 0, -1); (-1, 0, -1); + (-1, 0, -1); (-3, 0, 3); (-3, 0, 3); (-2, 0, 3); (-2, 0, 3); (-1, 0, 3); + (-1, 0, 3); (-3, 0, 1); (-3, 0, 1); (-2, 0, 1); (-2, 0, 1); (-1, 0, 1); + (-1, 0, 1); (-3, 0, 2); (-3, 0, 2); (-2, 0, 2); (-2, 0, 2); (-1, 0, 2); + (-1, 0, 2); (-3, 0, -2); (-3, 0, -2); (-2, 0, -2); (-2, 0, -2); (-1, 0, -2); + (-1, 0, -2)] +|}];; + +[|(f, s, z) + for _ = 2 downto 2 + and z in [|-3; 1; -1; 3; 1; 2; -2|] + and f = -3 to -1 + and _ in [|-3; 2|] + and s = 0 to 0|];; +[%%expect{| +- : (int * int * int) array = +[|(-3, 0, -3); (-3, 0, -3); (-2, 0, -3); (-2, 0, -3); (-1, 0, -3); + (-1, 0, -3); (-3, 0, 1); (-3, 0, 1); (-2, 0, 1); (-2, 0, 1); (-1, 0, 1); + (-1, 0, 1); (-3, 0, -1); (-3, 0, -1); (-2, 0, -1); (-2, 0, -1); + (-1, 0, -1); (-1, 0, -1); (-3, 0, 3); (-3, 0, 3); (-2, 0, 3); (-2, 0, 3); + (-1, 0, 3); (-1, 0, 3); (-3, 0, 1); (-3, 0, 1); (-2, 0, 1); (-2, 0, 1); + (-1, 0, 1); (-1, 0, 1); (-3, 0, 2); (-3, 0, 2); (-2, 0, 2); (-2, 0, 2); + (-1, 0, 2); (-1, 0, 2); (-3, 0, -2); (-3, 0, -2); (-2, 0, -2); (-2, 0, -2); + (-1, 0, -2); (-1, 0, -2)|] +|}];; + +[:(f, s, z) + for _ = 2 downto 2 + and z in [:-3; 1; -1; 3; 1; 2; -2:] + and f = -3 to -1 + and _ in [:-3; 2:] + and s = 0 to 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-3, 0, -3); (-3, 0, -3); (-2, 0, -3); (-2, 0, -3); (-1, 0, -3); + (-1, 0, -3); (-3, 0, 1); (-3, 0, 1); (-2, 0, 1); (-2, 0, 1); (-1, 0, 1); + (-1, 0, 1); (-3, 0, -1); (-3, 0, -1); (-2, 0, -1); (-2, 0, -1); + (-1, 0, -1); (-1, 0, -1); (-3, 0, 3); (-3, 0, 3); (-2, 0, 3); (-2, 0, 3); + (-1, 0, 3); (-1, 0, 3); (-3, 0, 1); (-3, 0, 1); (-2, 0, 1); (-2, 0, 1); + (-1, 0, 1); (-1, 0, 1); (-3, 0, 2); (-3, 0, 2); (-2, 0, 2); (-2, 0, 2); + (-1, 0, 2); (-1, 0, 2); (-3, 0, -2); (-3, 0, -2); (-2, 0, -2); (-2, 0, -2); + (-1, 0, -2); (-1, 0, -2):] +|}];; + +[(e, q) + for q in [1; -2; 2; 0; -2; 1; -3] + when abs q mod 2 = 0 + for e = -3 downto 0 + when e < 0];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(e, q) + for q in [|1; -2; 2; 0; -2; 1; -3|] + when abs q mod 2 = 0 + for e = -3 downto 0 + when e < 0|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(e, q) + for q in [:1; -2; 2; 0; -2; 1; -3:] + when abs q mod 2 = 0 + for e = -3 downto 0 + when e < 0:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(p, t) for p in [-2; 3; 2; 1; 0; -3; 1] and t in [3; 3; -3; -2; 2; 1; -3]];; +[%%expect{| +- : (int * int) list = +[(-2, 3); (-2, 3); (-2, -3); (-2, -2); (-2, 2); (-2, 1); (-2, -3); (3, 3); + (3, 3); (3, -3); (3, -2); (3, 2); (3, 1); (3, -3); (2, 3); (2, 3); (2, -3); + (2, -2); (2, 2); (2, 1); (2, -3); (1, 3); (1, 3); (1, -3); (1, -2); + (1, 2); (1, 1); (1, -3); (0, 3); (0, 3); (0, -3); (0, -2); (0, 2); (0, 1); + (0, -3); (-3, 3); (-3, 3); (-3, -3); (-3, -2); (-3, 2); (-3, 1); (-3, -3); + (1, 3); (1, 3); (1, -3); (1, -2); (1, 2); (1, 1); (1, -3)] +|}];; + +[|(p, t) + for p in [|-2; 3; 2; 1; 0; -3; 1|] and t in [|3; 3; -3; -2; 2; 1; -3|]|];; +[%%expect{| +- : (int * int) array = +[|(-2, 3); (-2, 3); (-2, -3); (-2, -2); (-2, 2); (-2, 1); (-2, -3); (3, 3); + (3, 3); (3, -3); (3, -2); (3, 2); (3, 1); (3, -3); (2, 3); (2, 3); + (2, -3); (2, -2); (2, 2); (2, 1); (2, -3); (1, 3); (1, 3); (1, -3); + (1, -2); (1, 2); (1, 1); (1, -3); (0, 3); (0, 3); (0, -3); (0, -2); + (0, 2); (0, 1); (0, -3); (-3, 3); (-3, 3); (-3, -3); (-3, -2); (-3, 2); + (-3, 1); (-3, -3); (1, 3); (1, 3); (1, -3); (1, -2); (1, 2); (1, 1); + (1, -3)|] +|}];; + +[:(p, t) + for p in [:-2; 3; 2; 1; 0; -3; 1:] and t in [:3; 3; -3; -2; 2; 1; -3:]:];; +[%%expect{| +- : (int * int) iarray = +[:(-2, 3); (-2, 3); (-2, -3); (-2, -2); (-2, 2); (-2, 1); (-2, -3); (3, 3); + (3, 3); (3, -3); (3, -2); (3, 2); (3, 1); (3, -3); (2, 3); (2, 3); + (2, -3); (2, -2); (2, 2); (2, 1); (2, -3); (1, 3); (1, 3); (1, -3); + (1, -2); (1, 2); (1, 1); (1, -3); (0, 3); (0, 3); (0, -3); (0, -2); + (0, 2); (0, 1); (0, -3); (-3, 3); (-3, 3); (-3, -3); (-3, -2); (-3, 2); + (-3, 1); (-3, -3); (1, 3); (1, 3); (1, -3); (1, -2); (1, 2); (1, 1); + (1, -3):] +|}];; + +[(a, e, h, j, m, n) + for m in [0; 1; -3; 2; 1] and e = 0 downto -1 + for h = 0 to -3 and a in [1; 0; 0; 3; 2] + for n = -1 to -3 and e in [1; -3; -1; -3] and j = 2 downto -2];; +[%%expect{| +Lines 1-4, characters 0-65: +1 | [(a, e, h, j, m, n) +2 | for m in [0; 1; -3; 2; 1] and e = 0 downto -1 +3 | for h = 0 to -3 and a in [1; 0; 0; 3; 2] +4 | for n = -1 to -3 and e in [1; -3; -1; -3] and j = 2 downto -2].. +Warning 26 [unused-var]: unused variable e. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, e, h, j, m, n) + for m in [|0; 1; -3; 2; 1|] and e = 0 downto -1 + for h = 0 to -3 and a in [|1; 0; 0; 3; 2|] + for n = -1 to -3 and e in [|1; -3; -1; -3|] and j = 2 downto -2|];; +[%%expect{| +Lines 1-4, characters 0-69: +1 | [|(a, e, h, j, m, n) +2 | for m in [|0; 1; -3; 2; 1|] and e = 0 downto -1 +3 | for h = 0 to -3 and a in [|1; 0; 0; 3; 2|] +4 | for n = -1 to -3 and e in [|1; -3; -1; -3|] and j = 2 downto -2|].. +Warning 26 [unused-var]: unused variable e. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, e, h, j, m, n) + for m in [:0; 1; -3; 2; 1:] and e = 0 downto -1 + for h = 0 to -3 and a in [:1; 0; 0; 3; 2:] + for n = -1 to -3 and e in [:1; -3; -1; -3:] and j = 2 downto -2:];; +[%%expect{| +Lines 1-4, characters 0-69: +1 | [:(a, e, h, j, m, n) +2 | for m in [:0; 1; -3; 2; 1:] and e = 0 downto -1 +3 | for h = 0 to -3 and a in [:1; 0; 0; 3; 2:] +4 | for n = -1 to -3 and e in [:1; -3; -1; -3:] and j = 2 downto -2:].. +Warning 26 [unused-var]: unused variable e. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(f, m, q, r, x) + for m = -3 to 0 and r = -3 to 2 and f = -3 to -3 + for x = 2 to 1 and q = 0 downto 3 + when abs x mod 2 = 1 + when abs x mod 2 = 0];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(f, m, q, r, x) + for m = -3 to 0 and r = -3 to 2 and f = -3 to -3 + for x = 2 to 1 and q = 0 downto 3 + when abs x mod 2 = 1 + when abs x mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(f, m, q, r, x) + for m = -3 to 0 and r = -3 to 2 and f = -3 to -3 + for x = 2 to 1 and q = 0 downto 3 + when abs x mod 2 = 1 + when abs x mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(x, z) for _ = 2 downto 0 and _ = -2 downto 3 and x = 3 to -3 for z = 1 to 3];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(b, v) for v in [|2; 3; 3; 0; -3; -2|] and b in [|2; -1; 2; 2; 0; 2; 0|]|];; +[%%expect{| +- : (int * int) array = +[|(2, 2); (-1, 2); (2, 2); (2, 2); (0, 2); (2, 2); (0, 2); (2, 3); (-1, 3); + (2, 3); (2, 3); (0, 3); (2, 3); (0, 3); (2, 3); (-1, 3); (2, 3); (2, 3); + (0, 3); (2, 3); (0, 3); (2, 0); (-1, 0); (2, 0); (2, 0); (0, 0); (2, 0); + (0, 0); (2, -3); (-1, -3); (2, -3); (2, -3); (0, -3); (2, -3); (0, -3); + (2, -2); (-1, -2); (2, -2); (2, -2); (0, -2); (2, -2); (0, -2)|] +|}];; + +[:(b, v) for v in [:2; 3; 3; 0; -3; -2:] and b in [:2; -1; 2; 2; 0; 2; 0:]:];; +[%%expect{| +- : (int * int) iarray = +[:(2, 2); (-1, 2); (2, 2); (2, 2); (0, 2); (2, 2); (0, 2); (2, 3); (-1, 3); + (2, 3); (2, 3); (0, 3); (2, 3); (0, 3); (2, 3); (-1, 3); (2, 3); (2, 3); + (0, 3); (2, 3); (0, 3); (2, 0); (-1, 0); (2, 0); (2, 0); (0, 0); (2, 0); + (0, 0); (2, -3); (-1, -3); (2, -3); (2, -3); (0, -3); (2, -3); (0, -3); + (2, -2); (-1, -2); (2, -2); (2, -2); (0, -2); (2, -2); (0, -2):] +|}];; + +[(a, b, e, p) + for p = 1 downto -1 + for _ = -3 downto 1 + when p < 0 + for a in [2] and e in [-1; 2] + for b = -3 downto 3];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(a, b, e, p) + for p = 1 downto -1 + for _ = -3 downto 1 + when p < 0 + for a in [|2|] and e in [|-1; 2|] + for b = -3 downto 3|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(a, b, e, p) + for p = 1 downto -1 + for _ = -3 downto 1 + when p < 0 + for a in [:2:] and e in [:-1; 2:] + for b = -3 downto 3:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(f, r, t, u, y) + for y = 2 downto -2 + for t in [-1; 1; -2] + for u = -1 downto -1 + for r = 2 to 0 and f = 3 to -2 + when abs r mod 2 = 1];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(f, r, t, u, y) + for y = 2 downto -2 + for t in [|-1; 1; -2|] + for u = -1 downto -1 + for r = 2 to 0 and f = 3 to -2 + when abs r mod 2 = 1|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(f, r, t, u, y) + for y = 2 downto -2 + for t in [:-1; 1; -2:] + for u = -1 downto -1 + for r = 2 to 0 and f = 3 to -2 + when abs r mod 2 = 1:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(e, o, s) + for o in [1; -3; 3] + for s in [-1; -3] + for e = 0 to 1 + when abs e mod 2 = 0];; +[%%expect{| +- : (int * int * int) list = +[(0, 1, -1); (0, 1, -3); (0, -3, -1); (0, -3, -3); (0, 3, -1); (0, 3, -3)] +|}];; + +[|(e, o, s) + for o in [|1; -3; 3|] + for s in [|-1; -3|] + for e = 0 to 1 + when abs e mod 2 = 0|];; +[%%expect{| +- : (int * int * int) array = +[|(0, 1, -1); (0, 1, -3); (0, -3, -1); (0, -3, -3); (0, 3, -1); (0, 3, -3)|] +|}];; + +[:(e, o, s) + for o in [:1; -3; 3:] + for s in [:-1; -3:] + for e = 0 to 1 + when abs e mod 2 = 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(0, 1, -1); (0, 1, -3); (0, -3, -1); (0, -3, -3); (0, 3, -1); (0, 3, -3):] +|}];; + +[(f, h, j, q, s, v, w) + for h in [0; 3; -1; 3; 0; 3; 0] + and v in [1] + for j = 0 to -3 + and q in [-3; -1; 2; -3; 3; h; -2] + and f in [v; 1; -2; 0] + and w in [3; 1; 2; 2; -1; 1; 1] + for s in [-3]];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(f, h, j, q, s, v, w) + for h in [|0; 3; -1; 3; 0; 3; 0|] + and v in [|1|] + for j = 0 to -3 + and q in [|-3; -1; 2; -3; 3; h; -2|] + and f in [|v; 1; -2; 0|] + and w in [|3; 1; 2; 2; -1; 1; 1|] + for s in [|-3|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(f, h, j, q, s, v, w) + for h in [:0; 3; -1; 3; 0; 3; 0:] + and v in [:1:] + for j = 0 to -3 + and q in [:-3; -1; 2; -3; 3; h; -2:] + and f in [:v; 1; -2; 0:] + and w in [:3; 1; 2; 2; -1; 1; 1:] + for s in [:-3:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(c, l, m, p, u, y) + for c in [-3; -2; 0; -2; 1; 0; -1] and p in [-2; 3; -2; 2; 0; 0] + for y = 1 to 0 + for _ in [2; -2; p; 2; 3] and m = p downto -1 + for l = 0 to -2 and u = 1 downto 1 + for _ = p to 0 and y = -2 downto 2];; +[%%expect{| +Lines 1-6, characters 0-38: +1 | [(c, l, m, p, u, y) +2 | for c in [-3; -2; 0; -2; 1; 0; -1] and p in [-2; 3; -2; 2; 0; 0] +3 | for y = 1 to 0 +4 | for _ in [2; -2; p; 2; 3] and m = p downto -1 +5 | for l = 0 to -2 and u = 1 downto 1 +6 | for _ = p to 0 and y = -2 downto 2].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(c, l, m, p, u, y) + for c in [|-3; -2; 0; -2; 1; 0; -1|] and p in [|-2; 3; -2; 2; 0; 0|] + for y = 1 to 0 + for _ in [|2; -2; p; 2; 3|] and m = p downto -1 + for l = 0 to -2 and u = 1 downto 1 + for _ = p to 0 and y = -2 downto 2|];; +[%%expect{| +Lines 1-6, characters 0-40: +1 | [|(c, l, m, p, u, y) +2 | for c in [|-3; -2; 0; -2; 1; 0; -1|] and p in [|-2; 3; -2; 2; 0; 0|] +3 | for y = 1 to 0 +4 | for _ in [|2; -2; p; 2; 3|] and m = p downto -1 +5 | for l = 0 to -2 and u = 1 downto 1 +6 | for _ = p to 0 and y = -2 downto 2|].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(c, l, m, p, u, y) + for c in [:-3; -2; 0; -2; 1; 0; -1:] and p in [:-2; 3; -2; 2; 0; 0:] + for y = 1 to 0 + for _ in [:2; -2; p; 2; 3:] and m = p downto -1 + for l = 0 to -2 and u = 1 downto 1 + for _ = p to 0 and y = -2 downto 2:];; +[%%expect{| +Lines 1-6, characters 0-40: +1 | [:(c, l, m, p, u, y) +2 | for c in [:-3; -2; 0; -2; 1; 0; -1:] and p in [:-2; 3; -2; 2; 0; 0:] +3 | for y = 1 to 0 +4 | for _ in [:2; -2; p; 2; 3:] and m = p downto -1 +5 | for l = 0 to -2 and u = 1 downto 1 +6 | for _ = p to 0 and y = -2 downto 2:].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(b, e) for e = 2 to -1 and b = -2 to -2];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(b, e) for e = 2 to -1 and b = -2 to -2|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(b, e) for e = 2 to -1 and b = -2 to -2:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[z for z = 0 to 3 when z > 0];; +[%%expect{| +- : int list = [1; 2; 3] +|}];; + +[|z for z = 0 to 3 when z > 0|];; +[%%expect{| +- : int array = [|1; 2; 3|] +|}];; + +[:z for z = 0 to 3 when z > 0:];; +[%%expect{| +- : int iarray = [:1; 2; 3:] +|}];; + +[(a, h) for h in [3; -2; -1] and _ in [] and a in [2; -3; 1; -2; 1]];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(a, h) for h in [|3; -2; -1|] and _ in [||] and a in [|2; -3; 1; -2; 1|]|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(a, h) for h in [:3; -2; -1:] and _ in [::] and a in [:2; -3; 1; -2; 1:]:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(b, k, p, r, x) + for x = -2 downto -3 and b = -3 to -1 + for p in [] and k in [-3; x; 0; -1; -2] + for r = -3 downto 0 + when abs b mod 2 = 1 + for r = 2 downto -2];; +[%%expect{| +Lines 1-6, characters 0-23: +1 | [(b, k, p, r, x) +2 | for x = -2 downto -3 and b = -3 to -1 +3 | for p in [] and k in [-3; x; 0; -1; -2] +4 | for r = -3 downto 0 +5 | when abs b mod 2 = 1 +6 | for r = 2 downto -2].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * 'a * int * int) list = [] +|}];; + +[|(b, k, p, r, x) + for x = -2 downto -3 and b = -3 to -1 + for p in [||] and k in [|-3; x; 0; -1; -2|] + for r = -3 downto 0 + when abs b mod 2 = 1 + for r = 2 downto -2|];; +[%%expect{| +Lines 1-6, characters 0-25: +1 | [|(b, k, p, r, x) +2 | for x = -2 downto -3 and b = -3 to -1 +3 | for p in [||] and k in [|-3; x; 0; -1; -2|] +4 | for r = -3 downto 0 +5 | when abs b mod 2 = 1 +6 | for r = 2 downto -2|].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * '_weak25 * int * int) array = [||] +|}];; + +[:(b, k, p, r, x) + for x = -2 downto -3 and b = -3 to -1 + for p in [::] and k in [:-3; x; 0; -1; -2:] + for r = -3 downto 0 + when abs b mod 2 = 1 + for r = 2 downto -2:];; +[%%expect{| +Lines 1-6, characters 0-25: +1 | [:(b, k, p, r, x) +2 | for x = -2 downto -3 and b = -3 to -1 +3 | for p in [::] and k in [:-3; x; 0; -1; -2:] +4 | for r = -3 downto 0 +5 | when abs b mod 2 = 1 +6 | for r = 2 downto -2:].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * 'a * int * int) iarray = [::] +|}];; + +[(f, h, l, n, r, t, u, v, w) + for w = 0 to 3 and h in [1] and v = 1 downto -3 + for f in [0; -3; 2; 3; v; w; v] and n = -2 downto 0 and r = -3 to -3 + for u in [3; 2; 3; 3; -1; -3] and n in [-3; 3; 1; f] and w in [-1; f] + for v in [0; -1; -3] and l = -2 to f and t = 0 downto f];; +[%%expect{| +Lines 1-5, characters 0-59: +1 | [(f, h, l, n, r, t, u, v, w) +2 | for w = 0 to 3 and h in [1] and v = 1 downto -3 +3 | for f in [0; -3; 2; 3; v; w; v] and n = -2 downto 0 and r = -3 to -3 +4 | for u in [3; 2; 3; 3; -1; -3] and n in [-3; 3; 1; f] and w in [-1; f] +5 | for v in [0; -1; -3] and l = -2 to f and t = 0 downto f].. +Warning 26 [unused-var]: unused variable n. +- : (int * int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(f, h, l, n, r, t, u, v, w) + for w = 0 to 3 and h in [|1|] and v = 1 downto -3 + for f in [|0; -3; 2; 3; v; w; v|] and n = -2 downto 0 and r = -3 to -3 + for u in [|3; 2; 3; 3; -1; -3|] and n in [|-3; 3; 1; f|] and w in [|-1; f|] + for v in [|0; -1; -3|] and l = -2 to f and t = 0 downto f|];; +[%%expect{| +Lines 1-5, characters 0-63: +1 | [|(f, h, l, n, r, t, u, v, w) +2 | for w = 0 to 3 and h in [|1|] and v = 1 downto -3 +3 | for f in [|0; -3; 2; 3; v; w; v|] and n = -2 downto 0 and r = -3 to -3 +4 | for u in [|3; 2; 3; 3; -1; -3|] and n in [|-3; 3; 1; f|] and w in [|-1; f|] +5 | for v in [|0; -1; -3|] and l = -2 to f and t = 0 downto f|].. +Warning 26 [unused-var]: unused variable n. +- : (int * int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(f, h, l, n, r, t, u, v, w) + for w = 0 to 3 and h in [:1:] and v = 1 downto -3 + for f in [:0; -3; 2; 3; v; w; v:] and n = -2 downto 0 and r = -3 to -3 + for u in [:3; 2; 3; 3; -1; -3:] and n in [:-3; 3; 1; f:] and w in [:-1; f:] + for v in [:0; -1; -3:] and l = -2 to f and t = 0 downto f:];; +[%%expect{| +Lines 1-5, characters 0-63: +1 | [:(f, h, l, n, r, t, u, v, w) +2 | for w = 0 to 3 and h in [:1:] and v = 1 downto -3 +3 | for f in [:0; -3; 2; 3; v; w; v:] and n = -2 downto 0 and r = -3 to -3 +4 | for u in [:3; 2; 3; 3; -1; -3:] and n in [:-3; 3; 1; f:] and w in [:-1; f:] +5 | for v in [:0; -1; -3:] and l = -2 to f and t = 0 downto f:].. +Warning 26 [unused-var]: unused variable n. +- : (int * int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, h, i, j, p, v) + for j in [1; 3; 3; 3; -1; -1; 1] + for i in [2] + for v = 1 to -1 and j = j to -1 + for h = -1 downto 2 and p in [1; 3; -3] and d in [-2; j; 0; i; 3; 0; -2]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(d, h, i, j, p, v) + for j in [|1; 3; 3; 3; -1; -1; 1|] + for i in [|2|] + for v = 1 to -1 + and j = j to -1 + for h = -1 downto 2 + and p in [|1; 3; -3|] + and d in [|-2; j; 0; i; 3; 0; -2|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(d, h, i, j, p, v) + for j in [:1; 3; 3; 3; -1; -1; 1:] + for i in [:2:] + for v = 1 to -1 + and j = j to -1 + for h = -1 downto 2 + and p in [:1; 3; -3:] + and d in [:-2; j; 0; i; 3; 0; -2:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, h, j, n, r, u, z) + for h in [2] + when h > 0 + for r = 3 downto h and z in [-3; 3; -1] and a = 1 to -1 + for j = 0 to 3 and u in [-3; 2; a] and n in [0; -2; 1; 2; 3; 0]];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, h, j, n, r, u, z) + for h in [|2|] + when h > 0 + for r = 3 downto h and z in [|-3; 3; -1|] and a = 1 to -1 + for j = 0 to 3 and u in [|-3; 2; a|] and n in [|0; -2; 1; 2; 3; 0|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, h, j, n, r, u, z) + for h in [:2:] + when h > 0 + for r = 3 downto h and z in [:-3; 3; -1:] and a = 1 to -1 + for j = 0 to 3 and u in [:-3; 2; a:] and n in [:0; -2; 1; 2; 3; 0:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, f, h, n, o, s, t, v, y) + for v in [-1; 2; -1; -2; 0; -2] and s = -3 to -2 + for t in [] and n = -1 to -2 and o in [0; -2; 2] and h in [1; v; 2; -2; 2; 1] + for e in [-3; -3; -2] and y = v to 2 and f in [1]];; +[%%expect{| +- : (int * int * int * int * int * int * 'a * int * int) list = [] +|}];; + +[|(p, t) for t in [|1; -2; 3|] and p = 1 downto 0|];; +[%%expect{| +- : (int * int) array = [|(1, 1); (0, 1); (1, -2); (0, -2); (1, 3); (0, 3)|] +|}];; + +[:(p, t) for t in [:1; -2; 3:] and p = 1 downto 0:];; +[%%expect{| +- : (int * int) iarray = [:(1, 1); (0, 1); (1, -2); (0, -2); (1, 3); (0, 3):] +|}];; + +[(g, m, o, p) + for m = 0 downto -1 and p in [3; -2; -2; -1] + when m <> 0 + for o = -2 to -1 and _ = 3 to -2 + for g = -1 downto -2 + for m = -3 to 3];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(g, m, o, p) + for m = 0 downto -1 and p in [|3; -2; -2; -1|] + when m <> 0 + for o = -2 to -1 and _ = 3 to -2 + for g = -1 downto -2 + for m = -3 to 3|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(g, m, o, p) + for m = 0 downto -1 and p in [:3; -2; -2; -1:] + when m <> 0 + for o = -2 to -1 and _ = 3 to -2 + for g = -1 downto -2 + for m = -3 to 3:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(a, l, n, t, v, w, x) + for l in [3; -1; 2; -2; 0; -2; 0] + for t = 0 downto -1 and a = -1 downto -1 + for n = 0 to -3 and v = -3 downto 2 + for x in [3; 1; 3] and w in [] + for _ = 0 downto -2];; +[%%expect{| +- : (int * int * int * int * int * 'a * int) list = [] +|}];; + +[|(a, l, n, t, v, w, x) + for l in [|3; -1; 2; -2; 0; -2; 0|] + for t = 0 downto -1 and a = -1 downto -1 + for n = 0 to -3 and v = -3 downto 2 + for x in [|3; 1; 3|] and w in [||] + for _ = 0 downto -2|];; +[%%expect{| +- : (int * int * int * int * int * '_weak26 * int) array = [||] +|}];; + +[:(a, l, n, t, v, w, x) + for l in [:3; -1; 2; -2; 0; -2; 0:] + for t = 0 downto -1 and a = -1 downto -1 + for n = 0 to -3 and v = -3 downto 2 + for x in [:3; 1; 3:] and w in [::] + for _ = 0 downto -2:];; +[%%expect{| +- : (int * int * int * int * int * 'a * int) iarray = [::] +|}];; + +[(a, f, j, k, z) + for z in [-3; 1; -2; 1; 1] + for j in [1; -2; 3; 2; -2; -1] and k in [2; 0; -2; 0; -3] and f = -1 downto 0 + when z <> 0 + for a = 3 downto -2];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(a, b, g, s, v) + for a = -3 to -1 + for s in [|2; a; a; -2; 2; 3|] + and b = 2 to a + and g in [|-1; -3; -1; 0|] + and v = a downto 2 + when a > 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(a, b, g, s, v) + for a = -3 to -1 + for s in [:2; a; a; -2; 2; 3:] + and b = 2 to a + and g in [:-1; -3; -1; 0:] + and v = a downto 2 + when a > 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(b, d, e, n) + for b = -3 to 3 and d = -2 downto -3 + for e = -1 to 1 and n in [2] + when abs e mod 2 = 1];; +[%%expect{| +- : (int * int * int * int) list = +[(-3, -2, -1, 2); (-3, -2, 1, 2); (-3, -3, -1, 2); (-3, -3, 1, 2); + (-2, -2, -1, 2); (-2, -2, 1, 2); (-2, -3, -1, 2); (-2, -3, 1, 2); + (-1, -2, -1, 2); (-1, -2, 1, 2); (-1, -3, -1, 2); (-1, -3, 1, 2); + (0, -2, -1, 2); (0, -2, 1, 2); (0, -3, -1, 2); (0, -3, 1, 2); + (1, -2, -1, 2); (1, -2, 1, 2); (1, -3, -1, 2); (1, -3, 1, 2); + (2, -2, -1, 2); (2, -2, 1, 2); (2, -3, -1, 2); (2, -3, 1, 2); + (3, -2, -1, 2); (3, -2, 1, 2); (3, -3, -1, 2); (3, -3, 1, 2)] +|}];; + +[|(b, d, e, n) + for b = -3 to 3 and d = -2 downto -3 + for e = -1 to 1 and n in [|2|] + when abs e mod 2 = 1|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-3, -2, -1, 2); (-3, -2, 1, 2); (-3, -3, -1, 2); (-3, -3, 1, 2); + (-2, -2, -1, 2); (-2, -2, 1, 2); (-2, -3, -1, 2); (-2, -3, 1, 2); + (-1, -2, -1, 2); (-1, -2, 1, 2); (-1, -3, -1, 2); (-1, -3, 1, 2); + (0, -2, -1, 2); (0, -2, 1, 2); (0, -3, -1, 2); (0, -3, 1, 2); + (1, -2, -1, 2); (1, -2, 1, 2); (1, -3, -1, 2); (1, -3, 1, 2); + (2, -2, -1, 2); (2, -2, 1, 2); (2, -3, -1, 2); (2, -3, 1, 2); + (3, -2, -1, 2); (3, -2, 1, 2); (3, -3, -1, 2); (3, -3, 1, 2)|] +|}];; + +[:(b, d, e, n) + for b = -3 to 3 and d = -2 downto -3 + for e = -1 to 1 and n in [:2:] + when abs e mod 2 = 1:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-3, -2, -1, 2); (-3, -2, 1, 2); (-3, -3, -1, 2); (-3, -3, 1, 2); + (-2, -2, -1, 2); (-2, -2, 1, 2); (-2, -3, -1, 2); (-2, -3, 1, 2); + (-1, -2, -1, 2); (-1, -2, 1, 2); (-1, -3, -1, 2); (-1, -3, 1, 2); + (0, -2, -1, 2); (0, -2, 1, 2); (0, -3, -1, 2); (0, -3, 1, 2); + (1, -2, -1, 2); (1, -2, 1, 2); (1, -3, -1, 2); (1, -3, 1, 2); + (2, -2, -1, 2); (2, -2, 1, 2); (2, -3, -1, 2); (2, -3, 1, 2); + (3, -2, -1, 2); (3, -2, 1, 2); (3, -3, -1, 2); (3, -3, 1, 2):] +|}];; + +[(a, d, s, t, w) + for _ in [-3] and t in [-2] and w in [1; -2; -1; 1] and d = 0 downto -2 + for s in [w; -2] and a = 3 to 1];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(h, m, u, x) + for x = 2 to 3 + for u in [|3; 3; 2; 3; 1; 1|] + when u > 0 + for m = 0 to -2 and h in [|0; 1|] + when m < 0|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(h, m, u, x) + for x = 2 to 3 + for u in [:3; 3; 2; 3; 1; 1:] + when u > 0 + for m = 0 to -2 and h in [:0; 1:] + when m < 0:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(i, m, o, x) + for i = -3 to 2 + for x = -3 to -2 and m = -1 downto 0 and i in [3; -1; -2] and o = 1 to -1];; +[%%expect{| +Lines 1-3, characters 0-77: +1 | [(i, m, o, x) +2 | for i = -3 to 2 +3 | for x = -3 to -2 and m = -1 downto 0 and i in [3; -1; -2] and o = 1 to -1].. +Warning 26 [unused-var]: unused variable i. +- : (int * int * int * int) list = [] +|}];; + +[|(d, o, u) + for u = 2 downto -3 and d = -1 downto -1 and o in [|-1; -3; -1; -3|]|];; +[%%expect{| +- : (int * int * int) array = +[|(-1, -1, 2); (-1, -3, 2); (-1, -1, 2); (-1, -3, 2); (-1, -1, 1); + (-1, -3, 1); (-1, -1, 1); (-1, -3, 1); (-1, -1, 0); (-1, -3, 0); + (-1, -1, 0); (-1, -3, 0); (-1, -1, -1); (-1, -3, -1); (-1, -1, -1); + (-1, -3, -1); (-1, -1, -2); (-1, -3, -2); (-1, -1, -2); (-1, -3, -2); + (-1, -1, -3); (-1, -3, -3); (-1, -1, -3); (-1, -3, -3)|] +|}];; + +[:(d, o, u) + for u = 2 downto -3 and d = -1 downto -1 and o in [:-1; -3; -1; -3:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-1, -1, 2); (-1, -3, 2); (-1, -1, 2); (-1, -3, 2); (-1, -1, 1); + (-1, -3, 1); (-1, -1, 1); (-1, -3, 1); (-1, -1, 0); (-1, -3, 0); + (-1, -1, 0); (-1, -3, 0); (-1, -1, -1); (-1, -3, -1); (-1, -1, -1); + (-1, -3, -1); (-1, -1, -2); (-1, -3, -2); (-1, -1, -2); (-1, -3, -2); + (-1, -1, -3); (-1, -3, -3); (-1, -1, -3); (-1, -3, -3):] +|}];; + +[(a, d, p, w, y) + for w in [2; -1; -1; 2; 3; 3; -1] + for d = -2 to 1 and a in [0; 2; -3; -2; 3; -1; 1] and y = 1 to w + for a in [-3; 2; 2; -1; 1] and p = -1 to 0 + for w = -2 downto 3];; +[%%expect{| +Line 3, characters 23-24: +3 | for d = -2 to 1 and a in [0; 2; -3; -2; 3; -1; 1] and y = 1 to w + ^ +Warning 26 [unused-var]: unused variable a. +- : (int * int * int * int * int) list = [] +|}];; + +[|(a, d, p, w, y) + for w in [|2; -1; -1; 2; 3; 3; -1|] + for d = -2 to 1 and a in [|0; 2; -3; -2; 3; -1; 1|] and y = 1 to w + for a in [|-3; 2; 2; -1; 1|] and p = -1 to 0 + for w = -2 downto 3|];; +[%%expect{| +Line 3, characters 24-25: +3 | for d = -2 to 1 and a in [|0; 2; -3; -2; 3; -1; 1|] and y = 1 to w + ^ +Warning 26 [unused-var]: unused variable a. +- : (int * int * int * int * int) array = [||] +|}];; + +[:(a, d, p, w, y) + for w in [:2; -1; -1; 2; 3; 3; -1:] + for d = -2 to 1 and a in [:0; 2; -3; -2; 3; -1; 1:] and y = 1 to w + for a in [:-3; 2; 2; -1; 1:] and p = -1 to 0 + for w = -2 downto 3:];; +[%%expect{| +Line 3, characters 24-25: +3 | for d = -2 to 1 and a in [:0; 2; -3; -2; 3; -1; 1:] and y = 1 to w + ^ +Warning 26 [unused-var]: unused variable a. +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(j, o, t, v) + for o = 1 downto -1 + and t in [3; -1; 0; 2] + and v in [-2; 3; 3] + and j in [-3; -2] + when abs j mod 2 = 1 + when v <> 0];; +[%%expect{| +- : (int * int * int * int) list = +[(-3, 1, 3, -2); (-3, 1, 3, 3); (-3, 1, 3, 3); (-3, 1, -1, -2); + (-3, 1, -1, 3); (-3, 1, -1, 3); (-3, 1, 0, -2); (-3, 1, 0, 3); + (-3, 1, 0, 3); (-3, 1, 2, -2); (-3, 1, 2, 3); (-3, 1, 2, 3); (-3, 0, 3, -2); + (-3, 0, 3, 3); (-3, 0, 3, 3); (-3, 0, -1, -2); (-3, 0, -1, 3); + (-3, 0, -1, 3); (-3, 0, 0, -2); (-3, 0, 0, 3); (-3, 0, 0, 3); + (-3, 0, 2, -2); (-3, 0, 2, 3); (-3, 0, 2, 3); (-3, -1, 3, -2); + (-3, -1, 3, 3); (-3, -1, 3, 3); (-3, -1, -1, -2); (-3, -1, -1, 3); + (-3, -1, -1, 3); (-3, -1, 0, -2); (-3, -1, 0, 3); (-3, -1, 0, 3); + (-3, -1, 2, -2); (-3, -1, 2, 3); (-3, -1, 2, 3)] +|}];; + +[|(j, o, t, v) + for o = 1 downto -1 + and t in [|3; -1; 0; 2|] + and v in [|-2; 3; 3|] + and j in [|-3; -2|] + when abs j mod 2 = 1 + when v <> 0|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-3, 1, 3, -2); (-3, 1, 3, 3); (-3, 1, 3, 3); (-3, 1, -1, -2); + (-3, 1, -1, 3); (-3, 1, -1, 3); (-3, 1, 0, -2); (-3, 1, 0, 3); + (-3, 1, 0, 3); (-3, 1, 2, -2); (-3, 1, 2, 3); (-3, 1, 2, 3); + (-3, 0, 3, -2); (-3, 0, 3, 3); (-3, 0, 3, 3); (-3, 0, -1, -2); + (-3, 0, -1, 3); (-3, 0, -1, 3); (-3, 0, 0, -2); (-3, 0, 0, 3); + (-3, 0, 0, 3); (-3, 0, 2, -2); (-3, 0, 2, 3); (-3, 0, 2, 3); + (-3, -1, 3, -2); (-3, -1, 3, 3); (-3, -1, 3, 3); (-3, -1, -1, -2); + (-3, -1, -1, 3); (-3, -1, -1, 3); (-3, -1, 0, -2); (-3, -1, 0, 3); + (-3, -1, 0, 3); (-3, -1, 2, -2); (-3, -1, 2, 3); (-3, -1, 2, 3)|] +|}];; + +[:(j, o, t, v) + for o = 1 downto -1 + and t in [:3; -1; 0; 2:] + and v in [:-2; 3; 3:] + and j in [:-3; -2:] + when abs j mod 2 = 1 + when v <> 0:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-3, 1, 3, -2); (-3, 1, 3, 3); (-3, 1, 3, 3); (-3, 1, -1, -2); + (-3, 1, -1, 3); (-3, 1, -1, 3); (-3, 1, 0, -2); (-3, 1, 0, 3); + (-3, 1, 0, 3); (-3, 1, 2, -2); (-3, 1, 2, 3); (-3, 1, 2, 3); + (-3, 0, 3, -2); (-3, 0, 3, 3); (-3, 0, 3, 3); (-3, 0, -1, -2); + (-3, 0, -1, 3); (-3, 0, -1, 3); (-3, 0, 0, -2); (-3, 0, 0, 3); + (-3, 0, 0, 3); (-3, 0, 2, -2); (-3, 0, 2, 3); (-3, 0, 2, 3); + (-3, -1, 3, -2); (-3, -1, 3, 3); (-3, -1, 3, 3); (-3, -1, -1, -2); + (-3, -1, -1, 3); (-3, -1, -1, 3); (-3, -1, 0, -2); (-3, -1, 0, 3); + (-3, -1, 0, 3); (-3, -1, 2, -2); (-3, -1, 2, 3); (-3, -1, 2, 3):] +|}];; + +[(h, l, o, q, u) + for l = -2 to 2 + for h = 1 to 3 + for _ = h to 2 and u in [1; -2] + for q in [] + for o in [0; 2; 0; -2]];; +[%%expect{| +- : (int * int * int * 'a * int) list = [] +|}];; + +[|(h, l, o, q, u) + for l = -2 to 2 + for h = 1 to 3 + for _ = h to 2 and u in [|1; -2|] + for q in [||] + for o in [|0; 2; 0; -2|]|];; +[%%expect{| +- : (int * int * int * '_weak27 * int) array = [||] +|}];; + +[:(h, l, o, q, u) + for l = -2 to 2 + for h = 1 to 3 + for _ = h to 2 and u in [:1; -2:] + for q in [::] + for o in [:0; 2; 0; -2:]:];; +[%%expect{| +- : (int * int * int * 'a * int) iarray = [::] +|}];; + +[(e, m, o, q, u) + for q in [-1; -3; 3; 1; 0; 2] + for o in [] and e = -2 to 1 + for u in [3; -3; -1; q] and m = -3 to 3];; +[%%expect{| +- : (int * int * 'a * int * int) list = [] +|}];; + +[|(e, m, o, q, u) + for q in [|-1; -3; 3; 1; 0; 2|] + for o in [||] and e = -2 to 1 + for u in [|3; -3; -1; q|] and m = -3 to 3|];; +[%%expect{| +- : (int * int * '_weak28 * int * int) array = [||] +|}];; + +[:(e, m, o, q, u) + for q in [:-1; -3; 3; 1; 0; 2:] + for o in [::] and e = -2 to 1 + for u in [:3; -3; -1; q:] and m = -3 to 3:];; +[%%expect{| +- : (int * int * 'a * int * int) iarray = [::] +|}];; + +[(n, t) for n = -1 to 0 for t = 1 downto -1];; +[%%expect{| +- : (int * int) list = [(-1, 1); (-1, 0); (-1, -1); (0, 1); (0, 0); (0, -1)] +|}];; + +[|(n, t) for n = -1 to 0 for t = 1 downto -1|];; +[%%expect{| +- : (int * int) array = +[|(-1, 1); (-1, 0); (-1, -1); (0, 1); (0, 0); (0, -1)|] +|}];; + +[:(n, t) for n = -1 to 0 for t = 1 downto -1:];; +[%%expect{| +- : (int * int) iarray = +[:(-1, 1); (-1, 0); (-1, -1); (0, 1); (0, 0); (0, -1):] +|}];; + +[(q, t) for t in [1; -1; 1] and q = 2 downto 3];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(q, t) for t in [|1; -1; 1|] and q = 2 downto 3|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(q, t) for t in [:1; -1; 1:] and q = 2 downto 3:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(d, n, y) for n = 0 to 1 and d in [] and y = 0 downto 1];; +[%%expect{| +- : ('a * int * int) list = [] +|}];; + +[|(d, n, y) for n = 0 to 1 and d in [||] and y = 0 downto 1|];; +[%%expect{| +- : ('_weak29 * int * int) array = [||] +|}];; + +[:(d, n, y) for n = 0 to 1 and d in [::] and y = 0 downto 1:];; +[%%expect{| +- : ('a * int * int) iarray = [::] +|}];; + +[(a, m) for a = 2 to 1 for m = -3 to a];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(a, m) for a = 2 to 1 for m = -3 to a|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(a, m) for a = 2 to 1 for m = -3 to a:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(c, l, p, w, y) + for l = 3 to 3 + when l < 0 + for y in [l; -3; -3; l] and w in [-2] + for _ = -2 downto -2 and c in [2; -3] + for p = -1 to 2];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(c, l, p, w, y) + for l = 3 to 3 + when l < 0 + for y in [|l; -3; -3; l|] and w in [|-2|] + for _ = -2 downto -2 and c in [|2; -3|] + for p = -1 to 2|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(c, l, p, w, y) + for l = 3 to 3 + when l < 0 + for y in [:l; -3; -3; l:] and w in [:-2:] + for _ = -2 downto -2 and c in [:2; -3:] + for p = -1 to 2:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(a, l, t, u, w) + for w in [0; 3; -1; -1; -3; 3; 2] and a in [2; 3; 3; 3; 2; 3; 3] + for l in [-3; 3] and u in [] + for t = -3 to 1 and _ in [a; 1; w; 1]];; +[%%expect{| +- : (int * int * int * 'a * int) list = [] +|}];; + +[|(a, l, t, u, w) + for w in [|0; 3; -1; -1; -3; 3; 2|] and a in [|2; 3; 3; 3; 2; 3; 3|] + for l in [|-3; 3|] and u in [||] + for t = -3 to 1 and _ in [|a; 1; w; 1|]|];; +[%%expect{| +- : (int * int * int * '_weak30 * int) array = [||] +|}];; + +[:(a, l, t, u, w) + for w in [:0; 3; -1; -1; -3; 3; 2:] and a in [:2; 3; 3; 3; 2; 3; 3:] + for l in [:-3; 3:] and u in [::] + for t = -3 to 1 and _ in [:a; 1; w; 1:]:];; +[%%expect{| +- : (int * int * int * 'a * int) iarray = [::] +|}];; + +[(b, m, s) + for m in [3; 1; -1] + when m < 0 + for _ in [0] and s = 1 to 2 + for s = 2 downto -3 and m = 3 to -1 and b = -3 to 3];; +[%%expect{| +Lines 1-5, characters 0-55: +1 | [(b, m, s) +2 | for m in [3; 1; -1] +3 | when m < 0 +4 | for _ in [0] and s = 1 to 2 +5 | for s = 2 downto -3 and m = 3 to -1 and b = -3 to 3].. +Warning 26 [unused-var]: unused variable s. +- : (int * int * int) list = [] +|}];; + +[|(b, m, s) + for m in [|3; 1; -1|] + when m < 0 + for _ in [|0|] and s = 1 to 2 + for s = 2 downto -3 and m = 3 to -1 and b = -3 to 3|];; +[%%expect{| +Lines 1-5, characters 0-57: +1 | [|(b, m, s) +2 | for m in [|3; 1; -1|] +3 | when m < 0 +4 | for _ in [|0|] and s = 1 to 2 +5 | for s = 2 downto -3 and m = 3 to -1 and b = -3 to 3|].. +Warning 26 [unused-var]: unused variable s. +- : (int * int * int) array = [||] +|}];; + +[:(b, m, s) + for m in [:3; 1; -1:] + when m < 0 + for _ in [:0:] and s = 1 to 2 + for s = 2 downto -3 and m = 3 to -1 and b = -3 to 3:];; +[%%expect{| +Lines 1-5, characters 0-57: +1 | [:(b, m, s) +2 | for m in [:3; 1; -1:] +3 | when m < 0 +4 | for _ in [:0:] and s = 1 to 2 +5 | for s = 2 downto -3 and m = 3 to -1 and b = -3 to 3:].. +Warning 26 [unused-var]: unused variable s. +- : (int * int * int) iarray = [::] +|}];; + +[(c, g, j, t, x, y) + for j in [-3; 0; -1; -3; 3; 2; -3] and t in [3] + for c = 0 downto 3 and y = 3 to 3 + for x = -2 to 2 and y = -1 downto -2 + for j in [2; -2; -3; 1; x; 0] and g = -3 to -2 + for y in [c; 1]];; +[%%expect{| +Line 2, characters 7-8: +2 | for j in [-3; 0; -1; -3; 3; 2; -3] and t in [3] + ^ +Warning 26 [unused-var]: unused variable j. +Lines 1-6, characters 0-19: +1 | [(c, g, j, t, x, y) +2 | for j in [-3; 0; -1; -3; 3; 2; -3] and t in [3] +3 | for c = 0 downto 3 and y = 3 to 3 +4 | for x = -2 to 2 and y = -1 downto -2 +5 | for j in [2; -2; -3; 1; x; 0] and g = -3 to -2 +6 | for y in [c; 1]].. +Warning 26 [unused-var]: unused variable y. +Lines 1-6, characters 0-19: +1 | [(c, g, j, t, x, y) +2 | for j in [-3; 0; -1; -3; 3; 2; -3] and t in [3] +3 | for c = 0 downto 3 and y = 3 to 3 +4 | for x = -2 to 2 and y = -1 downto -2 +5 | for j in [2; -2; -3; 1; x; 0] and g = -3 to -2 +6 | for y in [c; 1]].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(c, g, j, t, x, y) + for j in [|-3; 0; -1; -3; 3; 2; -3|] and t in [|3|] + for c = 0 downto 3 and y = 3 to 3 + for x = -2 to 2 and y = -1 downto -2 + for j in [|2; -2; -3; 1; x; 0|] and g = -3 to -2 + for y in [|c; 1|]|];; +[%%expect{| +Line 2, characters 8-9: +2 | for j in [|-3; 0; -1; -3; 3; 2; -3|] and t in [|3|] + ^ +Warning 26 [unused-var]: unused variable j. +Lines 1-6, characters 0-23: +1 | [|(c, g, j, t, x, y) +2 | for j in [|-3; 0; -1; -3; 3; 2; -3|] and t in [|3|] +3 | for c = 0 downto 3 and y = 3 to 3 +4 | for x = -2 to 2 and y = -1 downto -2 +5 | for j in [|2; -2; -3; 1; x; 0|] and g = -3 to -2 +6 | for y in [|c; 1|]|].. +Warning 26 [unused-var]: unused variable y. +Lines 1-6, characters 0-23: +1 | [|(c, g, j, t, x, y) +2 | for j in [|-3; 0; -1; -3; 3; 2; -3|] and t in [|3|] +3 | for c = 0 downto 3 and y = 3 to 3 +4 | for x = -2 to 2 and y = -1 downto -2 +5 | for j in [|2; -2; -3; 1; x; 0|] and g = -3 to -2 +6 | for y in [|c; 1|]|].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(c, g, j, t, x, y) + for j in [:-3; 0; -1; -3; 3; 2; -3:] and t in [:3:] + for c = 0 downto 3 and y = 3 to 3 + for x = -2 to 2 and y = -1 downto -2 + for j in [:2; -2; -3; 1; x; 0:] and g = -3 to -2 + for y in [:c; 1:]:];; +[%%expect{| +Line 2, characters 8-9: +2 | for j in [:-3; 0; -1; -3; 3; 2; -3:] and t in [:3:] + ^ +Warning 26 [unused-var]: unused variable j. +Lines 1-6, characters 0-23: +1 | [:(c, g, j, t, x, y) +2 | for j in [:-3; 0; -1; -3; 3; 2; -3:] and t in [:3:] +3 | for c = 0 downto 3 and y = 3 to 3 +4 | for x = -2 to 2 and y = -1 downto -2 +5 | for j in [:2; -2; -3; 1; x; 0:] and g = -3 to -2 +6 | for y in [:c; 1:]:].. +Warning 26 [unused-var]: unused variable y. +Lines 1-6, characters 0-23: +1 | [:(c, g, j, t, x, y) +2 | for j in [:-3; 0; -1; -3; 3; 2; -3:] and t in [:3:] +3 | for c = 0 downto 3 and y = 3 to 3 +4 | for x = -2 to 2 and y = -1 downto -2 +5 | for j in [:2; -2; -3; 1; x; 0:] and g = -3 to -2 +6 | for y in [:c; 1:]:].. +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, d) + for d in [-2; 2; 3] and a in [-1; 0; 2; 0; 1; 0; -2] + when d > 0 + when abs d mod 2 = 0];; +[%%expect{| +- : (int * int) list = +[(-1, 2); (0, 2); (2, 2); (0, 2); (1, 2); (0, 2); (-2, 2)] +|}];; + +[|(a, d) + for d in [|-2; 2; 3|] and a in [|-1; 0; 2; 0; 1; 0; -2|] + when d > 0 + when abs d mod 2 = 0|];; +[%%expect{| +- : (int * int) array = +[|(-1, 2); (0, 2); (2, 2); (0, 2); (1, 2); (0, 2); (-2, 2)|] +|}];; + +[:(a, d) + for d in [:-2; 2; 3:] and a in [:-1; 0; 2; 0; 1; 0; -2:] + when d > 0 + when abs d mod 2 = 0:];; +[%%expect{| +- : (int * int) iarray = +[:(-1, 2); (0, 2); (2, 2); (0, 2); (1, 2); (0, 2); (-2, 2):] +|}];; + +[(e, o, p, r) + for e = 3 downto 2 + when e <> 0 + when abs e mod 2 = 0 + for p = 3 downto -3 and o = 1 downto e + for r = 1 downto -1];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(e, o, p, r) + for e = 3 downto 2 + when e <> 0 + when abs e mod 2 = 0 + for p = 3 downto -3 and o = 1 downto e + for r = 1 downto -1|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(e, o, p, r) + for e = 3 downto 2 + when e <> 0 + when abs e mod 2 = 0 + for p = 3 downto -3 and o = 1 downto e + for r = 1 downto -1:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(c, i, o, s, u, y) + for y in [1; 1; 2; -2; 0; -2] + for c = 0 downto y and o in [y] + for i in [] + for s in [1; 2; 3; 0; 0; -1; i] and u = 3 downto -3];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(c, i, o, s, u, y) + for y in [|1; 1; 2; -2; 0; -2|] + for c = 0 downto y and o in [|y|] + for i in [||] + for s in [|1; 2; 3; 0; 0; -1; i|] and u = 3 downto -3|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(c, i, o, s, u, y) + for y in [:1; 1; 2; -2; 0; -2:] + for c = 0 downto y and o in [:y:] + for i in [::] + for s in [:1; 2; 3; 0; 0; -1; i:] and u = 3 downto -3:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(b, c, p, q, r, x) + for b in [3; 1] + for r in [3; 0; -2; 2; 1; 3] and x in [] and p = -1 to -3 and c in [] + for r in [b; 3; 0; -2; 1; -1; 0] and q = -1 to 3];; +[%%expect{| +Line 3, characters 7-8: +3 | for r in [3; 0; -2; 2; 1; 3] and x in [] and p = -1 to -3 and c in [] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * 'a * int * int * int * 'b) list = [] +|}];; + +[|(b, c, p, q, r, x) + for b in [|3; 1|] + for r in [|3; 0; -2; 2; 1; 3|] and x in [||] and p = -1 to -3 and c in [||] + for r in [|b; 3; 0; -2; 1; -1; 0|] and q = -1 to 3|];; +[%%expect{| +Line 3, characters 8-9: +3 | for r in [|3; 0; -2; 2; 1; 3|] and x in [||] and p = -1 to -3 and c in [||] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * '_weak31 * int * int * int * '_weak32) array = [||] +|}];; + +[:(b, c, p, q, r, x) + for b in [:3; 1:] + for r in [:3; 0; -2; 2; 1; 3:] and x in [::] and p = -1 to -3 and c in [::] + for r in [:b; 3; 0; -2; 1; -1; 0:] and q = -1 to 3:];; +[%%expect{| +Line 3, characters 8-9: +3 | for r in [:3; 0; -2; 2; 1; 3:] and x in [::] and p = -1 to -3 and c in [::] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * 'a * int * int * int * 'b) iarray = [::] +|}];; + +[(e, o, q, w, y) + for y in [1; 1; -2; 1; -1; -1] + and o in [0] + for e = -1 to y + and o = 2 to y + and q in [1; -1; 0] + and _ in [0; 3] + and w = 2 to o];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(e, o, q, w, y) + for y in [|1; 1; -2; 1; -1; -1|] + and o in [|0|] + for e = -1 to y + and o = 2 to y + and q in [|1; -1; 0|] + and _ in [|0; 3|] + and w = 2 to o|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(e, o, q, w, y) + for y in [:1; 1; -2; 1; -1; -1:] + and o in [:0:] + for e = -1 to y + and o = 2 to y + and q in [:1; -1; 0:] + and _ in [:0; 3:] + and w = 2 to o:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(n, o, q, t, w, z) + for z in [-1; 2; 0] and q = -3 to -3 + for q in [3] and w = 1 downto z + for o = -1 downto 2 and n = 0 to 0 + for t = -2 to -3 and o = -3 to 1];; +[%%expect{| +Lines 1-5, characters 0-36: +1 | [(n, o, q, t, w, z) +2 | for z in [-1; 2; 0] and q = -3 to -3 +3 | for q in [3] and w = 1 downto z +4 | for o = -1 downto 2 and n = 0 to 0 +5 | for t = -2 to -3 and o = -3 to 1].. +Warning 26 [unused-var]: unused variable q. +Lines 1-5, characters 0-36: +1 | [(n, o, q, t, w, z) +2 | for z in [-1; 2; 0] and q = -3 to -3 +3 | for q in [3] and w = 1 downto z +4 | for o = -1 downto 2 and n = 0 to 0 +5 | for t = -2 to -3 and o = -3 to 1].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(n, o, q, t, w, z) + for z in [|-1; 2; 0|] and q = -3 to -3 + for q in [|3|] and w = 1 downto z + for o = -1 downto 2 and n = 0 to 0 + for t = -2 to -3 and o = -3 to 1|];; +[%%expect{| +Lines 1-5, characters 0-38: +1 | [|(n, o, q, t, w, z) +2 | for z in [|-1; 2; 0|] and q = -3 to -3 +3 | for q in [|3|] and w = 1 downto z +4 | for o = -1 downto 2 and n = 0 to 0 +5 | for t = -2 to -3 and o = -3 to 1|].. +Warning 26 [unused-var]: unused variable q. +Lines 1-5, characters 0-38: +1 | [|(n, o, q, t, w, z) +2 | for z in [|-1; 2; 0|] and q = -3 to -3 +3 | for q in [|3|] and w = 1 downto z +4 | for o = -1 downto 2 and n = 0 to 0 +5 | for t = -2 to -3 and o = -3 to 1|].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(n, o, q, t, w, z) + for z in [:-1; 2; 0:] and q = -3 to -3 + for q in [:3:] and w = 1 downto z + for o = -1 downto 2 and n = 0 to 0 + for t = -2 to -3 and o = -3 to 1:];; +[%%expect{| +Lines 1-5, characters 0-38: +1 | [:(n, o, q, t, w, z) +2 | for z in [:-1; 2; 0:] and q = -3 to -3 +3 | for q in [:3:] and w = 1 downto z +4 | for o = -1 downto 2 and n = 0 to 0 +5 | for t = -2 to -3 and o = -3 to 1:].. +Warning 26 [unused-var]: unused variable q. +Lines 1-5, characters 0-38: +1 | [:(n, o, q, t, w, z) +2 | for z in [:-1; 2; 0:] and q = -3 to -3 +3 | for q in [:3:] and w = 1 downto z +4 | for o = -1 downto 2 and n = 0 to 0 +5 | for t = -2 to -3 and o = -3 to 1:].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[n for n = -1 downto 3 when n < 0 when n < 0 when abs n mod 2 = 0];; +[%%expect{| +- : int list = [] +|}];; + +[|n for n = -1 downto 3 when n < 0 when n < 0 when abs n mod 2 = 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:n for n = -1 downto 3 when n < 0 when n < 0 when abs n mod 2 = 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(i, k) for k in [-3; 1] and i = -1 to -2 and _ = 1 downto -3];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(i, k) for k in [|-3; 1|] and i = -1 to -2 and _ = 1 downto -3|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(i, k) for k in [:-3; 1:] and i = -1 to -2 and _ = 1 downto -3:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(e, f, p, v, w) + for f = -2 to 3 and v = 1 to 2 + for w in [-3; f; -2] + for p = -2 to 3 and e = 0 to -2];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(e, f, p, v, w) + for f = -2 to 3 and v = 1 to 2 + for w in [|-3; f; -2|] + for p = -2 to 3 and e = 0 to -2|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(e, f, p, v, w) + for f = -2 to 3 and v = 1 to 2 + for w in [:-3; f; -2:] + for p = -2 to 3 and e = 0 to -2:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(a, d, g, s, t) + for a in [0; -3; 2; 3; 3] and s in [0; 3; 3] and t in [0] + when abs s mod 2 = 1 + for s in [] + for d in [3; -2; 2; 3; 3] and g = 3 to 3];; +[%%expect{| +- : (int * int * int * 'a * int) list = [] +|}];; + +[|(a, d, g, s, t) + for a in [|0; -3; 2; 3; 3|] and s in [|0; 3; 3|] and t in [|0|] + when abs s mod 2 = 1 + for s in [||] + for d in [|3; -2; 2; 3; 3|] and g = 3 to 3|];; +[%%expect{| +- : (int * int * int * '_weak33 * int) array = [||] +|}];; + +[:(a, d, g, s, t) + for a in [:0; -3; 2; 3; 3:] and s in [:0; 3; 3:] and t in [:0:] + when abs s mod 2 = 1 + for s in [::] + for d in [:3; -2; 2; 3; 3:] and g = 3 to 3:];; +[%%expect{| +- : (int * int * int * 'a * int) iarray = [::] +|}];; + +[(n, v) for n in [-2] when abs n mod 2 = 0 for v = 3 to 0];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(n, v) for n in [|-2|] when abs n mod 2 = 0 for v = 3 to 0|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(n, v) for n in [:-2:] when abs n mod 2 = 0 for v = 3 to 0:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(c, f, z) for f = 1 downto -2 and c = -3 to 0 and z in [] when f > 0];; +[%%expect{| +- : (int * int * 'a) list = [] +|}];; + +[|(c, f, z) for f = 1 downto -2 and c = -3 to 0 and z in [||] when f > 0|];; +[%%expect{| +- : (int * int * '_weak34) array = [||] +|}];; + +[:(c, f, z) for f = 1 downto -2 and c = -3 to 0 and z in [::] when f > 0:];; +[%%expect{| +- : (int * int * 'a) iarray = [::] +|}];; + +[(p, q, u) for q = -2 downto -3 and p in [2; -3; -2; 0; 2] and u in [1; -2]];; +[%%expect{| +- : (int * int * int) list = +[(2, -2, 1); (2, -2, -2); (-3, -2, 1); (-3, -2, -2); (-2, -2, 1); + (-2, -2, -2); (0, -2, 1); (0, -2, -2); (2, -2, 1); (2, -2, -2); (2, -3, 1); + (2, -3, -2); (-3, -3, 1); (-3, -3, -2); (-2, -3, 1); (-2, -3, -2); + (0, -3, 1); (0, -3, -2); (2, -3, 1); (2, -3, -2)] +|}];; + +[|(p, q, u) + for q = -2 downto -3 and p in [|2; -3; -2; 0; 2|] and u in [|1; -2|]|];; +[%%expect{| +- : (int * int * int) array = +[|(2, -2, 1); (2, -2, -2); (-3, -2, 1); (-3, -2, -2); (-2, -2, 1); + (-2, -2, -2); (0, -2, 1); (0, -2, -2); (2, -2, 1); (2, -2, -2); (2, -3, 1); + (2, -3, -2); (-3, -3, 1); (-3, -3, -2); (-2, -3, 1); (-2, -3, -2); + (0, -3, 1); (0, -3, -2); (2, -3, 1); (2, -3, -2)|] +|}];; + +[:(p, q, u) + for q = -2 downto -3 and p in [:2; -3; -2; 0; 2:] and u in [:1; -2:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(2, -2, 1); (2, -2, -2); (-3, -2, 1); (-3, -2, -2); (-2, -2, 1); + (-2, -2, -2); (0, -2, 1); (0, -2, -2); (2, -2, 1); (2, -2, -2); (2, -3, 1); + (2, -3, -2); (-3, -3, 1); (-3, -3, -2); (-2, -3, 1); (-2, -3, -2); + (0, -3, 1); (0, -3, -2); (2, -3, 1); (2, -3, -2):] +|}];; + +[(c, m, q, v, w) + for m = 1 to 3 + for q = -2 downto 1 + for v = m to -2 and c = 2 downto -3 + for w = c to -3 + when abs c mod 2 = 0];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(c, m, q, v, w) + for m = 1 to 3 + for q = -2 downto 1 + for v = m to -2 and c = 2 downto -3 + for w = c to -3 + when abs c mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(c, m, q, v, w) + for m = 1 to 3 + for q = -2 downto 1 + for v = m to -2 and c = 2 downto -3 + for w = c to -3 + when abs c mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(f, k, l, r, v, z) + for v = -1 to 2 + for f in [] and z = -2 to 0 and r = -3 downto -3 and l = 0 to 1 + for k in [1; -3; 2; 3; 0]];; +[%%expect{| +- : ('a * int * int * int * int * int) list = [] +|}];; + +[|(f, k, l, r, v, z) + for v = -1 to 2 + for f in [||] and z = -2 to 0 and r = -3 downto -3 and l = 0 to 1 + for k in [|1; -3; 2; 3; 0|]|];; +[%%expect{| +- : ('_weak35 * int * int * int * int * int) array = [||] +|}];; + +[:(f, k, l, r, v, z) + for v = -1 to 2 + for f in [::] and z = -2 to 0 and r = -3 downto -3 and l = 0 to 1 + for k in [:1; -3; 2; 3; 0:]:];; +[%%expect{| +- : ('a * int * int * int * int * int) iarray = [::] +|}];; + +[(b, x) for x = 3 downto -3 and b in [-1; 1]];; +[%%expect{| +- : (int * int) list = +[(-1, 3); (1, 3); (-1, 2); (1, 2); (-1, 1); (1, 1); (-1, 0); (1, 0); + (-1, -1); (1, -1); (-1, -2); (1, -2); (-1, -3); (1, -3)] +|}];; + +[|(b, x) for x = 3 downto -3 and b in [|-1; 1|]|];; +[%%expect{| +- : (int * int) array = +[|(-1, 3); (1, 3); (-1, 2); (1, 2); (-1, 1); (1, 1); (-1, 0); (1, 0); + (-1, -1); (1, -1); (-1, -2); (1, -2); (-1, -3); (1, -3)|] +|}];; + +[:(b, x) for x = 3 downto -3 and b in [:-1; 1:]:];; +[%%expect{| +- : (int * int) iarray = +[:(-1, 3); (1, 3); (-1, 2); (1, 2); (-1, 1); (1, 1); (-1, 0); (1, 0); + (-1, -1); (1, -1); (-1, -2); (1, -2); (-1, -3); (1, -3):] +|}];; + +[(d, e) for d = 1 downto 3 and e = 3 downto -2 and _ in []];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(d, e) for d = 1 downto 3 and e = 3 downto -2 and _ in [||]|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(d, e) for d = 1 downto 3 and e = 3 downto -2 and _ in [::]:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(i, o, s, t) + for o in [2; 0; -1; 2; 2] and t in [3] and s in [2; -2; 0; 1; -3] + when t > 0 + for i in [-3]];; +[%%expect{| +- : (int * int * int * int) list = +[(-3, 2, 2, 3); (-3, 2, -2, 3); (-3, 2, 0, 3); (-3, 2, 1, 3); (-3, 2, -3, 3); + (-3, 0, 2, 3); (-3, 0, -2, 3); (-3, 0, 0, 3); (-3, 0, 1, 3); (-3, 0, -3, 3); + (-3, -1, 2, 3); (-3, -1, -2, 3); (-3, -1, 0, 3); (-3, -1, 1, 3); + (-3, -1, -3, 3); (-3, 2, 2, 3); (-3, 2, -2, 3); (-3, 2, 0, 3); + (-3, 2, 1, 3); (-3, 2, -3, 3); (-3, 2, 2, 3); (-3, 2, -2, 3); (-3, 2, 0, 3); + (-3, 2, 1, 3); (-3, 2, -3, 3)] +|}];; + +[|(i, o, s, t) + for o in [|2; 0; -1; 2; 2|] and t in [|3|] and s in [|2; -2; 0; 1; -3|] + when t > 0 + for i in [|-3|]|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-3, 2, 2, 3); (-3, 2, -2, 3); (-3, 2, 0, 3); (-3, 2, 1, 3); + (-3, 2, -3, 3); (-3, 0, 2, 3); (-3, 0, -2, 3); (-3, 0, 0, 3); + (-3, 0, 1, 3); (-3, 0, -3, 3); (-3, -1, 2, 3); (-3, -1, -2, 3); + (-3, -1, 0, 3); (-3, -1, 1, 3); (-3, -1, -3, 3); (-3, 2, 2, 3); + (-3, 2, -2, 3); (-3, 2, 0, 3); (-3, 2, 1, 3); (-3, 2, -3, 3); + (-3, 2, 2, 3); (-3, 2, -2, 3); (-3, 2, 0, 3); (-3, 2, 1, 3); + (-3, 2, -3, 3)|] +|}];; + +[:(i, o, s, t) + for o in [:2; 0; -1; 2; 2:] and t in [:3:] and s in [:2; -2; 0; 1; -3:] + when t > 0 + for i in [:-3:]:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-3, 2, 2, 3); (-3, 2, -2, 3); (-3, 2, 0, 3); (-3, 2, 1, 3); + (-3, 2, -3, 3); (-3, 0, 2, 3); (-3, 0, -2, 3); (-3, 0, 0, 3); + (-3, 0, 1, 3); (-3, 0, -3, 3); (-3, -1, 2, 3); (-3, -1, -2, 3); + (-3, -1, 0, 3); (-3, -1, 1, 3); (-3, -1, -3, 3); (-3, 2, 2, 3); + (-3, 2, -2, 3); (-3, 2, 0, 3); (-3, 2, 1, 3); (-3, 2, -3, 3); + (-3, 2, 2, 3); (-3, 2, -2, 3); (-3, 2, 0, 3); (-3, 2, 1, 3); + (-3, 2, -3, 3):] +|}];; + +[i for i = -1 downto 3 when abs i mod 2 = 0];; +[%%expect{| +- : int list = [] +|}];; + +[|i for i = -1 downto 3 when abs i mod 2 = 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:i for i = -1 downto 3 when abs i mod 2 = 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(a, o) for a in [0; 0; 2; -3; -3; 3; 2] for o = -1 downto -1 when o < 0];; +[%%expect{| +- : (int * int) list = +[(0, -1); (0, -1); (2, -1); (-3, -1); (-3, -1); (3, -1); (2, -1)] +|}];; + +[|(a, o) for a in [|0; 0; 2; -3; -3; 3; 2|] for o = -1 downto -1 when o < 0|];; +[%%expect{| +- : (int * int) array = +[|(0, -1); (0, -1); (2, -1); (-3, -1); (-3, -1); (3, -1); (2, -1)|] +|}];; + +[:(a, o) for a in [:0; 0; 2; -3; -3; 3; 2:] for o = -1 downto -1 when o < 0:];; +[%%expect{| +- : (int * int) iarray = +[:(0, -1); (0, -1); (2, -1); (-3, -1); (-3, -1); (3, -1); (2, -1):] +|}];; + +[(c, l, n, p, v) + for l in [-3; -3; -2] + for p in [-1; 0; 2; 2] and n in [2; -1; 3; 1; -2] + for v = -2 downto 2 + for c in [3; l; 3; 3; 2; 2; 2]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(c, l, n, p, v) + for l in [|-3; -3; -2|] + for p in [|-1; 0; 2; 2|] and n in [|2; -1; 3; 1; -2|] + for v = -2 downto 2 + for c in [|3; l; 3; 3; 2; 2; 2|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(c, l, n, p, v) + for l in [:-3; -3; -2:] + for p in [:-1; 0; 2; 2:] and n in [:2; -1; 3; 1; -2:] + for v = -2 downto 2 + for c in [:3; l; 3; 3; 2; 2; 2:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(b, c, f, i, k, m, q, s, t, w, x) + for x in [0; 1; 3] and c = -1 to 0 + for i = 0 downto -2 and b = -3 downto 0 and w in [-3; 0; -1; 1; 0; -1; x] + for q in [] and k = 3 downto -1 and f in [] + for s in [] and m = 2 to w and t in [2; 3; -2; 3; 3; 0; 0]];; +[%%expect{| +- : (int * int * 'a * int * int * int * 'b * 'c * int * int * int) list = [] +|}];; + +[|(b, c, f, i, k, m, q, s, t, w, x) + for x in [|0; 1; 3|] and c = -1 to 0 + for i = 0 downto -2 and b = -3 downto 0 and w in [|-3; 0; -1; 1; 0; -1; x|] + for q in [||] and k = 3 downto -1 and f in [||] + for s in [||] and m = 2 to w and t in [|2; 3; -2; 3; 3; 0; 0|]|];; +[%%expect{| +- : (int * int * '_weak36 * int * int * int * '_weak37 * '_weak38 * int * + int * int) + array += [||] +|}];; + +[:(b, c, f, i, k, m, q, s, t, w, x) + for x in [:0; 1; 3:] and c = -1 to 0 + for i = 0 downto -2 and b = -3 downto 0 and w in [:-3; 0; -1; 1; 0; -1; x:] + for q in [::] and k = 3 downto -1 and f in [::] + for s in [::] and m = 2 to w and t in [:2; 3; -2; 3; 3; 0; 0:]:];; +[%%expect{| +- : (int * int * 'a * int * int * int * 'b * 'c * int * int * int) iarray = +[::] +|}];; + +[(h, k, n, o, t) + for o = 0 to 3 and k in [0; -3; 2; 0; 1; 2; 2] + when abs o mod 2 = 1 + for n = 2 downto 1 and o = 1 downto 3 and t in [-1; 1] and h = 2 downto -1];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(h, r, x) + for x = 1 downto -1 + and h in [|-1; -2; -3; 3; 2; -3; -2|] + and r in [|0; -3; 0|]|];; +[%%expect{| +- : (int * int * int) array = +[|(-1, 0, 1); (-1, -3, 1); (-1, 0, 1); (-2, 0, 1); (-2, -3, 1); (-2, 0, 1); + (-3, 0, 1); (-3, -3, 1); (-3, 0, 1); (3, 0, 1); (3, -3, 1); (3, 0, 1); + (2, 0, 1); (2, -3, 1); (2, 0, 1); (-3, 0, 1); (-3, -3, 1); (-3, 0, 1); + (-2, 0, 1); (-2, -3, 1); (-2, 0, 1); (-1, 0, 0); (-1, -3, 0); (-1, 0, 0); + (-2, 0, 0); (-2, -3, 0); (-2, 0, 0); (-3, 0, 0); (-3, -3, 0); (-3, 0, 0); + (3, 0, 0); (3, -3, 0); (3, 0, 0); (2, 0, 0); (2, -3, 0); (2, 0, 0); + (-3, 0, 0); (-3, -3, 0); (-3, 0, 0); (-2, 0, 0); (-2, -3, 0); (-2, 0, 0); + (-1, 0, -1); (-1, -3, -1); (-1, 0, -1); (-2, 0, -1); (-2, -3, -1); + (-2, 0, -1); (-3, 0, -1); (-3, -3, -1); (-3, 0, -1); (3, 0, -1); + (3, -3, -1); (3, 0, -1); (2, 0, -1); (2, -3, -1); (2, 0, -1); (-3, 0, -1); + (-3, -3, -1); (-3, 0, -1); (-2, 0, -1); (-2, -3, -1); (-2, 0, -1)|] +|}];; + +[:(h, r, x) + for x = 1 downto -1 + and h in [:-1; -2; -3; 3; 2; -3; -2:] + and r in [:0; -3; 0:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-1, 0, 1); (-1, -3, 1); (-1, 0, 1); (-2, 0, 1); (-2, -3, 1); (-2, 0, 1); + (-3, 0, 1); (-3, -3, 1); (-3, 0, 1); (3, 0, 1); (3, -3, 1); (3, 0, 1); + (2, 0, 1); (2, -3, 1); (2, 0, 1); (-3, 0, 1); (-3, -3, 1); (-3, 0, 1); + (-2, 0, 1); (-2, -3, 1); (-2, 0, 1); (-1, 0, 0); (-1, -3, 0); (-1, 0, 0); + (-2, 0, 0); (-2, -3, 0); (-2, 0, 0); (-3, 0, 0); (-3, -3, 0); (-3, 0, 0); + (3, 0, 0); (3, -3, 0); (3, 0, 0); (2, 0, 0); (2, -3, 0); (2, 0, 0); + (-3, 0, 0); (-3, -3, 0); (-3, 0, 0); (-2, 0, 0); (-2, -3, 0); (-2, 0, 0); + (-1, 0, -1); (-1, -3, -1); (-1, 0, -1); (-2, 0, -1); (-2, -3, -1); + (-2, 0, -1); (-3, 0, -1); (-3, -3, -1); (-3, 0, -1); (3, 0, -1); + (3, -3, -1); (3, 0, -1); (2, 0, -1); (2, -3, -1); (2, 0, -1); (-3, 0, -1); + (-3, -3, -1); (-3, 0, -1); (-2, 0, -1); (-2, -3, -1); (-2, 0, -1):] +|}];; + +[(p, y, z) for z in [0; 0; 1; 2] and y = 3 to 1 and p = 3 downto 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(p, y, z) for z in [|0; 0; 1; 2|] and y = 3 to 1 and p = 3 downto 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(p, y, z) for z in [:0; 0; 1; 2:] and y = 3 to 1 and p = 3 downto 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(q, s) for q = 1 downto -2 and s = -2 downto 2 when q <> 0];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(q, s) for q = 1 downto -2 and s = -2 downto 2 when q <> 0|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(q, s) for q = 1 downto -2 and s = -2 downto 2 when q <> 0:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(c, u) for c in [-3] and u = -2 downto 0];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(c, u) for c in [|-3|] and u = -2 downto 0|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(c, u) for c in [:-3:] and u = -2 downto 0:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(f, m, n) + for n in [1; -3; -1; 3] + when abs n mod 2 = 1 + when abs n mod 2 = 0 + for f = 1 downto -2 + for m = -3 downto 1];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(f, m, n) + for n in [|1; -3; -1; 3|] + when abs n mod 2 = 1 + when abs n mod 2 = 0 + for f = 1 downto -2 + for m = -3 downto 1|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(f, m, n) + for n in [:1; -3; -1; 3:] + when abs n mod 2 = 1 + when abs n mod 2 = 0 + for f = 1 downto -2 + for m = -3 downto 1:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(d, f, j, n, o, y, z) + for n = 0 to 2 and o in [-2; -2] + for d in [-2; -2; -3; 0; -2] and _ = 1 downto -2 + for j = 0 downto -2 + for j in [0; 0; 2; n] and f = 3 to 2 + for y in [-2; 1; -1; -2; -1; 0] and z in [0; -1; -3]];; +[%%expect{| +Lines 1-6, characters 0-56: +1 | [(d, f, j, n, o, y, z) +2 | for n = 0 to 2 and o in [-2; -2] +3 | for d in [-2; -2; -3; 0; -2] and _ = 1 downto -2 +4 | for j = 0 downto -2 +5 | for j in [0; 0; 2; n] and f = 3 to 2 +6 | for y in [-2; 1; -1; -2; -1; 0] and z in [0; -1; -3]].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(d, f, j, n, o, y, z) + for n = 0 to 2 and o in [|-2; -2|] + for d in [|-2; -2; -3; 0; -2|] and _ = 1 downto -2 + for j = 0 downto -2 + for j in [|0; 0; 2; n|] and f = 3 to 2 + for y in [|-2; 1; -1; -2; -1; 0|] and z in [|0; -1; -3|]|];; +[%%expect{| +Lines 1-6, characters 0-62: +1 | [|(d, f, j, n, o, y, z) +2 | for n = 0 to 2 and o in [|-2; -2|] +3 | for d in [|-2; -2; -3; 0; -2|] and _ = 1 downto -2 +4 | for j = 0 downto -2 +5 | for j in [|0; 0; 2; n|] and f = 3 to 2 +6 | for y in [|-2; 1; -1; -2; -1; 0|] and z in [|0; -1; -3|]|].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(d, f, j, n, o, y, z) + for n = 0 to 2 and o in [:-2; -2:] + for d in [:-2; -2; -3; 0; -2:] and _ = 1 downto -2 + for j = 0 downto -2 + for j in [:0; 0; 2; n:] and f = 3 to 2 + for y in [:-2; 1; -1; -2; -1; 0:] and z in [:0; -1; -3:]:];; +[%%expect{| +Lines 1-6, characters 0-62: +1 | [:(d, f, j, n, o, y, z) +2 | for n = 0 to 2 and o in [:-2; -2:] +3 | for d in [:-2; -2; -3; 0; -2:] and _ = 1 downto -2 +4 | for j = 0 downto -2 +5 | for j in [:0; 0; 2; n:] and f = 3 to 2 +6 | for y in [:-2; 1; -1; -2; -1; 0:] and z in [:0; -1; -3:]:].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(m, q, t, v) + for q in [1; -3; -3] + when q <> 0 + for v in [1; -1; 1; 3; -1; q; -3] and m = q to -3 and t = 3 downto 2];; +[%%expect{| +- : (int * int * int * int) list = +[(-3, -3, 3, 1); (-3, -3, 2, 1); (-3, -3, 3, -1); (-3, -3, 2, -1); + (-3, -3, 3, 1); (-3, -3, 2, 1); (-3, -3, 3, 3); (-3, -3, 2, 3); + (-3, -3, 3, -1); (-3, -3, 2, -1); (-3, -3, 3, -3); (-3, -3, 2, -3); + (-3, -3, 3, -3); (-3, -3, 2, -3); (-3, -3, 3, 1); (-3, -3, 2, 1); + (-3, -3, 3, -1); (-3, -3, 2, -1); (-3, -3, 3, 1); (-3, -3, 2, 1); + (-3, -3, 3, 3); (-3, -3, 2, 3); (-3, -3, 3, -1); (-3, -3, 2, -1); + (-3, -3, 3, -3); (-3, -3, 2, -3); (-3, -3, 3, -3); (-3, -3, 2, -3)] +|}];; + +[|(m, q, t, v) + for q in [|1; -3; -3|] + when q <> 0 + for v in [|1; -1; 1; 3; -1; q; -3|] and m = q to -3 and t = 3 downto 2|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-3, -3, 3, 1); (-3, -3, 2, 1); (-3, -3, 3, -1); (-3, -3, 2, -1); + (-3, -3, 3, 1); (-3, -3, 2, 1); (-3, -3, 3, 3); (-3, -3, 2, 3); + (-3, -3, 3, -1); (-3, -3, 2, -1); (-3, -3, 3, -3); (-3, -3, 2, -3); + (-3, -3, 3, -3); (-3, -3, 2, -3); (-3, -3, 3, 1); (-3, -3, 2, 1); + (-3, -3, 3, -1); (-3, -3, 2, -1); (-3, -3, 3, 1); (-3, -3, 2, 1); + (-3, -3, 3, 3); (-3, -3, 2, 3); (-3, -3, 3, -1); (-3, -3, 2, -1); + (-3, -3, 3, -3); (-3, -3, 2, -3); (-3, -3, 3, -3); (-3, -3, 2, -3)|] +|}];; + +[:(m, q, t, v) + for q in [:1; -3; -3:] + when q <> 0 + for v in [:1; -1; 1; 3; -1; q; -3:] and m = q to -3 and t = 3 downto 2:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-3, -3, 3, 1); (-3, -3, 2, 1); (-3, -3, 3, -1); (-3, -3, 2, -1); + (-3, -3, 3, 1); (-3, -3, 2, 1); (-3, -3, 3, 3); (-3, -3, 2, 3); + (-3, -3, 3, -1); (-3, -3, 2, -1); (-3, -3, 3, -3); (-3, -3, 2, -3); + (-3, -3, 3, -3); (-3, -3, 2, -3); (-3, -3, 3, 1); (-3, -3, 2, 1); + (-3, -3, 3, -1); (-3, -3, 2, -1); (-3, -3, 3, 1); (-3, -3, 2, 1); + (-3, -3, 3, 3); (-3, -3, 2, 3); (-3, -3, 3, -1); (-3, -3, 2, -1); + (-3, -3, 3, -3); (-3, -3, 2, -3); (-3, -3, 3, -3); (-3, -3, 2, -3):] +|}];; + +[(f, g, n, x) + for n in [1; 1] and f in [-2] + for g = n to 2 + when n <> 0 + for x in [] + when f > 0];; +[%%expect{| +- : (int * int * int * 'a) list = [] +|}];; + +[|(f, g, n, x) + for n in [|1; 1|] and f in [|-2|] + for g = n to 2 + when n <> 0 + for x in [||] + when f > 0|];; +[%%expect{| +- : (int * int * int * '_weak39) array = [||] +|}];; + +[:(f, g, n, x) + for n in [:1; 1:] and f in [:-2:] + for g = n to 2 + when n <> 0 + for x in [::] + when f > 0:];; +[%%expect{| +- : (int * int * int * 'a) iarray = [::] +|}];; + +[(d, u, v) for d in [3; 0; 0; -3; 1] and u in [-3; -1; 0] and v in [0; 1]];; +[%%expect{| +- : (int * int * int) list = +[(3, -3, 0); (3, -3, 1); (3, -1, 0); (3, -1, 1); (3, 0, 0); (3, 0, 1); + (0, -3, 0); (0, -3, 1); (0, -1, 0); (0, -1, 1); (0, 0, 0); (0, 0, 1); + (0, -3, 0); (0, -3, 1); (0, -1, 0); (0, -1, 1); (0, 0, 0); (0, 0, 1); + (-3, -3, 0); (-3, -3, 1); (-3, -1, 0); (-3, -1, 1); (-3, 0, 0); (-3, 0, 1); + (1, -3, 0); (1, -3, 1); (1, -1, 0); (1, -1, 1); (1, 0, 0); (1, 0, 1)] +|}];; + +[|(d, u, v) + for d in [|3; 0; 0; -3; 1|] and u in [|-3; -1; 0|] and v in [|0; 1|]|];; +[%%expect{| +- : (int * int * int) array = +[|(3, -3, 0); (3, -3, 1); (3, -1, 0); (3, -1, 1); (3, 0, 0); (3, 0, 1); + (0, -3, 0); (0, -3, 1); (0, -1, 0); (0, -1, 1); (0, 0, 0); (0, 0, 1); + (0, -3, 0); (0, -3, 1); (0, -1, 0); (0, -1, 1); (0, 0, 0); (0, 0, 1); + (-3, -3, 0); (-3, -3, 1); (-3, -1, 0); (-3, -1, 1); (-3, 0, 0); (-3, 0, 1); + (1, -3, 0); (1, -3, 1); (1, -1, 0); (1, -1, 1); (1, 0, 0); (1, 0, 1)|] +|}];; + +[:(d, u, v) + for d in [:3; 0; 0; -3; 1:] and u in [:-3; -1; 0:] and v in [:0; 1:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(3, -3, 0); (3, -3, 1); (3, -1, 0); (3, -1, 1); (3, 0, 0); (3, 0, 1); + (0, -3, 0); (0, -3, 1); (0, -1, 0); (0, -1, 1); (0, 0, 0); (0, 0, 1); + (0, -3, 0); (0, -3, 1); (0, -1, 0); (0, -1, 1); (0, 0, 0); (0, 0, 1); + (-3, -3, 0); (-3, -3, 1); (-3, -1, 0); (-3, -1, 1); (-3, 0, 0); (-3, 0, 1); + (1, -3, 0); (1, -3, 1); (1, -1, 0); (1, -1, 1); (1, 0, 0); (1, 0, 1):] +|}];; + +[(k, t) + for t in [-1] and k = -1 downto -3 + when abs t mod 2 = 0 + when abs t mod 2 = 1];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(k, t) + for t in [|-1|] and k = -1 downto -3 + when abs t mod 2 = 0 + when abs t mod 2 = 1|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(k, t) + for t in [:-1:] and k = -1 downto -3 + when abs t mod 2 = 0 + when abs t mod 2 = 1:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(a, c, i, m, n, o, q, w) + for o in [1; -2; -2; -1; 0; -3; 1] and n in [1; -1] and a in [-3; 3] + for q in [2; n; 0; 2; 2; -2] and w in [2; -2] + for i = 1 to 0 and c = -1 downto 0 and m = n downto -2];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, c, i, m, n, o, q, w) + for o in [|1; -2; -2; -1; 0; -3; 1|] and n in [|1; -1|] and a in [|-3; 3|] + for q in [|2; n; 0; 2; 2; -2|] and w in [|2; -2|] + for i = 1 to 0 and c = -1 downto 0 and m = n downto -2|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, c, i, m, n, o, q, w) + for o in [:1; -2; -2; -1; 0; -3; 1:] and n in [:1; -1:] and a in [:-3; 3:] + for q in [:2; n; 0; 2; 2; -2:] and w in [:2; -2:] + for i = 1 to 0 and c = -1 downto 0 and m = n downto -2:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, j, s) + for j = -1 to 3 + for e in [-1; -3; 3; 1; j] + for _ = 0 downto 2 + for e in [-1; -3; 0; -2; 0; 3] and j = 0 to e + for s = 1 downto 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(e, j, s) + for j = -1 to 3 + for e in [|-1; -3; 3; 1; j|] + for _ = 0 downto 2 + for e in [|-1; -3; 0; -2; 0; 3|] and j = 0 to e + for s = 1 downto 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(e, j, s) + for j = -1 to 3 + for e in [:-1; -3; 3; 1; j:] + for _ = 0 downto 2 + for e in [:-1; -3; 0; -2; 0; 3:] and j = 0 to e + for s = 1 downto 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(c, e, u, z) + for e in [2; 2] + for c = 3 to -2 + for u = -1 to 2 + for c in [2; 2; 1; -2; -1; -1; -3] + for z = 1 downto 1];; +[%%expect{| +Lines 1-6, characters 0-22: +1 | [(c, e, u, z) +2 | for e in [2; 2] +3 | for c = 3 to -2 +4 | for u = -1 to 2 +5 | for c in [2; 2; 1; -2; -1; -1; -3] +6 | for z = 1 downto 1].. +Warning 26 [unused-var]: unused variable c. +- : (int * int * int * int) list = [] +|}];; + +[|(c, e, u, z) + for e in [|2; 2|] + for c = 3 to -2 + for u = -1 to 2 + for c in [|2; 2; 1; -2; -1; -1; -3|] + for z = 1 downto 1|];; +[%%expect{| +Lines 1-6, characters 0-24: +1 | [|(c, e, u, z) +2 | for e in [|2; 2|] +3 | for c = 3 to -2 +4 | for u = -1 to 2 +5 | for c in [|2; 2; 1; -2; -1; -1; -3|] +6 | for z = 1 downto 1|].. +Warning 26 [unused-var]: unused variable c. +- : (int * int * int * int) array = [||] +|}];; + +[:(c, e, u, z) + for e in [:2; 2:] + for c = 3 to -2 + for u = -1 to 2 + for c in [:2; 2; 1; -2; -1; -1; -3:] + for z = 1 downto 1:];; +[%%expect{| +Lines 1-6, characters 0-24: +1 | [:(c, e, u, z) +2 | for e in [:2; 2:] +3 | for c = 3 to -2 +4 | for u = -1 to 2 +5 | for c in [:2; 2; 1; -2; -1; -1; -3:] +6 | for z = 1 downto 1:].. +Warning 26 [unused-var]: unused variable c. +- : (int * int * int * int) iarray = [::] +|}];; + +[(b, e, f, o, r, u, v, w) + for e in [0; -1; 2; 3; 2; 2] + and w in [-3; 2; -1; -1; 2; -3; -3] + and v in [0; -3; 0; -3; 2; 2; 0] + and r in [-1; -1; 0; 0] + for b = -1 downto e + for o = -3 downto 0 + and r = -2 downto v + and u = 2 downto 1 + and f in [1; -2; 1; -1]];; +[%%expect{| +Line 5, characters 7-8: +5 | and r in [-1; -1; 0; 0] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(b, e, f, o, r, u, v, w) + for e in [|0; -1; 2; 3; 2; 2|] + and w in [|-3; 2; -1; -1; 2; -3; -3|] + and v in [|0; -3; 0; -3; 2; 2; 0|] + and r in [|-1; -1; 0; 0|] + for b = -1 downto e + for o = -3 downto 0 + and r = -2 downto v + and u = 2 downto 1 + and f in [|1; -2; 1; -1|]|];; +[%%expect{| +Line 5, characters 8-9: +5 | and r in [|-1; -1; 0; 0|] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(b, e, f, o, r, u, v, w) + for e in [:0; -1; 2; 3; 2; 2:] + and w in [:-3; 2; -1; -1; 2; -3; -3:] + and v in [:0; -3; 0; -3; 2; 2; 0:] + and r in [:-1; -1; 0; 0:] + for b = -1 downto e + for o = -3 downto 0 + and r = -2 downto v + and u = 2 downto 1 + and f in [:1; -2; 1; -1:]:];; +[%%expect{| +Line 5, characters 8-9: +5 | and r in [:-1; -1; 0; 0:] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(f, w, x) + for _ in [1; 3] and x in [2] + for w = -3 to -1 and x = 3 to 1 + for x = -3 to x + when w < 0 + for f = 3 to -2 and _ = 2 downto 3];; +[%%expect{| +Line 2, characters 23-24: +2 | for _ in [1; 3] and x in [2] + ^ +Warning 26 [unused-var]: unused variable x. +- : (int * int * int) list = [] +|}];; + +[|(f, w, x) + for _ in [|1; 3|] and x in [|2|] + for w = -3 to -1 and x = 3 to 1 + for x = -3 to x + when w < 0 + for f = 3 to -2 and _ = 2 downto 3|];; +[%%expect{| +Line 2, characters 26-27: +2 | for _ in [|1; 3|] and x in [|2|] + ^ +Warning 26 [unused-var]: unused variable x. +- : (int * int * int) array = [||] +|}];; + +[:(f, w, x) + for _ in [:1; 3:] and x in [:2:] + for w = -3 to -1 and x = 3 to 1 + for x = -3 to x + when w < 0 + for f = 3 to -2 and _ = 2 downto 3:];; +[%%expect{| +Line 2, characters 26-27: +2 | for _ in [:1; 3:] and x in [:2:] + ^ +Warning 26 [unused-var]: unused variable x. +- : (int * int * int) iarray = [::] +|}];; + +[(r, x, y) + for r = -1 to 0 + when r > 0 + for y = 1 to 3 + for x in [0; 3; 2; y; 1; 3] + when abs y mod 2 = 1];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(r, x, y) + for r = -1 to 0 + when r > 0 + for y = 1 to 3 + for x in [|0; 3; 2; y; 1; 3|] + when abs y mod 2 = 1|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(r, x, y) + for r = -1 to 0 + when r > 0 + for y = 1 to 3 + for x in [:0; 3; 2; y; 1; 3:] + when abs y mod 2 = 1:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(c, g, j, m, t, v, y, z) + for v = 2 downto -1 and t in [-3; 1; -2; 0; -3; 3] and c = -3 downto -3 + for m in [2; -3; -3] and g = 1 downto 3 and j = 0 downto 2 + for j in [-2; 1; -3] and z in [t; 2; -3; -2] + for y = 3 downto 0];; +[%%expect{| +Lines 1-5, characters 0-22: +1 | [(c, g, j, m, t, v, y, z) +2 | for v = 2 downto -1 and t in [-3; 1; -2; 0; -3; 3] and c = -3 downto -3 +3 | for m in [2; -3; -3] and g = 1 downto 3 and j = 0 downto 2 +4 | for j in [-2; 1; -3] and z in [t; 2; -3; -2] +5 | for y = 3 downto 0].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(c, g, j, m, t, v, y, z) + for v = 2 downto -1 and t in [|-3; 1; -2; 0; -3; 3|] and c = -3 downto -3 + for m in [|2; -3; -3|] and g = 1 downto 3 and j = 0 downto 2 + for j in [|-2; 1; -3|] and z in [|t; 2; -3; -2|] + for y = 3 downto 0|];; +[%%expect{| +Lines 1-5, characters 0-24: +1 | [|(c, g, j, m, t, v, y, z) +2 | for v = 2 downto -1 and t in [|-3; 1; -2; 0; -3; 3|] and c = -3 downto -3 +3 | for m in [|2; -3; -3|] and g = 1 downto 3 and j = 0 downto 2 +4 | for j in [|-2; 1; -3|] and z in [|t; 2; -3; -2|] +5 | for y = 3 downto 0|].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(c, g, j, m, t, v, y, z) + for v = 2 downto -1 and t in [:-3; 1; -2; 0; -3; 3:] and c = -3 downto -3 + for m in [:2; -3; -3:] and g = 1 downto 3 and j = 0 downto 2 + for j in [:-2; 1; -3:] and z in [:t; 2; -3; -2:] + for y = 3 downto 0:];; +[%%expect{| +Lines 1-5, characters 0-24: +1 | [:(c, g, j, m, t, v, y, z) +2 | for v = 2 downto -1 and t in [:-3; 1; -2; 0; -3; 3:] and c = -3 downto -3 +3 | for m in [:2; -3; -3:] and g = 1 downto 3 and j = 0 downto 2 +4 | for j in [:-2; 1; -3:] and z in [:t; 2; -3; -2:] +5 | for y = 3 downto 0:].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, p, r, v, x, y) + for r in [3; 0; -3] + for e = 3 downto -3 + for v = 2 downto -2 and x in [] + for p in [-2; 0; 3; 0; 1; 2; -3] + for y in [-1; 2; -2; 2; -3]];; +[%%expect{| +- : (int * int * int * int * 'a * int) list = [] +|}];; + +[|(e, p, r, v, x, y) + for r in [|3; 0; -3|] + for e = 3 downto -3 + for v = 2 downto -2 and x in [||] + for p in [|-2; 0; 3; 0; 1; 2; -3|] + for y in [|-1; 2; -2; 2; -3|]|];; +[%%expect{| +- : (int * int * int * int * '_weak40 * int) array = [||] +|}];; + +[:(e, p, r, v, x, y) + for r in [:3; 0; -3:] + for e = 3 downto -3 + for v = 2 downto -2 and x in [::] + for p in [:-2; 0; 3; 0; 1; 2; -3:] + for y in [:-1; 2; -2; 2; -3:]:];; +[%%expect{| +- : (int * int * int * int * 'a * int) iarray = [::] +|}];; + +[(b, c, k, l, u) + for c in [-3; -2; 1; -2] + for u in [-1; -1; 1; 3; -3] and k = -3 to -3 and b = -2 to -1 and l in [] + when c <> 0];; +[%%expect{| +- : (int * int * int * 'a * int) list = [] +|}];; + +[|(n, v) for v in [|-2; 1; 3|] and n in [||] when n < 0|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(n, v) for v in [:-2; 1; 3:] and n in [::] when n < 0:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(b, z) for b in [-1] when abs b mod 2 = 1 for z = 1 to 0 and b = 2 to 1];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(b, z) for b in [|-1|] when abs b mod 2 = 1 for z = 1 to 0 and b = 2 to 1|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(b, z) for b in [:-1:] when abs b mod 2 = 1 for z = 1 to 0 and b = 2 to 1:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(n, o) for o = -1 to 1 and n in [0; -3; 2; 2]];; +[%%expect{| +- : (int * int) list = +[(0, -1); (-3, -1); (2, -1); (2, -1); (0, 0); (-3, 0); (2, 0); (2, 0); + (0, 1); (-3, 1); (2, 1); (2, 1)] +|}];; + +[|(n, o) for o = -1 to 1 and n in [|0; -3; 2; 2|]|];; +[%%expect{| +- : (int * int) array = +[|(0, -1); (-3, -1); (2, -1); (2, -1); (0, 0); (-3, 0); (2, 0); (2, 0); + (0, 1); (-3, 1); (2, 1); (2, 1)|] +|}];; + +[:(n, o) for o = -1 to 1 and n in [:0; -3; 2; 2:]:];; +[%%expect{| +- : (int * int) iarray = +[:(0, -1); (-3, -1); (2, -1); (2, -1); (0, 0); (-3, 0); (2, 0); (2, 0); + (0, 1); (-3, 1); (2, 1); (2, 1):] +|}];; + +[(b, f, i, l, r, z) + for r in [1] and f in [-2] and i in [0; -3] and b in [0] + for z = 1 to f and l in [-2]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(b, f, i, l, r, z) + for r in [|1|] and f in [|-2|] and i in [|0; -3|] and b in [|0|] + for z = 1 to f and l in [|-2|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(b, f, i, l, r, z) + for r in [:1:] and f in [:-2:] and i in [:0; -3:] and b in [:0:] + for z = 1 to f and l in [:-2:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(h, t, y) + for y in [-3; -3] + when y < 0 + when abs y mod 2 = 1 + for t = 0 to -1 and h in [-2; -1; 0]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(h, t, y) + for y in [|-3; -3|] + when y < 0 + when abs y mod 2 = 1 + for t = 0 to -1 and h in [|-2; -1; 0|]|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(h, t, y) + for y in [:-3; -3:] + when y < 0 + when abs y mod 2 = 1 + for t = 0 to -1 and h in [:-2; -1; 0:]:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(a, l) for a = -1 downto 3 and l in [-1; 1; 3]];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(a, l) for a = -1 downto 3 and l in [|-1; 1; 3|]|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(a, l) for a = -1 downto 3 and l in [:-1; 1; 3:]:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(e, n, r) for r = 0 downto -2 and e in [1; 1; -2] and n in [0; 2; 0; -2; 1]];; +[%%expect{| +- : (int * int * int) list = +[(1, 0, 0); (1, 2, 0); (1, 0, 0); (1, -2, 0); (1, 1, 0); (1, 0, 0); + (1, 2, 0); (1, 0, 0); (1, -2, 0); (1, 1, 0); (-2, 0, 0); (-2, 2, 0); + (-2, 0, 0); (-2, -2, 0); (-2, 1, 0); (1, 0, -1); (1, 2, -1); (1, 0, -1); + (1, -2, -1); (1, 1, -1); (1, 0, -1); (1, 2, -1); (1, 0, -1); (1, -2, -1); + (1, 1, -1); (-2, 0, -1); (-2, 2, -1); (-2, 0, -1); (-2, -2, -1); + (-2, 1, -1); (1, 0, -2); (1, 2, -2); (1, 0, -2); (1, -2, -2); (1, 1, -2); + (1, 0, -2); (1, 2, -2); (1, 0, -2); (1, -2, -2); (1, 1, -2); (-2, 0, -2); + (-2, 2, -2); (-2, 0, -2); (-2, -2, -2); (-2, 1, -2)] +|}];; + +[|(e, n, r) + for r = 0 downto -2 and e in [|1; 1; -2|] and n in [|0; 2; 0; -2; 1|]|];; +[%%expect{| +- : (int * int * int) array = +[|(1, 0, 0); (1, 2, 0); (1, 0, 0); (1, -2, 0); (1, 1, 0); (1, 0, 0); + (1, 2, 0); (1, 0, 0); (1, -2, 0); (1, 1, 0); (-2, 0, 0); (-2, 2, 0); + (-2, 0, 0); (-2, -2, 0); (-2, 1, 0); (1, 0, -1); (1, 2, -1); (1, 0, -1); + (1, -2, -1); (1, 1, -1); (1, 0, -1); (1, 2, -1); (1, 0, -1); (1, -2, -1); + (1, 1, -1); (-2, 0, -1); (-2, 2, -1); (-2, 0, -1); (-2, -2, -1); + (-2, 1, -1); (1, 0, -2); (1, 2, -2); (1, 0, -2); (1, -2, -2); (1, 1, -2); + (1, 0, -2); (1, 2, -2); (1, 0, -2); (1, -2, -2); (1, 1, -2); (-2, 0, -2); + (-2, 2, -2); (-2, 0, -2); (-2, -2, -2); (-2, 1, -2)|] +|}];; + +[:(e, n, r) + for r = 0 downto -2 and e in [:1; 1; -2:] and n in [:0; 2; 0; -2; 1:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(1, 0, 0); (1, 2, 0); (1, 0, 0); (1, -2, 0); (1, 1, 0); (1, 0, 0); + (1, 2, 0); (1, 0, 0); (1, -2, 0); (1, 1, 0); (-2, 0, 0); (-2, 2, 0); + (-2, 0, 0); (-2, -2, 0); (-2, 1, 0); (1, 0, -1); (1, 2, -1); (1, 0, -1); + (1, -2, -1); (1, 1, -1); (1, 0, -1); (1, 2, -1); (1, 0, -1); (1, -2, -1); + (1, 1, -1); (-2, 0, -1); (-2, 2, -1); (-2, 0, -1); (-2, -2, -1); + (-2, 1, -1); (1, 0, -2); (1, 2, -2); (1, 0, -2); (1, -2, -2); (1, 1, -2); + (1, 0, -2); (1, 2, -2); (1, 0, -2); (1, -2, -2); (1, 1, -2); (-2, 0, -2); + (-2, 2, -2); (-2, 0, -2); (-2, -2, -2); (-2, 1, -2):] +|}];; + +[(h, s, w) for w = 2 to -3 and h = -1 to 3 and s = -2 downto 3];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(h, s, w) for w = 2 to -3 and h = -1 to 3 and s = -2 downto 3|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(h, s, w) for w = 2 to -3 and h = -1 to 3 and s = -2 downto 3:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(a, h, o, r, t, y) + for o in [3] and y in [-2; 3] + for a in [3; -1; -1] and r = 2 downto 0 + for t in [3; 2; -2; a] and h in [3; -1] + when r < 0 + for o in [-3; 1; 3; 2; 0; -1; -1]];; +[%%expect{| +Line 2, characters 7-8: +2 | for o in [3] and y in [-2; 3] + ^ +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, h, o, r, t, y) + for o in [|3|] and y in [|-2; 3|] + for a in [|3; -1; -1|] and r = 2 downto 0 + for t in [|3; 2; -2; a|] and h in [|3; -1|] + when r < 0 + for o in [|-3; 1; 3; 2; 0; -1; -1|]|];; +[%%expect{| +Line 2, characters 8-9: +2 | for o in [|3|] and y in [|-2; 3|] + ^ +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, h, o, r, t, y) + for o in [:3:] and y in [:-2; 3:] + for a in [:3; -1; -1:] and r = 2 downto 0 + for t in [:3; 2; -2; a:] and h in [:3; -1:] + when r < 0 + for o in [:-3; 1; 3; 2; 0; -1; -1:]:];; +[%%expect{| +Line 2, characters 8-9: +2 | for o in [:3:] and y in [:-2; 3:] + ^ +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, h, i, t, v, w, z) + for z in [2; 3; 3; 2; 0; -1; -3] and h in [0; -1] and t in [2; -1] + for i = 2 downto -3 and w = -2 to -2 and v = -1 to -2 and d = 3 downto t];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(d, h, i, t, v, w, z) + for z in [|2; 3; 3; 2; 0; -1; -3|] and h in [|0; -1|] and t in [|2; -1|] + for i = 2 downto -3 and w = -2 to -2 and v = -1 to -2 and d = 3 downto t|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(d, h, i, t, v, w, z) + for z in [:2; 3; 3; 2; 0; -1; -3:] and h in [:0; -1:] and t in [:2; -1:] + for i = 2 downto -3 and w = -2 to -2 and v = -1 to -2 and d = 3 downto t:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, c, m, q, v, z) + for q in [-1; -1; -2; 3; -3; -1] and a in [1] + for z = 0 to -2 + for m in [-3; 2; 1; -3; 2; -3; 3] + when abs z mod 2 = 0 + for v = -2 downto 0 and c = 1 to -2];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, c, m, q, v, z) + for q in [|-1; -1; -2; 3; -3; -1|] and a in [|1|] + for z = 0 to -2 + for m in [|-3; 2; 1; -3; 2; -3; 3|] + when abs z mod 2 = 0 + for v = -2 downto 0 and c = 1 to -2|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, c, m, q, v, z) + for q in [:-1; -1; -2; 3; -3; -1:] and a in [:1:] + for z = 0 to -2 + for m in [:-3; 2; 1; -3; 2; -3; 3:] + when abs z mod 2 = 0 + for v = -2 downto 0 and c = 1 to -2:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(b, d, i, l, m, o, s, v, y) + for o = -2 downto -3 and l in [1] + for v in [3; 3; -1; -3; 1; -1; 0] and b = 1 to -1 + for y in [] and m in [b; -3; -3; o] + for s = -3 downto 1 and o in [2; -2; v] + for d = 0 to 0 and i = -2 downto -3];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * 'a) list = [] +|}];; + +[|(b, d, i, l, m, o, s, v, y) + for o = -2 downto -3 and l in [|1|] + for v in [|3; 3; -1; -3; 1; -1; 0|] and b = 1 to -1 + for y in [||] and m in [|b; -3; -3; o|] + for s = -3 downto 1 and o in [|2; -2; v|] + for d = 0 to 0 and i = -2 downto -3|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * '_weak41) array = [||] +|}];; + +[:(b, d, i, l, m, o, s, v, y) + for o = -2 downto -3 and l in [:1:] + for v in [:3; 3; -1; -3; 1; -1; 0:] and b = 1 to -1 + for y in [::] and m in [:b; -3; -3; o:] + for s = -3 downto 1 and o in [:2; -2; v:] + for d = 0 to 0 and i = -2 downto -3:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * 'a) iarray = [::] +|}];; + +[(a, j, l, q, u, v) + for j in [-2; -1; -3] and v in [2; 3; -3; 2] + for j in [j; v; 1; 2; 1; 1; 0] and a in [0] + for q = -3 downto 0 and l in [2; -1; -3; -3; -1] and u = -3 downto 3];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, j, l, q, u, v) + for j in [|-2; -1; -3|] and v in [|2; 3; -3; 2|] + for j in [|j; v; 1; 2; 1; 1; 0|] and a in [|0|] + for q = -3 downto 0 and l in [|2; -1; -3; -3; -1|] and u = -3 downto 3|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, j, l, q, u, v) + for j in [:-2; -1; -3:] and v in [:2; 3; -3; 2:] + for j in [:j; v; 1; 2; 1; 1; 0:] and a in [:0:] + for q = -3 downto 0 and l in [:2; -1; -3; -3; -1:] and u = -3 downto 3:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, p, r, t, y) + for r in [-3; 2; 1; 0; -3; 3; 3] + for y in [1; 2; 0; -3] + for y in [2; 1; -2; r; -2] and t in [] + for _ = -3 to -1 + for p in [0; -3] and a in [-3; r; 1; 1]];; +[%%expect{| +Line 3, characters 7-8: +3 | for y in [1; 2; 0; -3] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * 'a * int) list = [] +|}];; + +[|(a, p, r, t, y) + for r in [|-3; 2; 1; 0; -3; 3; 3|] + for y in [|1; 2; 0; -3|] + for y in [|2; 1; -2; r; -2|] and t in [||] + for _ = -3 to -1 + for p in [|0; -3|] and a in [|-3; r; 1; 1|]|];; +[%%expect{| +Line 3, characters 8-9: +3 | for y in [|1; 2; 0; -3|] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * '_weak42 * int) array = [||] +|}];; + +[:(a, p, r, t, y) + for r in [:-3; 2; 1; 0; -3; 3; 3:] + for y in [:1; 2; 0; -3:] + for y in [:2; 1; -2; r; -2:] and t in [::] + for _ = -3 to -1 + for p in [:0; -3:] and a in [:-3; r; 1; 1:]:];; +[%%expect{| +Line 3, characters 8-9: +3 | for y in [:1; 2; 0; -3:] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * 'a * int) iarray = [::] +|}];; + +[(p, q) for q = 2 downto 3 for p = -2 to q];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(p, q) for q = 2 downto 3 for p = -2 to q|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(p, q) for q = 2 downto 3 for p = -2 to q:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(d, e, j, l) + for j in [-3] and l in [3; 0; 3] + when j > 0 + for d = j downto 2 + for e = 0 downto -1];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(d, e, j, l) + for j in [|-3|] and l in [|3; 0; 3|] + when j > 0 + for d = j downto 2 + for e = 0 downto -1|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(d, e, j, l) + for j in [:-3:] and l in [:3; 0; 3:] + when j > 0 + for d = j downto 2 + for e = 0 downto -1:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(a, g, r) + for a = -2 downto -2 + when a < 0 + for r in [] + when abs a mod 2 = 1 + for g = r downto 0 and r in [-3; 2; 0]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, g, r) + for a = -2 downto -2 + when a < 0 + for r in [||] + when abs a mod 2 = 1 + for g = r downto 0 and r in [|-3; 2; 0|]|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(a, g, r) + for a = -2 downto -2 + when a < 0 + for r in [::] + when abs a mod 2 = 1 + for g = r downto 0 and r in [:-3; 2; 0:]:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(n, q, s) for s = 3 to 0 and q = 2 downto 3 and n = -1 downto 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(n, q, s) for s = 3 to 0 and q = 2 downto 3 and n = -1 downto 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(n, q, s) for s = 3 to 0 and q = 2 downto 3 and n = -1 downto 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(h, p, w) + for h in [3; 1; 3; 0; -1; 3; -1] + for w in [1] and p = 2 downto h and h = 1 downto h];; +[%%expect{| +- : (int * int * int) list = +[(1, 2, 1); (1, 1, 1); (1, 2, 1); (0, 2, 1); (1, 1, 1); (0, 1, 1); (1, 0, 1); + (0, 0, 1); (1, 2, 1); (0, 2, 1); (-1, 2, 1); (1, 1, 1); (0, 1, 1); + (-1, 1, 1); (1, 0, 1); (0, 0, 1); (-1, 0, 1); (1, -1, 1); (0, -1, 1); + (-1, -1, 1); (1, 2, 1); (0, 2, 1); (-1, 2, 1); (1, 1, 1); (0, 1, 1); + (-1, 1, 1); (1, 0, 1); (0, 0, 1); (-1, 0, 1); (1, -1, 1); (0, -1, 1); + (-1, -1, 1)] +|}];; + +[|(h, p, w) + for h in [|3; 1; 3; 0; -1; 3; -1|] + for w in [|1|] and p = 2 downto h and h = 1 downto h|];; +[%%expect{| +- : (int * int * int) array = +[|(1, 2, 1); (1, 1, 1); (1, 2, 1); (0, 2, 1); (1, 1, 1); (0, 1, 1); + (1, 0, 1); (0, 0, 1); (1, 2, 1); (0, 2, 1); (-1, 2, 1); (1, 1, 1); + (0, 1, 1); (-1, 1, 1); (1, 0, 1); (0, 0, 1); (-1, 0, 1); (1, -1, 1); + (0, -1, 1); (-1, -1, 1); (1, 2, 1); (0, 2, 1); (-1, 2, 1); (1, 1, 1); + (0, 1, 1); (-1, 1, 1); (1, 0, 1); (0, 0, 1); (-1, 0, 1); (1, -1, 1); + (0, -1, 1); (-1, -1, 1)|] +|}];; + +[:(h, p, w) + for h in [:3; 1; 3; 0; -1; 3; -1:] + for w in [:1:] and p = 2 downto h and h = 1 downto h:];; +[%%expect{| +- : (int * int * int) iarray = +[:(1, 2, 1); (1, 1, 1); (1, 2, 1); (0, 2, 1); (1, 1, 1); (0, 1, 1); + (1, 0, 1); (0, 0, 1); (1, 2, 1); (0, 2, 1); (-1, 2, 1); (1, 1, 1); + (0, 1, 1); (-1, 1, 1); (1, 0, 1); (0, 0, 1); (-1, 0, 1); (1, -1, 1); + (0, -1, 1); (-1, -1, 1); (1, 2, 1); (0, 2, 1); (-1, 2, 1); (1, 1, 1); + (0, 1, 1); (-1, 1, 1); (1, 0, 1); (0, 0, 1); (-1, 0, 1); (1, -1, 1); + (0, -1, 1); (-1, -1, 1):] +|}];; + +[(k, n, o) + for k = 3 to 3 + when abs k mod 2 = 1 + for n = -3 downto 0 and o in [3; 0]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(k, n, o) + for k = 3 to 3 + when abs k mod 2 = 1 + for n = -3 downto 0 and o in [|3; 0|]|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(k, n, o) + for k = 3 to 3 + when abs k mod 2 = 1 + for n = -3 downto 0 and o in [:3; 0:]:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[a for a = 2 downto 2 when abs a mod 2 = 0];; +[%%expect{| +- : int list = [2] +|}];; + +[|a for a = 2 downto 2 when abs a mod 2 = 0|];; +[%%expect{| +- : int array = [|2|] +|}];; + +[:a for a = 2 downto 2 when abs a mod 2 = 0:];; +[%%expect{| +- : int iarray = [:2:] +|}];; + +[(f, i, j, n, r, z) + for i = -2 to 2 + for n = 2 to 2 and z in [] + when abs z mod 2 = 0 + for j = 0 downto 2 and f in [-2; z; 2; -2; 2; -3; -2] + for r = -3 to -2 and j in []];; +[%%expect{| +Lines 1-6, characters 0-32: +1 | [(f, i, j, n, r, z) +2 | for i = -2 to 2 +3 | for n = 2 to 2 and z in [] +4 | when abs z mod 2 = 0 +5 | for j = 0 downto 2 and f in [-2; z; 2; -2; 2; -3; -2] +6 | for r = -3 to -2 and j in []].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * 'a * int * int * int) list = [] +|}];; + +[|(f, i, j, n, r, z) + for i = -2 to 2 + for n = 2 to 2 and z in [||] + when abs z mod 2 = 0 + for j = 0 downto 2 and f in [|-2; z; 2; -2; 2; -3; -2|] + for r = -3 to -2 and j in [||]|];; +[%%expect{| +Lines 1-6, characters 0-36: +1 | [|(f, i, j, n, r, z) +2 | for i = -2 to 2 +3 | for n = 2 to 2 and z in [||] +4 | when abs z mod 2 = 0 +5 | for j = 0 downto 2 and f in [|-2; z; 2; -2; 2; -3; -2|] +6 | for r = -3 to -2 and j in [||]|].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * '_weak43 * int * int * int) array = [||] +|}];; + +[:(f, i, j, n, r, z) + for i = -2 to 2 + for n = 2 to 2 and z in [::] + when abs z mod 2 = 0 + for j = 0 downto 2 and f in [:-2; z; 2; -2; 2; -3; -2:] + for r = -3 to -2 and j in [::]:];; +[%%expect{| +Lines 1-6, characters 0-36: +1 | [:(f, i, j, n, r, z) +2 | for i = -2 to 2 +3 | for n = 2 to 2 and z in [::] +4 | when abs z mod 2 = 0 +5 | for j = 0 downto 2 and f in [:-2; z; 2; -2; 2; -3; -2:] +6 | for r = -3 to -2 and j in [::]:].. +Warning 26 [unused-var]: unused variable j. +- : (int * int * 'a * int * int * int) iarray = [::] +|}];; + +[(g, l, w, y) + for y = -2 downto -3 + for g in [] and l = -1 to 2 and w = 0 to -3 + when abs g mod 2 = 1 + when abs l mod 2 = 0];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(g, l, w, y) + for y = -2 downto -3 + for g in [||] and l = -1 to 2 and w = 0 to -3 + when abs g mod 2 = 1 + when abs l mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(g, l, w, y) + for y = -2 downto -3 + for g in [::] and l = -1 to 2 and w = 0 to -3 + when abs g mod 2 = 1 + when abs l mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(a, c, l, r) + for c = -2 to 1 and l = 2 downto -2 and a = 3 downto 3 and r in [3; 1]];; +[%%expect{| +- : (int * int * int * int) list = +[(3, -2, 2, 3); (3, -2, 2, 1); (3, -2, 1, 3); (3, -2, 1, 1); (3, -2, 0, 3); + (3, -2, 0, 1); (3, -2, -1, 3); (3, -2, -1, 1); (3, -2, -2, 3); + (3, -2, -2, 1); (3, -1, 2, 3); (3, -1, 2, 1); (3, -1, 1, 3); (3, -1, 1, 1); + (3, -1, 0, 3); (3, -1, 0, 1); (3, -1, -1, 3); (3, -1, -1, 1); + (3, -1, -2, 3); (3, -1, -2, 1); (3, 0, 2, 3); (3, 0, 2, 1); (3, 0, 1, 3); + (3, 0, 1, 1); (3, 0, 0, 3); (3, 0, 0, 1); (3, 0, -1, 3); (3, 0, -1, 1); + (3, 0, -2, 3); (3, 0, -2, 1); (3, 1, 2, 3); (3, 1, 2, 1); (3, 1, 1, 3); + (3, 1, 1, 1); (3, 1, 0, 3); (3, 1, 0, 1); (3, 1, -1, 3); (3, 1, -1, 1); + (3, 1, -2, 3); (3, 1, -2, 1)] +|}];; + +[|(a, c, l, r) + for c = -2 to 1 and l = 2 downto -2 and a = 3 downto 3 and r in [|3; 1|]|];; +[%%expect{| +- : (int * int * int * int) array = +[|(3, -2, 2, 3); (3, -2, 2, 1); (3, -2, 1, 3); (3, -2, 1, 1); (3, -2, 0, 3); + (3, -2, 0, 1); (3, -2, -1, 3); (3, -2, -1, 1); (3, -2, -2, 3); + (3, -2, -2, 1); (3, -1, 2, 3); (3, -1, 2, 1); (3, -1, 1, 3); (3, -1, 1, 1); + (3, -1, 0, 3); (3, -1, 0, 1); (3, -1, -1, 3); (3, -1, -1, 1); + (3, -1, -2, 3); (3, -1, -2, 1); (3, 0, 2, 3); (3, 0, 2, 1); (3, 0, 1, 3); + (3, 0, 1, 1); (3, 0, 0, 3); (3, 0, 0, 1); (3, 0, -1, 3); (3, 0, -1, 1); + (3, 0, -2, 3); (3, 0, -2, 1); (3, 1, 2, 3); (3, 1, 2, 1); (3, 1, 1, 3); + (3, 1, 1, 1); (3, 1, 0, 3); (3, 1, 0, 1); (3, 1, -1, 3); (3, 1, -1, 1); + (3, 1, -2, 3); (3, 1, -2, 1)|] +|}];; + +[:(a, c, l, r) + for c = -2 to 1 and l = 2 downto -2 and a = 3 downto 3 and r in [:3; 1:]:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(3, -2, 2, 3); (3, -2, 2, 1); (3, -2, 1, 3); (3, -2, 1, 1); (3, -2, 0, 3); + (3, -2, 0, 1); (3, -2, -1, 3); (3, -2, -1, 1); (3, -2, -2, 3); + (3, -2, -2, 1); (3, -1, 2, 3); (3, -1, 2, 1); (3, -1, 1, 3); (3, -1, 1, 1); + (3, -1, 0, 3); (3, -1, 0, 1); (3, -1, -1, 3); (3, -1, -1, 1); + (3, -1, -2, 3); (3, -1, -2, 1); (3, 0, 2, 3); (3, 0, 2, 1); (3, 0, 1, 3); + (3, 0, 1, 1); (3, 0, 0, 3); (3, 0, 0, 1); (3, 0, -1, 3); (3, 0, -1, 1); + (3, 0, -2, 3); (3, 0, -2, 1); (3, 1, 2, 3); (3, 1, 2, 1); (3, 1, 1, 3); + (3, 1, 1, 1); (3, 1, 0, 3); (3, 1, 0, 1); (3, 1, -1, 3); (3, 1, -1, 1); + (3, 1, -2, 3); (3, 1, -2, 1):] +|}];; + +[(a, f, h, j, l, u) + for l in [-1; 0; -2; 3; 0; 0; 1] + for a = 2 to 0 and u in [0; 3; -3; -1] and f in [2; 2; 0; -3; -3; 2] + for l in [1; 0; 2; -3; a; 3; -1] and j in [3; 1; -1; 0; -2; -3] + for h = -3 to a];; +[%%expect{| +Line 2, characters 7-8: +2 | for l in [-1; 0; -2; 3; 0; 0; 1] + ^ +Warning 26 [unused-var]: unused variable l. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, f, h, j, l, u) + for l in [|-1; 0; -2; 3; 0; 0; 1|] + for a = 2 to 0 and u in [|0; 3; -3; -1|] and f in [|2; 2; 0; -3; -3; 2|] + for l in [|1; 0; 2; -3; a; 3; -1|] and j in [|3; 1; -1; 0; -2; -3|] + for h = -3 to a|];; +[%%expect{| +Line 2, characters 8-9: +2 | for l in [|-1; 0; -2; 3; 0; 0; 1|] + ^ +Warning 26 [unused-var]: unused variable l. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, f, h, j, l, u) + for l in [:-1; 0; -2; 3; 0; 0; 1:] + for a = 2 to 0 and u in [:0; 3; -3; -1:] and f in [:2; 2; 0; -3; -3; 2:] + for l in [:1; 0; 2; -3; a; 3; -1:] and j in [:3; 1; -1; 0; -2; -3:] + for h = -3 to a:];; +[%%expect{| +Line 2, characters 8-9: +2 | for l in [:-1; 0; -2; 3; 0; 0; 1:] + ^ +Warning 26 [unused-var]: unused variable l. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(g, p, u) for p = 1 downto -3 and g = -1 downto 3 and u = 0 to -3];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(g, p, u) for p = 1 downto -3 and g = -1 downto 3 and u = 0 to -3|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(g, p, u) for p = 1 downto -3 and g = -1 downto 3 and u = 0 to -3:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(m, u) + for _ in [-2; -2; -1; 3; 2] + for m = 2 to 3 + for u in [2] + when u > 0 + when abs m mod 2 = 1];; +[%%expect{| +- : (int * int) list = [(3, 2); (3, 2); (3, 2); (3, 2); (3, 2)] +|}];; + +[|(m, u) + for _ in [|-2; -2; -1; 3; 2|] + for m = 2 to 3 + for u in [|2|] + when u > 0 + when abs m mod 2 = 1|];; +[%%expect{| +- : (int * int) array = [|(3, 2); (3, 2); (3, 2); (3, 2); (3, 2)|] +|}];; + +[:(m, u) + for _ in [:-2; -2; -1; 3; 2:] + for m = 2 to 3 + for u in [:2:] + when u > 0 + when abs m mod 2 = 1:];; +[%%expect{| +- : (int * int) iarray = [:(3, 2); (3, 2); (3, 2); (3, 2); (3, 2):] +|}];; + +[(c, s) + for c in [3; 0; 1] + for s = 0 to 3 + for s in [3; 1; 0; 2; 0] and c = 0 downto -2 + when abs s mod 2 = 1];; +[%%expect{| +Line 2, characters 7-8: +2 | for c in [3; 0; 1] + ^ +Warning 26 [unused-var]: unused variable c. +Lines 1-5, characters 0-24: +1 | [(c, s) +2 | for c in [3; 0; 1] +3 | for s = 0 to 3 +4 | for s in [3; 1; 0; 2; 0] and c = 0 downto -2 +5 | when abs s mod 2 = 1].. +Warning 26 [unused-var]: unused variable s. +- : (int * int) list = +[(0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); + (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); + (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1)] +|}];; + +[|(c, s) + for c in [|3; 0; 1|] + for s = 0 to 3 + for s in [|3; 1; 0; 2; 0|] and c = 0 downto -2 + when abs s mod 2 = 1|];; +[%%expect{| +Line 2, characters 8-9: +2 | for c in [|3; 0; 1|] + ^ +Warning 26 [unused-var]: unused variable c. +Lines 1-5, characters 0-26: +1 | [|(c, s) +2 | for c in [|3; 0; 1|] +3 | for s = 0 to 3 +4 | for s in [|3; 1; 0; 2; 0|] and c = 0 downto -2 +5 | when abs s mod 2 = 1|].. +Warning 26 [unused-var]: unused variable s. +- : (int * int) array = +[|(0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); + (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); + (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1)|] +|}];; + +[:(c, s) + for c in [:3; 0; 1:] + for s = 0 to 3 + for s in [:3; 1; 0; 2; 0:] and c = 0 downto -2 + when abs s mod 2 = 1:];; +[%%expect{| +Line 2, characters 8-9: +2 | for c in [:3; 0; 1:] + ^ +Warning 26 [unused-var]: unused variable c. +Lines 1-5, characters 0-26: +1 | [:(c, s) +2 | for c in [:3; 0; 1:] +3 | for s = 0 to 3 +4 | for s in [:3; 1; 0; 2; 0:] and c = 0 downto -2 +5 | when abs s mod 2 = 1:].. +Warning 26 [unused-var]: unused variable s. +- : (int * int) iarray = +[:(0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); + (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); + (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); + (-2, 3); (0, 1); (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); + (-1, 1); (-2, 1); (0, 3); (-1, 3); (-2, 3); (0, 1); (-1, 1); (-2, 1):] +|}];; + +[(c, d, j, q) + for q in [0; 2; -3; 3; 0; 2] and c in [0; 0; 0; 0] + when q > 0 + for d = -2 downto 2 and j = 0 to 2];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(c, d, j, q) + for q in [|0; 2; -3; 3; 0; 2|] and c in [|0; 0; 0; 0|] + when q > 0 + for d = -2 downto 2 and j = 0 to 2|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(c, d, j, q) + for q in [:0; 2; -3; 3; 0; 2:] and c in [:0; 0; 0; 0:] + when q > 0 + for d = -2 downto 2 and j = 0 to 2:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(j, k, l, r, v) + for j in [-3; 3; 2; -2] and r = -2 to -2 and k = -3 to -3 + for l in [] and _ in [-2; -1; j; k] + for v in [k; -1; 1; 1] + for v in [v; -1; 0] and r in [-3; 2; 3; 3; 1; -1]];; +[%%expect{| +Lines 1-5, characters 0-53: +1 | [(j, k, l, r, v) +2 | for j in [-3; 3; 2; -2] and r = -2 to -2 and k = -3 to -3 +3 | for l in [] and _ in [-2; -1; j; k] +4 | for v in [k; -1; 1; 1] +5 | for v in [v; -1; 0] and r in [-3; 2; 3; 3; 1; -1]].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * 'a * int * int) list = [] +|}];; + +[|(j, k, l, r, v) + for j in [|-3; 3; 2; -2|] and r = -2 to -2 and k = -3 to -3 + for l in [||] and _ in [|-2; -1; j; k|] + for v in [|k; -1; 1; 1|] + for v in [|v; -1; 0|] and r in [|-3; 2; 3; 3; 1; -1|]|];; +[%%expect{| +Lines 1-5, characters 0-59: +1 | [|(j, k, l, r, v) +2 | for j in [|-3; 3; 2; -2|] and r = -2 to -2 and k = -3 to -3 +3 | for l in [||] and _ in [|-2; -1; j; k|] +4 | for v in [|k; -1; 1; 1|] +5 | for v in [|v; -1; 0|] and r in [|-3; 2; 3; 3; 1; -1|]|].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * '_weak44 * int * int) array = [||] +|}];; + +[:(j, k, l, r, v) + for j in [:-3; 3; 2; -2:] and r = -2 to -2 and k = -3 to -3 + for l in [::] and _ in [:-2; -1; j; k:] + for v in [:k; -1; 1; 1:] + for v in [:v; -1; 0:] and r in [:-3; 2; 3; 3; 1; -1:]:];; +[%%expect{| +Lines 1-5, characters 0-59: +1 | [:(j, k, l, r, v) +2 | for j in [:-3; 3; 2; -2:] and r = -2 to -2 and k = -3 to -3 +3 | for l in [::] and _ in [:-2; -1; j; k:] +4 | for v in [:k; -1; 1; 1:] +5 | for v in [:v; -1; 0:] and r in [:-3; 2; 3; 3; 1; -1:]:].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * 'a * int * int) iarray = [::] +|}];; + +[(c, g, m, v, x) + for m = 3 downto 2 + for c = 1 to -1 and g in [2; m; 0; 1] + for x in [-2; -3; -1] + for v = 1 to 2];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(c, g, m, v, x) + for m = 3 downto 2 + for c = 1 to -1 and g in [|2; m; 0; 1|] + for x in [|-2; -3; -1|] + for v = 1 to 2|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(c, g, m, v, x) + for m = 3 downto 2 + for c = 1 to -1 and g in [:2; m; 0; 1:] + for x in [:-2; -3; -1:] + for v = 1 to 2:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(a, m, t) for m in [2; -1] and a = -1 downto 2 and t in [1; -2; 1; 0]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, m, t) for m in [|2; -1|] and a = -1 downto 2 and t in [|1; -2; 1; 0|]|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(a, m, t) for m in [:2; -1:] and a = -1 downto 2 and t in [:1; -2; 1; 0:]:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(j, k, s, t, v, z) + for s = 0 to 2 + for z = s to s + for j = 1 downto 0 and t in [0] + for k = 0 downto 1 and v = -2 downto 0 + when j <> 0];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(j, k, s, t, v, z) + for s = 0 to 2 + for z = s to s + for j = 1 downto 0 and t in [|0|] + for k = 0 downto 1 and v = -2 downto 0 + when j <> 0|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(j, k, s, t, v, z) + for s = 0 to 2 + for z = s to s + for j = 1 downto 0 and t in [:0:] + for k = 0 downto 1 and v = -2 downto 0 + when j <> 0:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(n, y) for n = -3 to -2 and y = 0 downto -3 when abs y mod 2 = 1];; +[%%expect{| +- : (int * int) list = [(-3, -1); (-3, -3); (-2, -1); (-2, -3)] +|}];; + +[|(n, y) for n = -3 to -2 and y = 0 downto -3 when abs y mod 2 = 1|];; +[%%expect{| +- : (int * int) array = [|(-3, -1); (-3, -3); (-2, -1); (-2, -3)|] +|}];; + +[:(n, y) for n = -3 to -2 and y = 0 downto -3 when abs y mod 2 = 1:];; +[%%expect{| +- : (int * int) iarray = [:(-3, -1); (-3, -3); (-2, -1); (-2, -3):] +|}];; + +[(d, e, i) + for e in [2; -1; 2; 0; 3] and i = 0 downto 0 and d in [-3; 3; -2; -2] + when abs d mod 2 = 1 + when d > 0];; +[%%expect{| +- : (int * int * int) list = +[(3, 2, 0); (3, -1, 0); (3, 2, 0); (3, 0, 0); (3, 3, 0)] +|}];; + +[|(d, e, i) + for e in [|2; -1; 2; 0; 3|] and i = 0 downto 0 and d in [|-3; 3; -2; -2|] + when abs d mod 2 = 1 + when d > 0|];; +[%%expect{| +- : (int * int * int) array = +[|(3, 2, 0); (3, -1, 0); (3, 2, 0); (3, 0, 0); (3, 3, 0)|] +|}];; + +[:(d, e, i) + for e in [:2; -1; 2; 0; 3:] and i = 0 downto 0 and d in [:-3; 3; -2; -2:] + when abs d mod 2 = 1 + when d > 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(3, 2, 0); (3, -1, 0); (3, 2, 0); (3, 0, 0); (3, 3, 0):] +|}];; + +[(c, h, k, u, x) + for x = -3 to 0 + when abs x mod 2 = 0 + for h = -3 to 3 + for u = -2 downto 3 and k = 3 to 2 + for _ = x downto 1 and c in [2; 3; 2; 1]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(c, h, k, u, x) + for x = -3 to 0 + when abs x mod 2 = 0 + for h = -3 to 3 + for u = -2 downto 3 and k = 3 to 2 + for _ = x downto 1 and c in [|2; 3; 2; 1|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(c, h, k, u, x) + for x = -3 to 0 + when abs x mod 2 = 0 + for h = -3 to 3 + for u = -2 downto 3 and k = 3 to 2 + for _ = x downto 1 and c in [:2; 3; 2; 1:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[l for l = -1 downto 1 when l > 0];; +[%%expect{| +- : int list = [] +|}];; + +[|l for l = -1 downto 1 when l > 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:l for l = -1 downto 1 when l > 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(e, j, o, q, u) + for e in [0; -3; -3; 0] and j = 1 to 3 and q in [-2; 1; -3; -1; 1] + for o = 1 to e + for u = -2 downto o];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(e, j, o, q, u) + for e in [|0; -3; -3; 0|] and j = 1 to 3 and q in [|-2; 1; -3; -1; 1|] + for o = 1 to e + for u = -2 downto o|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(e, j, o, q, u) + for e in [:0; -3; -3; 0:] and j = 1 to 3 and q in [:-2; 1; -3; -1; 1:] + for o = 1 to e + for u = -2 downto o:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(d, e, l, u, w, x) + for d = -2 to 1 and l in [2; -3; 0; -3; 0; 0; 1] + for l in [-1; 3] and e = -2 downto 0 + for u in [] and x in [3; 0; -1; 0; 2; -3] + for d in [2; -3; 0; -3; 0; 3; -2] and x in [0; -1; -2; 3; 1; 3] + for w = 0 to 1];; +[%%expect{| +Lines 1-6, characters 0-18: +1 | [(d, e, l, u, w, x) +2 | for d = -2 to 1 and l in [2; -3; 0; -3; 0; 0; 1] +3 | for l in [-1; 3] and e = -2 downto 0 +4 | for u in [] and x in [3; 0; -1; 0; 2; -3] +5 | for d in [2; -3; 0; -3; 0; 3; -2] and x in [0; -1; -2; 3; 1; 3] +6 | for w = 0 to 1].. +Warning 26 [unused-var]: unused variable d. +Line 2, characters 23-24: +2 | for d = -2 to 1 and l in [2; -3; 0; -3; 0; 0; 1] + ^ +Warning 26 [unused-var]: unused variable l. +Line 4, characters 19-20: +4 | for u in [] and x in [3; 0; -1; 0; 2; -3] + ^ +Warning 26 [unused-var]: unused variable x. +- : (int * int * int * 'a * int * int) list = [] +|}];; + +[|(d, e, l, u, w, x) + for d = -2 to 1 and l in [|2; -3; 0; -3; 0; 0; 1|] + for l in [|-1; 3|] and e = -2 downto 0 + for u in [||] and x in [|3; 0; -1; 0; 2; -3|] + for d in [|2; -3; 0; -3; 0; 3; -2|] and x in [|0; -1; -2; 3; 1; 3|] + for w = 0 to 1|];; +[%%expect{| +Lines 1-6, characters 0-20: +1 | [|(d, e, l, u, w, x) +2 | for d = -2 to 1 and l in [|2; -3; 0; -3; 0; 0; 1|] +3 | for l in [|-1; 3|] and e = -2 downto 0 +4 | for u in [||] and x in [|3; 0; -1; 0; 2; -3|] +5 | for d in [|2; -3; 0; -3; 0; 3; -2|] and x in [|0; -1; -2; 3; 1; 3|] +6 | for w = 0 to 1|].. +Warning 26 [unused-var]: unused variable d. +Line 2, characters 24-25: +2 | for d = -2 to 1 and l in [|2; -3; 0; -3; 0; 0; 1|] + ^ +Warning 26 [unused-var]: unused variable l. +Line 4, characters 22-23: +4 | for u in [||] and x in [|3; 0; -1; 0; 2; -3|] + ^ +Warning 26 [unused-var]: unused variable x. +- : (int * int * int * '_weak45 * int * int) array = [||] +|}];; + +[:(d, e, l, u, w, x) + for d = -2 to 1 and l in [:2; -3; 0; -3; 0; 0; 1:] + for l in [:-1; 3:] and e = -2 downto 0 + for u in [::] and x in [:3; 0; -1; 0; 2; -3:] + for d in [:2; -3; 0; -3; 0; 3; -2:] and x in [:0; -1; -2; 3; 1; 3:] + for w = 0 to 1:];; +[%%expect{| +Lines 1-6, characters 0-20: +1 | [:(d, e, l, u, w, x) +2 | for d = -2 to 1 and l in [:2; -3; 0; -3; 0; 0; 1:] +3 | for l in [:-1; 3:] and e = -2 downto 0 +4 | for u in [::] and x in [:3; 0; -1; 0; 2; -3:] +5 | for d in [:2; -3; 0; -3; 0; 3; -2:] and x in [:0; -1; -2; 3; 1; 3:] +6 | for w = 0 to 1:].. +Warning 26 [unused-var]: unused variable d. +Line 2, characters 24-25: +2 | for d = -2 to 1 and l in [:2; -3; 0; -3; 0; 0; 1:] + ^ +Warning 26 [unused-var]: unused variable l. +Line 4, characters 22-23: +4 | for u in [::] and x in [:3; 0; -1; 0; 2; -3:] + ^ +Warning 26 [unused-var]: unused variable x. +- : (int * int * int * 'a * int * int) iarray = [::] +|}];; + +[(a, n, r) + for a = 1 to 3 and n in [1; 3] and r in [-3; -1] + when r > 0 + when abs n mod 2 = 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, n, r) + for a = 1 to 3 and n in [|1; 3|] and r in [|-3; -1|] + when r > 0 + when abs n mod 2 = 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(a, n, r) + for a = 1 to 3 and n in [:1; 3:] and r in [:-3; -1:] + when r > 0 + when abs n mod 2 = 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(a, e, i) for a = -1 to -3 and e = -3 downto -2 and i = -1 to 1];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, e, i) for a = -1 to -3 and e = -3 downto -2 and i = -1 to 1|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(a, e, i) for a = -1 to -3 and e = -3 downto -2 and i = -1 to 1:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(c, d, x) + for c in [3; -3] + for d in [0; 0; 2; -1; -1] + when abs d mod 2 = 1 + for x = 2 downto d + when c > 0];; +[%%expect{| +- : (int * int * int) list = +[(3, -1, 2); (3, -1, 1); (3, -1, 0); (3, -1, -1); (3, -1, 2); (3, -1, 1); + (3, -1, 0); (3, -1, -1)] +|}];; + +[|(c, d, x) + for c in [|3; -3|] + for d in [|0; 0; 2; -1; -1|] + when abs d mod 2 = 1 + for x = 2 downto d + when c > 0|];; +[%%expect{| +- : (int * int * int) array = +[|(3, -1, 2); (3, -1, 1); (3, -1, 0); (3, -1, -1); (3, -1, 2); (3, -1, 1); + (3, -1, 0); (3, -1, -1)|] +|}];; + +[:(c, d, x) + for c in [:3; -3:] + for d in [:0; 0; 2; -1; -1:] + when abs d mod 2 = 1 + for x = 2 downto d + when c > 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(3, -1, 2); (3, -1, 1); (3, -1, 0); (3, -1, -1); (3, -1, 2); (3, -1, 1); + (3, -1, 0); (3, -1, -1):] +|}];; + +[(h, u, z) + for _ = -2 to 0 and u in [3; 3; -3] + for h = u downto 1 and z in [0; -1; -2; 3] + for z in [] + when u > 0];; +[%%expect{| +Line 3, characters 26-27: +3 | for h = u downto 1 and z in [0; -1; -2; 3] + ^ +Warning 26 [unused-var]: unused variable z. +- : (int * int * 'a) list = [] +|}];; + +[|(h, u, z) + for _ = -2 to 0 and u in [|3; 3; -3|] + for h = u downto 1 and z in [|0; -1; -2; 3|] + for z in [||] + when u > 0|];; +[%%expect{| +Line 3, characters 27-28: +3 | for h = u downto 1 and z in [|0; -1; -2; 3|] + ^ +Warning 26 [unused-var]: unused variable z. +- : (int * int * '_weak46) array = [||] +|}];; + +[:(h, u, z) + for _ = -2 to 0 and u in [:3; 3; -3:] + for h = u downto 1 and z in [:0; -1; -2; 3:] + for z in [::] + when u > 0:];; +[%%expect{| +Line 3, characters 27-28: +3 | for h = u downto 1 and z in [:0; -1; -2; 3:] + ^ +Warning 26 [unused-var]: unused variable z. +- : (int * int * 'a) iarray = [::] +|}];; + +[(b, e, k, r, u, z) + for z in [1; 0] + when z <> 0 + for u = z downto -1 and b = 0 downto -1 + for k in [] + for r = -3 downto 1 and e = -3 downto 2];; +[%%expect{| +- : (int * int * 'a * int * int * int) list = [] +|}];; + +[|(b, e, k, r, u, z) + for z in [|1; 0|] + when z <> 0 + for u = z downto -1 and b = 0 downto -1 + for k in [||] + for r = -3 downto 1 and e = -3 downto 2|];; +[%%expect{| +- : (int * int * '_weak47 * int * int * int) array = [||] +|}];; + +[:(b, e, k, r, u, z) + for z in [:1; 0:] + when z <> 0 + for u = z downto -1 and b = 0 downto -1 + for k in [::] + for r = -3 downto 1 and e = -3 downto 2:];; +[%%expect{| +- : (int * int * 'a * int * int * int) iarray = [::] +|}];; + +[(h, i, q, t) + for i in [-3; 0; -3; -2] + when i <> 0 + for t = -2 downto 2 + for q = 3 downto 1 and h = -1 to -2 + when t > 0];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(h, i, q, t) + for i in [|-3; 0; -3; -2|] + when i <> 0 + for t = -2 downto 2 + for q = 3 downto 1 and h = -1 to -2 + when t > 0|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(h, i, q, t) + for i in [:-3; 0; -3; -2:] + when i <> 0 + for t = -2 downto 2 + for q = 3 downto 1 and h = -1 to -2 + when t > 0:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(j, o, y, z) + for z = -2 to 3 and o in [-1] and j = 1 to 3 + for y = 0 downto 0 + when abs z mod 2 = 0];; +[%%expect{| +- : (int * int * int * int) list = +[(1, -1, 0, -2); (2, -1, 0, -2); (3, -1, 0, -2); (1, -1, 0, 0); + (2, -1, 0, 0); (3, -1, 0, 0); (1, -1, 0, 2); (2, -1, 0, 2); (3, -1, 0, 2)] +|}];; + +[|(j, o, y, z) + for z = -2 to 3 and o in [|-1|] and j = 1 to 3 + for y = 0 downto 0 + when abs z mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int) array = +[|(1, -1, 0, -2); (2, -1, 0, -2); (3, -1, 0, -2); (1, -1, 0, 0); + (2, -1, 0, 0); (3, -1, 0, 0); (1, -1, 0, 2); (2, -1, 0, 2); (3, -1, 0, 2)|] +|}];; + +[:(j, o, y, z) + for z = -2 to 3 and o in [:-1:] and j = 1 to 3 + for y = 0 downto 0 + when abs z mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(1, -1, 0, -2); (2, -1, 0, -2); (3, -1, 0, -2); (1, -1, 0, 0); + (2, -1, 0, 0); (3, -1, 0, 0); (1, -1, 0, 2); (2, -1, 0, 2); (3, -1, 0, 2):] +|}];; + +[(f, j, q, t) + for f = -2 to -1 and t in [-2; -3; 3; -2; -3; 2] + for q = 2 to -3 and _ = 2 to 2 + for j = -3 downto t];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(f, j, q, t) + for f = -2 to -1 and t in [|-2; -3; 3; -2; -3; 2|] + for q = 2 to -3 and _ = 2 to 2 + for j = -3 downto t|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(f, j, q, t) + for f = -2 to -1 and t in [:-2; -3; 3; -2; -3; 2:] + for q = 2 to -3 and _ = 2 to 2 + for j = -3 downto t:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(i, k, u, w) + for u in [2; -3; 2; -1; 3; -3; 3] + when u < 0 + for u in [0; -3] and i = 0 downto 3 and w in [0; 2; 2] and k in [1]];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(i, r) for i = 1 downto 2 and r = 2 downto 0|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(i, r) for i = 1 downto 2 and r = 2 downto 0:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(g, k, p, u, v, x, y) + for u in [-1; 0; -2; 1; -3; 3] + and v = 3 downto 2 + and x in [1; 3; 0; -2; 0; 3; 3] + for y = 3 to 1 + and k in [v; u; -3; u; x; -1] + when y > 0 + for g = -1 to -3 + and p = v downto 0];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(g, k, p, u, v, x, y) + for u in [|-1; 0; -2; 1; -3; 3|] + and v = 3 downto 2 + and x in [|1; 3; 0; -2; 0; 3; 3|] + for y = 3 to 1 + and k in [|v; u; -3; u; x; -1|] + when y > 0 + for g = -1 to -3 + and p = v downto 0|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(g, k, p, u, v, x, y) + for u in [:-1; 0; -2; 1; -3; 3:] + and v = 3 downto 2 + and x in [:1; 3; 0; -2; 0; 3; 3:] + for y = 3 to 1 + and k in [:v; u; -3; u; x; -1:] + when y > 0 + for g = -1 to -3 + and p = v downto 0:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(k, r, y) for y = -2 to 0 for k = -3 downto y and r = -2 downto y];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(k, r, y) for y = -2 to 0 for k = -3 downto y and r = -2 downto y|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(k, r, y) for y = -2 to 0 for k = -3 downto y and r = -2 downto y:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(b, g, m, y) + for g = -2 downto -3 and y = 3 downto 0 + for b = y to 1 and m in [0; 0; 3; 2; 2; -3] + when b <> 0 + for m in [y; b] + when y < 0];; +[%%expect{| +Line 3, characters 22-23: +3 | for b = y to 1 and m in [0; 0; 3; 2; 2; -3] + ^ +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int) list = [] +|}];; + +[|(b, g, m, y) + for g = -2 downto -3 and y = 3 downto 0 + for b = y to 1 and m in [|0; 0; 3; 2; 2; -3|] + when b <> 0 + for m in [|y; b|] + when y < 0|];; +[%%expect{| +Line 3, characters 23-24: +3 | for b = y to 1 and m in [|0; 0; 3; 2; 2; -3|] + ^ +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int) array = [||] +|}];; + +[:(b, g, m, y) + for g = -2 downto -3 and y = 3 downto 0 + for b = y to 1 and m in [:0; 0; 3; 2; 2; -3:] + when b <> 0 + for m in [:y; b:] + when y < 0:];; +[%%expect{| +Line 3, characters 23-24: +3 | for b = y to 1 and m in [:0; 0; 3; 2; 2; -3:] + ^ +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int) iarray = [::] +|}];; + +[(c, s, t, y) + for s in [-2] + when s <> 0 + for c = -1 downto -2 + when s > 0 + for t = 0 to -1 and y in [-2; -3]];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(c, s, t, y) + for s in [|-2|] + when s <> 0 + for c = -1 downto -2 + when s > 0 + for t = 0 to -1 and y in [|-2; -3|]|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(c, s, t, y) + for s in [:-2:] + when s <> 0 + for c = -1 downto -2 + when s > 0 + for t = 0 to -1 and y in [:-2; -3:]:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(l, u) for l = 1 downto -3 and u = -3 to 0 when abs l mod 2 = 1];; +[%%expect{| +- : (int * int) list = +[(1, -3); (1, -2); (1, -1); (1, 0); (-1, -3); (-1, -2); (-1, -1); (-1, 0); + (-3, -3); (-3, -2); (-3, -1); (-3, 0)] +|}];; + +[|(l, u) for l = 1 downto -3 and u = -3 to 0 when abs l mod 2 = 1|];; +[%%expect{| +- : (int * int) array = +[|(1, -3); (1, -2); (1, -1); (1, 0); (-1, -3); (-1, -2); (-1, -1); (-1, 0); + (-3, -3); (-3, -2); (-3, -1); (-3, 0)|] +|}];; + +[:(l, u) for l = 1 downto -3 and u = -3 to 0 when abs l mod 2 = 1:];; +[%%expect{| +- : (int * int) iarray = +[:(1, -3); (1, -2); (1, -1); (1, 0); (-1, -3); (-1, -2); (-1, -1); (-1, 0); + (-3, -3); (-3, -2); (-3, -1); (-3, 0):] +|}];; + +[(c, p, z) for c = 0 downto 0 and p in [-1; 3] and z = 3 to 1];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(c, p, z) for c = 0 downto 0 and p in [|-1; 3|] and z = 3 to 1|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(c, p, z) for c = 0 downto 0 and p in [:-1; 3:] and z = 3 to 1:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(a, b, f, i, j, m, s, z) + for a = 1 downto -2 + for f = a to a and i = 0 to -3 and m = 3 downto 3 + for j in [-3; -2; -2; 0; -2; 2; -1] + for s = 3 downto 0 and b in [1; -2; 3; 3; -3] and z = -3 downto -2];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, b, f, i, j, m, s, z) + for a = 1 downto -2 + for f = a to a and i = 0 to -3 and m = 3 downto 3 + for j in [|-3; -2; -2; 0; -2; 2; -1|] + for s = 3 downto 0 and b in [|1; -2; 3; 3; -3|] and z = -3 downto -2|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, b, f, i, j, m, s, z) + for a = 1 downto -2 + for f = a to a and i = 0 to -3 and m = 3 downto 3 + for j in [:-3; -2; -2; 0; -2; 2; -1:] + for s = 3 downto 0 and b in [:1; -2; 3; 3; -3:] and z = -3 downto -2:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(k, u, w) for w in [] and k = -1 to 0 and u = 1 downto 1];; +[%%expect{| +- : (int * int * 'a) list = [] +|}];; + +[|(k, u, w) for w in [||] and k = -1 to 0 and u = 1 downto 1|];; +[%%expect{| +- : (int * int * '_weak48) array = [||] +|}];; + +[:(k, u, w) for w in [::] and k = -1 to 0 and u = 1 downto 1:];; +[%%expect{| +- : (int * int * 'a) iarray = [::] +|}];; + +[(a, k, r, u) + for u in [-1] + for r = -3 to -3 and k in [-1; 3; -3; 0] and a = 2 to 0 + when abs u mod 2 = 0];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(a, k, r, u) + for u in [|-1|] + for r = -3 to -3 and k in [|-1; 3; -3; 0|] and a = 2 to 0 + when abs u mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(a, k, r, u) + for u in [:-1:] + for r = -3 to -3 and k in [:-1; 3; -3; 0:] and a = 2 to 0 + when abs u mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[b for b = -3 to 0 when b <> 0];; +[%%expect{| +- : int list = [-3; -2; -1] +|}];; + +[|b for b = -3 to 0 when b <> 0|];; +[%%expect{| +- : int array = [|-3; -2; -1|] +|}];; + +[:b for b = -3 to 0 when b <> 0:];; +[%%expect{| +- : int iarray = [:-3; -2; -1:] +|}];; + +[(h, u, v) + for u in [2; 2; 2; -3; 0; 2; 1] + for h in [2; 2] and v = u to 3 + when u <> 0 + when v <> 0];; +[%%expect{| +- : (int * int * int) list = +[(2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 2, 2); + (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, -3, -3); + (2, -3, -2); (2, -3, -1); (2, -3, 1); (2, -3, 2); (2, -3, 3); (2, -3, -3); + (2, -3, -2); (2, -3, -1); (2, -3, 1); (2, -3, 2); (2, -3, 3); (2, 2, 2); + (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 1, 1); (2, 1, 2); (2, 1, 3); (2, 1, 1); + (2, 1, 2); (2, 1, 3)] +|}];; + +[|(h, u, v) + for u in [|2; 2; 2; -3; 0; 2; 1|] + for h in [|2; 2|] and v = u to 3 + when u <> 0 + when v <> 0|];; +[%%expect{| +- : (int * int * int) array = +[|(2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); + (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); + (2, -3, -3); (2, -3, -2); (2, -3, -1); (2, -3, 1); (2, -3, 2); (2, -3, 3); + (2, -3, -3); (2, -3, -2); (2, -3, -1); (2, -3, 1); (2, -3, 2); (2, -3, 3); + (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 1, 1); (2, 1, 2); + (2, 1, 3); (2, 1, 1); (2, 1, 2); (2, 1, 3)|] +|}];; + +[:(h, u, v) + for u in [:2; 2; 2; -3; 0; 2; 1:] + for h in [:2; 2:] and v = u to 3 + when u <> 0 + when v <> 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); + (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); + (2, -3, -3); (2, -3, -2); (2, -3, -1); (2, -3, 1); (2, -3, 2); (2, -3, 3); + (2, -3, -3); (2, -3, -2); (2, -3, -1); (2, -3, 1); (2, -3, 2); (2, -3, 3); + (2, 2, 2); (2, 2, 3); (2, 2, 2); (2, 2, 3); (2, 1, 1); (2, 1, 2); + (2, 1, 3); (2, 1, 1); (2, 1, 2); (2, 1, 3):] +|}];; + +[(q, r, s, v) + for q = 1 downto 1 + for v in [-2; 2; q; 1; -2; 0; 2] + for r in [] + for _ in [] + for r = -2 to -1 and s = 1 downto q];; +[%%expect{| +Line 4, characters 7-8: +4 | for r in [] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int) list = [] +|}];; + +[|(q, r, s, v) + for q = 1 downto 1 + for v in [|-2; 2; q; 1; -2; 0; 2|] + for r in [||] + for _ in [||] + for r = -2 to -1 and s = 1 downto q|];; +[%%expect{| +Line 4, characters 8-9: +4 | for r in [||] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int) array = [||] +|}];; + +[:(q, r, s, v) + for q = 1 downto 1 + for v in [:-2; 2; q; 1; -2; 0; 2:] + for r in [::] + for _ in [::] + for r = -2 to -1 and s = 1 downto q:];; +[%%expect{| +Line 4, characters 8-9: +4 | for r in [::] + ^ +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int) iarray = [::] +|}];; + +[(j, l, q, r, s, v, z) + for r = 3 downto -1 + for s = 1 downto 2 and v = 0 downto -1 + for z in [] + for j in [-1; -1; 2; 0; -1] + for l = 1 to -1 and q in [-2; 1]];; +[%%expect{| +- : (int * int * int * int * int * int * 'a) list = [] +|}];; + +[|(j, l, q, r, s, v, z) + for r = 3 downto -1 + for s = 1 downto 2 and v = 0 downto -1 + for z in [||] + for j in [|-1; -1; 2; 0; -1|] + for l = 1 to -1 and q in [|-2; 1|]|];; +[%%expect{| +- : (int * int * int * int * int * int * '_weak49) array = [||] +|}];; + +[:(j, l, q, r, s, v, z) + for r = 3 downto -1 + for s = 1 downto 2 and v = 0 downto -1 + for z in [::] + for j in [:-1; -1; 2; 0; -1:] + for l = 1 to -1 and q in [:-2; 1:]:];; +[%%expect{| +- : (int * int * int * int * int * int * 'a) iarray = [::] +|}];; + +[(a, j, m, v) + for j in [3; 2; -2; -2; -3; -3; -1] + for v in [-3; 3] + for a = -2 to -3 and m = -3 to 2];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(a, j, m, v) + for j in [|3; 2; -2; -2; -3; -3; -1|] + for v in [|-3; 3|] + for a = -2 to -3 and m = -3 to 2|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(a, j, m, v) + for j in [:3; 2; -2; -2; -3; -3; -1:] + for v in [:-3; 3:] + for a = -2 to -3 and m = -3 to 2:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(c, q, r, x) + for x = 2 downto -2 + when abs x mod 2 = 1 + for q = -2 downto 1 and x in [-1; -3; 1] + when x > 0 + for r in [q; 1; -2; 0; 2; -1; -3] and c = 3 downto 2];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(c, q, r, x) + for x = 2 downto -2 + when abs x mod 2 = 1 + for q = -2 downto 1 and x in [|-1; -3; 1|] + when x > 0 + for r in [|q; 1; -2; 0; 2; -1; -3|] and c = 3 downto 2|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(c, q, r, x) + for x = 2 downto -2 + when abs x mod 2 = 1 + for q = -2 downto 1 and x in [:-1; -3; 1:] + when x > 0 + for r in [:q; 1; -2; 0; 2; -1; -3:] and c = 3 downto 2:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(c, s) for _ = 3 to -1 and c = 1 to -1 and s = -3 to -1 for c = 0 downto 0];; +[%%expect{| +Line 1, characters 0-76: +1 | [(c, s) for _ = 3 to -1 and c = 1 to -1 and s = -3 to -1 for c = 0 downto 0];; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Warning 26 [unused-var]: unused variable c. +- : (int * int) list = [] +|}];; + +[|(c, s) for _ = 3 to -1 and c = 1 to -1 and s = -3 to -1 for c = 0 downto 0|];; +[%%expect{| +Line 1, characters 0-78: +1 | [|(c, s) for _ = 3 to -1 and c = 1 to -1 and s = -3 to -1 for c = 0 downto 0|];; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Warning 26 [unused-var]: unused variable c. +- : (int * int) array = [||] +|}];; + +[:(c, s) for _ = 3 to -1 and c = 1 to -1 and s = -3 to -1 for c = 0 downto 0:];; +[%%expect{| +Line 1, characters 0-78: +1 | [:(c, s) for _ = 3 to -1 and c = 1 to -1 and s = -3 to -1 for c = 0 downto 0:];; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Warning 26 [unused-var]: unused variable c. +- : (int * int) iarray = [::] +|}];; + +[(i, n, t) for i = -2 to -3 for n in [-1; 0; i] and t in [0; -2; 1; -2; 2]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, q, v, w, y) + for q in [|3|] and v in [|3; 0; 0; -3|] + for w = -2 downto -2 and a = v downto -3 and y = -1 to -3 + for v in [||]|];; +[%%expect{| +- : (int * int * '_weak50 * int * int) array = [||] +|}];; + +[:(a, q, v, w, y) + for q in [:3:] and v in [:3; 0; 0; -3:] + for w = -2 downto -2 and a = v downto -3 and y = -1 to -3 + for v in [::]:];; +[%%expect{| +- : (int * int * 'a * int * int) iarray = [::] +|}];; + +[(f, v) for v in [3; -3] and f in [-3] when v > 0];; +[%%expect{| +- : (int * int) list = [(-3, 3)] +|}];; + +[|(f, v) for v in [|3; -3|] and f in [|-3|] when v > 0|];; +[%%expect{| +- : (int * int) array = [|(-3, 3)|] +|}];; + +[:(f, v) for v in [:3; -3:] and f in [:-3:] when v > 0:];; +[%%expect{| +- : (int * int) iarray = [:(-3, 3):] +|}];; + +[(l, m, s, v) + for v = 3 to 3 + for m = -1 downto v + for l = 2 to v + for s in [-3; -2; v; 3] + for m in [2; 2; 2]];; +[%%expect{| +Lines 1-6, characters 0-22: +1 | [(l, m, s, v) +2 | for v = 3 to 3 +3 | for m = -1 downto v +4 | for l = 2 to v +5 | for s in [-3; -2; v; 3] +6 | for m in [2; 2; 2]].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int) list = [] +|}];; + +[|(l, m, s, v) + for v = 3 to 3 + for m = -1 downto v + for l = 2 to v + for s in [|-3; -2; v; 3|] + for m in [|2; 2; 2|]|];; +[%%expect{| +Lines 1-6, characters 0-26: +1 | [|(l, m, s, v) +2 | for v = 3 to 3 +3 | for m = -1 downto v +4 | for l = 2 to v +5 | for s in [|-3; -2; v; 3|] +6 | for m in [|2; 2; 2|]|].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int) array = [||] +|}];; + +[:(l, m, s, v) + for v = 3 to 3 + for m = -1 downto v + for l = 2 to v + for s in [:-3; -2; v; 3:] + for m in [:2; 2; 2:]:];; +[%%expect{| +Lines 1-6, characters 0-26: +1 | [:(l, m, s, v) +2 | for v = 3 to 3 +3 | for m = -1 downto v +4 | for l = 2 to v +5 | for s in [:-3; -2; v; 3:] +6 | for m in [:2; 2; 2:]:].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int) iarray = [::] +|}];; + +[(c, k, y, z) + for k in [-1; -1; -3; -2; -3; 2; -1] + when abs k mod 2 = 0 + for k = 1 downto -2 and y in [2; 3; k; 3; 3; 3] + for z = 0 downto 1 and c in [0; 0; -1; 2; 0] and y = -2 downto 1];; +[%%expect{| +Line 4, characters 27-28: +4 | for k = 1 downto -2 and y in [2; 3; k; 3; 3; 3] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int) list = [] +|}];; + +[|(c, k, y, z) + for k in [|-1; -1; -3; -2; -3; 2; -1|] + when abs k mod 2 = 0 + for k = 1 downto -2 and y in [|2; 3; k; 3; 3; 3|] + for z = 0 downto 1 and c in [|0; 0; -1; 2; 0|] and y = -2 downto 1|];; +[%%expect{| +Line 4, characters 28-29: +4 | for k = 1 downto -2 and y in [|2; 3; k; 3; 3; 3|] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int) array = [||] +|}];; + +[:(c, k, y, z) + for k in [:-1; -1; -3; -2; -3; 2; -1:] + when abs k mod 2 = 0 + for k = 1 downto -2 and y in [:2; 3; k; 3; 3; 3:] + for z = 0 downto 1 and c in [:0; 0; -1; 2; 0:] and y = -2 downto 1:];; +[%%expect{| +Line 4, characters 28-29: +4 | for k = 1 downto -2 and y in [:2; 3; k; 3; 3; 3:] + ^ +Warning 26 [unused-var]: unused variable y. +- : (int * int * int * int) iarray = [::] +|}];; + +[(a, v) for a = 0 to -3 for v = -3 downto -1];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(a, v) for a = 0 to -3 for v = -3 downto -1|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(a, v) for a = 0 to -3 for v = -3 downto -1:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(o, q, v, y) + for o = 1 to 1 + when abs o mod 2 = 1 + when abs o mod 2 = 0 + for y in [-3; 1; -3; -1] and q = 0 downto 0 + for q = 0 to 3 and v = -2 to y];; +[%%expect{| +Lines 1-6, characters 0-34: +1 | [(o, q, v, y) +2 | for o = 1 to 1 +3 | when abs o mod 2 = 1 +4 | when abs o mod 2 = 0 +5 | for y in [-3; 1; -3; -1] and q = 0 downto 0 +6 | for q = 0 to 3 and v = -2 to y].. +Warning 26 [unused-var]: unused variable q. +- : (int * int * int * int) list = [] +|}];; + +[|(o, q, v, y) + for o = 1 to 1 + when abs o mod 2 = 1 + when abs o mod 2 = 0 + for y in [|-3; 1; -3; -1|] and q = 0 downto 0 + for q = 0 to 3 and v = -2 to y|];; +[%%expect{| +Lines 1-6, characters 0-36: +1 | [|(o, q, v, y) +2 | for o = 1 to 1 +3 | when abs o mod 2 = 1 +4 | when abs o mod 2 = 0 +5 | for y in [|-3; 1; -3; -1|] and q = 0 downto 0 +6 | for q = 0 to 3 and v = -2 to y|].. +Warning 26 [unused-var]: unused variable q. +- : (int * int * int * int) array = [||] +|}];; + +[:(o, q, v, y) + for o = 1 to 1 + when abs o mod 2 = 1 + when abs o mod 2 = 0 + for y in [:-3; 1; -3; -1:] and q = 0 downto 0 + for q = 0 to 3 and v = -2 to y:];; +[%%expect{| +Lines 1-6, characters 0-36: +1 | [:(o, q, v, y) +2 | for o = 1 to 1 +3 | when abs o mod 2 = 1 +4 | when abs o mod 2 = 0 +5 | for y in [:-3; 1; -3; -1:] and q = 0 downto 0 +6 | for q = 0 to 3 and v = -2 to y:].. +Warning 26 [unused-var]: unused variable q. +- : (int * int * int * int) iarray = [::] +|}];; + +[(b, e, n, s, t, u, w) + for e in [1; 2; -2; 1; -1] + for u = -2 downto 3 and b = -3 downto -3 + for w = 0 to 2 + for n in [-1; 3; u; 2; 2] and s in [-3; -1; 3; 0; w; 3; 2] + for t in [3; 0; 0; 2; 1; -1; 0]];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(b, e, n, s, t, u, w) + for e in [|1; 2; -2; 1; -1|] + for u = -2 downto 3 and b = -3 downto -3 + for w = 0 to 2 + for n in [|-1; 3; u; 2; 2|] and s in [|-3; -1; 3; 0; w; 3; 2|] + for t in [|3; 0; 0; 2; 1; -1; 0|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(b, e, n, s, t, u, w) + for e in [:1; 2; -2; 1; -1:] + for u = -2 downto 3 and b = -3 downto -3 + for w = 0 to 2 + for n in [:-1; 3; u; 2; 2:] and s in [:-3; -1; 3; 0; w; 3; 2:] + for t in [:3; 0; 0; 2; 1; -1; 0:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(b, f, m, n, p, q, s) + for p in [1; 3; 3] + for b = -3 downto 3 + for f in [1; -3; -3; -1] and q = 1 downto b + for n = 0 downto 1 and s in [2; -1; 3; 0; -3; -3] and m = 0 downto 0];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(b, f, m, n, p, q, s) + for p in [|1; 3; 3|] + for b = -3 downto 3 + for f in [|1; -3; -3; -1|] and q = 1 downto b + for n = 0 downto 1 and s in [|2; -1; 3; 0; -3; -3|] and m = 0 downto 0|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(b, f, m, n, p, q, s) + for p in [:1; 3; 3:] + for b = -3 downto 3 + for f in [:1; -3; -3; -1:] and q = 1 downto b + for n = 0 downto 1 and s in [:2; -1; 3; 0; -3; -3:] and m = 0 downto 0:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, t, x) for a in [-1; 3; 0] and t = 2 to -1 and x = 3 to -2];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, t, x) for a in [|-1; 3; 0|] and t = 2 to -1 and x = 3 to -2|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(a, t, x) for a in [:-1; 3; 0:] and t = 2 to -1 and x = 3 to -2:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(b, c, f, l, y) + for b in [2; 0; -2; -2; 2; 1] + when b < 0 + for y = -3 to b and f = 3 to 0 + when abs b mod 2 = 0 + for l in [-1; -1; 1] and c = 3 to -2];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(b, c, f, l, y) + for b in [|2; 0; -2; -2; 2; 1|] + when b < 0 + for y = -3 to b and f = 3 to 0 + when abs b mod 2 = 0 + for l in [|-1; -1; 1|] and c = 3 to -2|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(b, c, f, l, y) + for b in [:2; 0; -2; -2; 2; 1:] + when b < 0 + for y = -3 to b and f = 3 to 0 + when abs b mod 2 = 0 + for l in [:-1; -1; 1:] and c = 3 to -2:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(b, i, j, u) + for b in [-1; -2; 3] and u in [3] and j = 2 downto 0 and i in [1] + when u > 0];; +[%%expect{| +- : (int * int * int * int) list = +[(-1, 1, 2, 3); (-1, 1, 1, 3); (-1, 1, 0, 3); (-2, 1, 2, 3); (-2, 1, 1, 3); + (-2, 1, 0, 3); (3, 1, 2, 3); (3, 1, 1, 3); (3, 1, 0, 3)] +|}];; + +[|(b, i, j, u) + for b in [|-1; -2; 3|] and u in [|3|] and j = 2 downto 0 and i in [|1|] + when u > 0|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-1, 1, 2, 3); (-1, 1, 1, 3); (-1, 1, 0, 3); (-2, 1, 2, 3); (-2, 1, 1, 3); + (-2, 1, 0, 3); (3, 1, 2, 3); (3, 1, 1, 3); (3, 1, 0, 3)|] +|}];; + +[:(b, i, j, u) + for b in [:-1; -2; 3:] and u in [:3:] and j = 2 downto 0 and i in [:1:] + when u > 0:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-1, 1, 2, 3); (-1, 1, 1, 3); (-1, 1, 0, 3); (-2, 1, 2, 3); (-2, 1, 1, 3); + (-2, 1, 0, 3); (3, 1, 2, 3); (3, 1, 1, 3); (3, 1, 0, 3):] +|}];; + +[(a, h, t) for t = -3 to -2 and a = 0 downto 3 and h = -2 to -3];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, h, t) for t = -3 to -2 and a = 0 downto 3 and h = -2 to -3|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(a, h, t) for t = -3 to -2 and a = 0 downto 3 and h = -2 to -3:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(o, t, w) + for w in [0; -1; 2] + when abs w mod 2 = 0 + for o = 3 to -2 + for o in [-3; -2; -3; -3; 1; 3] and t = 3 to 3];; +[%%expect{| +Lines 1-5, characters 0-50: +1 | [(o, t, w) +2 | for w in [0; -1; 2] +3 | when abs w mod 2 = 0 +4 | for o = 3 to -2 +5 | for o in [-3; -2; -3; -3; 1; 3] and t = 3 to 3].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int) list = [] +|}];; + +[|(o, t, w) + for w in [|0; -1; 2|] + when abs w mod 2 = 0 + for o = 3 to -2 + for o in [|-3; -2; -3; -3; 1; 3|] and t = 3 to 3|];; +[%%expect{| +Lines 1-5, characters 0-54: +1 | [|(o, t, w) +2 | for w in [|0; -1; 2|] +3 | when abs w mod 2 = 0 +4 | for o = 3 to -2 +5 | for o in [|-3; -2; -3; -3; 1; 3|] and t = 3 to 3|].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int) array = [||] +|}];; + +[:(o, t, w) + for w in [:0; -1; 2:] + when abs w mod 2 = 0 + for o = 3 to -2 + for o in [:-3; -2; -3; -3; 1; 3:] and t = 3 to 3:];; +[%%expect{| +Lines 1-5, characters 0-54: +1 | [:(o, t, w) +2 | for w in [:0; -1; 2:] +3 | when abs w mod 2 = 0 +4 | for o = 3 to -2 +5 | for o in [:-3; -2; -3; -3; 1; 3:] and t = 3 to 3:].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int) iarray = [::] +|}];; + +[(f, j, n, p, q) + for p in [-1; -2; -1; -1; 3; -1; 3] + when abs p mod 2 = 0 + for j in [3] and n = 3 to 3 + for q in [1] + for f = 2 downto 0];; +[%%expect{| +- : (int * int * int * int * int) list = +[(2, 3, 3, -2, 1); (1, 3, 3, -2, 1); (0, 3, 3, -2, 1)] +|}];; + +[|(f, j, n, p, q) + for p in [|-1; -2; -1; -1; 3; -1; 3|] + when abs p mod 2 = 0 + for j in [|3|] and n = 3 to 3 + for q in [|1|] + for f = 2 downto 0|];; +[%%expect{| +- : (int * int * int * int * int) array = +[|(2, 3, 3, -2, 1); (1, 3, 3, -2, 1); (0, 3, 3, -2, 1)|] +|}];; + +[:(f, j, n, p, q) + for p in [:-1; -2; -1; -1; 3; -1; 3:] + when abs p mod 2 = 0 + for j in [:3:] and n = 3 to 3 + for q in [:1:] + for f = 2 downto 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = +[:(2, 3, 3, -2, 1); (1, 3, 3, -2, 1); (0, 3, 3, -2, 1):] +|}];; + +[(f, i, j, n, o, u, z) + for u = -3 downto -3 + for z = 1 downto -3 and j = 2 to 3 + for z in [-1; z; 1; 3; -1] and f = 1 downto z and i = 3 downto 3 + for n = 3 downto f and o = 3 to -3 and f = -3 downto 3];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(f, i, j, n, o, u, z) + for u = -3 downto -3 + for z = 1 downto -3 and j = 2 to 3 + for z in [|-1; z; 1; 3; -1|] and f = 1 downto z and i = 3 downto 3 + for n = 3 downto f and o = 3 to -3 and f = -3 downto 3|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(f, i, j, n, o, u, z) + for u = -3 downto -3 + for z = 1 downto -3 and j = 2 to 3 + for z in [:-1; z; 1; 3; -1:] and f = 1 downto z and i = 3 downto 3 + for n = 3 downto f and o = 3 to -3 and f = -3 downto 3:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, l) for l = -3 downto 3 and e = 0 downto -2];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(e, l) for l = -3 downto 3 and e = 0 downto -2|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(e, l) for l = -3 downto 3 and e = 0 downto -2:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(j, m) for j = -1 to 1 and m in [-1; -1] when j > 0];; +[%%expect{| +- : (int * int) list = [(1, -1); (1, -1)] +|}];; + +[|(j, m) for j = -1 to 1 and m in [|-1; -1|] when j > 0|];; +[%%expect{| +- : (int * int) array = [|(1, -1); (1, -1)|] +|}];; + +[:(j, m) for j = -1 to 1 and m in [:-1; -1:] when j > 0:];; +[%%expect{| +- : (int * int) iarray = [:(1, -1); (1, -1):] +|}];; + +[(g, p, r) + for p = 2 downto 2 and r = -2 to -1 and g in [-3; 3] + when g <> 0 + when abs r mod 2 = 0 + when abs g mod 2 = 1];; +[%%expect{| +- : (int * int * int) list = [(-3, 2, -2); (3, 2, -2)] +|}];; + +[|(g, p, r) + for p = 2 downto 2 and r = -2 to -1 and g in [|-3; 3|] + when g <> 0 + when abs r mod 2 = 0 + when abs g mod 2 = 1|];; +[%%expect{| +- : (int * int * int) array = [|(-3, 2, -2); (3, 2, -2)|] +|}];; + +[:(g, p, r) + for p = 2 downto 2 and r = -2 to -1 and g in [:-3; 3:] + when g <> 0 + when abs r mod 2 = 0 + when abs g mod 2 = 1:];; +[%%expect{| +- : (int * int * int) iarray = [:(-3, 2, -2); (3, 2, -2):] +|}];; + +[(c, m, s) + for s = 1 downto 0 and c = -2 to -2 + for m in [1; 2; 1] + when abs m mod 2 = 1];; +[%%expect{| +- : (int * int * int) list = [(-2, 1, 1); (-2, 1, 1); (-2, 1, 0); (-2, 1, 0)] +|}];; + +[|(c, m, s) + for s = 1 downto 0 and c = -2 to -2 + for m in [|1; 2; 1|] + when abs m mod 2 = 1|];; +[%%expect{| +- : (int * int * int) array = +[|(-2, 1, 1); (-2, 1, 1); (-2, 1, 0); (-2, 1, 0)|] +|}];; + +[:(c, m, s) + for s = 1 downto 0 and c = -2 to -2 + for m in [:1; 2; 1:] + when abs m mod 2 = 1:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-2, 1, 1); (-2, 1, 1); (-2, 1, 0); (-2, 1, 0):] +|}];; + +[(f, m, x) for m in [2; -3; 3; 3; 3] and x in [] and f in [-2; 2; -2; -1; 3]];; +[%%expect{| +- : (int * int * 'a) list = [] +|}];; + +[|(l, t, y, z) + for y in [|-3; -2; -2; 1; 1|] + and l = 1 downto 0 + and z in [|0; -3|] + and t = 0 to 1|];; +[%%expect{| +- : (int * int * int * int) array = +[|(1, 0, -3, 0); (1, 1, -3, 0); (1, 0, -3, -3); (1, 1, -3, -3); + (0, 0, -3, 0); (0, 1, -3, 0); (0, 0, -3, -3); (0, 1, -3, -3); + (1, 0, -2, 0); (1, 1, -2, 0); (1, 0, -2, -3); (1, 1, -2, -3); + (0, 0, -2, 0); (0, 1, -2, 0); (0, 0, -2, -3); (0, 1, -2, -3); + (1, 0, -2, 0); (1, 1, -2, 0); (1, 0, -2, -3); (1, 1, -2, -3); + (0, 0, -2, 0); (0, 1, -2, 0); (0, 0, -2, -3); (0, 1, -2, -3); (1, 0, 1, 0); + (1, 1, 1, 0); (1, 0, 1, -3); (1, 1, 1, -3); (0, 0, 1, 0); (0, 1, 1, 0); + (0, 0, 1, -3); (0, 1, 1, -3); (1, 0, 1, 0); (1, 1, 1, 0); (1, 0, 1, -3); + (1, 1, 1, -3); (0, 0, 1, 0); (0, 1, 1, 0); (0, 0, 1, -3); (0, 1, 1, -3)|] +|}];; + +[:(l, t, y, z) + for y in [:-3; -2; -2; 1; 1:] + and l = 1 downto 0 + and z in [:0; -3:] + and t = 0 to 1:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(1, 0, -3, 0); (1, 1, -3, 0); (1, 0, -3, -3); (1, 1, -3, -3); + (0, 0, -3, 0); (0, 1, -3, 0); (0, 0, -3, -3); (0, 1, -3, -3); + (1, 0, -2, 0); (1, 1, -2, 0); (1, 0, -2, -3); (1, 1, -2, -3); + (0, 0, -2, 0); (0, 1, -2, 0); (0, 0, -2, -3); (0, 1, -2, -3); + (1, 0, -2, 0); (1, 1, -2, 0); (1, 0, -2, -3); (1, 1, -2, -3); + (0, 0, -2, 0); (0, 1, -2, 0); (0, 0, -2, -3); (0, 1, -2, -3); (1, 0, 1, 0); + (1, 1, 1, 0); (1, 0, 1, -3); (1, 1, 1, -3); (0, 0, 1, 0); (0, 1, 1, 0); + (0, 0, 1, -3); (0, 1, 1, -3); (1, 0, 1, 0); (1, 1, 1, 0); (1, 0, 1, -3); + (1, 1, 1, -3); (0, 0, 1, 0); (0, 1, 1, 0); (0, 0, 1, -3); (0, 1, 1, -3):] +|}];; + +[(i, j, n, q, v) + for n in [2] + and j in [-1; 1; -3; 0; -1; -3] + and i = -1 downto -2 + and v = 3 downto 2 + and q in [1; -2; -2; -2; -1; -1] + when n < 0];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(i, j, n, q, v) + for n in [|2|] + and j in [|-1; 1; -3; 0; -1; -3|] + and i = -1 downto -2 + and v = 3 downto 2 + and q in [|1; -2; -2; -2; -1; -1|] + when n < 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(i, j, n, q, v) + for n in [:2:] + and j in [:-1; 1; -3; 0; -1; -3:] + and i = -1 downto -2 + and v = 3 downto 2 + and q in [:1; -2; -2; -2; -1; -1:] + when n < 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(a, c, k, l, n, v, x) + for c in [3] + for n = 1 downto 0 and v in [2; 2; 0; 2; 1; -2] + for _ = 0 to 0 and k = n downto 1 + for l in [] + for x = 3 downto k and a in [0; 3; l; 2; -3; 2]];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, c, k, l, n, v, x) + for c in [|3|] + for n = 1 downto 0 and v in [|2; 2; 0; 2; 1; -2|] + for _ = 0 to 0 and k = n downto 1 + for l in [||] + for x = 3 downto k and a in [|0; 3; l; 2; -3; 2|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, c, k, l, n, v, x) + for c in [:3:] + for n = 1 downto 0 and v in [:2; 2; 0; 2; 1; -2:] + for _ = 0 to 0 and k = n downto 1 + for l in [::] + for x = 3 downto k and a in [:0; 3; l; 2; -3; 2:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(i, t, w) + for t in [2; -2; 1; 2; 0; 0; -3] + when abs t mod 2 = 0 + when abs t mod 2 = 0 + for i = 3 to 0 and w in [t; -1; -1; -2; -3; -3; 0] + when t <> 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(i, t, w) + for t in [|2; -2; 1; 2; 0; 0; -3|] + when abs t mod 2 = 0 + when abs t mod 2 = 0 + for i = 3 to 0 and w in [|t; -1; -1; -2; -3; -3; 0|] + when t <> 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(i, t, w) + for t in [:2; -2; 1; 2; 0; 0; -3:] + when abs t mod 2 = 0 + when abs t mod 2 = 0 + for i = 3 to 0 and w in [:t; -1; -1; -2; -3; -3; 0:] + when t <> 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(d, l, s) + for l in [-3; 3; 3; -1; 2; -2; -2] + when l < 0 + when l > 0 + for d = -2 to -1 and s in [1; 2; -1; -2; 3] and l in [-3]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(d, l, s) + for l in [|-3; 3; 3; -1; 2; -2; -2|] + when l < 0 + when l > 0 + for d = -2 to -1 and s in [|1; 2; -1; -2; 3|] and l in [|-3|]|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(d, l, s) + for l in [:-3; 3; 3; -1; 2; -2; -2:] + when l < 0 + when l > 0 + for d = -2 to -1 and s in [:1; 2; -1; -2; 3:] and l in [:-3:]:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(b, c, s) for c = 0 to -1 and s = 3 downto -1 and b = 2 downto -2];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(b, c, s) for c = 0 to -1 and s = 3 downto -1 and b = 2 downto -2|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(b, c, s) for c = 0 to -1 and s = 3 downto -1 and b = 2 downto -2:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(g, m, s) for g = 0 to 0 and m = 2 downto 1 and s in [0]];; +[%%expect{| +- : (int * int * int) list = [(0, 2, 0); (0, 1, 0)] +|}];; + +[|(g, m, s) for g = 0 to 0 and m = 2 downto 1 and s in [|0|]|];; +[%%expect{| +- : (int * int * int) array = [|(0, 2, 0); (0, 1, 0)|] +|}];; + +[:(g, m, s) for g = 0 to 0 and m = 2 downto 1 and s in [:0:]:];; +[%%expect{| +- : (int * int * int) iarray = [:(0, 2, 0); (0, 1, 0):] +|}];; + +[(e, g, s, v) + for s in [2; -2; 0] + for e = 0 downto 0 + for g = 1 to 0 and v = e downto -3];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(e, g, s, v) + for s in [|2; -2; 0|] + for e = 0 downto 0 + for g = 1 to 0 and v = e downto -3|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(e, g, s, v) + for s in [:2; -2; 0:] + for e = 0 downto 0 + for g = 1 to 0 and v = e downto -3:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(e, g, i, j, m, x, y) + for j in [1; -1] and x = -1 to 2 + for m in [0; -2; -3] and e = -1 downto 3 and i = -1 downto 3 + for g = 2 downto 2 + for y in [-2; -1]];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(e, g, i, j, m, x, y) + for j in [|1; -1|] and x = -1 to 2 + for m in [|0; -2; -3|] and e = -1 downto 3 and i = -1 downto 3 + for g = 2 downto 2 + for y in [|-2; -1|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(e, g, i, j, m, x, y) + for j in [:1; -1:] and x = -1 to 2 + for m in [:0; -2; -3:] and e = -1 downto 3 and i = -1 downto 3 + for g = 2 downto 2 + for y in [:-2; -1:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, n, q) + for e in [-2; 0; -3; 2; -3; -1; 1] + when abs e mod 2 = 1 + for q in [] and n = -1 to -3];; +[%%expect{| +- : (int * int * 'a) list = [] +|}];; + +[|(e, n, q) + for e in [|-2; 0; -3; 2; -3; -1; 1|] + when abs e mod 2 = 1 + for q in [||] and n = -1 to -3|];; +[%%expect{| +- : (int * int * '_weak51) array = [||] +|}];; + +[:(e, n, q) + for e in [:-2; 0; -3; 2; -3; -1; 1:] + when abs e mod 2 = 1 + for q in [::] and n = -1 to -3:];; +[%%expect{| +- : (int * int * 'a) iarray = [::] +|}];; + +[(a, h, i, p) + for h in [3; -2; -2; 2] and i = 0 downto -1 and p in [-3] and a in [0; -2]];; +[%%expect{| +- : (int * int * int * int) list = +[(0, 3, 0, -3); (-2, 3, 0, -3); (0, 3, -1, -3); (-2, 3, -1, -3); + (0, -2, 0, -3); (-2, -2, 0, -3); (0, -2, -1, -3); (-2, -2, -1, -3); + (0, -2, 0, -3); (-2, -2, 0, -3); (0, -2, -1, -3); (-2, -2, -1, -3); + (0, 2, 0, -3); (-2, 2, 0, -3); (0, 2, -1, -3); (-2, 2, -1, -3)] +|}];; + +[|(a, h, i, p) + for h in [|3; -2; -2; 2|] + and i = 0 downto -1 + and p in [|-3|] + and a in [|0; -2|]|];; +[%%expect{| +- : (int * int * int * int) array = +[|(0, 3, 0, -3); (-2, 3, 0, -3); (0, 3, -1, -3); (-2, 3, -1, -3); + (0, -2, 0, -3); (-2, -2, 0, -3); (0, -2, -1, -3); (-2, -2, -1, -3); + (0, -2, 0, -3); (-2, -2, 0, -3); (0, -2, -1, -3); (-2, -2, -1, -3); + (0, 2, 0, -3); (-2, 2, 0, -3); (0, 2, -1, -3); (-2, 2, -1, -3)|] +|}];; + +[:(a, h, i, p) + for h in [:3; -2; -2; 2:] + and i = 0 downto -1 + and p in [:-3:] + and a in [:0; -2:]:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(0, 3, 0, -3); (-2, 3, 0, -3); (0, 3, -1, -3); (-2, 3, -1, -3); + (0, -2, 0, -3); (-2, -2, 0, -3); (0, -2, -1, -3); (-2, -2, -1, -3); + (0, -2, 0, -3); (-2, -2, 0, -3); (0, -2, -1, -3); (-2, -2, -1, -3); + (0, 2, 0, -3); (-2, 2, 0, -3); (0, 2, -1, -3); (-2, 2, -1, -3):] +|}];; + +[(e, h, o, q, y) + for h = 3 downto -2 + when abs h mod 2 = 0 + for e in [1; 2; -3; -3; -2; 3] and h in [-2] + for o in [] and y in [0; 3; -2] + for q in [-3; 2; 1; 2; 2; -3]];; +[%%expect{| +- : (int * int * 'a * int * int) list = [] +|}];; + +[|(e, h, o, q, y) + for h = 3 downto -2 + when abs h mod 2 = 0 + for e in [|1; 2; -3; -3; -2; 3|] and h in [|-2|] + for o in [||] and y in [|0; 3; -2|] + for q in [|-3; 2; 1; 2; 2; -3|]|];; +[%%expect{| +- : (int * int * '_weak52 * int * int) array = [||] +|}];; + +[:(e, h, o, q, y) + for h = 3 downto -2 + when abs h mod 2 = 0 + for e in [:1; 2; -3; -3; -2; 3:] and h in [:-2:] + for o in [::] and y in [:0; 3; -2:] + for q in [:-3; 2; 1; 2; 2; -3:]:];; +[%%expect{| +- : (int * int * 'a * int * int) iarray = [::] +|}];; + +[w for w = 1 downto -1 when w > 0];; +[%%expect{| +- : int list = [1] +|}];; + +[|w for w = 1 downto -1 when w > 0|];; +[%%expect{| +- : int array = [|1|] +|}];; + +[:w for w = 1 downto -1 when w > 0:];; +[%%expect{| +- : int iarray = [:1:] +|}];; + +[(a, b, d, h, n, x) + for d in [-1; 0; -1; -3; -2] and n = 1 downto -1 + for b = 0 downto -1 and a = n to -3 and x = -3 downto -2 and h in []];; +[%%expect{| +- : (int * int * int * 'a * int * int) list = [] +|}];; + +[|(a, b, d, h, n, x) + for d in [|-1; 0; -1; -3; -2|] and n = 1 downto -1 + for b = 0 downto -1 and a = n to -3 and x = -3 downto -2 and h in [||]|];; +[%%expect{| +- : (int * int * int * '_weak53 * int * int) array = [||] +|}];; + +[:(a, b, d, h, n, x) + for d in [:-1; 0; -1; -3; -2:] and n = 1 downto -1 + for b = 0 downto -1 and a = n to -3 and x = -3 downto -2 and h in [::]:];; +[%%expect{| +- : (int * int * int * 'a * int * int) iarray = [::] +|}];; + +[(b, c, e, l, m, s, z) + for m in [-1; -1] + for e in [3; 0; 2] and l = 0 downto -2 + for c = e to 1 and z = -3 downto l + for s in [2; 1] and l in [3] + for b = 0 downto 0];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(b, c, e, l, m, s, z) + for m in [|-1; -1|] + for e in [|3; 0; 2|] and l = 0 downto -2 + for c = e to 1 and z = -3 downto l + for s in [|2; 1|] and l in [|3|] + for b = 0 downto 0|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(b, c, e, l, m, s, z) + for m in [:-1; -1:] + for e in [:3; 0; 2:] and l = 0 downto -2 + for c = e to 1 and z = -3 downto l + for s in [:2; 1:] and l in [:3:] + for b = 0 downto 0:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, g, m, n) + for n in [-3; -1; -2] + for g = 0 downto 3 and e in [] and m = -1 downto n and n = 2 to 0 + when abs n mod 2 = 0];; +[%%expect{| +- : ('a * int * int * int) list = [] +|}];; + +[|(e, g, m, n) + for n in [|-3; -1; -2|] + for g = 0 downto 3 and e in [||] and m = -1 downto n and n = 2 to 0 + when abs n mod 2 = 0|];; +[%%expect{| +- : ('_weak54 * int * int * int) array = [||] +|}];; + +[:(e, g, m, n) + for n in [:-3; -1; -2:] + for g = 0 downto 3 and e in [::] and m = -1 downto n and n = 2 to 0 + when abs n mod 2 = 0:];; +[%%expect{| +- : ('a * int * int * int) iarray = [::] +|}];; + +[(l, n, s) + for s in [-3; 3] + when abs s mod 2 = 0 + for n in [] and l = -3 downto 0 and _ = 1 downto -3 + for l = 2 downto 1];; +[%%expect{| +Lines 1-5, characters 0-22: +1 | [(l, n, s) +2 | for s in [-3; 3] +3 | when abs s mod 2 = 0 +4 | for n in [] and l = -3 downto 0 and _ = 1 downto -3 +5 | for l = 2 downto 1].. +Warning 26 [unused-var]: unused variable l. +- : (int * 'a * int) list = [] +|}];; + +[|(l, n, s) + for s in [|-3; 3|] + when abs s mod 2 = 0 + for n in [||] and l = -3 downto 0 and _ = 1 downto -3 + for l = 2 downto 1|];; +[%%expect{| +Lines 1-5, characters 0-24: +1 | [|(l, n, s) +2 | for s in [|-3; 3|] +3 | when abs s mod 2 = 0 +4 | for n in [||] and l = -3 downto 0 and _ = 1 downto -3 +5 | for l = 2 downto 1|].. +Warning 26 [unused-var]: unused variable l. +- : (int * '_weak55 * int) array = [||] +|}];; + +[:(l, n, s) + for s in [:-3; 3:] + when abs s mod 2 = 0 + for n in [::] and l = -3 downto 0 and _ = 1 downto -3 + for l = 2 downto 1:];; +[%%expect{| +Lines 1-5, characters 0-24: +1 | [:(l, n, s) +2 | for s in [:-3; 3:] +3 | when abs s mod 2 = 0 +4 | for n in [::] and l = -3 downto 0 and _ = 1 downto -3 +5 | for l = 2 downto 1:].. +Warning 26 [unused-var]: unused variable l. +- : (int * 'a * int) iarray = [::] +|}];; + +[(s, u) for s in [1; -3; 1] and u in [-3; 3] when abs u mod 2 = 0];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(s, u) for s in [|1; -3; 1|] and u in [|-3; 3|] when abs u mod 2 = 0|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(s, u) for s in [:1; -3; 1:] and u in [:-3; 3:] when abs u mod 2 = 0:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(k, u, v, w) + for k in [1] and u in [0; 2] + for v = 0 downto -1 + for w = 0 to -1 + when w > 0];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(k, u, v, w) + for k in [|1|] and u in [|0; 2|] + for v = 0 downto -1 + for w = 0 to -1 + when w > 0|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(k, u, v, w) + for k in [:1:] and u in [:0; 2:] + for v = 0 downto -1 + for w = 0 to -1 + when w > 0:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(o, s, z) + for _ = 1 downto -3 + for _ = 2 to -3 + for s in [3; 1; -1; -1; 3; -3] and z = -1 to 0 + for o = 1 downto -3];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(o, s, z) + for _ = 1 downto -3 + for _ = 2 to -3 + for s in [|3; 1; -1; -1; 3; -3|] and z = -1 to 0 + for o = 1 downto -3|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(o, s, z) + for _ = 1 downto -3 + for _ = 2 to -3 + for s in [:3; 1; -1; -1; 3; -3:] and z = -1 to 0 + for o = 1 downto -3:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(f, w) for w in [0; -3; -2; -3; -3] and _ = 2 downto -1 and f = 3 downto 0];; +[%%expect{| +- : (int * int) list = +[(3, 0); (2, 0); (1, 0); (0, 0); (3, 0); (2, 0); (1, 0); (0, 0); (3, 0); + (2, 0); (1, 0); (0, 0); (3, 0); (2, 0); (1, 0); (0, 0); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -2); (2, -2); + (1, -2); (0, -2); (3, -2); (2, -2); (1, -2); (0, -2); (3, -2); (2, -2); + (1, -2); (0, -2); (3, -2); (2, -2); (1, -2); (0, -2); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3)] +|}];; + +[|(f, w) + for w in [|0; -3; -2; -3; -3|] and _ = 2 downto -1 and f = 3 downto 0|];; +[%%expect{| +- : (int * int) array = +[|(3, 0); (2, 0); (1, 0); (0, 0); (3, 0); (2, 0); (1, 0); (0, 0); (3, 0); + (2, 0); (1, 0); (0, 0); (3, 0); (2, 0); (1, 0); (0, 0); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -2); (2, -2); + (1, -2); (0, -2); (3, -2); (2, -2); (1, -2); (0, -2); (3, -2); (2, -2); + (1, -2); (0, -2); (3, -2); (2, -2); (1, -2); (0, -2); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3)|] +|}];; + +[:(f, w) + for w in [:0; -3; -2; -3; -3:] and _ = 2 downto -1 and f = 3 downto 0:];; +[%%expect{| +- : (int * int) iarray = +[:(3, 0); (2, 0); (1, 0); (0, 0); (3, 0); (2, 0); (1, 0); (0, 0); (3, 0); + (2, 0); (1, 0); (0, 0); (3, 0); (2, 0); (1, 0); (0, 0); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -2); (2, -2); + (1, -2); (0, -2); (3, -2); (2, -2); (1, -2); (0, -2); (3, -2); (2, -2); + (1, -2); (0, -2); (3, -2); (2, -2); (1, -2); (0, -2); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3); (3, -3); (2, -3); + (1, -3); (0, -3); (3, -3); (2, -3); (1, -3); (0, -3):] +|}];; + +[(b, j, l, o, r) + for b in [0; -1; -1] and r = 1 downto 0 and o = 2 downto 1 + for l = -2 downto b and o in [2; -1; 0; -1; 2] and j = 2 to -1];; +[%%expect{| +Lines 1-3, characters 0-66: +1 | [(b, j, l, o, r) +2 | for b in [0; -1; -1] and r = 1 downto 0 and o = 2 downto 1 +3 | for l = -2 downto b and o in [2; -1; 0; -1; 2] and j = 2 to -1].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int) list = [] +|}];; + +[|(b, j, l, o, r) + for b in [|0; -1; -1|] and r = 1 downto 0 and o = 2 downto 1 + for l = -2 downto b and o in [|2; -1; 0; -1; 2|] and j = 2 to -1|];; +[%%expect{| +Lines 1-3, characters 0-70: +1 | [|(b, j, l, o, r) +2 | for b in [|0; -1; -1|] and r = 1 downto 0 and o = 2 downto 1 +3 | for l = -2 downto b and o in [|2; -1; 0; -1; 2|] and j = 2 to -1|].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int) array = [||] +|}];; + +[:(b, j, l, o, r) + for b in [:0; -1; -1:] and r = 1 downto 0 and o = 2 downto 1 + for l = -2 downto b and o in [:2; -1; 0; -1; 2:] and j = 2 to -1:];; +[%%expect{| +Lines 1-3, characters 0-70: +1 | [:(b, j, l, o, r) +2 | for b in [:0; -1; -1:] and r = 1 downto 0 and o = 2 downto 1 +3 | for l = -2 downto b and o in [:2; -1; 0; -1; 2:] and j = 2 to -1:].. +Warning 26 [unused-var]: unused variable o. +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(b, h, j, l, r, s, v) + for b in [-1] and l = 1 to 1 and r in [2; -3; -3; 0] + for v = -2 downto 2 and j = -2 to 1 and h = -1 downto -2 + for s = -1 to 0 and _ in [3; -1; h; -1; 3] + for _ in [-3; 3; -1; -1]];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(b, h, j, l, r, s, v) + for b in [|-1|] and l = 1 to 1 and r in [|2; -3; -3; 0|] + for v = -2 downto 2 and j = -2 to 1 and h = -1 downto -2 + for s = -1 to 0 and _ in [|3; -1; h; -1; 3|] + for _ in [|-3; 3; -1; -1|]|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(b, h, j, l, r, s, v) + for b in [:-1:] and l = 1 to 1 and r in [:2; -3; -3; 0:] + for v = -2 downto 2 and j = -2 to 1 and h = -1 downto -2 + for s = -1 to 0 and _ in [:3; -1; h; -1; 3:] + for _ in [:-3; 3; -1; -1:]:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(c, f, v) + for f in [-3] and v in [0; 3; -3; 0; 0] and c in [1; 0; -3; 3; -2; 3] + when c < 0];; +[%%expect{| +- : (int * int * int) list = +[(-3, -3, 0); (-2, -3, 0); (-3, -3, 3); (-2, -3, 3); (-3, -3, -3); + (-2, -3, -3); (-3, -3, 0); (-2, -3, 0); (-3, -3, 0); (-2, -3, 0)] +|}];; + +[|(c, f, v) + for f in [|-3|] and v in [|0; 3; -3; 0; 0|] and c in [|1; 0; -3; 3; -2; 3|] + when c < 0|];; +[%%expect{| +- : (int * int * int) array = +[|(-3, -3, 0); (-2, -3, 0); (-3, -3, 3); (-2, -3, 3); (-3, -3, -3); + (-2, -3, -3); (-3, -3, 0); (-2, -3, 0); (-3, -3, 0); (-2, -3, 0)|] +|}];; + +[:(c, f, v) + for f in [:-3:] and v in [:0; 3; -3; 0; 0:] and c in [:1; 0; -3; 3; -2; 3:] + when c < 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-3, -3, 0); (-2, -3, 0); (-3, -3, 3); (-2, -3, 3); (-3, -3, -3); + (-2, -3, -3); (-3, -3, 0); (-2, -3, 0); (-3, -3, 0); (-2, -3, 0):] +|}];; + +[(d, g, i, k, p) + for g = -2 to -2 + for p = -3 to 2 and d in [-3; -3; 0; 3] and i in [] + for g in [1; -3; 3; -3] and _ = -3 to -3 and k in [-1; 2; -1; g] + when i > 0];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(d, g, i, k, p) + for g = -2 to -2 + for p = -3 to 2 and d in [|-3; -3; 0; 3|] and i in [||] + for g in [|1; -3; 3; -3|] and _ = -3 to -3 and k in [|-1; 2; -1; g|] + when i > 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(d, g, i, k, p) + for g = -2 to -2 + for p = -3 to 2 and d in [:-3; -3; 0; 3:] and i in [::] + for g in [:1; -3; 3; -3:] and _ = -3 to -3 and k in [:-1; 2; -1; g:] + when i > 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(f, t) for f in [-1; -3; 0] for t = f to -2];; +[%%expect{| +- : (int * int) list = [(-3, -3); (-3, -2)] +|}];; + +[|(f, t) for f in [|-1; -3; 0|] for t = f to -2|];; +[%%expect{| +- : (int * int) array = [|(-3, -3); (-3, -2)|] +|}];; + +[:(f, t) for f in [:-1; -3; 0:] for t = f to -2:];; +[%%expect{| +- : (int * int) iarray = [:(-3, -3); (-3, -2):] +|}];; + +[(a, d, k) + for d = 3 downto 3 + for a in [-3; -3; -3; -2; 1; 2; 0] + for d in [1] + for k in [2; -3; 2; 2; 0; 0] + when abs d mod 2 = 0];; +[%%expect{| +Lines 1-6, characters 0-24: +1 | [(a, d, k) +2 | for d = 3 downto 3 +3 | for a in [-3; -3; -3; -2; 1; 2; 0] +4 | for d in [1] +5 | for k in [2; -3; 2; 2; 0; 0] +6 | when abs d mod 2 = 0].. +Warning 26 [unused-var]: unused variable d. +- : (int * int * int) list = [] +|}];; + +[|(a, d, k) + for d = 3 downto 3 + for a in [|-3; -3; -3; -2; 1; 2; 0|] + for d in [|1|] + for k in [|2; -3; 2; 2; 0; 0|] + when abs d mod 2 = 0|];; +[%%expect{| +Lines 1-6, characters 0-26: +1 | [|(a, d, k) +2 | for d = 3 downto 3 +3 | for a in [|-3; -3; -3; -2; 1; 2; 0|] +4 | for d in [|1|] +5 | for k in [|2; -3; 2; 2; 0; 0|] +6 | when abs d mod 2 = 0|].. +Warning 26 [unused-var]: unused variable d. +- : (int * int * int) array = [||] +|}];; + +[:(a, d, k) + for d = 3 downto 3 + for a in [:-3; -3; -3; -2; 1; 2; 0:] + for d in [:1:] + for k in [:2; -3; 2; 2; 0; 0:] + when abs d mod 2 = 0:];; +[%%expect{| +Lines 1-6, characters 0-26: +1 | [:(a, d, k) +2 | for d = 3 downto 3 +3 | for a in [:-3; -3; -3; -2; 1; 2; 0:] +4 | for d in [:1:] +5 | for k in [:2; -3; 2; 2; 0; 0:] +6 | when abs d mod 2 = 0:].. +Warning 26 [unused-var]: unused variable d. +- : (int * int * int) iarray = [::] +|}];; + +[(e, i, j, k, w, z) + for k in [3; 3; 3; 1; -3; 2] and w in [1] + for e = k to -1 + for z in [-2; -2; 2] + for i = -3 downto 0 and w in [3; -2; 0; 3; 0] + for j in [3; z; -1; 0; -1] and i = -1 to 0];; +[%%expect{| +Line 2, characters 36-37: +2 | for k in [3; 3; 3; 1; -3; 2] and w in [1] + ^ +Warning 26 [unused-var]: unused variable w. +Lines 1-6, characters 0-46: +1 | [(e, i, j, k, w, z) +2 | for k in [3; 3; 3; 1; -3; 2] and w in [1] +3 | for e = k to -1 +4 | for z in [-2; -2; 2] +5 | for i = -3 downto 0 and w in [3; -2; 0; 3; 0] +6 | for j in [3; z; -1; 0; -1] and i = -1 to 0].. +Warning 26 [unused-var]: unused variable i. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(e, i, j, k, w, z) + for k in [|3; 3; 3; 1; -3; 2|] and w in [|1|] + for e = k to -1 + for z in [|-2; -2; 2|] + for i = -3 downto 0 and w in [|3; -2; 0; 3; 0|] + for j in [|3; z; -1; 0; -1|] and i = -1 to 0|];; +[%%expect{| +Line 2, characters 39-40: +2 | for k in [|3; 3; 3; 1; -3; 2|] and w in [|1|] + ^ +Warning 26 [unused-var]: unused variable w. +Lines 1-6, characters 0-50: +1 | [|(e, i, j, k, w, z) +2 | for k in [|3; 3; 3; 1; -3; 2|] and w in [|1|] +3 | for e = k to -1 +4 | for z in [|-2; -2; 2|] +5 | for i = -3 downto 0 and w in [|3; -2; 0; 3; 0|] +6 | for j in [|3; z; -1; 0; -1|] and i = -1 to 0|].. +Warning 26 [unused-var]: unused variable i. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(e, i, j, k, w, z) + for k in [:3; 3; 3; 1; -3; 2:] and w in [:1:] + for e = k to -1 + for z in [:-2; -2; 2:] + for i = -3 downto 0 and w in [:3; -2; 0; 3; 0:] + for j in [:3; z; -1; 0; -1:] and i = -1 to 0:];; +[%%expect{| +Line 2, characters 39-40: +2 | for k in [:3; 3; 3; 1; -3; 2:] and w in [:1:] + ^ +Warning 26 [unused-var]: unused variable w. +Lines 1-6, characters 0-50: +1 | [:(e, i, j, k, w, z) +2 | for k in [:3; 3; 3; 1; -3; 2:] and w in [:1:] +3 | for e = k to -1 +4 | for z in [:-2; -2; 2:] +5 | for i = -3 downto 0 and w in [:3; -2; 0; 3; 0:] +6 | for j in [:3; z; -1; 0; -1:] and i = -1 to 0:].. +Warning 26 [unused-var]: unused variable i. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, h, t, x) + for x = -2 downto -3 + and d in [-3; -3; 3; 2; 0; -2; -1] + and h in [0; -3; -3; -1; -2] + for h = -3 downto -1 + and t in [-2; d; h; 3; 0; 1] + and _ = 3 downto 2];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(d, h, t, x) + for x = -2 downto -3 + and d in [|-3; -3; 3; 2; 0; -2; -1|] + and h in [|0; -3; -3; -1; -2|] + for h = -3 downto -1 + and t in [|-2; d; h; 3; 0; 1|] + and _ = 3 downto 2|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(d, h, t, x) + for x = -2 downto -3 + and d in [:-3; -3; 3; 2; 0; -2; -1:] + and h in [:0; -3; -3; -1; -2:] + for h = -3 downto -1 + and t in [:-2; d; h; 3; 0; 1:] + and _ = 3 downto 2:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(e, l, r) for r = -1 downto -2 and l in [3] and e in [2]];; +[%%expect{| +- : (int * int * int) list = [(2, 3, -1); (2, 3, -2)] +|}];; + +[|(e, l, r) for r = -1 downto -2 and l in [|3|] and e in [|2|]|];; +[%%expect{| +- : (int * int * int) array = [|(2, 3, -1); (2, 3, -2)|] +|}];; + +[:(e, l, r) for r = -1 downto -2 and l in [:3:] and e in [:2:]:];; +[%%expect{| +- : (int * int * int) iarray = [:(2, 3, -1); (2, 3, -2):] +|}];; + +[n for _ = 3 downto -1 and n in [2]];; +[%%expect{| +- : int list = [2; 2; 2; 2; 2] +|}];; + +[|n for _ = 3 downto -1 and n in [|2|]|];; +[%%expect{| +- : int array = [|2; 2; 2; 2; 2|] +|}];; + +[:n for _ = 3 downto -1 and n in [:2:]:];; +[%%expect{| +- : int iarray = [:2; 2; 2; 2; 2:] +|}];; + +[(a, e, h, i, l, p) + for _ = 3 downto 3 + for i in [1] and l in [3; 3; 0; -3; -2] + for p in [-1; 0; 0] + for a = 3 downto 1 and e = -3 to -3 + for a in [-1] and h in []];; +[%%expect{| +Lines 1-6, characters 0-29: +1 | [(a, e, h, i, l, p) +2 | for _ = 3 downto 3 +3 | for i in [1] and l in [3; 3; 0; -3; -2] +4 | for p in [-1; 0; 0] +5 | for a = 3 downto 1 and e = -3 to -3 +6 | for a in [-1] and h in []].. +Warning 26 [unused-var]: unused variable a. +- : (int * int * 'a * int * int * int) list = [] +|}];; + +[|(a, e, h, i, l, p) + for _ = 3 downto 3 + for i in [|1|] and l in [|3; 3; 0; -3; -2|] + for p in [|-1; 0; 0|] + for a = 3 downto 1 and e = -3 to -3 + for a in [|-1|] and h in [||]|];; +[%%expect{| +Lines 1-6, characters 0-35: +1 | [|(a, e, h, i, l, p) +2 | for _ = 3 downto 3 +3 | for i in [|1|] and l in [|3; 3; 0; -3; -2|] +4 | for p in [|-1; 0; 0|] +5 | for a = 3 downto 1 and e = -3 to -3 +6 | for a in [|-1|] and h in [||]|].. +Warning 26 [unused-var]: unused variable a. +- : (int * int * '_weak56 * int * int * int) array = [||] +|}];; + +[:(a, e, h, i, l, p) + for _ = 3 downto 3 + for i in [:1:] and l in [:3; 3; 0; -3; -2:] + for p in [:-1; 0; 0:] + for a = 3 downto 1 and e = -3 to -3 + for a in [:-1:] and h in [::]:];; +[%%expect{| +Lines 1-6, characters 0-35: +1 | [:(a, e, h, i, l, p) +2 | for _ = 3 downto 3 +3 | for i in [:1:] and l in [:3; 3; 0; -3; -2:] +4 | for p in [:-1; 0; 0:] +5 | for a = 3 downto 1 and e = -3 to -3 +6 | for a in [:-1:] and h in [::]:].. +Warning 26 [unused-var]: unused variable a. +- : (int * int * 'a * int * int * int) iarray = [::] +|}];; + +[(c, f, m, s, x) + for s in [1; -3; -2; -1; 3; 1; 2] + for m = 3 to -3 + when s > 0 + for c in [] and x = -2 downto 0 + for f = -3 downto 2];; +[%%expect{| +- : ('a * int * int * int * int) list = [] +|}];; + +[|(c, f, m, s, x) + for s in [|1; -3; -2; -1; 3; 1; 2|] + for m = 3 to -3 + when s > 0 + for c in [||] and x = -2 downto 0 + for f = -3 downto 2|];; +[%%expect{| +- : ('_weak57 * int * int * int * int) array = [||] +|}];; + +[:(c, f, m, s, x) + for s in [:1; -3; -2; -1; 3; 1; 2:] + for m = 3 to -3 + when s > 0 + for c in [::] and x = -2 downto 0 + for f = -3 downto 2:];; +[%%expect{| +- : ('a * int * int * int * int) iarray = [::] +|}];; + +[(a, c, o, r, v) + for o = 2 downto -3 + for c in [3; 3; 0; o; 0; -3] + for r = c to o + for v = -3 downto -2 and a = -2 downto 3 + when abs r mod 2 = 0];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(a, c, o, r, v) + for o = 2 downto -3 + for c in [|3; 3; 0; o; 0; -3|] + for r = c to o + for v = -3 downto -2 and a = -2 downto 3 + when abs r mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(a, c, o, r, v) + for o = 2 downto -3 + for c in [:3; 3; 0; o; 0; -3:] + for r = c to o + for v = -3 downto -2 and a = -2 downto 3 + when abs r mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(g, k, l, p, u, z) + for p in [3; 3; 3; 0] and l in [1; -3; 2] + for k in [p; p; p; -3] + for z in [-3; -1; 2; 2; 1] + for u = -3 downto -2 + for g in [3; 3; -3]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(g, k, l, p, u, z) + for p in [|3; 3; 3; 0|] and l in [|1; -3; 2|] + for k in [|p; p; p; -3|] + for z in [|-3; -1; 2; 2; 1|] + for u = -3 downto -2 + for g in [|3; 3; -3|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(g, k, l, p, u, z) + for p in [:3; 3; 3; 0:] and l in [:1; -3; 2:] + for k in [:p; p; p; -3:] + for z in [:-3; -1; 2; 2; 1:] + for u = -3 downto -2 + for g in [:3; 3; -3:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(d, g, j, m, n, o, u, v, w) + for _ = 2 downto 2 and n = -3 to -1 and g = -1 downto -1 + for j = 3 to 2 and w in [3; g; -2] + for u in [1; 2; n] and m in [j; -3; -3; 3; -3; 0] and d = -1 to -2 + for o in [-2; -3; 0; 1; 0; -3; 1] and v = 0 to -3];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(d, g, j, m, n, o, u, v, w) + for _ = 2 downto 2 and n = -3 to -1 and g = -1 downto -1 + for j = 3 to 2 and w in [|3; g; -2|] + for u in [|1; 2; n|] and m in [|j; -3; -3; 3; -3; 0|] and d = -1 to -2 + for o in [|-2; -3; 0; 1; 0; -3; 1|] and v = 0 to -3|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(d, g, j, m, n, o, u, v, w) + for _ = 2 downto 2 and n = -3 to -1 and g = -1 downto -1 + for j = 3 to 2 and w in [:3; g; -2:] + for u in [:1; 2; n:] and m in [:j; -3; -3; 3; -3; 0:] and d = -1 to -2 + for o in [:-2; -3; 0; 1; 0; -3; 1:] and v = 0 to -3:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(i, r, z) for z in [1; 2] and r = -1 downto 3 and i = 0 to 1];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(i, r, z) for z in [|1; 2|] and r = -1 downto 3 and i = 0 to 1|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(i, r, z) for z in [:1; 2:] and r = -1 downto 3 and i = 0 to 1:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(a, b, i, m, t, v) + for b = -3 to 0 and m in [-3; 1; 1; -3; 3; 0] + when abs b mod 2 = 0 + for a in [0] and b in [b; -1] + for v = -3 downto 3 + for t = 1 downto 0 and i = 1 downto 2];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, b, i, m, t, v) + for b = -3 to 0 and m in [|-3; 1; 1; -3; 3; 0|] + when abs b mod 2 = 0 + for a in [|0|] and b in [|b; -1|] + for v = -3 downto 3 + for t = 1 downto 0 and i = 1 downto 2|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, b, i, m, t, v) + for b = -3 to 0 and m in [:-3; 1; 1; -3; 3; 0:] + when abs b mod 2 = 0 + for a in [:0:] and b in [:b; -1:] + for v = -3 downto 3 + for t = 1 downto 0 and i = 1 downto 2:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(k, o, v) for v = 2 downto 0 and k in [-3; 0; 1] and o = 2 downto 0];; +[%%expect{| +- : (int * int * int) list = +[(-3, 2, 2); (-3, 1, 2); (-3, 0, 2); (0, 2, 2); (0, 1, 2); (0, 0, 2); + (1, 2, 2); (1, 1, 2); (1, 0, 2); (-3, 2, 1); (-3, 1, 1); (-3, 0, 1); + (0, 2, 1); (0, 1, 1); (0, 0, 1); (1, 2, 1); (1, 1, 1); (1, 0, 1); + (-3, 2, 0); (-3, 1, 0); (-3, 0, 0); (0, 2, 0); (0, 1, 0); (0, 0, 0); + (1, 2, 0); (1, 1, 0); (1, 0, 0)] +|}];; + +[|(k, o, v) for v = 2 downto 0 and k in [|-3; 0; 1|] and o = 2 downto 0|];; +[%%expect{| +- : (int * int * int) array = +[|(-3, 2, 2); (-3, 1, 2); (-3, 0, 2); (0, 2, 2); (0, 1, 2); (0, 0, 2); + (1, 2, 2); (1, 1, 2); (1, 0, 2); (-3, 2, 1); (-3, 1, 1); (-3, 0, 1); + (0, 2, 1); (0, 1, 1); (0, 0, 1); (1, 2, 1); (1, 1, 1); (1, 0, 1); + (-3, 2, 0); (-3, 1, 0); (-3, 0, 0); (0, 2, 0); (0, 1, 0); (0, 0, 0); + (1, 2, 0); (1, 1, 0); (1, 0, 0)|] +|}];; + +[:(k, o, v) for v = 2 downto 0 and k in [:-3; 0; 1:] and o = 2 downto 0:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-3, 2, 2); (-3, 1, 2); (-3, 0, 2); (0, 2, 2); (0, 1, 2); (0, 0, 2); + (1, 2, 2); (1, 1, 2); (1, 0, 2); (-3, 2, 1); (-3, 1, 1); (-3, 0, 1); + (0, 2, 1); (0, 1, 1); (0, 0, 1); (1, 2, 1); (1, 1, 1); (1, 0, 1); + (-3, 2, 0); (-3, 1, 0); (-3, 0, 0); (0, 2, 0); (0, 1, 0); (0, 0, 0); + (1, 2, 0); (1, 1, 0); (1, 0, 0):] +|}];; + +[(f, m, q) + for m in [-1; -2; 1] + when m < 0 + when abs m mod 2 = 0 + for q = 3 to -1 and f in [0; -3; -3; 0; 3]];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(f, m, q) + for m in [|-1; -2; 1|] + when m < 0 + when abs m mod 2 = 0 + for q = 3 to -1 and f in [|0; -3; -3; 0; 3|]|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(f, m, q) + for m in [:-1; -2; 1:] + when m < 0 + when abs m mod 2 = 0 + for q = 3 to -1 and f in [:0; -3; -3; 0; 3:]:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(h, l) for l in [3; 1; -2; 1; -1; -2; -1] and h in [1; -2; -1; -1; 1]];; +[%%expect{| +- : (int * int) list = +[(1, 3); (-2, 3); (-1, 3); (-1, 3); (1, 3); (1, 1); (-2, 1); (-1, 1); + (-1, 1); (1, 1); (1, -2); (-2, -2); (-1, -2); (-1, -2); (1, -2); (1, 1); + (-2, 1); (-1, 1); (-1, 1); (1, 1); (1, -1); (-2, -1); (-1, -1); (-1, -1); + (1, -1); (1, -2); (-2, -2); (-1, -2); (-1, -2); (1, -2); (1, -1); (-2, -1); + (-1, -1); (-1, -1); (1, -1)] +|}];; + +[|(h, l) for l in [|3; 1; -2; 1; -1; -2; -1|] and h in [|1; -2; -1; -1; 1|]|];; +[%%expect{| +- : (int * int) array = +[|(1, 3); (-2, 3); (-1, 3); (-1, 3); (1, 3); (1, 1); (-2, 1); (-1, 1); + (-1, 1); (1, 1); (1, -2); (-2, -2); (-1, -2); (-1, -2); (1, -2); (1, 1); + (-2, 1); (-1, 1); (-1, 1); (1, 1); (1, -1); (-2, -1); (-1, -1); (-1, -1); + (1, -1); (1, -2); (-2, -2); (-1, -2); (-1, -2); (1, -2); (1, -1); (-2, -1); + (-1, -1); (-1, -1); (1, -1)|] +|}];; + +[:(h, l) for l in [:3; 1; -2; 1; -1; -2; -1:] and h in [:1; -2; -1; -1; 1:]:];; +[%%expect{| +- : (int * int) iarray = +[:(1, 3); (-2, 3); (-1, 3); (-1, 3); (1, 3); (1, 1); (-2, 1); (-1, 1); + (-1, 1); (1, 1); (1, -2); (-2, -2); (-1, -2); (-1, -2); (1, -2); (1, 1); + (-2, 1); (-1, 1); (-1, 1); (1, 1); (1, -1); (-2, -1); (-1, -1); (-1, -1); + (1, -1); (1, -2); (-2, -2); (-1, -2); (-1, -2); (1, -2); (1, -1); (-2, -1); + (-1, -1); (-1, -1); (1, -1):] +|}];; + +[(a, f, j) + for a = 3 downto 2 + when a > 0 + for j in [-3; 1; -1; 2; -1; 0; 1] and f in [2] + when a < 0 + when abs j mod 2 = 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(a, f, j) + for a = 3 downto 2 + when a > 0 + for j in [|-3; 1; -1; 2; -1; 0; 1|] and f in [|2|] + when a < 0 + when abs j mod 2 = 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(a, f, j) + for a = 3 downto 2 + when a > 0 + for j in [:-3; 1; -1; 2; -1; 0; 1:] and f in [:2:] + when a < 0 + when abs j mod 2 = 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(b, h, j, k, n, p, u, z) + for h = 2 downto -1 and b = 2 downto 2 + for u = 0 downto -3 and _ in [b; -2; h; -1; 2; -1] and p in [-1; 0; 2] + for z in [2] and j in [] and k in [3; 1; -2] + for k in [] and z in [3; 2; 0; 0; -2] and n = -1 to 3];; +[%%expect{| +Line 4, characters 7-8: +4 | for z in [2] and j in [] and k in [3; 1; -2] + ^ +Warning 26 [unused-var]: unused variable z. +Line 4, characters 32-33: +4 | for z in [2] and j in [] and k in [3; 1; -2] + ^ +Warning 26 [unused-var]: unused variable k. +- : (int * int * 'a * 'b * int * int * int * int) list = [] +|}];; + +[|(b, h, j, k, n, p, u, z) + for h = 2 downto -1 and b = 2 downto 2 + for u = 0 downto -3 and _ in [|b; -2; h; -1; 2; -1|] and p in [|-1; 0; 2|] + for z in [|2|] and j in [||] and k in [|3; 1; -2|] + for k in [||] and z in [|3; 2; 0; 0; -2|] and n = -1 to 3|];; +[%%expect{| +Line 4, characters 8-9: +4 | for z in [|2|] and j in [||] and k in [|3; 1; -2|] + ^ +Warning 26 [unused-var]: unused variable z. +Line 4, characters 37-38: +4 | for z in [|2|] and j in [||] and k in [|3; 1; -2|] + ^ +Warning 26 [unused-var]: unused variable k. +- : (int * int * '_weak58 * '_weak59 * int * int * int * int) array = [||] +|}];; + +[:(b, h, j, k, n, p, u, z) + for h = 2 downto -1 and b = 2 downto 2 + for u = 0 downto -3 and _ in [:b; -2; h; -1; 2; -1:] and p in [:-1; 0; 2:] + for z in [:2:] and j in [::] and k in [:3; 1; -2:] + for k in [::] and z in [:3; 2; 0; 0; -2:] and n = -1 to 3:];; +[%%expect{| +Line 4, characters 8-9: +4 | for z in [:2:] and j in [::] and k in [:3; 1; -2:] + ^ +Warning 26 [unused-var]: unused variable z. +Line 4, characters 37-38: +4 | for z in [:2:] and j in [::] and k in [:3; 1; -2:] + ^ +Warning 26 [unused-var]: unused variable k. +- : (int * int * 'a * 'b * int * int * int * int) iarray = [::] +|}];; + +[(a, n, q, r, s, t) + for r = -3 to -1 + for t = 0 to 0 and q in [-2; 2; -1; 2; 0; r; 1] + when abs q mod 2 = 0 + for s = -1 to 2 and q = -2 downto 0 + for n = -3 downto -1 and a = 0 downto 3];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, n, q, r, s, t) + for r = -3 to -1 + for t = 0 to 0 and q in [|-2; 2; -1; 2; 0; r; 1|] + when abs q mod 2 = 0 + for s = -1 to 2 and q = -2 downto 0 + for n = -3 downto -1 and a = 0 downto 3|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, n, q, r, s, t) + for r = -3 to -1 + for t = 0 to 0 and q in [:-2; 2; -1; 2; 0; r; 1:] + when abs q mod 2 = 0 + for s = -1 to 2 and q = -2 downto 0 + for n = -3 downto -1 and a = 0 downto 3:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, j, q) for j = 2 downto 0 and q in [3; 0; -2] and e = 3 downto -1];; +[%%expect{| +- : (int * int * int) list = +[(3, 2, 3); (2, 2, 3); (1, 2, 3); (0, 2, 3); (-1, 2, 3); (3, 2, 0); + (2, 2, 0); (1, 2, 0); (0, 2, 0); (-1, 2, 0); (3, 2, -2); (2, 2, -2); + (1, 2, -2); (0, 2, -2); (-1, 2, -2); (3, 1, 3); (2, 1, 3); (1, 1, 3); + (0, 1, 3); (-1, 1, 3); (3, 1, 0); (2, 1, 0); (1, 1, 0); (0, 1, 0); + (-1, 1, 0); (3, 1, -2); (2, 1, -2); (1, 1, -2); (0, 1, -2); (-1, 1, -2); + (3, 0, 3); (2, 0, 3); (1, 0, 3); (0, 0, 3); (-1, 0, 3); (3, 0, 0); + (2, 0, 0); (1, 0, 0); (0, 0, 0); (-1, 0, 0); (3, 0, -2); (2, 0, -2); + (1, 0, -2); (0, 0, -2); (-1, 0, -2)] +|}];; + +[|(e, j, q) for j = 2 downto 0 and q in [|3; 0; -2|] and e = 3 downto -1|];; +[%%expect{| +- : (int * int * int) array = +[|(3, 2, 3); (2, 2, 3); (1, 2, 3); (0, 2, 3); (-1, 2, 3); (3, 2, 0); + (2, 2, 0); (1, 2, 0); (0, 2, 0); (-1, 2, 0); (3, 2, -2); (2, 2, -2); + (1, 2, -2); (0, 2, -2); (-1, 2, -2); (3, 1, 3); (2, 1, 3); (1, 1, 3); + (0, 1, 3); (-1, 1, 3); (3, 1, 0); (2, 1, 0); (1, 1, 0); (0, 1, 0); + (-1, 1, 0); (3, 1, -2); (2, 1, -2); (1, 1, -2); (0, 1, -2); (-1, 1, -2); + (3, 0, 3); (2, 0, 3); (1, 0, 3); (0, 0, 3); (-1, 0, 3); (3, 0, 0); + (2, 0, 0); (1, 0, 0); (0, 0, 0); (-1, 0, 0); (3, 0, -2); (2, 0, -2); + (1, 0, -2); (0, 0, -2); (-1, 0, -2)|] +|}];; + +[:(e, j, q) for j = 2 downto 0 and q in [:3; 0; -2:] and e = 3 downto -1:];; +[%%expect{| +- : (int * int * int) iarray = +[:(3, 2, 3); (2, 2, 3); (1, 2, 3); (0, 2, 3); (-1, 2, 3); (3, 2, 0); + (2, 2, 0); (1, 2, 0); (0, 2, 0); (-1, 2, 0); (3, 2, -2); (2, 2, -2); + (1, 2, -2); (0, 2, -2); (-1, 2, -2); (3, 1, 3); (2, 1, 3); (1, 1, 3); + (0, 1, 3); (-1, 1, 3); (3, 1, 0); (2, 1, 0); (1, 1, 0); (0, 1, 0); + (-1, 1, 0); (3, 1, -2); (2, 1, -2); (1, 1, -2); (0, 1, -2); (-1, 1, -2); + (3, 0, 3); (2, 0, 3); (1, 0, 3); (0, 0, 3); (-1, 0, 3); (3, 0, 0); + (2, 0, 0); (1, 0, 0); (0, 0, 0); (-1, 0, 0); (3, 0, -2); (2, 0, -2); + (1, 0, -2); (0, 0, -2); (-1, 0, -2):] +|}];; + +[(j, o, r) + for r in [-3; 0; -1; -3; 3; 0; -2] and j in [-3; 0; -2] and o in [-1; 1]];; +[%%expect{| +- : (int * int * int) list = +[(-3, -1, -3); (-3, 1, -3); (0, -1, -3); (0, 1, -3); (-2, -1, -3); + (-2, 1, -3); (-3, -1, 0); (-3, 1, 0); (0, -1, 0); (0, 1, 0); (-2, -1, 0); + (-2, 1, 0); (-3, -1, -1); (-3, 1, -1); (0, -1, -1); (0, 1, -1); + (-2, -1, -1); (-2, 1, -1); (-3, -1, -3); (-3, 1, -3); (0, -1, -3); + (0, 1, -3); (-2, -1, -3); (-2, 1, -3); (-3, -1, 3); (-3, 1, 3); (0, -1, 3); + (0, 1, 3); (-2, -1, 3); (-2, 1, 3); (-3, -1, 0); (-3, 1, 0); (0, -1, 0); + (0, 1, 0); (-2, -1, 0); (-2, 1, 0); (-3, -1, -2); (-3, 1, -2); (0, -1, -2); + (0, 1, -2); (-2, -1, -2); (-2, 1, -2)] +|}];; + +[|(j, o, r) + for r in [|-3; 0; -1; -3; 3; 0; -2|] + and j in [|-3; 0; -2|] + and o in [|-1; 1|]|];; +[%%expect{| +- : (int * int * int) array = +[|(-3, -1, -3); (-3, 1, -3); (0, -1, -3); (0, 1, -3); (-2, -1, -3); + (-2, 1, -3); (-3, -1, 0); (-3, 1, 0); (0, -1, 0); (0, 1, 0); (-2, -1, 0); + (-2, 1, 0); (-3, -1, -1); (-3, 1, -1); (0, -1, -1); (0, 1, -1); + (-2, -1, -1); (-2, 1, -1); (-3, -1, -3); (-3, 1, -3); (0, -1, -3); + (0, 1, -3); (-2, -1, -3); (-2, 1, -3); (-3, -1, 3); (-3, 1, 3); (0, -1, 3); + (0, 1, 3); (-2, -1, 3); (-2, 1, 3); (-3, -1, 0); (-3, 1, 0); (0, -1, 0); + (0, 1, 0); (-2, -1, 0); (-2, 1, 0); (-3, -1, -2); (-3, 1, -2); (0, -1, -2); + (0, 1, -2); (-2, -1, -2); (-2, 1, -2)|] +|}];; + +[:(j, o, r) + for r in [:-3; 0; -1; -3; 3; 0; -2:] + and j in [:-3; 0; -2:] + and o in [:-1; 1:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-3, -1, -3); (-3, 1, -3); (0, -1, -3); (0, 1, -3); (-2, -1, -3); + (-2, 1, -3); (-3, -1, 0); (-3, 1, 0); (0, -1, 0); (0, 1, 0); (-2, -1, 0); + (-2, 1, 0); (-3, -1, -1); (-3, 1, -1); (0, -1, -1); (0, 1, -1); + (-2, -1, -1); (-2, 1, -1); (-3, -1, -3); (-3, 1, -3); (0, -1, -3); + (0, 1, -3); (-2, -1, -3); (-2, 1, -3); (-3, -1, 3); (-3, 1, 3); (0, -1, 3); + (0, 1, 3); (-2, -1, 3); (-2, 1, 3); (-3, -1, 0); (-3, 1, 0); (0, -1, 0); + (0, 1, 0); (-2, -1, 0); (-2, 1, 0); (-3, -1, -2); (-3, 1, -2); (0, -1, -2); + (0, 1, -2); (-2, -1, -2); (-2, 1, -2):] +|}];; + +[(a, e, i, o, r, t) + for r = -2 downto -2 and i in [0; -2; -2; 2; -2; 1] + for a = 0 to -2 and o in [0] + for r = 0 to -2 + for e in [-2; -3; 3; 1] and t = -1 to -1 + when abs o mod 2 = 0];; +[%%expect{| +Lines 1-6, characters 0-24: +1 | [(a, e, i, o, r, t) +2 | for r = -2 downto -2 and i in [0; -2; -2; 2; -2; 1] +3 | for a = 0 to -2 and o in [0] +4 | for r = 0 to -2 +5 | for e in [-2; -3; 3; 1] and t = -1 to -1 +6 | when abs o mod 2 = 0].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, e, i, o, r, t) + for r = -2 downto -2 and i in [|0; -2; -2; 2; -2; 1|] + for a = 0 to -2 and o in [|0|] + for r = 0 to -2 + for e in [|-2; -3; 3; 1|] and t = -1 to -1 + when abs o mod 2 = 0|];; +[%%expect{| +Lines 1-6, characters 0-26: +1 | [|(a, e, i, o, r, t) +2 | for r = -2 downto -2 and i in [|0; -2; -2; 2; -2; 1|] +3 | for a = 0 to -2 and o in [|0|] +4 | for r = 0 to -2 +5 | for e in [|-2; -3; 3; 1|] and t = -1 to -1 +6 | when abs o mod 2 = 0|].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, e, i, o, r, t) + for r = -2 downto -2 and i in [:0; -2; -2; 2; -2; 1:] + for a = 0 to -2 and o in [:0:] + for r = 0 to -2 + for e in [:-2; -3; 3; 1:] and t = -1 to -1 + when abs o mod 2 = 0:];; +[%%expect{| +Lines 1-6, characters 0-26: +1 | [:(a, e, i, o, r, t) +2 | for r = -2 downto -2 and i in [:0; -2; -2; 2; -2; 1:] +3 | for a = 0 to -2 and o in [:0:] +4 | for r = 0 to -2 +5 | for e in [:-2; -3; 3; 1:] and t = -1 to -1 +6 | when abs o mod 2 = 0:].. +Warning 26 [unused-var]: unused variable r. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(f, k, t, y) + for k in [1; -1; -1; -1; 0; -3; 2] + for t = -3 to -2 + for k = -1 downto 3 and f = 3 downto k + for y in [2; -3]];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(f, k, t, y) + for k in [|1; -1; -1; -1; 0; -3; 2|] + for t = -3 to -2 + for k = -1 downto 3 and f = 3 downto k + for y in [|2; -3|]|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(f, k, t, y) + for k in [:1; -1; -1; -1; 0; -3; 2:] + for t = -3 to -2 + for k = -1 downto 3 and f = 3 downto k + for y in [:2; -3:]:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(d, g, m, p) + for g = -3 to -1 and d in [1; -2; 1] and m = -3 to 1 + for p = 2 to -3];; +[%%expect{| +- : (int * int * int * int) list = [] +|}];; + +[|(d, g, m, p) + for g = -3 to -1 and d in [|1; -2; 1|] and m = -3 to 1 + for p = 2 to -3|];; +[%%expect{| +- : (int * int * int * int) array = [||] +|}];; + +[:(d, g, m, p) + for g = -3 to -1 and d in [:1; -2; 1:] and m = -3 to 1 + for p = 2 to -3:];; +[%%expect{| +- : (int * int * int * int) iarray = [::] +|}];; + +[(k, y) for y = -1 to 3 and k = 3 to 2];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(k, y) for y = -1 to 3 and k = 3 to 2|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(k, y) for y = -1 to 3 and k = 3 to 2:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(f, p) for f = 3 to -1 and p = 2 downto -2];; +[%%expect{| +- : (int * int) list = [] +|}];; + +[|(f, p) for f = 3 to -1 and p = 2 downto -2|];; +[%%expect{| +- : (int * int) array = [||] +|}];; + +[:(f, p) for f = 3 to -1 and p = 2 downto -2:];; +[%%expect{| +- : (int * int) iarray = [::] +|}];; + +[(f, k, q, u, v, z) + for f = 1 to 3 and k in [0; 3; 1; 3; 2; 2; 0] + when abs k mod 2 = 0 + for z = -3 to 0 and v in [1; 0] + for q = -2 downto -1 and u = -3 to 1 + when f < 0];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(f, k, q, u, v, z) + for f = 1 to 3 and k in [|0; 3; 1; 3; 2; 2; 0|] + when abs k mod 2 = 0 + for z = -3 to 0 and v in [|1; 0|] + for q = -2 downto -1 and u = -3 to 1 + when f < 0|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(f, k, q, u, v, z) + for f = 1 to 3 and k in [:0; 3; 1; 3; 2; 2; 0:] + when abs k mod 2 = 0 + for z = -3 to 0 and v in [:1; 0:] + for q = -2 downto -1 and u = -3 to 1 + when f < 0:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(e, k) for e = -3 to 0 and k in [-1; -2; -1] when abs k mod 2 = 0];; +[%%expect{| +- : (int * int) list = [(-3, -2); (-2, -2); (-1, -2); (0, -2)] +|}];; + +[|(e, k) for e = -3 to 0 and k in [|-1; -2; -1|] when abs k mod 2 = 0|];; +[%%expect{| +- : (int * int) array = [|(-3, -2); (-2, -2); (-1, -2); (0, -2)|] +|}];; + +[:(e, k) for e = -3 to 0 and k in [:-1; -2; -1:] when abs k mod 2 = 0:];; +[%%expect{| +- : (int * int) iarray = [:(-3, -2); (-2, -2); (-1, -2); (0, -2):] +|}];; + +[(e, l, r, w, y) + for l = 2 downto 2 and w = 1 to 3 and r in [2; -3] and y in [0; 3; -3] + for e = 2 downto 2];; +[%%expect{| +- : (int * int * int * int * int) list = +[(2, 2, 2, 1, 0); (2, 2, 2, 1, 3); (2, 2, 2, 1, -3); (2, 2, -3, 1, 0); + (2, 2, -3, 1, 3); (2, 2, -3, 1, -3); (2, 2, 2, 2, 0); (2, 2, 2, 2, 3); + (2, 2, 2, 2, -3); (2, 2, -3, 2, 0); (2, 2, -3, 2, 3); (2, 2, -3, 2, -3); + (2, 2, 2, 3, 0); (2, 2, 2, 3, 3); (2, 2, 2, 3, -3); (2, 2, -3, 3, 0); + (2, 2, -3, 3, 3); (2, 2, -3, 3, -3)] +|}];; + +[|(e, l, r, w, y) + for l = 2 downto 2 and w = 1 to 3 and r in [|2; -3|] and y in [|0; 3; -3|] + for e = 2 downto 2|];; +[%%expect{| +- : (int * int * int * int * int) array = +[|(2, 2, 2, 1, 0); (2, 2, 2, 1, 3); (2, 2, 2, 1, -3); (2, 2, -3, 1, 0); + (2, 2, -3, 1, 3); (2, 2, -3, 1, -3); (2, 2, 2, 2, 0); (2, 2, 2, 2, 3); + (2, 2, 2, 2, -3); (2, 2, -3, 2, 0); (2, 2, -3, 2, 3); (2, 2, -3, 2, -3); + (2, 2, 2, 3, 0); (2, 2, 2, 3, 3); (2, 2, 2, 3, -3); (2, 2, -3, 3, 0); + (2, 2, -3, 3, 3); (2, 2, -3, 3, -3)|] +|}];; + +[:(e, l, r, w, y) + for l = 2 downto 2 and w = 1 to 3 and r in [:2; -3:] and y in [:0; 3; -3:] + for e = 2 downto 2:];; +[%%expect{| +- : (int * int * int * int * int) iarray = +[:(2, 2, 2, 1, 0); (2, 2, 2, 1, 3); (2, 2, 2, 1, -3); (2, 2, -3, 1, 0); + (2, 2, -3, 1, 3); (2, 2, -3, 1, -3); (2, 2, 2, 2, 0); (2, 2, 2, 2, 3); + (2, 2, 2, 2, -3); (2, 2, -3, 2, 0); (2, 2, -3, 2, 3); (2, 2, -3, 2, -3); + (2, 2, 2, 3, 0); (2, 2, 2, 3, 3); (2, 2, 2, 3, -3); (2, 2, -3, 3, 0); + (2, 2, -3, 3, 3); (2, 2, -3, 3, -3):] +|}];; + +[(i, m, q, u, w, x) + for i in [2; 2; -3; 2] and m = -2 to 0 + for m in [3; i; -2; -2; -3] and q in [-2; i; 2; -3; -3; -2] + when q < 0 + for w in [3; 2; 1; 3; -2] + for x = 3 to q and u = -3 to -2];; +[%%expect{| +Lines 1-6, characters 0-35: +1 | [(i, m, q, u, w, x) +2 | for i in [2; 2; -3; 2] and m = -2 to 0 +3 | for m in [3; i; -2; -2; -3] and q in [-2; i; 2; -3; -3; -2] +4 | when q < 0 +5 | for w in [3; 2; 1; 3; -2] +6 | for x = 3 to q and u = -3 to -2].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(i, m, q, u, w, x) + for i in [|2; 2; -3; 2|] and m = -2 to 0 + for m in [|3; i; -2; -2; -3|] and q in [|-2; i; 2; -3; -3; -2|] + when q < 0 + for w in [|3; 2; 1; 3; -2|] + for x = 3 to q and u = -3 to -2|];; +[%%expect{| +Lines 1-6, characters 0-37: +1 | [|(i, m, q, u, w, x) +2 | for i in [|2; 2; -3; 2|] and m = -2 to 0 +3 | for m in [|3; i; -2; -2; -3|] and q in [|-2; i; 2; -3; -3; -2|] +4 | when q < 0 +5 | for w in [|3; 2; 1; 3; -2|] +6 | for x = 3 to q and u = -3 to -2|].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(i, m, q, u, w, x) + for i in [:2; 2; -3; 2:] and m = -2 to 0 + for m in [:3; i; -2; -2; -3:] and q in [:-2; i; 2; -3; -3; -2:] + when q < 0 + for w in [:3; 2; 1; 3; -2:] + for x = 3 to q and u = -3 to -2:];; +[%%expect{| +Lines 1-6, characters 0-37: +1 | [:(i, m, q, u, w, x) +2 | for i in [:2; 2; -3; 2:] and m = -2 to 0 +3 | for m in [:3; i; -2; -2; -3:] and q in [:-2; i; 2; -3; -3; -2:] +4 | when q < 0 +5 | for w in [:3; 2; 1; 3; -2:] +6 | for x = 3 to q and u = -3 to -2:].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(i, j, k, q, r, t, u, y) + for j in [-2; -2; -2] + for q = -1 downto 2 and r in [-2] and u in [-3; -2; j; -3; j; -3] + for y in [j; 2; 3; 2; -1; 3; u] and t = 1 downto 1 and i = 1 to -1 + for k = 2 downto -3 and _ = u downto 1];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(i, j, k, q, r, t, u, y) + for j in [|-2; -2; -2|] + for q = -1 downto 2 and r in [|-2|] and u in [|-3; -2; j; -3; j; -3|] + for y in [|j; 2; 3; 2; -1; 3; u|] and t = 1 downto 1 and i = 1 to -1 + for k = 2 downto -3 and _ = u downto 1|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(i, j, k, q, r, t, u, y) + for j in [:-2; -2; -2:] + for q = -1 downto 2 and r in [:-2:] and u in [:-3; -2; j; -3; j; -3:] + for y in [:j; 2; 3; 2; -1; 3; u:] and t = 1 downto 1 and i = 1 to -1 + for k = 2 downto -3 and _ = u downto 1:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(j, m, n, p, r, v, z) + for r in [2; -1; -2; -3; 1] and z in [-2; 0; 2; 0; 3] + for m in [2] and n in [z; -3; 0; 1; 3] + for j in [3] and v in [3; -1] + for p = 1 to 3 and n in [-3; -1; 3; 3] + for m in []];; +[%%expect{| +Line 3, characters 7-8: +3 | for m in [2] and n in [z; -3; 0; 1; 3] + ^ +Warning 26 [unused-var]: unused variable m. +Line 3, characters 20-21: +3 | for m in [2] and n in [z; -3; 0; 1; 3] + ^ +Warning 26 [unused-var]: unused variable n. +- : (int * 'a * int * int * int * int * int) list = [] +|}];; + +[|(j, m, n, p, r, v, z) + for r in [|2; -1; -2; -3; 1|] and z in [|-2; 0; 2; 0; 3|] + for m in [|2|] and n in [|z; -3; 0; 1; 3|] + for j in [|3|] and v in [|3; -1|] + for p = 1 to 3 and n in [|-3; -1; 3; 3|] + for m in [||]|];; +[%%expect{| +Line 3, characters 8-9: +3 | for m in [|2|] and n in [|z; -3; 0; 1; 3|] + ^ +Warning 26 [unused-var]: unused variable m. +Line 3, characters 23-24: +3 | for m in [|2|] and n in [|z; -3; 0; 1; 3|] + ^ +Warning 26 [unused-var]: unused variable n. +- : (int * '_weak60 * int * int * int * int * int) array = [||] +|}];; + +[:(j, m, n, p, r, v, z) + for r in [:2; -1; -2; -3; 1:] and z in [:-2; 0; 2; 0; 3:] + for m in [:2:] and n in [:z; -3; 0; 1; 3:] + for j in [:3:] and v in [:3; -1:] + for p = 1 to 3 and n in [:-3; -1; 3; 3:] + for m in [::]:];; +[%%expect{| +Line 3, characters 8-9: +3 | for m in [:2:] and n in [:z; -3; 0; 1; 3:] + ^ +Warning 26 [unused-var]: unused variable m. +Line 3, characters 23-24: +3 | for m in [:2:] and n in [:z; -3; 0; 1; 3:] + ^ +Warning 26 [unused-var]: unused variable n. +- : (int * 'a * int * int * int * int * int) iarray = [::] +|}];; + +[(n, q, v) for q = 2 downto 2 and n = -3 to 0 for v in []];; +[%%expect{| +- : (int * int * 'a) list = [] +|}];; + +[|(n, q, v) for q = 2 downto 2 and n = -3 to 0 for v in [||]|];; +[%%expect{| +- : (int * int * '_weak61) array = [||] +|}];; + +[:(n, q, v) for q = 2 downto 2 and n = -3 to 0 for v in [::]:];; +[%%expect{| +- : (int * int * 'a) iarray = [::] +|}];; + +[(a, c, f, i, m, s, v, w, y) + for i in [-2; 3; -1; 0; 2; 2; -3] + for y = -3 downto -2 and m = -2 to -2 and v = 0 to 0 + for c in [0; 3] and m = 2 to -1 and w = 0 downto 0 + for a in [0; 2; -2; 0; 2] and f in [1; 2; 1; -3] and s = 1 downto 0];; +[%%expect{| +Lines 1-5, characters 0-71: +1 | [(a, c, f, i, m, s, v, w, y) +2 | for i in [-2; 3; -1; 0; 2; 2; -3] +3 | for y = -3 downto -2 and m = -2 to -2 and v = 0 to 0 +4 | for c in [0; 3] and m = 2 to -1 and w = 0 downto 0 +5 | for a in [0; 2; -2; 0; 2] and f in [1; 2; 1; -3] and s = 1 downto 0].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(a, c, f, i, m, s, v, w, y) + for i in [|-2; 3; -1; 0; 2; 2; -3|] + for y = -3 downto -2 and m = -2 to -2 and v = 0 to 0 + for c in [|0; 3|] and m = 2 to -1 and w = 0 downto 0 + for a in [|0; 2; -2; 0; 2|] and f in [|1; 2; 1; -3|] and s = 1 downto 0|];; +[%%expect{| +Lines 1-5, characters 0-77: +1 | [|(a, c, f, i, m, s, v, w, y) +2 | for i in [|-2; 3; -1; 0; 2; 2; -3|] +3 | for y = -3 downto -2 and m = -2 to -2 and v = 0 to 0 +4 | for c in [|0; 3|] and m = 2 to -1 and w = 0 downto 0 +5 | for a in [|0; 2; -2; 0; 2|] and f in [|1; 2; 1; -3|] and s = 1 downto 0|].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(a, c, f, i, m, s, v, w, y) + for i in [:-2; 3; -1; 0; 2; 2; -3:] + for y = -3 downto -2 and m = -2 to -2 and v = 0 to 0 + for c in [:0; 3:] and m = 2 to -1 and w = 0 downto 0 + for a in [:0; 2; -2; 0; 2:] and f in [:1; 2; 1; -3:] and s = 1 downto 0:];; +[%%expect{| +Lines 1-5, characters 0-77: +1 | [:(a, c, f, i, m, s, v, w, y) +2 | for i in [:-2; 3; -1; 0; 2; 2; -3:] +3 | for y = -3 downto -2 and m = -2 to -2 and v = 0 to 0 +4 | for c in [:0; 3:] and m = 2 to -1 and w = 0 downto 0 +5 | for a in [:0; 2; -2; 0; 2:] and f in [:1; 2; 1; -3:] and s = 1 downto 0:].. +Warning 26 [unused-var]: unused variable m. +- : (int * int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(f, i, o, r, t, w) + for i = 3 downto 1 and w = 3 downto 0 + for o in [-1; -3; -2; -3] and t in [0; 2; 1] + for r = -2 downto 2 and f = -1 to -2];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(f, i, o, r, t, w) + for i = 3 downto 1 and w = 3 downto 0 + for o in [|-1; -3; -2; -3|] and t in [|0; 2; 1|] + for r = -2 downto 2 and f = -1 to -2|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(f, i, o, r, t, w) + for i = 3 downto 1 and w = 3 downto 0 + for o in [:-1; -3; -2; -3:] and t in [:0; 2; 1:] + for r = -2 downto 2 and f = -1 to -2:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(f, j, t, u) + for f = -1 downto -2 and j in [1] + for t = 1 to 2 and u in [-2; 1; -1; -3; 1; 2]];; +[%%expect{| +- : (int * int * int * int) list = +[(-1, 1, 1, -2); (-1, 1, 1, 1); (-1, 1, 1, -1); (-1, 1, 1, -3); + (-1, 1, 1, 1); (-1, 1, 1, 2); (-1, 1, 2, -2); (-1, 1, 2, 1); (-1, 1, 2, -1); + (-1, 1, 2, -3); (-1, 1, 2, 1); (-1, 1, 2, 2); (-2, 1, 1, -2); (-2, 1, 1, 1); + (-2, 1, 1, -1); (-2, 1, 1, -3); (-2, 1, 1, 1); (-2, 1, 1, 2); + (-2, 1, 2, -2); (-2, 1, 2, 1); (-2, 1, 2, -1); (-2, 1, 2, -3); + (-2, 1, 2, 1); (-2, 1, 2, 2)] +|}];; + +[|(f, j, t, u) + for f = -1 downto -2 and j in [|1|] + for t = 1 to 2 and u in [|-2; 1; -1; -3; 1; 2|]|];; +[%%expect{| +- : (int * int * int * int) array = +[|(-1, 1, 1, -2); (-1, 1, 1, 1); (-1, 1, 1, -1); (-1, 1, 1, -3); + (-1, 1, 1, 1); (-1, 1, 1, 2); (-1, 1, 2, -2); (-1, 1, 2, 1); + (-1, 1, 2, -1); (-1, 1, 2, -3); (-1, 1, 2, 1); (-1, 1, 2, 2); + (-2, 1, 1, -2); (-2, 1, 1, 1); (-2, 1, 1, -1); (-2, 1, 1, -3); + (-2, 1, 1, 1); (-2, 1, 1, 2); (-2, 1, 2, -2); (-2, 1, 2, 1); + (-2, 1, 2, -1); (-2, 1, 2, -3); (-2, 1, 2, 1); (-2, 1, 2, 2)|] +|}];; + +[:(f, j, t, u) + for f = -1 downto -2 and j in [:1:] + for t = 1 to 2 and u in [:-2; 1; -1; -3; 1; 2:]:];; +[%%expect{| +- : (int * int * int * int) iarray = +[:(-1, 1, 1, -2); (-1, 1, 1, 1); (-1, 1, 1, -1); (-1, 1, 1, -3); + (-1, 1, 1, 1); (-1, 1, 1, 2); (-1, 1, 2, -2); (-1, 1, 2, 1); + (-1, 1, 2, -1); (-1, 1, 2, -3); (-1, 1, 2, 1); (-1, 1, 2, 2); + (-2, 1, 1, -2); (-2, 1, 1, 1); (-2, 1, 1, -1); (-2, 1, 1, -3); + (-2, 1, 1, 1); (-2, 1, 1, 2); (-2, 1, 2, -2); (-2, 1, 2, 1); + (-2, 1, 2, -1); (-2, 1, 2, -3); (-2, 1, 2, 1); (-2, 1, 2, 2):] +|}];; + +[(d, m, o) + for m in [1; -2; 3] and d in [-2; 1; -2; 0; 1; -1] and o in [2; 1; 1; -3]];; +[%%expect{| +- : (int * int * int) list = +[(-2, 1, 2); (-2, 1, 1); (-2, 1, 1); (-2, 1, -3); (1, 1, 2); (1, 1, 1); + (1, 1, 1); (1, 1, -3); (-2, 1, 2); (-2, 1, 1); (-2, 1, 1); (-2, 1, -3); + (0, 1, 2); (0, 1, 1); (0, 1, 1); (0, 1, -3); (1, 1, 2); (1, 1, 1); + (1, 1, 1); (1, 1, -3); (-1, 1, 2); (-1, 1, 1); (-1, 1, 1); (-1, 1, -3); + (-2, -2, 2); (-2, -2, 1); (-2, -2, 1); (-2, -2, -3); (1, -2, 2); (1, -2, 1); + (1, -2, 1); (1, -2, -3); (-2, -2, 2); (-2, -2, 1); (-2, -2, 1); + (-2, -2, -3); (0, -2, 2); (0, -2, 1); (0, -2, 1); (0, -2, -3); (1, -2, 2); + (1, -2, 1); (1, -2, 1); (1, -2, -3); (-1, -2, 2); (-1, -2, 1); (-1, -2, 1); + (-1, -2, -3); (-2, 3, 2); (-2, 3, 1); (-2, 3, 1); (-2, 3, -3); (1, 3, 2); + (1, 3, 1); (1, 3, 1); (1, 3, -3); (-2, 3, 2); (-2, 3, 1); (-2, 3, 1); + (-2, 3, -3); (0, 3, 2); (0, 3, 1); (0, 3, 1); (0, 3, -3); (1, 3, 2); + (1, 3, 1); (1, 3, 1); (1, 3, -3); (-1, 3, 2); (-1, 3, 1); (-1, 3, 1); + (-1, 3, -3)] +|}];; + +[|(d, m, o) + for m in [|1; -2; 3|] + and d in [|-2; 1; -2; 0; 1; -1|] + and o in [|2; 1; 1; -3|]|];; +[%%expect{| +- : (int * int * int) array = +[|(-2, 1, 2); (-2, 1, 1); (-2, 1, 1); (-2, 1, -3); (1, 1, 2); (1, 1, 1); + (1, 1, 1); (1, 1, -3); (-2, 1, 2); (-2, 1, 1); (-2, 1, 1); (-2, 1, -3); + (0, 1, 2); (0, 1, 1); (0, 1, 1); (0, 1, -3); (1, 1, 2); (1, 1, 1); + (1, 1, 1); (1, 1, -3); (-1, 1, 2); (-1, 1, 1); (-1, 1, 1); (-1, 1, -3); + (-2, -2, 2); (-2, -2, 1); (-2, -2, 1); (-2, -2, -3); (1, -2, 2); + (1, -2, 1); (1, -2, 1); (1, -2, -3); (-2, -2, 2); (-2, -2, 1); (-2, -2, 1); + (-2, -2, -3); (0, -2, 2); (0, -2, 1); (0, -2, 1); (0, -2, -3); (1, -2, 2); + (1, -2, 1); (1, -2, 1); (1, -2, -3); (-1, -2, 2); (-1, -2, 1); (-1, -2, 1); + (-1, -2, -3); (-2, 3, 2); (-2, 3, 1); (-2, 3, 1); (-2, 3, -3); (1, 3, 2); + (1, 3, 1); (1, 3, 1); (1, 3, -3); (-2, 3, 2); (-2, 3, 1); (-2, 3, 1); + (-2, 3, -3); (0, 3, 2); (0, 3, 1); (0, 3, 1); (0, 3, -3); (1, 3, 2); + (1, 3, 1); (1, 3, 1); (1, 3, -3); (-1, 3, 2); (-1, 3, 1); (-1, 3, 1); + (-1, 3, -3)|] +|}];; + +[:(d, m, o) + for m in [:1; -2; 3:] + and d in [:-2; 1; -2; 0; 1; -1:] + and o in [:2; 1; 1; -3:]:];; +[%%expect{| +- : (int * int * int) iarray = +[:(-2, 1, 2); (-2, 1, 1); (-2, 1, 1); (-2, 1, -3); (1, 1, 2); (1, 1, 1); + (1, 1, 1); (1, 1, -3); (-2, 1, 2); (-2, 1, 1); (-2, 1, 1); (-2, 1, -3); + (0, 1, 2); (0, 1, 1); (0, 1, 1); (0, 1, -3); (1, 1, 2); (1, 1, 1); + (1, 1, 1); (1, 1, -3); (-1, 1, 2); (-1, 1, 1); (-1, 1, 1); (-1, 1, -3); + (-2, -2, 2); (-2, -2, 1); (-2, -2, 1); (-2, -2, -3); (1, -2, 2); + (1, -2, 1); (1, -2, 1); (1, -2, -3); (-2, -2, 2); (-2, -2, 1); (-2, -2, 1); + (-2, -2, -3); (0, -2, 2); (0, -2, 1); (0, -2, 1); (0, -2, -3); (1, -2, 2); + (1, -2, 1); (1, -2, 1); (1, -2, -3); (-1, -2, 2); (-1, -2, 1); (-1, -2, 1); + (-1, -2, -3); (-2, 3, 2); (-2, 3, 1); (-2, 3, 1); (-2, 3, -3); (1, 3, 2); + (1, 3, 1); (1, 3, 1); (1, 3, -3); (-2, 3, 2); (-2, 3, 1); (-2, 3, 1); + (-2, 3, -3); (0, 3, 2); (0, 3, 1); (0, 3, 1); (0, 3, -3); (1, 3, 2); + (1, 3, 1); (1, 3, 1); (1, 3, -3); (-1, 3, 2); (-1, 3, 1); (-1, 3, 1); + (-1, 3, -3):] +|}];; + +[(d, g, h, k, m, p, t) + for k = -2 downto -3 and t in [0; -1; -1; -2; 1] + for h in [-2; -3; 2; 3; 2] + for d = k to 0 and g = t to -3 + when abs d mod 2 = 1 + for m = -1 downto 2 and p = 1 to 3];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(d, g, h, k, m, p, t) + for k = -2 downto -3 and t in [|0; -1; -1; -2; 1|] + for h in [|-2; -3; 2; 3; 2|] + for d = k to 0 and g = t to -3 + when abs d mod 2 = 1 + for m = -1 downto 2 and p = 1 to 3|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(d, g, h, k, m, p, t) + for k = -2 downto -3 and t in [:0; -1; -1; -2; 1:] + for h in [:-2; -3; 2; 3; 2:] + for d = k to 0 and g = t to -3 + when abs d mod 2 = 1 + for m = -1 downto 2 and p = 1 to 3:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, d, e, g, v, z) + for d = 2 downto 1 + for g = 2 to -1 and v in [-2] and d in [-1; -3] and a in [2; 2; 1; 0; 2] + for e in [2; 3] and z = 1 downto 3 and g = -2 to -2];; +[%%expect{| +Lines 1-4, characters 0-55: +1 | [(a, d, e, g, v, z) +2 | for d = 2 downto 1 +3 | for g = 2 to -1 and v in [-2] and d in [-1; -3] and a in [2; 2; 1; 0; 2] +4 | for e in [2; 3] and z = 1 downto 3 and g = -2 to -2].. +Warning 26 [unused-var]: unused variable d. +Lines 1-4, characters 0-55: +1 | [(a, d, e, g, v, z) +2 | for d = 2 downto 1 +3 | for g = 2 to -1 and v in [-2] and d in [-1; -3] and a in [2; 2; 1; 0; 2] +4 | for e in [2; 3] and z = 1 downto 3 and g = -2 to -2].. +Warning 26 [unused-var]: unused variable g. +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(b, c, r, t, z) + for r in [|1; -3|] and b in [|-3; 2; -2; 1; -2; -3|] + for c in [|3; -1; 2; -3; 2; 1; -3|] and t in [||] and z = 3 to -2 + when abs t mod 2 = 1 + when abs r mod 2 = 0|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(b, c, r, t, z) + for r in [:1; -3:] and b in [:-3; 2; -2; 1; -2; -3:] + for c in [:3; -1; 2; -3; 2; 1; -3:] and t in [::] and z = 3 to -2 + when abs t mod 2 = 1 + when abs r mod 2 = 0:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(b, c, d, j, t, x) + for x in [-3; 2; -3] and d in [-3; -2] and b in [3; -2; 3; 2; -1; 3] + for j = -2 downto 3 and _ in [-3; -1] + when j <> 0 + for c = -3 downto x and t in [1; 2]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(b, c, d, j, t, x) + for x in [|-3; 2; -3|] and d in [|-3; -2|] and b in [|3; -2; 3; 2; -1; 3|] + for j = -2 downto 3 and _ in [|-3; -1|] + when j <> 0 + for c = -3 downto x and t in [|1; 2|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(b, c, d, j, t, x) + for x in [:-3; 2; -3:] and d in [:-3; -2:] and b in [:3; -2; 3; 2; -1; 3:] + for j = -2 downto 3 and _ in [:-3; -1:] + when j <> 0 + for c = -3 downto x and t in [:1; 2:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(h, w) for w in [0; -1] and h in [-2; 1; -3; 3; -3; -2; -3]];; +[%%expect{| +- : (int * int) list = +[(-2, 0); (1, 0); (-3, 0); (3, 0); (-3, 0); (-2, 0); (-3, 0); (-2, -1); + (1, -1); (-3, -1); (3, -1); (-3, -1); (-2, -1); (-3, -1)] +|}];; + +[|(h, w) for w in [|0; -1|] and h in [|-2; 1; -3; 3; -3; -2; -3|]|];; +[%%expect{| +- : (int * int) array = +[|(-2, 0); (1, 0); (-3, 0); (3, 0); (-3, 0); (-2, 0); (-3, 0); (-2, -1); + (1, -1); (-3, -1); (3, -1); (-3, -1); (-2, -1); (-3, -1)|] +|}];; + +[:(h, w) for w in [:0; -1:] and h in [:-2; 1; -3; 3; -3; -2; -3:]:];; +[%%expect{| +- : (int * int) iarray = +[:(-2, 0); (1, 0); (-3, 0); (3, 0); (-3, 0); (-2, 0); (-3, 0); (-2, -1); + (1, -1); (-3, -1); (3, -1); (-3, -1); (-2, -1); (-3, -1):] +|}];; + +[(e, h, k, p, t, v) + for v in [2; 0; 2; 0; -3; 2] + for h in [2; 3; -1; -2; -3] and p = 2 downto 0 and t in [] + for k in [0; -3] + for v in [-3] and _ in [k; 2; -3; -3] and e = 0 downto -3];; +[%%expect{| +Line 2, characters 7-8: +2 | for v in [2; 0; 2; 0; -3; 2] + ^ +Warning 26 [unused-var]: unused variable v. +- : (int * int * int * int * 'a * int) list = [] +|}];; + +[|(e, h, k, p, t, v) + for v in [|2; 0; 2; 0; -3; 2|] + for h in [|2; 3; -1; -2; -3|] and p = 2 downto 0 and t in [||] + for k in [|0; -3|] + for v in [|-3|] and _ in [|k; 2; -3; -3|] and e = 0 downto -3|];; +[%%expect{| +Line 2, characters 8-9: +2 | for v in [|2; 0; 2; 0; -3; 2|] + ^ +Warning 26 [unused-var]: unused variable v. +- : (int * int * int * int * '_weak62 * int) array = [||] +|}];; + +[:(e, h, k, p, t, v) + for v in [:2; 0; 2; 0; -3; 2:] + for h in [:2; 3; -1; -2; -3:] and p = 2 downto 0 and t in [::] + for k in [:0; -3:] + for v in [:-3:] and _ in [:k; 2; -3; -3:] and e = 0 downto -3:];; +[%%expect{| +Line 2, characters 8-9: +2 | for v in [:2; 0; 2; 0; -3; 2:] + ^ +Warning 26 [unused-var]: unused variable v. +- : (int * int * int * int * 'a * int) iarray = [::] +|}];; + +[b for b = 3 to -3 when abs b mod 2 = 0 when b > 0];; +[%%expect{| +- : int list = [] +|}];; + +[|b for b = 3 to -3 when abs b mod 2 = 0 when b > 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:b for b = 3 to -3 when abs b mod 2 = 0 when b > 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(b, f, l, p, q, u) + for l in [-1; -3] + when l > 0 + for f = -1 to 0 and q = 2 downto 3 and b = 2 to l + for p = l downto 3 and u in [2]];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(b, f, l, p, q, u) + for l in [|-1; -3|] + when l > 0 + for f = -1 to 0 and q = 2 downto 3 and b = 2 to l + for p = l downto 3 and u in [|2|]|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(b, f, l, p, q, u) + for l in [:-1; -3:] + when l > 0 + for f = -1 to 0 and q = 2 downto 3 and b = 2 to l + for p = l downto 3 and u in [:2:]:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[(a, l, s, t, v, z) + for a in [-3] and v in [0; 1; 3; 0; -1; -3] + for t in [2] and s = 0 to 2 and l = 1 to a and z = 1 to 1];; +[%%expect{| +- : (int * int * int * int * int * int) list = [] +|}];; + +[|(a, l, s, t, v, z) + for a in [|-3|] and v in [|0; 1; 3; 0; -1; -3|] + for t in [|2|] and s = 0 to 2 and l = 1 to a and z = 1 to 1|];; +[%%expect{| +- : (int * int * int * int * int * int) array = [||] +|}];; + +[:(a, l, s, t, v, z) + for a in [:-3:] and v in [:0; 1; 3; 0; -1; -3:] + for t in [:2:] and s = 0 to 2 and l = 1 to a and z = 1 to 1:];; +[%%expect{| +- : (int * int * int * int * int * int) iarray = [::] +|}];; + +[y for y = 2 downto 3 when abs y mod 2 = 0];; +[%%expect{| +- : int list = [] +|}];; + +[|y for y = 2 downto 3 when abs y mod 2 = 0|];; +[%%expect{| +- : int array = [||] +|}];; + +[:y for y = 2 downto 3 when abs y mod 2 = 0:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[(d, f, g, h, p, u, z) + for d in [1; -1] and h in [-1; 3] + for f = -2 downto d and u in [] + for z in [h; -2; -2; 2; -2] and g = 2 downto 3 + for p in [2; 0] + when abs u mod 2 = 1];; +[%%expect{| +- : (int * int * int * int * int * int * int) list = [] +|}];; + +[|(d, f, g, h, p, u, z) + for d in [|1; -1|] and h in [|-1; 3|] + for f = -2 downto d and u in [||] + for z in [|h; -2; -2; 2; -2|] and g = 2 downto 3 + for p in [|2; 0|] + when abs u mod 2 = 1|];; +[%%expect{| +- : (int * int * int * int * int * int * int) array = [||] +|}];; + +[:(d, f, g, h, p, u, z) + for d in [:1; -1:] and h in [:-1; 3:] + for f = -2 downto d and u in [::] + for z in [:h; -2; -2; 2; -2:] and g = 2 downto 3 + for p in [:2; 0:] + when abs u mod 2 = 1:];; +[%%expect{| +- : (int * int * int * int * int * int * int) iarray = [::] +|}];; + +[(r, s) for r in [0; 2; -2] and s in [1; -1]];; +[%%expect{| +- : (int * int) list = [(0, 1); (0, -1); (2, 1); (2, -1); (-2, 1); (-2, -1)] +|}];; + +[|(r, s) for r in [|0; 2; -2|] and s in [|1; -1|]|];; +[%%expect{| +- : (int * int) array = +[|(0, 1); (0, -1); (2, 1); (2, -1); (-2, 1); (-2, -1)|] +|}];; + +[:(r, s) for r in [:0; 2; -2:] and s in [:1; -1:]:];; +[%%expect{| +- : (int * int) iarray = +[:(0, 1); (0, -1); (2, 1); (2, -1); (-2, 1); (-2, -1):] +|}];; + +[(e, h, i, r, y) + for _ = 0 downto 0 and i in [0; -1; 0] + for h in [0; 0; i] + for e = -1 downto 3 and i = 0 downto -1 + for y = 3 to 3 and r in [-2; 1; 0; 0; 0]];; +[%%expect{| +- : (int * int * int * int * int) list = [] +|}];; + +[|(e, h, i, r, y) + for _ = 0 downto 0 and i in [|0; -1; 0|] + for h in [|0; 0; i|] + for e = -1 downto 3 and i = 0 downto -1 + for y = 3 to 3 and r in [|-2; 1; 0; 0; 0|]|];; +[%%expect{| +- : (int * int * int * int * int) array = [||] +|}];; + +[:(e, h, i, r, y) + for _ = 0 downto 0 and i in [:0; -1; 0:] + for h in [:0; 0; i:] + for e = -1 downto 3 and i = 0 downto -1 + for y = 3 to 3 and r in [:-2; 1; 0; 0; 0:]:];; +[%%expect{| +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(e, j) for e in [3; 0; -1] and j in [3; 3; -1; 1; 3]];; +[%%expect{| +- : (int * int) list = +[(3, 3); (3, 3); (3, -1); (3, 1); (3, 3); (0, 3); (0, 3); (0, -1); (0, 1); + (0, 3); (-1, 3); (-1, 3); (-1, -1); (-1, 1); (-1, 3)] +|}];; + +[|(e, j) for e in [|3; 0; -1|] and j in [|3; 3; -1; 1; 3|]|];; +[%%expect{| +- : (int * int) array = +[|(3, 3); (3, 3); (3, -1); (3, 1); (3, 3); (0, 3); (0, 3); (0, -1); (0, 1); + (0, 3); (-1, 3); (-1, 3); (-1, -1); (-1, 1); (-1, 3)|] +|}];; + +[:(e, j) for e in [:3; 0; -1:] and j in [:3; 3; -1; 1; 3:]:];; +[%%expect{| +- : (int * int) iarray = +[:(3, 3); (3, 3); (3, -1); (3, 1); (3, 3); (0, 3); (0, 3); (0, -1); (0, 1); + (0, 3); (-1, 3); (-1, 3); (-1, -1); (-1, 1); (-1, 3):] +|}];; + +[(r, u) for r in [2; 0] for u in [-2; r; 2]];; +[%%expect{| +- : (int * int) list = [(2, -2); (2, 2); (2, 2); (0, -2); (0, 0); (0, 2)] +|}];; + +[|(r, u) for r in [|2; 0|] for u in [|-2; r; 2|]|];; +[%%expect{| +- : (int * int) array = [|(2, -2); (2, 2); (2, 2); (0, -2); (0, 0); (0, 2)|] +|}];; + +[:(r, u) for r in [:2; 0:] for u in [:-2; r; 2:]:];; +[%%expect{| +- : (int * int) iarray = [:(2, -2); (2, 2); (2, 2); (0, -2); (0, 0); (0, 2):] +|}];; + +[(c, d, k, o, t, v) + for c = -3 to 2 and v in [1; 0; 1; 0; -3] + for o = 2 to -2 and k in [-2; 3; -3; c; -1] and _ in [2; 2] and t in [] + for d in [3; -1; -3; -3; -3; -1]];; +[%%expect{| +- : (int * int * int * int * 'a * int) list = [] +|}];; + +[|(n, r, w) + for w in [|0|] and n in [|2; 2; 2; -3; -1|] + when n <> 0 + for r = -2 downto 3 + when abs n mod 2 = 0 + when r > 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(n, r, w) + for w in [:0:] and n in [:2; 2; 2; -3; -1:] + when n <> 0 + for r = -2 downto 3 + when abs n mod 2 = 0 + when r > 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(d, e, l, n, u) + for u = -2 to 3 and d = -3 to 2 and n in [1; -1; -2] + when n < 0 + when d > 0 + for e in [3; 2] and l = 0 downto 2 and u = 3 downto -3];; +[%%expect{| +Lines 1-5, characters 0-58: +1 | [(d, e, l, n, u) +2 | for u = -2 to 3 and d = -3 to 2 and n in [1; -1; -2] +3 | when n < 0 +4 | when d > 0 +5 | for e in [3; 2] and l = 0 downto 2 and u = 3 downto -3].. +Warning 26 [unused-var]: unused variable u. +- : (int * int * int * int * int) list = [] +|}];; + +[|(d, e, l, n, u) + for u = -2 to 3 and d = -3 to 2 and n in [|1; -1; -2|] + when n < 0 + when d > 0 + for e in [|3; 2|] and l = 0 downto 2 and u = 3 downto -3|];; +[%%expect{| +Lines 1-5, characters 0-62: +1 | [|(d, e, l, n, u) +2 | for u = -2 to 3 and d = -3 to 2 and n in [|1; -1; -2|] +3 | when n < 0 +4 | when d > 0 +5 | for e in [|3; 2|] and l = 0 downto 2 and u = 3 downto -3|].. +Warning 26 [unused-var]: unused variable u. +- : (int * int * int * int * int) array = [||] +|}];; + +[:(d, e, l, n, u) + for u = -2 to 3 and d = -3 to 2 and n in [:1; -1; -2:] + when n < 0 + when d > 0 + for e in [:3; 2:] and l = 0 downto 2 and u = 3 downto -3:];; +[%%expect{| +Lines 1-5, characters 0-62: +1 | [:(d, e, l, n, u) +2 | for u = -2 to 3 and d = -3 to 2 and n in [:1; -1; -2:] +3 | when n < 0 +4 | when d > 0 +5 | for e in [:3; 2:] and l = 0 downto 2 and u = 3 downto -3:].. +Warning 26 [unused-var]: unused variable u. +- : (int * int * int * int * int) iarray = [::] +|}];; + +[(c, v) for c = 3 downto -1 and v in [0; -3; -3; 2] when abs c mod 2 = 0];; +[%%expect{| +- : (int * int) list = +[(2, 0); (2, -3); (2, -3); (2, 2); (0, 0); (0, -3); (0, -3); (0, 2)] +|}];; + +[|(c, v) for c = 3 downto -1 and v in [|0; -3; -3; 2|] when abs c mod 2 = 0|];; +[%%expect{| +- : (int * int) array = +[|(2, 0); (2, -3); (2, -3); (2, 2); (0, 0); (0, -3); (0, -3); (0, 2)|] +|}];; + +[:(c, v) for c = 3 downto -1 and v in [:0; -3; -3; 2:] when abs c mod 2 = 0:];; +[%%expect{| +- : (int * int) iarray = +[:(2, 0); (2, -3); (2, -3); (2, 2); (0, 0); (0, -3); (0, -3); (0, 2):] +|}];; + +[(d, e, x) + for x in [-2; 1] + when abs x mod 2 = 1 + for d = 2 to -3 and e = 0 downto 0];; +[%%expect{| +- : (int * int * int) list = [] +|}];; + +[|(d, e, x) + for x in [|-2; 1|] + when abs x mod 2 = 1 + for d = 2 to -3 and e = 0 downto 0|];; +[%%expect{| +- : (int * int * int) array = [||] +|}];; + +[:(d, e, x) + for x in [:-2; 1:] + when abs x mod 2 = 1 + for d = 2 to -3 and e = 0 downto 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[(d, h, k, m, r, s, w, x) + for s = 1 to 1 and w = 0 to 1 + for d in [3; 2; 3; 3; -2] and r in [] + for m in [] and h in [-3; 2; -3; 2; 2; 1] + for k = 1 downto r and h in [1; 2; 1; 3; 3] and x in [0]];; +[%%expect{| +Line 4, characters 19-20: +4 | for m in [] and h in [-3; 2; -3; 2; 2; 1] + ^ +Warning 26 [unused-var]: unused variable h. +- : (int * int * int * 'a * int * int * int * int) list = [] +|}];; + +[|(d, h, k, m, r, s, w, x) + for s = 1 to 1 and w = 0 to 1 + for d in [|3; 2; 3; 3; -2|] and r in [||] + for m in [||] and h in [|-3; 2; -3; 2; 2; 1|] + for k = 1 downto r and h in [|1; 2; 1; 3; 3|] and x in [|0|]|];; +[%%expect{| +Line 4, characters 22-23: +4 | for m in [||] and h in [|-3; 2; -3; 2; 2; 1|] + ^ +Warning 26 [unused-var]: unused variable h. +- : (int * int * int * '_weak63 * int * int * int * int) array = [||] +|}];; + +[:(d, h, k, m, r, s, w, x) + for s = 1 to 1 and w = 0 to 1 + for d in [:3; 2; 3; 3; -2:] and r in [::] + for m in [::] and h in [:-3; 2; -3; 2; 2; 1:] + for k = 1 downto r and h in [:1; 2; 1; 3; 3:] and x in [:0:]:];; +[%%expect{| +Line 4, characters 22-23: +4 | for m in [::] and h in [:-3; 2; -3; 2; 2; 1:] + ^ +Warning 26 [unused-var]: unused variable h. +- : (int * int * int * 'a * int * int * int * int) iarray = [::] +|}];; + +[(d, f, g, l, o, p, t, z) + for f in [-2] and o in [-1; -2; -3] + for d = -3 downto -2 and p = 0 to 0 + for l = -1 to -3 + for z in [1; 1; 0; 3; -3] and g = 3 downto 1 and t = -2 to -2];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) list = [] +|}];; + +[|(d, f, g, l, o, p, t, z) + for f in [|-2|] and o in [|-1; -2; -3|] + for d = -3 downto -2 and p = 0 to 0 + for l = -1 to -3 + for z in [|1; 1; 0; 3; -3|] and g = 3 downto 1 and t = -2 to -2|];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) array = [||] +|}];; + +[:(d, f, g, l, o, p, t, z) + for f in [:-2:] and o in [:-1; -2; -3:] + for d = -3 downto -2 and p = 0 to 0 + for l = -1 to -3 + for z in [:1; 1; 0; 3; -3:] and g = 3 downto 1 and t = -2 to -2:];; +[%%expect{| +- : (int * int * int * int * int * int * int * int) iarray = [::] +|}];; + +[s for s in [3; -3; 0; -3; -2; -2; 1] when s > 0];; +[%%expect{| +- : int list = [3; 1] +|}];; + +[|s for s in [|3; -3; 0; -3; -2; -2; 1|] when s > 0|];; +[%%expect{| +- : int array = [|3; 1|] +|}];; + +[:s for s in [:3; -3; 0; -3; -2; -2; 1:] when s > 0:];; +[%%expect{| +- : int iarray = [:3; 1:] +|}];; + +[(c, h, l, n) + for _ = 0 to 2 and c in [3; -2] + for l in [-2; 0; -2; -3; -3; c; 0] + when l < 0 + for n in [] and h in [1; 3; -3; 1; 3; 0] + when c > 0];; +[%%expect{| +- : (int * int * int * 'a) list = [] +|}];; + +[|(c, h, l, n) + for _ = 0 to 2 and c in [|3; -2|] + for l in [|-2; 0; -2; -3; -3; c; 0|] + when l < 0 + for n in [||] and h in [|1; 3; -3; 1; 3; 0|] + when c > 0|];; +[%%expect{| +- : (int * int * int * '_weak64) array = [||] +|}];; + +[:(c, h, l, n) + for _ = 0 to 2 and c in [:3; -2:] + for l in [:-2; 0; -2; -3; -3; c; 0:] + when l < 0 + for n in [::] and h in [:1; 3; -3; 1; 3; 0:] + when c > 0:];; +[%%expect{| +- : (int * int * int * 'a) iarray = [::] +|}];; diff --git a/testsuite/tests/comprehensions/iarray_comprehensions_pure.ml b/testsuite/tests/comprehensions/iarray_comprehensions_pure.ml new file mode 100644 index 000000000000..9435d496b659 --- /dev/null +++ b/testsuite/tests/comprehensions/iarray_comprehensions_pure.ml @@ -0,0 +1,477 @@ +(* TEST + flags = "-extension comprehensions_experimental -extension immutable_arrays_experimental" + * expect +*) + +(****************************************************************************** + * ******** ATTENTION! ******** * + * * + * This file should be kept in sync with the files * + * "list_comprehensions_pure.ml" and "iarray_comprehensions_pure.ml". If * + * you're adding a test to one, add it to the others as well; if the test * + * output changes in one file and not the others (except as documented in * + * comments), this is a bug. * + ******************************************************************************) + +(******************************************************************************) +(**** Basic behavior ****) + +[:i for i = 0 to 9:];; +[%%expect{| +- : int iarray = [:0; 1; 2; 3; 4; 5; 6; 7; 8; 9:] +|}];; + +[:i for i = 9 downto 0:];; +[%%expect{| +- : int iarray = [:9; 8; 7; 6; 5; 4; 3; 2; 1; 0:] +|}];; + +[:s for s in [:"hello"; "world"; "!":]:];; +[%%expect{| +- : string iarray = [:"hello"; "world"; "!":] +|}];; + +[:i,s for i = 0 to 3 and s in [:'a'; 'b'; 'c':]:];; +[%%expect{| +- : (int * char) iarray = +[:(0, 'a'); (0, 'b'); (0, 'c'); (1, 'a'); (1, 'b'); (1, 'c'); (2, 'a'); + (2, 'b'); (2, 'c'); (3, 'a'); (3, 'b'); (3, 'c'):] +|}];; + +[:i,s for i = 0 to 3 for s in [:'a'; 'b'; 'c':]:];; +[%%expect{| +- : (int * char) iarray = +[:(0, 'a'); (0, 'b'); (0, 'c'); (1, 'a'); (1, 'b'); (1, 'c'); (2, 'a'); + (2, 'b'); (2, 'c'); (3, 'a'); (3, 'b'); (3, 'c'):] +|}];; + +[:i,j for i = 1 to 3 for j in [:i*10; i*100:]:];; +[%%expect{| +- : (int * int) iarray = +[:(1, 10); (1, 100); (2, 20); (2, 200); (3, 30); (3, 300):] +|}];; + +[:x for xs in [:[:"this"; "is"; "one":]; + [:"way":]; + [:"to"; "flatten":]; + [:"a"; "nested"; "array":]:] + for x in xs:];; +[%%expect{| +- : string iarray = +[:"this"; "is"; "one"; "way"; "to"; "flatten"; "a"; "nested"; "array":] +|}];; + +[:i for i = 0 to 10 when i mod 2 = 0:];; +[%%expect{| +- : int iarray = [:0; 2; 4; 6; 8; 10:] +|}];; + +[:() for _ = 1 to 10:];; +[%%expect{| +- : unit iarray = [:(); (); (); (); (); (); (); (); (); ():] +|}];; + +(******************************************************************************) +(**** More complex behavior ****) + +let pythagorean_triples n = + [:a,b,c for a = 1 to n for b = a to n for c = b to n when a*a + b*b = c*c:] +in +pythagorean_triples 10;; +[%%expect{| +- : (int * int * int) iarray = [:(3, 4, 5); (6, 8, 10):] +|}];; + +let tails xs = + let len = Iarray.length xs in + Iarray.init (len + 1) (fun i -> Iarray.sub xs i (len - i)) +in +let sum = Iarray.fold_left ( + ) 0 in +[:sum xs for xs in tails [:1; 20; 300; 4_000; 50_000; 600_000; 7_000_000:]:];; +[%%expect{| +- : int iarray = +[:7654321; 7654320; 7654300; 7654000; 7650000; 7600000; 7000000; 0:] +|}];; + +let xs = [:2;7;18;28:] in +[:x + 1000*y for x in xs and y in xs:];; +[%%expect{| +- : int iarray = +[:2002; 7002; 18002; 28002; 2007; 7007; 18007; 28007; 2018; 7018; 18018; + 28018; 2028; 7028; 18028; 28028:] +|}];; + +(******************************************************************************) +(**** Edge cases ****) + +[:42 when true:];; +[%%expect{| +- : int iarray = [:42:] +|}];; + +[:42 when false:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[:x for x in [::]:];; +[%%expect{| +- : 'a iarray = [::] +|}];; + +[:i for i = 0 to -1:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[:i for i = 0 downto 1:];; +[%%expect{| +- : int iarray = [::] +|}];; + +[:i for i = 0 to 0:];; +[%%expect{| +- : int iarray = [:0:] +|}];; + +[:i for i = 0 downto 0:];; +[%%expect{| +- : int iarray = [:0:] +|}];; + +(* This would take ~forever if the empty array were iterated over later; + however, for arrays, using [and] lets us get more flexibility (see below). *) +[:i,j,k for i in [::] for j = 0 to Int.max_int for k = 0 downto Int.min_int:];; +[%%expect{| +- : ('a * int * int) iarray = [::] +|}];; + +(* This works no matter where the empty array is, but would take ~forever for + lists if the empty list were iterated over later; see + "(i)array_comprehensions_special.ml" for more nuance on what can happen here + with arrays. *) +[:i,j,k for i in [::] and j = 0 to Int.max_int and k = 0 downto Int.min_int:];; +[%%expect{| +- : ('a * int * int) iarray = [::] +|}];; + +[:x for x in [:"one"; "two"; "three":] for x in [:10; 20; 30:]:];; +[%%expect{| +Line 1, characters 8-9: +1 | [:x for x in [:"one"; "two"; "three":] for x in [:10; 20; 30:]:];; + ^ +Warning 26 [unused-var]: unused variable x. +- : int iarray = [:10; 20; 30; 10; 20; 30; 10; 20; 30:] +|}];; + +(******************************************************************************) +(**** Variable shadowing ****) + +(* QuickCheck found that Python doesn't shadow variables in list comprehensions; + instead, using the same variable name as the binder in two `for`-clauses + doesn't shadow, but rather overwrites the same mutable cell. To confirm that + we handle the subtle issue of shadowing correctly, we preserve here the cases + that Python does not, as found by QuickCheck. *) + +(* Python: {v + [a for a in [0] for a in [1]] == [1] + v} *) +[:a for a in [:0:] for a in [:1:]:];; +[%%expect{| +Line 1, characters 8-9: +1 | [:a for a in [:0:] for a in [:1:]:];; + ^ +Warning 26 [unused-var]: unused variable a. +- : int iarray = [:1:] +|}];; + +(* Python: {v + [(a, b) + for b in [0] + for _ in [0, 0] + for a in [b] + for b in range(0, -2, -1)] + == [(0, 0), (0, -1), (-1, 0), (-1, -1)] + v} *) +[:(a, b) for b in [:0:] for _ in [:0; 0:] for a in [:b:] and b = 0 downto -1:];; +[%%expect{| +- : (int * int) iarray = [:(0, 0); (0, -1); (0, 0); (0, -1):] +|}];; + +(* Python: {v + [(a, b) for b in [1] for b in [0] for a in [b]] == [(0, 0)] + v} *) +[:(a, b) for b in [:1:] for b in [:0:] and a in [:b:]:];; +[%%expect{| +- : (int * int) iarray = [:(1, 0):] +|}];; + +(* Python: {v + [a for a in [1] for _ in [0, 0] if a > 0 for a in [0]] == [0] + v} *) +[:a for a in [:1:] and _ in [:0; 0:] when a > 0 for a in [:0:]:];; +[%%expect{| +- : int iarray = [:0; 0:] +|}];; + +(* Python: {v + [a for a in [0] for _ in [0, 0] for a in [a, 1]] == [0, 1, 1, 1] + v} *) +[:a for a in [:0:] and _ in [:0; 0:] for a in [:a; 1:]:];; +[%%expect{| +- : int iarray = [:0; 1; 0; 1:] +|}];; + +(******************************************************************************) +(**** Bugs found by QuickCheck ****) + +(* At one time, this was (for mutable arrays) incorrectly returning the empty + array as an array comprehension, but correctly returning a singleton list as + a list comprehension. *) +[:() for _ = 0 to 0:]; +[%%expect{| +- : unit iarray = [:():] +|}];; + +(******************************************************************************) +(**** Errors ****) + +(* Can't iterate over non-arrays *) + +[:x for x in 100:];; +[%%expect{| +Line 1, characters 13-16: +1 | [:x for x in 100:];; + ^^^ +Error: This expression has type int but an expression was expected of type + 'a iarray + because it is in a for-in iterator in an immutable array comprehension +|}];; + +(* No mixing immutable arrays and either lists or mutable arrays *) + +(* It's unclear why these are different based on principality *) +[:x for x in []:];; +[%%expect{| +Line 1, characters 13-15: +1 | [:x for x in []:];; + ^^ +Error: This expression has type 'a list + but an expression was expected of type 'b iarray +|}, Principal{| +Line 1, characters 13-15: +1 | [:x for x in []:];; + ^^ +Error: This expression has type 'a list + but an expression was expected of type 'b iarray + because it is in a for-in iterator in an immutable array comprehension +|}];; + +(* As above, but don't trigger type-based disambiguation; this affects the error + message for array comprehensions, but is invisible for list comprehensions *) +let empty = [] in +[:x for x in empty:];; +[%%expect{| +Line 2, characters 13-18: +2 | [:x for x in empty:];; + ^^^^^ +Error: This expression has type 'a list + but an expression was expected of type 'b iarray + because it is in a for-in iterator in an immutable array comprehension +|}];; + +List.length [:i for i = 0 to 3:];; +[%%expect{| +Line 1, characters 12-32: +1 | List.length [:i for i = 0 to 3:];; + ^^^^^^^^^^^^^^^^^^^^ +Error: This expression has type 'a iarray + but an expression was expected of type 'b list +|}];; + +[:x for x in [||]:];; +[%%expect{| +Line 1, characters 13-17: +1 | [:x for x in [||]:];; + ^^^^ +Error: This expression has type 'a array + but an expression was expected of type 'b iarray + because it is in a for-in iterator in an immutable array comprehension +|}];; + +let empty = [||] in +[:x for x in empty:];; +[%%expect{| +Line 2, characters 13-18: +2 | [:x for x in empty:];; + ^^^^^ +Error: This expression has type 'a array + but an expression was expected of type 'b iarray + because it is in a for-in iterator in an immutable array comprehension +|}];; + +Array.length [:i for i = 0 to 3:];; +[%%expect{| +Line 1, characters 13-33: +1 | Array.length [:i for i = 0 to 3:];; + ^^^^^^^^^^^^^^^^^^^^ +Error: This expression has type 'a iarray + but an expression was expected of type 'b array +|}];; + +(* No mixing immutable arrays with anything else; we check these here so we + don't have to enable -extension immutable_arrays elsewhere, but we should + move them when that changes *) + +[x for x in [::]];; +[%%expect{| +Line 1, characters 12-16: +1 | [x for x in [::]];; + ^^^^ +Error: This expression has type 'a iarray + but an expression was expected of type 'b list + because it is in a for-in iterator in a list comprehension +|}];; + +(* As above, but don't trigger type-based disambiguation; this is invisible for + list comprehensions but affects the error message for array comprehensions *) +let empty = [::] in +[x for x in empty];; +[%%expect{| +Line 2, characters 12-17: +2 | [x for x in empty];; + ^^^^^ +Error: This expression has type 'a iarray + but an expression was expected of type 'b list + because it is in a for-in iterator in a list comprehension +|}];; + +Iarray.length [i for i = 0 to 3];; +[%%expect{| +Line 1, characters 14-32: +1 | Iarray.length [i for i = 0 to 3];; + ^^^^^^^^^^^^^^^^^^ +Error: This expression has type 'a list + but an expression was expected of type 'b iarray +|}];; + +[|x for x in [::]|];; +[%%expect{| +Line 1, characters 13-17: +1 | [|x for x in [::]|];; + ^^^^ +Error: This expression has type 'a iarray + but an expression was expected of type 'b array + because it is in a for-in iterator in an array comprehension +|}];; + +(* As above, but don't trigger type-based disambiguation; this is invisible for + list comprehensions but affects the error message for array comprehensions *) +let empty = [::] in +[|x for x in empty|];; +[%%expect{| +Line 2, characters 13-18: +2 | [|x for x in empty|];; + ^^^^^ +Error: This expression has type 'a iarray + but an expression was expected of type 'b array + because it is in a for-in iterator in an array comprehension +|}];; + +Iarray.length [i for i = 0 to 3];; +[%%expect{| +Line 1, characters 14-32: +1 | Iarray.length [i for i = 0 to 3];; + ^^^^^^^^^^^^^^^^^^ +Error: This expression has type 'a list + but an expression was expected of type 'b iarray +|}];; + +(* to/downto are only for ints *) + +[:x for x = 1.5 to 4.2:];; +[%%expect{| +Line 1, characters 12-15: +1 | [:x for x = 1.5 to 4.2:];; + ^^^ +Error: This expression has type float but an expression was expected of type + int + because it is in a range-based for iterator start index in a comprehension +|}];; + +[:x for x = 4.2 downto 1.5:];; +[%%expect{| +Line 1, characters 12-15: +1 | [:x for x = 4.2 downto 1.5:];; + ^^^ +Error: This expression has type float but an expression was expected of type + int + because it is in a range-based for iterator start index in a comprehension +|}];; + +(* No duplicating variables in a for-and clause *) + +[:i for i = 1 to 3 and i = 3 downto 1:];; +[%%expect{| +Line 1, characters 0-39: +1 | [:i for i = 1 to 3 and i = 3 downto 1:];; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: Variable i is bound several times in this matching +|}];; + +(* Variables bind from left to right, not right to left *) + +[:outer,inner for outer = inner to 3 for inner = 1 to 3:];; +[%%expect{| +Line 1, characters 26-31: +1 | [:outer,inner for outer = inner to 3 for inner = 1 to 3:];; + ^^^^^ +Error: Unbound value inner +Hint: Did you mean incr? +|}];; + +(* The element type is handled correctly *) + +Iarray.append [:true:] [:i for i = 0 to 10:];; +[%%expect{| +Line 1, characters 25-26: +1 | Iarray.append [:true:] [:i for i = 0 to 10:];; + ^ +Error: This expression has type int but an expression was expected of type + bool +|}];; + +(******************************************************************************) +(**** Test that types are being propagated inwards correctly ****) + +(* Prepare a module for later use *) +module M = struct + type t = A | B +end;; +[%%expect{| +module M : sig type t = A | B end +|}];; + +let x : M.t iarray = [:A for _ = 1 to 3:];; +[%%expect{| +val x : M.t iarray = [:M.A; M.A; M.A:] +|}];; + +[:A for _ = 1 to 3:];; +[%%expect{| +Line 1, characters 2-3: +1 | [:A for _ = 1 to 3:];; + ^ +Error: Unbound constructor A +|}];; + +Iarray.append [:M.B:] [:A for _ = 1 to 3:];; +[%%expect{| +- : M.t iarray = [:M.B; M.A; M.A; M.A:] +|}, Principal{| +Line 1, characters 24-25: +1 | Iarray.append [:M.B:] [:A for _ = 1 to 3:];; + ^ +Warning 18 [not-principal]: this type-based constructor disambiguation is not principal. +- : M.t iarray = [:M.B; M.A; M.A; M.A:] +|}];; diff --git a/testsuite/tests/comprehensions/iarray_comprehensions_require_immutable_arrays.compilers.reference b/testsuite/tests/comprehensions/iarray_comprehensions_require_immutable_arrays.compilers.reference new file mode 100644 index 000000000000..f71342d43452 --- /dev/null +++ b/testsuite/tests/comprehensions/iarray_comprehensions_require_immutable_arrays.compilers.reference @@ -0,0 +1,4 @@ +File "iarray_comprehensions_require_immutable_arrays.ml", line 9, characters 0-21: +9 | [:x for x = 1 to 10:];; + ^^^^^^^^^^^^^^^^^^^^^ +Error: The extension "immutable_arrays_experimental" is disabled and cannot be used diff --git a/testsuite/tests/comprehensions/iarray_comprehensions_require_immutable_arrays.ml b/testsuite/tests/comprehensions/iarray_comprehensions_require_immutable_arrays.ml new file mode 100644 index 000000000000..e25eef98a1eb --- /dev/null +++ b/testsuite/tests/comprehensions/iarray_comprehensions_require_immutable_arrays.ml @@ -0,0 +1,9 @@ +(* TEST + flags = "-extension comprehensions_experimental" + ocamlc_byte_exit_status = "2" + * setup-ocamlc.byte-build-env + ** ocamlc.byte + *** check-ocamlc.byte-output +*) + +[:x for x = 1 to 10:];; diff --git a/testsuite/tests/comprehensions/iarray_comprehensions_side_effects.ml b/testsuite/tests/comprehensions/iarray_comprehensions_side_effects.ml new file mode 100644 index 000000000000..9c40f2544056 --- /dev/null +++ b/testsuite/tests/comprehensions/iarray_comprehensions_side_effects.ml @@ -0,0 +1,93 @@ +(* TEST + flags = "-extension comprehensions_experimental -extension immutable_arrays_experimental" +*) + +(****************************************************************************** + * ******** ATTENTION! ******** * + * * + * This file should be kept in sync with the files * + * "list_comprehensions_side_effects.ml" and * + * "array_comprehensions_side_effects.ml". If you're adding a test to one, * + * add it to the others as well; if the test output changes in one file and * + * not the others (except as documented in comments), this is a bug. * + ******************************************************************************) + +(******************************************************************************) +(**** Test the order of evaluation ****) + +let say fmt = + Printf.kfprintf (fun stdout -> Printf.fprintf stdout "\n") stdout fmt +;; + +let surround l r m = l ^ m ^ r;; + +let show_list show_item xs = + xs + |> Iarray.map show_item + |> Iarray.to_list + |> String.concat "; " + |> surround "[" "]" +;; + +let show_as_tuple show_item xs = + xs + |> Iarray.map show_item + |> Iarray.to_list + |> String.concat ", " +;; + +let out3 (i, j, k) = say " %d, %d, %d;" i j k;; + +let out6 (i, j, k, x, y, z) = say " %d, %d, %d, %d, %d, %d;" i j k x y z;; + +let report out f = + let result = f () in + say ""; + say "result = [:"; + Iarray.iter out result; + say ":]" +;; + +report out3 (fun () -> + [: begin + say ">>> i = %d, j = %d, k = %d" i j k; + i, j, k + end + for i = (say "first (from)"; 0) to (say "second (to)"; 3) + and j in (say "third (in)"; [:10;20;30:]) + when (say "> i = %d, j = %d | when even i" i j; i mod 2 = 0) + for k = (say ">> first (from)"; -1) downto (say ">> second (to)"; -3) + :] +) +;; + +say "";; + +report out3 (fun () -> + [: begin + say ">>> i = %d, j = %d, k = %d" i j k; + i, j, k + end + for i = (say "first (from)"; 0) to (say "second (to)"; 3) + and j in (say "third (in)"; [:10;20;30:]) + and k = (say "fourth (downfrom)"; 100) downto (say "fifth (downto)"; 97) + :] +) +;; + +say "";; + +report out6 (fun () -> + [: begin + say ">>> i = %d, j = %d, k = %d, x = %d, y = %d, z = %d" i j k x y z; + i, j, k, x, y, z + end + for i = (say "first (from)"; 0) to (say "second (to)"; 1) + and j in (say "third (in)"; [:10;20:]) + and k = (say "fourth (downfrom)"; 100) downto (say "fifth (downto)"; 99) + for x = (say "> first (downfrom)"; 1) downto (say "> second (downto)"; 0) + and y in (say "> third (in)"; [:20;10:]) + and z = (say "> fourth (from)"; 99) to (say "> fifth (to)"; 100) + :] +) +;; diff --git a/testsuite/tests/comprehensions/iarray_comprehensions_side_effects.reference b/testsuite/tests/comprehensions/iarray_comprehensions_side_effects.reference new file mode 100644 index 000000000000..3235f9f493e6 --- /dev/null +++ b/testsuite/tests/comprehensions/iarray_comprehensions_side_effects.reference @@ -0,0 +1,348 @@ +first (from) +second (to) +third (in) +> i = 0, j = 10 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 10, k = -1 +>>> i = 0, j = 10, k = -2 +>>> i = 0, j = 10, k = -3 +> i = 0, j = 20 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 20, k = -1 +>>> i = 0, j = 20, k = -2 +>>> i = 0, j = 20, k = -3 +> i = 0, j = 30 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 30, k = -1 +>>> i = 0, j = 30, k = -2 +>>> i = 0, j = 30, k = -3 +> i = 1, j = 10 | when even i +> i = 1, j = 20 | when even i +> i = 1, j = 30 | when even i +> i = 2, j = 10 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 10, k = -1 +>>> i = 2, j = 10, k = -2 +>>> i = 2, j = 10, k = -3 +> i = 2, j = 20 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 20, k = -1 +>>> i = 2, j = 20, k = -2 +>>> i = 2, j = 20, k = -3 +> i = 2, j = 30 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 30, k = -1 +>>> i = 2, j = 30, k = -2 +>>> i = 2, j = 30, k = -3 +> i = 3, j = 10 | when even i +> i = 3, j = 20 | when even i +> i = 3, j = 30 | when even i + +result = [: + 0, 10, -1; + 0, 10, -2; + 0, 10, -3; + 0, 20, -1; + 0, 20, -2; + 0, 20, -3; + 0, 30, -1; + 0, 30, -2; + 0, 30, -3; + 2, 10, -1; + 2, 10, -2; + 2, 10, -3; + 2, 20, -1; + 2, 20, -2; + 2, 20, -3; + 2, 30, -1; + 2, 30, -2; + 2, 30, -3; +:] + +first (from) +second (to) +third (in) +fourth (downfrom) +fifth (downto) +>>> i = 0, j = 10, k = 100 +>>> i = 0, j = 10, k = 99 +>>> i = 0, j = 10, k = 98 +>>> i = 0, j = 10, k = 97 +>>> i = 0, j = 20, k = 100 +>>> i = 0, j = 20, k = 99 +>>> i = 0, j = 20, k = 98 +>>> i = 0, j = 20, k = 97 +>>> i = 0, j = 30, k = 100 +>>> i = 0, j = 30, k = 99 +>>> i = 0, j = 30, k = 98 +>>> i = 0, j = 30, k = 97 +>>> i = 1, j = 10, k = 100 +>>> i = 1, j = 10, k = 99 +>>> i = 1, j = 10, k = 98 +>>> i = 1, j = 10, k = 97 +>>> i = 1, j = 20, k = 100 +>>> i = 1, j = 20, k = 99 +>>> i = 1, j = 20, k = 98 +>>> i = 1, j = 20, k = 97 +>>> i = 1, j = 30, k = 100 +>>> i = 1, j = 30, k = 99 +>>> i = 1, j = 30, k = 98 +>>> i = 1, j = 30, k = 97 +>>> i = 2, j = 10, k = 100 +>>> i = 2, j = 10, k = 99 +>>> i = 2, j = 10, k = 98 +>>> i = 2, j = 10, k = 97 +>>> i = 2, j = 20, k = 100 +>>> i = 2, j = 20, k = 99 +>>> i = 2, j = 20, k = 98 +>>> i = 2, j = 20, k = 97 +>>> i = 2, j = 30, k = 100 +>>> i = 2, j = 30, k = 99 +>>> i = 2, j = 30, k = 98 +>>> i = 2, j = 30, k = 97 +>>> i = 3, j = 10, k = 100 +>>> i = 3, j = 10, k = 99 +>>> i = 3, j = 10, k = 98 +>>> i = 3, j = 10, k = 97 +>>> i = 3, j = 20, k = 100 +>>> i = 3, j = 20, k = 99 +>>> i = 3, j = 20, k = 98 +>>> i = 3, j = 20, k = 97 +>>> i = 3, j = 30, k = 100 +>>> i = 3, j = 30, k = 99 +>>> i = 3, j = 30, k = 98 +>>> i = 3, j = 30, k = 97 + +result = [: + 0, 10, 100; + 0, 10, 99; + 0, 10, 98; + 0, 10, 97; + 0, 20, 100; + 0, 20, 99; + 0, 20, 98; + 0, 20, 97; + 0, 30, 100; + 0, 30, 99; + 0, 30, 98; + 0, 30, 97; + 1, 10, 100; + 1, 10, 99; + 1, 10, 98; + 1, 10, 97; + 1, 20, 100; + 1, 20, 99; + 1, 20, 98; + 1, 20, 97; + 1, 30, 100; + 1, 30, 99; + 1, 30, 98; + 1, 30, 97; + 2, 10, 100; + 2, 10, 99; + 2, 10, 98; + 2, 10, 97; + 2, 20, 100; + 2, 20, 99; + 2, 20, 98; + 2, 20, 97; + 2, 30, 100; + 2, 30, 99; + 2, 30, 98; + 2, 30, 97; + 3, 10, 100; + 3, 10, 99; + 3, 10, 98; + 3, 10, 97; + 3, 20, 100; + 3, 20, 99; + 3, 20, 98; + 3, 20, 97; + 3, 30, 100; + 3, 30, 99; + 3, 30, 98; + 3, 30, 97; +:] + +first (from) +second (to) +third (in) +fourth (downfrom) +fifth (downto) +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 10, k = 100, x = 1, y = 20, z = 99 +>>> i = 0, j = 10, k = 100, x = 1, y = 20, z = 100 +>>> i = 0, j = 10, k = 100, x = 1, y = 10, z = 99 +>>> i = 0, j = 10, k = 100, x = 1, y = 10, z = 100 +>>> i = 0, j = 10, k = 100, x = 0, y = 20, z = 99 +>>> i = 0, j = 10, k = 100, x = 0, y = 20, z = 100 +>>> i = 0, j = 10, k = 100, x = 0, y = 10, z = 99 +>>> i = 0, j = 10, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 10, k = 99, x = 1, y = 20, z = 99 +>>> i = 0, j = 10, k = 99, x = 1, y = 20, z = 100 +>>> i = 0, j = 10, k = 99, x = 1, y = 10, z = 99 +>>> i = 0, j = 10, k = 99, x = 1, y = 10, z = 100 +>>> i = 0, j = 10, k = 99, x = 0, y = 20, z = 99 +>>> i = 0, j = 10, k = 99, x = 0, y = 20, z = 100 +>>> i = 0, j = 10, k = 99, x = 0, y = 10, z = 99 +>>> i = 0, j = 10, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 20, k = 100, x = 1, y = 20, z = 99 +>>> i = 0, j = 20, k = 100, x = 1, y = 20, z = 100 +>>> i = 0, j = 20, k = 100, x = 1, y = 10, z = 99 +>>> i = 0, j = 20, k = 100, x = 1, y = 10, z = 100 +>>> i = 0, j = 20, k = 100, x = 0, y = 20, z = 99 +>>> i = 0, j = 20, k = 100, x = 0, y = 20, z = 100 +>>> i = 0, j = 20, k = 100, x = 0, y = 10, z = 99 +>>> i = 0, j = 20, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 20, k = 99, x = 1, y = 20, z = 99 +>>> i = 0, j = 20, k = 99, x = 1, y = 20, z = 100 +>>> i = 0, j = 20, k = 99, x = 1, y = 10, z = 99 +>>> i = 0, j = 20, k = 99, x = 1, y = 10, z = 100 +>>> i = 0, j = 20, k = 99, x = 0, y = 20, z = 99 +>>> i = 0, j = 20, k = 99, x = 0, y = 20, z = 100 +>>> i = 0, j = 20, k = 99, x = 0, y = 10, z = 99 +>>> i = 0, j = 20, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 10, k = 100, x = 1, y = 20, z = 99 +>>> i = 1, j = 10, k = 100, x = 1, y = 20, z = 100 +>>> i = 1, j = 10, k = 100, x = 1, y = 10, z = 99 +>>> i = 1, j = 10, k = 100, x = 1, y = 10, z = 100 +>>> i = 1, j = 10, k = 100, x = 0, y = 20, z = 99 +>>> i = 1, j = 10, k = 100, x = 0, y = 20, z = 100 +>>> i = 1, j = 10, k = 100, x = 0, y = 10, z = 99 +>>> i = 1, j = 10, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 10, k = 99, x = 1, y = 20, z = 99 +>>> i = 1, j = 10, k = 99, x = 1, y = 20, z = 100 +>>> i = 1, j = 10, k = 99, x = 1, y = 10, z = 99 +>>> i = 1, j = 10, k = 99, x = 1, y = 10, z = 100 +>>> i = 1, j = 10, k = 99, x = 0, y = 20, z = 99 +>>> i = 1, j = 10, k = 99, x = 0, y = 20, z = 100 +>>> i = 1, j = 10, k = 99, x = 0, y = 10, z = 99 +>>> i = 1, j = 10, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 20, k = 100, x = 1, y = 20, z = 99 +>>> i = 1, j = 20, k = 100, x = 1, y = 20, z = 100 +>>> i = 1, j = 20, k = 100, x = 1, y = 10, z = 99 +>>> i = 1, j = 20, k = 100, x = 1, y = 10, z = 100 +>>> i = 1, j = 20, k = 100, x = 0, y = 20, z = 99 +>>> i = 1, j = 20, k = 100, x = 0, y = 20, z = 100 +>>> i = 1, j = 20, k = 100, x = 0, y = 10, z = 99 +>>> i = 1, j = 20, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 20, k = 99, x = 1, y = 20, z = 99 +>>> i = 1, j = 20, k = 99, x = 1, y = 20, z = 100 +>>> i = 1, j = 20, k = 99, x = 1, y = 10, z = 99 +>>> i = 1, j = 20, k = 99, x = 1, y = 10, z = 100 +>>> i = 1, j = 20, k = 99, x = 0, y = 20, z = 99 +>>> i = 1, j = 20, k = 99, x = 0, y = 20, z = 100 +>>> i = 1, j = 20, k = 99, x = 0, y = 10, z = 99 +>>> i = 1, j = 20, k = 99, x = 0, y = 10, z = 100 + +result = [: + 0, 10, 100, 1, 20, 99; + 0, 10, 100, 1, 20, 100; + 0, 10, 100, 1, 10, 99; + 0, 10, 100, 1, 10, 100; + 0, 10, 100, 0, 20, 99; + 0, 10, 100, 0, 20, 100; + 0, 10, 100, 0, 10, 99; + 0, 10, 100, 0, 10, 100; + 0, 10, 99, 1, 20, 99; + 0, 10, 99, 1, 20, 100; + 0, 10, 99, 1, 10, 99; + 0, 10, 99, 1, 10, 100; + 0, 10, 99, 0, 20, 99; + 0, 10, 99, 0, 20, 100; + 0, 10, 99, 0, 10, 99; + 0, 10, 99, 0, 10, 100; + 0, 20, 100, 1, 20, 99; + 0, 20, 100, 1, 20, 100; + 0, 20, 100, 1, 10, 99; + 0, 20, 100, 1, 10, 100; + 0, 20, 100, 0, 20, 99; + 0, 20, 100, 0, 20, 100; + 0, 20, 100, 0, 10, 99; + 0, 20, 100, 0, 10, 100; + 0, 20, 99, 1, 20, 99; + 0, 20, 99, 1, 20, 100; + 0, 20, 99, 1, 10, 99; + 0, 20, 99, 1, 10, 100; + 0, 20, 99, 0, 20, 99; + 0, 20, 99, 0, 20, 100; + 0, 20, 99, 0, 10, 99; + 0, 20, 99, 0, 10, 100; + 1, 10, 100, 1, 20, 99; + 1, 10, 100, 1, 20, 100; + 1, 10, 100, 1, 10, 99; + 1, 10, 100, 1, 10, 100; + 1, 10, 100, 0, 20, 99; + 1, 10, 100, 0, 20, 100; + 1, 10, 100, 0, 10, 99; + 1, 10, 100, 0, 10, 100; + 1, 10, 99, 1, 20, 99; + 1, 10, 99, 1, 20, 100; + 1, 10, 99, 1, 10, 99; + 1, 10, 99, 1, 10, 100; + 1, 10, 99, 0, 20, 99; + 1, 10, 99, 0, 20, 100; + 1, 10, 99, 0, 10, 99; + 1, 10, 99, 0, 10, 100; + 1, 20, 100, 1, 20, 99; + 1, 20, 100, 1, 20, 100; + 1, 20, 100, 1, 10, 99; + 1, 20, 100, 1, 10, 100; + 1, 20, 100, 0, 20, 99; + 1, 20, 100, 0, 20, 100; + 1, 20, 100, 0, 10, 99; + 1, 20, 100, 0, 10, 100; + 1, 20, 99, 1, 20, 99; + 1, 20, 99, 1, 20, 100; + 1, 20, 99, 1, 10, 99; + 1, 20, 99, 1, 10, 100; + 1, 20, 99, 0, 20, 99; + 1, 20, 99, 0, 20, 100; + 1, 20, 99, 0, 10, 99; + 1, 20, 99, 0, 10, 100; +:] diff --git a/testsuite/tests/comprehensions/iarray_comprehensions_special.ml b/testsuite/tests/comprehensions/iarray_comprehensions_special.ml new file mode 100644 index 000000000000..e005e5c55151 --- /dev/null +++ b/testsuite/tests/comprehensions/iarray_comprehensions_special.ml @@ -0,0 +1,148 @@ +(* TEST + flags = "-extension comprehensions_experimental -extension immutable_arrays_experimental" + * expect +*) + +(****************************************************************************** + * ******** ATTENTION! ******** * + * * + * This file should be kept in sync with the file * + * "array_comprehensions_special.ml". If you're adding a test to one, add it * + * to the other as well; if the test output changes in one file and not the * + * other (except as documented in comments), this is a bug. * + ******************************************************************************) + +(* Tests for special array comprehension behavior that don't have a direct + analog for lists. For array comprehensions, we pre-allocate the resulting + array if it has a statically-knowable size, which we can see by including 0 + in something that would otherwise run for close enough to forever. However, + even if one of the sequences being iterated through is empty, these optimized + comprehensions will still fail if any individual [for]-[to] or [for]-[downto] + iterator would overflow an [int]. *) + +(* Zeros, even though we'd normally expect this to run for ~forever *) + +[:i,j,k for i = 1 to 0 + and j = 0 to Int.max_int / 256 + and k = 1 to 2 :];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[:i,j,k for i = 0 to Int.max_int / 256 + and j = 1 to 0 + and k = 1 to 2 :];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[:i,j,k for i = 0 to Int.max_int / 256 + and j = 1 to 2 + and k = 1 to 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +(* Zeros, even though we'd normally expect the array size to overflow *) + +[:i,j,k for i = 1 to 0 + and j = 0 to Int.max_int - 1 + and k = 0 downto Int.min_int + 2:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[:i,j,k for i = 0 to Int.max_int - 1 + and j = 1 to 0 + and k = 0 downto Int.min_int + 2:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[:i,j,k for i = 0 to Int.max_int - 1 + and j = 0 downto Int.min_int + 2 + and k = 1 to 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +(* Zeros, even though we'd normally expect the individual iterator sizes to + overflow *) + +[:i,j,k for i = 1 to 0 + and j = 0 to Int.max_int + and k = 0 downto Int.min_int:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[:i,j,k for i = 0 to Int.max_int + and j = 1 to 0 + and k = 0 downto Int.min_int:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +[:i,j,k for i = 0 to Int.max_int + and j = 0 downto Int.min_int + and k = 1 to 0:];; +[%%expect{| +- : (int * int * int) iarray = [::] +|}];; + +(* Various kind of overflow *) + +[:i for i = 0 to Int.max_int :];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +[:i for i = 0 downto Int.min_int :];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +[:i for i = 0 downto Int.min_int + 1 :];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +[:i,j for i = 0 to Int.max_int / 256 + and j = 0 to 1023 :];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +[:i,j for i = 0 to 1023 + and j = 0 to Int.max_int / 256 :];; +[%%expect{| +Exception: +Invalid_argument + "integer overflow when precomputing the size of an array comprehension". +|}];; + +(* One case that works, whose output should be unremarkable *) + +[:i,j,k for i = 0 to 3 and j = 0 to 3 and k = 0 to 3:];; +[%%expect{| +- : (int * int * int) iarray = +[:(0, 0, 0); (0, 0, 1); (0, 0, 2); (0, 0, 3); (0, 1, 0); (0, 1, 1); + (0, 1, 2); (0, 1, 3); (0, 2, 0); (0, 2, 1); (0, 2, 2); (0, 2, 3); + (0, 3, 0); (0, 3, 1); (0, 3, 2); (0, 3, 3); (1, 0, 0); (1, 0, 1); + (1, 0, 2); (1, 0, 3); (1, 1, 0); (1, 1, 1); (1, 1, 2); (1, 1, 3); + (1, 2, 0); (1, 2, 1); (1, 2, 2); (1, 2, 3); (1, 3, 0); (1, 3, 1); + (1, 3, 2); (1, 3, 3); (2, 0, 0); (2, 0, 1); (2, 0, 2); (2, 0, 3); + (2, 1, 0); (2, 1, 1); (2, 1, 2); (2, 1, 3); (2, 2, 0); (2, 2, 1); + (2, 2, 2); (2, 2, 3); (2, 3, 0); (2, 3, 1); (2, 3, 2); (2, 3, 3); + (3, 0, 0); (3, 0, 1); (3, 0, 2); (3, 0, 3); (3, 1, 0); (3, 1, 1); + (3, 1, 2); (3, 1, 3); (3, 2, 0); (3, 2, 1); (3, 2, 2); (3, 2, 3); + (3, 3, 0); (3, 3, 1); (3, 3, 2); (3, 3, 3):] +|}];; diff --git a/testsuite/tests/comprehensions/list_comprehensions_pure.ml b/testsuite/tests/comprehensions/list_comprehensions_pure.ml new file mode 100644 index 000000000000..f17a2cdba9ba --- /dev/null +++ b/testsuite/tests/comprehensions/list_comprehensions_pure.ml @@ -0,0 +1,403 @@ +(* TEST + flags = "-extension comprehensions_experimental" + * expect +*) + +(****************************************************************************** + * ******** ATTENTION! ******** * + * * + * This file should be kept in sync with the files * + * "array_comprehensions_pure.ml" and "iarray_comprehensions_pure.ml". If * + * you're adding a test to one, add it to the others as well; if the test * + * output changes in one file and not the others (except as documented in * + * comments), this is a bug. * + ******************************************************************************) + +(******************************************************************************) +(**** Basic behavior ****) + +[i for i = 0 to 9];; +[%%expect{| +- : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9] +|}];; + +[i for i = 9 downto 0];; +[%%expect{| +- : int list = [9; 8; 7; 6; 5; 4; 3; 2; 1; 0] +|}];; + +[s for s in ["hello"; "world"; "!"]];; +[%%expect{| +- : string list = ["hello"; "world"; "!"] +|}];; + +[i,s for i = 0 to 3 and s in ['a'; 'b'; 'c']];; +[%%expect{| +- : (int * char) list = +[(0, 'a'); (0, 'b'); (0, 'c'); (1, 'a'); (1, 'b'); (1, 'c'); (2, 'a'); + (2, 'b'); (2, 'c'); (3, 'a'); (3, 'b'); (3, 'c')] +|}];; + +[i,s for i = 0 to 3 for s in ['a'; 'b'; 'c']];; +[%%expect{| +- : (int * char) list = +[(0, 'a'); (0, 'b'); (0, 'c'); (1, 'a'); (1, 'b'); (1, 'c'); (2, 'a'); + (2, 'b'); (2, 'c'); (3, 'a'); (3, 'b'); (3, 'c')] +|}];; + +[i,j for i = 1 to 3 for j in [i*10; i*100]];; +[%%expect{| +- : (int * int) list = +[(1, 10); (1, 100); (2, 20); (2, 200); (3, 30); (3, 300)] +|}];; + +[x for xs in [["this"; "is"; "one"]; + ["way"]; + ["to"; "flatten"]; + ["a"; "nested"; "list"]] + for x in xs];; +[%%expect{| +- : string list = +["this"; "is"; "one"; "way"; "to"; "flatten"; "a"; "nested"; "list"] +|}];; + +[i for i = 0 to 10 when i mod 2 = 0];; +[%%expect{| +- : int list = [0; 2; 4; 6; 8; 10] +|}];; + +[() for _ = 1 to 10];; +[%%expect{| +- : unit list = [(); (); (); (); (); (); (); (); (); ()] +|}];; + +(******************************************************************************) +(**** More complex behavior ****) + +let pythagorean_triples n = + [a,b,c for a = 1 to n for b = a to n for c = b to n when a*a + b*b = c*c] +in +pythagorean_triples 10;; +[%%expect{| +- : (int * int * int) list = [(3, 4, 5); (6, 8, 10)] +|}];; + +let tails xs = + List.fold_right (fun hd tls -> (hd :: List.hd tls) :: tls) xs [[]] +in +let sum = List.fold_left ( + ) 0 in +[sum xs for xs in tails [1; 20; 300; 4_000; 50_000; 600_000; 7_000_000]];; +[%%expect{| +- : int list = +[7654321; 7654320; 7654300; 7654000; 7650000; 7600000; 7000000; 0] +|}];; + +let xs = [2;7;18;28] in +[x + 1000*y for x in xs and y in xs];; +[%%expect{| +- : int list = +[2002; 7002; 18002; 28002; 2007; 7007; 18007; 28007; 2018; 7018; 18018; + 28018; 2028; 7028; 18028; 28028] +|}];; + +(******************************************************************************) +(**** Edge cases ****) + +[42 when true];; +[%%expect{| +- : int list = [42] +|}];; + +[42 when false];; +[%%expect{| +- : int list = [] +|}];; + +[x for x in []];; +[%%expect{| +- : 'a list = [] +|}];; + +[i for i = 0 to -1];; +[%%expect{| +- : int list = [] +|}];; + +[i for i = 0 downto 1];; +[%%expect{| +- : int list = [] +|}];; + +[i for i = 0 to 0];; +[%%expect{| +- : int list = [0] +|}];; + +[i for i = 0 downto 0];; +[%%expect{| +- : int list = [0] +|}];; + +(* This would take ~forever if the empty list were iterated over later; however, + for arrays, using [and] lets us get more flexibility (see below). *) +[i,j,k for i in [] for j = 0 to Int.max_int for k = 0 downto Int.min_int];; +[%%expect{| +- : ('a * int * int) list = [] +|}];; + +(* This would take ~forever for lists if the empty list were iterated over + later, but works no matter where the empty array is, ; see + "(i)array_comprehensions_special.ml" for more nuance on what can happen here + with arrays. *) +[i,j,k for i in [] and j = 0 to Int.max_int and k = 0 downto Int.min_int];; +[%%expect{| +- : ('a * int * int) list = [] +|}];; + +[x for x in ["one"; "two"; "three"] for x in [10; 20; 30]];; +[%%expect{| +Line 1, characters 7-8: +1 | [x for x in ["one"; "two"; "three"] for x in [10; 20; 30]];; + ^ +Warning 26 [unused-var]: unused variable x. +- : int list = [10; 20; 30; 10; 20; 30; 10; 20; 30] +|}];; + +(******************************************************************************) +(**** Variable shadowing ****) + +(* QuickCheck found that Python doesn't shadow variables in list comprehensions; + instead, using the same variable name as the binder in two `for`-clauses + doesn't shadow, but rather overwrites the same mutable cell. To confirm that + we handle the subtle issue of shadowing correctly, we preserve here the cases + that Python does not, as found by QuickCheck. *) + +(* Python: {v + [a for a in [0] for a in [1]] == [1] + v} *) +[a for a in [0] for a in [1]];; +[%%expect{| +Line 1, characters 7-8: +1 | [a for a in [0] for a in [1]];; + ^ +Warning 26 [unused-var]: unused variable a. +- : int list = [1] +|}];; + +(* Python: {v + [(a, b) + for b in [0] + for _ in [0, 0] + for a in [b] + for b in range(0, -2, -1)] + == [(0, 0), (0, -1), (-1, 0), (-1, -1)] + v} *) +[(a, b) for b in [0] for _ in [0; 0] for a in [b] and b = 0 downto -1];; +[%%expect{| +- : (int * int) list = [(0, 0); (0, -1); (0, 0); (0, -1)] +|}];; + +(* Python: {v + [(a, b) for b in [1] for b in [0] for a in []b]] == [(0, 0) + v} *) +[(a, b) for b in [1] for b in [0] and a in [b]];; +[%%expect{| +- : (int * int) list = [(1, 0)] +|}];; + +(* Python: {v + [a for a in [1] for _ in [0, 0] if a > 0 for a in [0]] == [0] + v} *) +[a for a in [1] and _ in [0; 0] when a > 0 for a in [0]];; +[%%expect{| +- : int list = [0; 0] +|}];; + +(* Python: {v + [a for a in [0] for _ in [0, 0] for a in [a, 1]] == [0, 1, 1, 1] + v} *) +[a for a in [0] and _ in [0; 0] for a in [a; 1]];; +[%%expect{| +- : int list = [0; 1; 0; 1] +|}];; + +(******************************************************************************) +(**** Bugs found by QuickCheck ****) + +(* At one time, this was correctly returning a singleton list as a list + comprehension, but incorrectly returning the empty array as an array + comprehension. *) +[() for _ = 0 to 0]; +[%%expect{| +- : unit list = [()] +|}];; + +(******************************************************************************) +(**** Errors ****) + +(* Can't iterate over non-lists *) + +[x for x in 100];; +[%%expect{| +Line 1, characters 12-15: +1 | [x for x in 100];; + ^^^ +Error: This expression has type int but an expression was expected of type + 'a list + because it is in a for-in iterator in a list comprehension +|}];; + +(* No mixing lists and arrays *) + +[x for x in [||]];; +[%%expect{| +Line 1, characters 12-16: +1 | [x for x in [||]];; + ^^^^ +Error: This expression has type 'a array + but an expression was expected of type 'b list + because it is in a for-in iterator in a list comprehension +|}];; + +(* As above, but don't trigger type-based disambiguation; this is invisible for + list comprehensions but affects the error message for array comprehensions *) +let empty = [||] in +[x for x in empty];; +[%%expect{| +Line 2, characters 12-17: +2 | [x for x in empty];; + ^^^^^ +Error: This expression has type 'a array + but an expression was expected of type 'b list + because it is in a for-in iterator in a list comprehension +|}];; + +Array.length [i for i = 0 to 3];; +[%%expect{| +Line 1, characters 13-31: +1 | Array.length [i for i = 0 to 3];; + ^^^^^^^^^^^^^^^^^^ +Error: This expression has type 'a list + but an expression was expected of type 'b array +|}];; + +(* to/downto are only for ints *) + +[x for x = 1.5 to 4.2];; +[%%expect{| +Line 1, characters 11-14: +1 | [x for x = 1.5 to 4.2];; + ^^^ +Error: This expression has type float but an expression was expected of type + int + because it is in a range-based for iterator start index in a comprehension +|}];; + +[x for x = 4.2 downto 1.5];; +[%%expect{| +Line 1, characters 11-14: +1 | [x for x = 4.2 downto 1.5];; + ^^^ +Error: This expression has type float but an expression was expected of type + int + because it is in a range-based for iterator start index in a comprehension +|}];; + +(* No duplicating variables in a for-and clause *) + +[i for i = 1 to 3 and i = 3 downto 1];; +[%%expect{| +Line 1, characters 0-37: +1 | [i for i = 1 to 3 and i = 3 downto 1];; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: Variable i is bound several times in this matching +|}];; + +[i for i = 1 to 3 and i in [10; 20; 30]];; +[%%expect{| +Line 1, characters 22-23: +1 | [i for i = 1 to 3 and i in [10; 20; 30]];; + ^ +Error: Variable i is bound several times in this matching +|}];; + +[i for i in [1; 2; 3] and i = 3 downto 1];; +[%%expect{| +Line 1, characters 0-41: +1 | [i for i in [1; 2; 3] and i = 3 downto 1];; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: Variable i is bound several times in this matching +|}];; + +[i for i in [1; 2; 3] and i in [10; 20; 30]];; +[%%expect{| +Line 1, characters 26-27: +1 | [i for i in [1; 2; 3] and i in [10; 20; 30]];; + ^ +Error: Variable i is bound several times in this matching +|}];; + +[i for i, j in [1, 10; 2, 20; 3, 30] and k, i in [10, 1; 20, 2; 30, 3]]; +[%%expect{| +Line 1, characters 44-45: +1 | [i for i, j in [1, 10; 2, 20; 3, 30] and k, i in [10, 1; 20, 2; 30, 3]]; + ^ +Error: Variable i is bound several times in this matching +|}];; + +(* Variables bind from left to right, not right to left *) + +[outer,inner for outer = inner to 3 for inner = 1 to 3];; +[%%expect{| +Line 1, characters 25-30: +1 | [outer,inner for outer = inner to 3 for inner = 1 to 3];; + ^^^^^ +Error: Unbound value inner +Hint: Did you mean incr? +|}];; + +(* The element type is handled correctly *) + +true :: [i for i = 0 to 10];; +[%%expect{| +Line 1, characters 9-10: +1 | true :: [i for i = 0 to 10];; + ^ +Error: This expression has type int but an expression was expected of type + bool +|}];; + +(******************************************************************************) +(**** Test that types are being propagated inwards correctly ****) + +(* Prepare a module for later use *) +module M = struct + type t = A | B +end;; +[%%expect{| +module M : sig type t = A | B end +|}];; + +let x : M.t list = [A for _ = 1 to 3];; +[%%expect{| +val x : M.t list = [M.A; M.A; M.A] +|}];; + +[A for _ = 1 to 3];; +[%%expect{| +Line 1, characters 1-2: +1 | [A for _ = 1 to 3];; + ^ +Error: Unbound constructor A +|}];; + +M.B :: [A for _ = 1 to 3];; +[%%expect{| +- : M.t list = [M.B; M.A; M.A; M.A] +|}, Principal{| +Line 1, characters 8-9: +1 | M.B :: [A for _ = 1 to 3];; + ^ +Warning 18 [not-principal]: this type-based constructor disambiguation is not principal. +- : M.t list = [M.B; M.A; M.A; M.A] +|}];; diff --git a/testsuite/tests/comprehensions/list_comprehensions_side_effects.ml b/testsuite/tests/comprehensions/list_comprehensions_side_effects.ml new file mode 100644 index 000000000000..a997a61d766c --- /dev/null +++ b/testsuite/tests/comprehensions/list_comprehensions_side_effects.ml @@ -0,0 +1,91 @@ +(* TEST + flags = "-extension comprehensions_experimental" +*) + +(****************************************************************************** + * ******** ATTENTION! ******** * + * * + * This file should be kept in sync with the files * + * "array_comprehensions_side_effects.ml" and * + * "iarray_comprehensions_side_effects.ml". If you're adding a test to one, * + * add it to the others as well; if the test output changes in one file and * + * not the others (except as documented in comments), this is a bug. * + ******************************************************************************) + +(******************************************************************************) +(**** Test the order of evaluation ****) + +let say fmt = + Printf.kfprintf (fun stdout -> Printf.fprintf stdout "\n") stdout fmt +;; + +let surround l r m = l ^ m ^ r;; + +let show_list show_item xs = + xs + |> List.map show_item + |> String.concat "; " + |> surround "[" "]" +;; + +let show_as_tuple show_item xs = + xs + |> List.map show_item + |> String.concat ", " +;; + +let out3 (i, j, k) = say " %d, %d, %d;" i j k;; + +let out6 (i, j, k, x, y, z) = say " %d, %d, %d, %d, %d, %d;" i j k x y z;; + +let report out f = + let result = f () in + say ""; + say "result = ["; + List.iter out result; + say "]" +;; + +report out3 (fun () -> + [ begin + say ">>> i = %d, j = %d, k = %d" i j k; + i, j, k + end + for i = (say "first (from)"; 0) to (say "second (to)"; 3) + and j in (say "third (in)"; [10;20;30]) + when (say "> i = %d, j = %d | when even i" i j; i mod 2 = 0) + for k = (say ">> first (from)"; -1) downto (say ">> second (to)"; -3) + ] +) +;; + +say "";; + +report out3 (fun () -> + [ begin + say ">>> i = %d, j = %d, k = %d" i j k; + i, j, k + end + for i = (say "first (from)"; 0) to (say "second (to)"; 3) + and j in (say "third (in)"; [10;20;30]) + and k = (say "fourth (downfrom)"; 100) downto (say "fifth (downto)"; 97) + ] +) +;; + +say "";; + +report out6 (fun () -> + [ begin + say ">>> i = %d, j = %d, k = %d, x = %d, y = %d, z = %d" i j k x y z; + i, j, k, x, y, z + end + for i = (say "first (from)"; 0) to (say "second (to)"; 1) + and j in (say "third (in)"; [10;20]) + and k = (say "fourth (downfrom)"; 100) downto (say "fifth (downto)"; 99) + for x = (say "> first (downfrom)"; 1) downto (say "> second (downto)"; 0) + and y in (say "> third (in)"; [20;10]) + and z = (say "> fourth (from)"; 99) to (say "> fifth (to)"; 100) + ] +) +;; diff --git a/testsuite/tests/comprehensions/list_comprehensions_side_effects.reference b/testsuite/tests/comprehensions/list_comprehensions_side_effects.reference new file mode 100644 index 000000000000..2497f34e53a5 --- /dev/null +++ b/testsuite/tests/comprehensions/list_comprehensions_side_effects.reference @@ -0,0 +1,348 @@ +first (from) +second (to) +third (in) +> i = 0, j = 10 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 10, k = -1 +>>> i = 0, j = 10, k = -2 +>>> i = 0, j = 10, k = -3 +> i = 0, j = 20 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 20, k = -1 +>>> i = 0, j = 20, k = -2 +>>> i = 0, j = 20, k = -3 +> i = 0, j = 30 | when even i +>> first (from) +>> second (to) +>>> i = 0, j = 30, k = -1 +>>> i = 0, j = 30, k = -2 +>>> i = 0, j = 30, k = -3 +> i = 1, j = 10 | when even i +> i = 1, j = 20 | when even i +> i = 1, j = 30 | when even i +> i = 2, j = 10 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 10, k = -1 +>>> i = 2, j = 10, k = -2 +>>> i = 2, j = 10, k = -3 +> i = 2, j = 20 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 20, k = -1 +>>> i = 2, j = 20, k = -2 +>>> i = 2, j = 20, k = -3 +> i = 2, j = 30 | when even i +>> first (from) +>> second (to) +>>> i = 2, j = 30, k = -1 +>>> i = 2, j = 30, k = -2 +>>> i = 2, j = 30, k = -3 +> i = 3, j = 10 | when even i +> i = 3, j = 20 | when even i +> i = 3, j = 30 | when even i + +result = [ + 0, 10, -1; + 0, 10, -2; + 0, 10, -3; + 0, 20, -1; + 0, 20, -2; + 0, 20, -3; + 0, 30, -1; + 0, 30, -2; + 0, 30, -3; + 2, 10, -1; + 2, 10, -2; + 2, 10, -3; + 2, 20, -1; + 2, 20, -2; + 2, 20, -3; + 2, 30, -1; + 2, 30, -2; + 2, 30, -3; +] + +first (from) +second (to) +third (in) +fourth (downfrom) +fifth (downto) +>>> i = 0, j = 10, k = 100 +>>> i = 0, j = 10, k = 99 +>>> i = 0, j = 10, k = 98 +>>> i = 0, j = 10, k = 97 +>>> i = 0, j = 20, k = 100 +>>> i = 0, j = 20, k = 99 +>>> i = 0, j = 20, k = 98 +>>> i = 0, j = 20, k = 97 +>>> i = 0, j = 30, k = 100 +>>> i = 0, j = 30, k = 99 +>>> i = 0, j = 30, k = 98 +>>> i = 0, j = 30, k = 97 +>>> i = 1, j = 10, k = 100 +>>> i = 1, j = 10, k = 99 +>>> i = 1, j = 10, k = 98 +>>> i = 1, j = 10, k = 97 +>>> i = 1, j = 20, k = 100 +>>> i = 1, j = 20, k = 99 +>>> i = 1, j = 20, k = 98 +>>> i = 1, j = 20, k = 97 +>>> i = 1, j = 30, k = 100 +>>> i = 1, j = 30, k = 99 +>>> i = 1, j = 30, k = 98 +>>> i = 1, j = 30, k = 97 +>>> i = 2, j = 10, k = 100 +>>> i = 2, j = 10, k = 99 +>>> i = 2, j = 10, k = 98 +>>> i = 2, j = 10, k = 97 +>>> i = 2, j = 20, k = 100 +>>> i = 2, j = 20, k = 99 +>>> i = 2, j = 20, k = 98 +>>> i = 2, j = 20, k = 97 +>>> i = 2, j = 30, k = 100 +>>> i = 2, j = 30, k = 99 +>>> i = 2, j = 30, k = 98 +>>> i = 2, j = 30, k = 97 +>>> i = 3, j = 10, k = 100 +>>> i = 3, j = 10, k = 99 +>>> i = 3, j = 10, k = 98 +>>> i = 3, j = 10, k = 97 +>>> i = 3, j = 20, k = 100 +>>> i = 3, j = 20, k = 99 +>>> i = 3, j = 20, k = 98 +>>> i = 3, j = 20, k = 97 +>>> i = 3, j = 30, k = 100 +>>> i = 3, j = 30, k = 99 +>>> i = 3, j = 30, k = 98 +>>> i = 3, j = 30, k = 97 + +result = [ + 0, 10, 100; + 0, 10, 99; + 0, 10, 98; + 0, 10, 97; + 0, 20, 100; + 0, 20, 99; + 0, 20, 98; + 0, 20, 97; + 0, 30, 100; + 0, 30, 99; + 0, 30, 98; + 0, 30, 97; + 1, 10, 100; + 1, 10, 99; + 1, 10, 98; + 1, 10, 97; + 1, 20, 100; + 1, 20, 99; + 1, 20, 98; + 1, 20, 97; + 1, 30, 100; + 1, 30, 99; + 1, 30, 98; + 1, 30, 97; + 2, 10, 100; + 2, 10, 99; + 2, 10, 98; + 2, 10, 97; + 2, 20, 100; + 2, 20, 99; + 2, 20, 98; + 2, 20, 97; + 2, 30, 100; + 2, 30, 99; + 2, 30, 98; + 2, 30, 97; + 3, 10, 100; + 3, 10, 99; + 3, 10, 98; + 3, 10, 97; + 3, 20, 100; + 3, 20, 99; + 3, 20, 98; + 3, 20, 97; + 3, 30, 100; + 3, 30, 99; + 3, 30, 98; + 3, 30, 97; +] + +first (from) +second (to) +third (in) +fourth (downfrom) +fifth (downto) +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 10, k = 100, x = 1, y = 20, z = 99 +>>> i = 0, j = 10, k = 100, x = 1, y = 20, z = 100 +>>> i = 0, j = 10, k = 100, x = 1, y = 10, z = 99 +>>> i = 0, j = 10, k = 100, x = 1, y = 10, z = 100 +>>> i = 0, j = 10, k = 100, x = 0, y = 20, z = 99 +>>> i = 0, j = 10, k = 100, x = 0, y = 20, z = 100 +>>> i = 0, j = 10, k = 100, x = 0, y = 10, z = 99 +>>> i = 0, j = 10, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 10, k = 99, x = 1, y = 20, z = 99 +>>> i = 0, j = 10, k = 99, x = 1, y = 20, z = 100 +>>> i = 0, j = 10, k = 99, x = 1, y = 10, z = 99 +>>> i = 0, j = 10, k = 99, x = 1, y = 10, z = 100 +>>> i = 0, j = 10, k = 99, x = 0, y = 20, z = 99 +>>> i = 0, j = 10, k = 99, x = 0, y = 20, z = 100 +>>> i = 0, j = 10, k = 99, x = 0, y = 10, z = 99 +>>> i = 0, j = 10, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 20, k = 100, x = 1, y = 20, z = 99 +>>> i = 0, j = 20, k = 100, x = 1, y = 20, z = 100 +>>> i = 0, j = 20, k = 100, x = 1, y = 10, z = 99 +>>> i = 0, j = 20, k = 100, x = 1, y = 10, z = 100 +>>> i = 0, j = 20, k = 100, x = 0, y = 20, z = 99 +>>> i = 0, j = 20, k = 100, x = 0, y = 20, z = 100 +>>> i = 0, j = 20, k = 100, x = 0, y = 10, z = 99 +>>> i = 0, j = 20, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 0, j = 20, k = 99, x = 1, y = 20, z = 99 +>>> i = 0, j = 20, k = 99, x = 1, y = 20, z = 100 +>>> i = 0, j = 20, k = 99, x = 1, y = 10, z = 99 +>>> i = 0, j = 20, k = 99, x = 1, y = 10, z = 100 +>>> i = 0, j = 20, k = 99, x = 0, y = 20, z = 99 +>>> i = 0, j = 20, k = 99, x = 0, y = 20, z = 100 +>>> i = 0, j = 20, k = 99, x = 0, y = 10, z = 99 +>>> i = 0, j = 20, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 10, k = 100, x = 1, y = 20, z = 99 +>>> i = 1, j = 10, k = 100, x = 1, y = 20, z = 100 +>>> i = 1, j = 10, k = 100, x = 1, y = 10, z = 99 +>>> i = 1, j = 10, k = 100, x = 1, y = 10, z = 100 +>>> i = 1, j = 10, k = 100, x = 0, y = 20, z = 99 +>>> i = 1, j = 10, k = 100, x = 0, y = 20, z = 100 +>>> i = 1, j = 10, k = 100, x = 0, y = 10, z = 99 +>>> i = 1, j = 10, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 10, k = 99, x = 1, y = 20, z = 99 +>>> i = 1, j = 10, k = 99, x = 1, y = 20, z = 100 +>>> i = 1, j = 10, k = 99, x = 1, y = 10, z = 99 +>>> i = 1, j = 10, k = 99, x = 1, y = 10, z = 100 +>>> i = 1, j = 10, k = 99, x = 0, y = 20, z = 99 +>>> i = 1, j = 10, k = 99, x = 0, y = 20, z = 100 +>>> i = 1, j = 10, k = 99, x = 0, y = 10, z = 99 +>>> i = 1, j = 10, k = 99, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 20, k = 100, x = 1, y = 20, z = 99 +>>> i = 1, j = 20, k = 100, x = 1, y = 20, z = 100 +>>> i = 1, j = 20, k = 100, x = 1, y = 10, z = 99 +>>> i = 1, j = 20, k = 100, x = 1, y = 10, z = 100 +>>> i = 1, j = 20, k = 100, x = 0, y = 20, z = 99 +>>> i = 1, j = 20, k = 100, x = 0, y = 20, z = 100 +>>> i = 1, j = 20, k = 100, x = 0, y = 10, z = 99 +>>> i = 1, j = 20, k = 100, x = 0, y = 10, z = 100 +> first (downfrom) +> second (downto) +> third (in) +> fourth (from) +> fifth (to) +>>> i = 1, j = 20, k = 99, x = 1, y = 20, z = 99 +>>> i = 1, j = 20, k = 99, x = 1, y = 20, z = 100 +>>> i = 1, j = 20, k = 99, x = 1, y = 10, z = 99 +>>> i = 1, j = 20, k = 99, x = 1, y = 10, z = 100 +>>> i = 1, j = 20, k = 99, x = 0, y = 20, z = 99 +>>> i = 1, j = 20, k = 99, x = 0, y = 20, z = 100 +>>> i = 1, j = 20, k = 99, x = 0, y = 10, z = 99 +>>> i = 1, j = 20, k = 99, x = 0, y = 10, z = 100 + +result = [ + 0, 10, 100, 1, 20, 99; + 0, 10, 100, 1, 20, 100; + 0, 10, 100, 1, 10, 99; + 0, 10, 100, 1, 10, 100; + 0, 10, 100, 0, 20, 99; + 0, 10, 100, 0, 20, 100; + 0, 10, 100, 0, 10, 99; + 0, 10, 100, 0, 10, 100; + 0, 10, 99, 1, 20, 99; + 0, 10, 99, 1, 20, 100; + 0, 10, 99, 1, 10, 99; + 0, 10, 99, 1, 10, 100; + 0, 10, 99, 0, 20, 99; + 0, 10, 99, 0, 20, 100; + 0, 10, 99, 0, 10, 99; + 0, 10, 99, 0, 10, 100; + 0, 20, 100, 1, 20, 99; + 0, 20, 100, 1, 20, 100; + 0, 20, 100, 1, 10, 99; + 0, 20, 100, 1, 10, 100; + 0, 20, 100, 0, 20, 99; + 0, 20, 100, 0, 20, 100; + 0, 20, 100, 0, 10, 99; + 0, 20, 100, 0, 10, 100; + 0, 20, 99, 1, 20, 99; + 0, 20, 99, 1, 20, 100; + 0, 20, 99, 1, 10, 99; + 0, 20, 99, 1, 10, 100; + 0, 20, 99, 0, 20, 99; + 0, 20, 99, 0, 20, 100; + 0, 20, 99, 0, 10, 99; + 0, 20, 99, 0, 10, 100; + 1, 10, 100, 1, 20, 99; + 1, 10, 100, 1, 20, 100; + 1, 10, 100, 1, 10, 99; + 1, 10, 100, 1, 10, 100; + 1, 10, 100, 0, 20, 99; + 1, 10, 100, 0, 20, 100; + 1, 10, 100, 0, 10, 99; + 1, 10, 100, 0, 10, 100; + 1, 10, 99, 1, 20, 99; + 1, 10, 99, 1, 20, 100; + 1, 10, 99, 1, 10, 99; + 1, 10, 99, 1, 10, 100; + 1, 10, 99, 0, 20, 99; + 1, 10, 99, 0, 20, 100; + 1, 10, 99, 0, 10, 99; + 1, 10, 99, 0, 10, 100; + 1, 20, 100, 1, 20, 99; + 1, 20, 100, 1, 20, 100; + 1, 20, 100, 1, 10, 99; + 1, 20, 100, 1, 10, 100; + 1, 20, 100, 0, 20, 99; + 1, 20, 100, 0, 20, 100; + 1, 20, 100, 0, 10, 99; + 1, 20, 100, 0, 10, 100; + 1, 20, 99, 1, 20, 99; + 1, 20, 99, 1, 20, 100; + 1, 20, 99, 1, 10, 99; + 1, 20, 99, 1, 10, 100; + 1, 20, 99, 0, 20, 99; + 1, 20, 99, 0, 20, 100; + 1, 20, 99, 0, 10, 99; + 1, 20, 99, 0, 10, 100; +] diff --git a/testsuite/tests/comprehensions/quickcheck_lists_arrays_haskell_python.ml b/testsuite/tests/comprehensions/quickcheck_lists_arrays_haskell_python.ml new file mode 100644 index 000000000000..f127060126cc --- /dev/null +++ b/testsuite/tests/comprehensions/quickcheck_lists_arrays_haskell_python.ml @@ -0,0 +1,1251 @@ +(* -*- compile-command: "ocamlopt -w +A-4-40-42-44 str.cmxa unix.cmxa quickcheck_lists_arrays_haskell_python.ml -o quickcheck-lists-arrays-haskell-python && ./quickcheck-lists-arrays-haskell-python"; -*- *) + +(* CR aspectorzabusky: This file was great for validating comprehensions, but we + can't put it in the compiler test suite: it spins up three different REPL + processes, one each for Haskell, Python, and OCaml, and we can't count on the + first two existing. But it would be a shame to delete this code and just + leave `comprehensions_from_quickcheck.ml`; if things change, it's good to + have access to QuickCheck. What should we do with this, do we think? *) + +module No_polymorphic_compare = struct + let ( = ) = Int.equal + let ( < ) x y = Int.compare x y < 0 + let ( > ) x y = Int.compare x y > 0 + let ( <= ) x y = Int.compare x y <= 0 + let ( >= ) x y = Int.compare x y >= 0 +end + +open No_polymorphic_compare + +module Util = struct + module List_monad = struct + let pure x = [x] + let bind xs f = List.concat_map f xs + + let (let*) = bind + let (let+) xs f = List.map f xs + + (* I think this is right *) + let (and*) xs ys = + let* x = xs in + let+ y = ys in + x,y + let (and+) = (and*) + + let rec traverse f = function + | [] -> + pure [] + | x :: xs -> + let+ y = f x + and+ ys = traverse f xs in + y :: ys + end + + let rec take_while p = function + | x :: xs when p x -> x :: take_while p xs + | _ -> [] + + let guard c x = if c then [x] else [] + + let max x y = if x > y then x else y + + let range_to start stop = + List.init (max 0 (stop - start + 1)) (fun i -> start + i) + + let range_downto start stop = + List.init (max 0 (start - stop + 1)) (fun i -> start - i) + + (* For repeatability *) + external random_seed : unit -> int array = "caml_sys_random_seed" + + let output_line oc str = begin + output_string oc str; + output_char oc '\n'; + flush oc + end +end + +module QuickCheck = struct + type 'a prop_result = + | OK + | Failed_with of 'a + + type 'a failure_data = + | Data of 'a + | Exception of exn + + type ('a, 'b) failure = + { counterexample : 'a + ; data : 'b failure_data + ; tests : int + ; shrinks : int } + + type ('a, 'b) result = + | Passed + | Failed of ('a, 'b) failure + + module Print (Printf : sig + type destination + type result + val printf : destination -> ('a, destination, result) format -> 'a + end) = + struct + (* This only works with some words but that's ok *) + let quantity dst (n, thing) = + Printf.printf dst "%d %s%s" n thing (if n = 1 then "" else "s") + + let tests dst tests = quantity dst (tests, "test") + + let and_shrinks dst = function + | 0 -> Printf.printf dst "" + | shrinks -> Printf.printf dst " and %a" quantity (shrinks, "shrink") + + let and_shrinks_and_iteration dst = function + | shrinks, 0 -> + and_shrinks dst shrinks + | shrinks, iteration -> + Printf.printf dst " and %d.%d shrinks" shrinks iteration + end + + module SPrint = Print (struct + type destination = unit + type result = string + let printf () = Printf.sprintf + end) + + module FPrint = Print (struct + type destination = out_channel + type result = unit + let printf = Printf.fprintf + end) + + module Reporter = struct + type t = + { report_test : int -> unit + ; report_shrink : tests:int -> shrinks:int -> iteration:int -> unit + ; finish_reporting : unit -> unit + } + + let silent = + { report_test = Fun.const () + ; report_shrink = (fun ~tests:_ ~shrinks:_ ~iteration:_ -> ()) + ; finish_reporting = Fun.const () + } + + type interactive_output_mode = + | Backspace_moves + | Backspace_deletes + + let interactive_output_mode oc = + match Unix.(isatty (descr_of_out_channel oc)) with + | true -> + Some (if Option.is_some (Sys.getenv_opt "INSIDE_EMACS") || + Option.is_some (Sys.getenv_opt "EMACS") + then Backspace_deletes + else Backspace_moves) + | false | exception _ -> + None + + let interactive_main iom oc = + (* This line-clearing technique was taken from Haskell's QuickCheck, + although sadly it doesn't work in Emacs *) + let string_as_char s c = String.make (String.length s) c in + let backspace_prev_line = ref "" in + let clear_prev_line = match iom with + | Backspace_moves -> fun () -> + output_string oc (string_as_char !backspace_prev_line ' '); + output_string oc !backspace_prev_line + | Backspace_deletes -> fun () -> + output_string oc !backspace_prev_line + in + let move_cursor_for_this_line = match iom with + | Backspace_moves -> output_string oc + | Backspace_deletes -> Fun.const () + in + let report fstr = + Printf.ksprintf + (fun line -> + clear_prev_line (); + let backspace_this_line = string_as_char line '\b' in + output_string oc line; + move_cursor_for_this_line backspace_this_line; + flush oc; + backspace_prev_line := backspace_this_line) + fstr + in + { report_test = (fun tests -> + report "(%a...)" SPrint.tests tests) + ; report_shrink = (fun ~tests ~shrinks ~iteration -> + report "Failed! (%a%a...)" + SPrint.tests tests + SPrint.and_shrinks_and_iteration (shrinks, iteration)) + ; finish_reporting = (fun () -> + clear_prev_line (); + flush oc) + } + + let main oc = match interactive_output_mode oc with + | Some iom -> interactive_main iom oc + | None -> silent + end + + let rec find_counterexample ~report iteration prop = function + | [] -> None + | x :: xs -> + report ~iteration; + match prop x with + | OK -> find_counterexample ~report (iteration+1) prop xs + | Failed_with data -> Some (x, Data data) + | exception exn -> Some (x, Exception exn) + + let find_counterexample ?(report = fun ~iteration:_ -> ()) prop = + find_counterexample ~report 0 prop + + let rec minimize + ?(report = fun ~shrinks:_ ~iteration:_ -> ()) shrink prop failure = + match + find_counterexample ~report:(report ~shrinks:failure.shrinks) + prop (shrink failure.counterexample) + with + | Some (counterexample, data) -> + minimize ~report shrink prop + { failure with counterexample; data; shrinks = failure.shrinks + 1 } + | None -> + failure + + let test (type a b) ?(reporter = Reporter.silent) n gen shrink prop = + let exception Counterexample of (a, b) failure in + let result = + match + for tests = 1 to n do + reporter.report_test tests; + let x = gen () in + let stop_with_this_counterexample data = + raise (Counterexample + { counterexample = x; data = data; tests; shrinks = 0 }) + in + match prop x with + | OK -> () + | Failed_with data -> stop_with_this_counterexample (Data data) + | exception exn -> stop_with_this_counterexample (Exception exn) + done + with + | () -> + Passed + | exception Counterexample failure -> + Failed (minimize ~report:(reporter.report_shrink ~tests:failure.tests) + shrink prop failure) + in + reporter.finish_reporting (); + result + + let main + ?(seed = Util.random_seed ()) ?(output = stdout) + max_tests gen shrink print_failure prop = + let printf fstr = Printf.fprintf output fstr in + Random.full_init seed; + match test ~reporter:(Reporter.main output) max_tests gen shrink prop with + | Passed -> + printf "OK, passed %a.\n" FPrint.tests max_tests + | Failed { counterexample; data; tests; shrinks } -> + let what, odata, print_extra_information = match data with + | Data data -> + "Counterexample", + Some data, + (fun () -> ()) + | Exception exn -> + "Exception", + None, + (fun () -> + printf " Exception:\n %s\n" + (exn + |> Printexc.to_string + |> Str.global_replace (Str.regexp "\n") "\n ")) + in + printf "Failed with seed [|%s|]!\n" + (String.concat "; " (Array.to_list (Array.map Int.to_string seed))); + printf "%s (after %a%a):\n" + what + FPrint.tests tests + FPrint.and_shrinks shrinks; + print_failure output counterexample odata; + print_extra_information () + + module Generator = struct + let replicateG n g = + Array.make n Fun.id |> Array.to_list |> List.map (fun _ -> g ()) + + let pick_without_replacement xs = + let rec go i xs = match i, xs with + | 0, x :: xs -> x, xs + | i, x :: xs -> let y, ys = go (i-1) xs + in y, x :: ys + | _, [] -> assert false + in + go (Random.int (List.length xs)) xs + + let pick xs = List.nth xs (Random.int (List.length xs)) + + let small_int () = Random.int 7 - 3 (* [-3,3] *) + end + + module Shrink = struct + let rec del1_and_shrink1 shrink = function + | [] -> + [], [] + | x :: xs -> + let del, shrunk = del1_and_shrink1 shrink xs in + let cons_x xs' = x :: xs' in + ( xs :: List.map cons_x del + , List.map (fun x' -> x' :: xs) (shrink x) @ List.map cons_x shrunk + ) + + let nonempty_list shrink xs = + match del1_and_shrink1 shrink xs with + | [[]], shrunk -> shrunk + | del, shrunk -> del @ shrunk + + let list shrink xs = + let del, shrunk = del1_and_shrink1 shrink xs in + del @ shrunk + + (* From Haskell's QuickCheck: make it positive, 0, then smaller by jumping + half the distance each time *) + let int i = + let rec halves = function + | 0 -> [] + | d -> i - d :: halves (d/2) + in + Util.guard (i < 0 && i <> Int.min_int) (-i) @ + Util.guard (i <> 0) 0 @ + halves (i/2) + + (* Allow either one or two shrinks from the given shrinker *) + let shrink2 shrink x = + let shrink1 = shrink x in + shrink1 @ List.concat_map shrink shrink1 + end +end + +module Var : sig + type t = string + + module Set : Set.S with type elt := t + module Map : Map.S with type key := t + + val equal : t -> t -> bool + + val vars : t list + val wildcard : t + val pattern_vars : t list +end = struct + type t = string + + module Set = Set.Make(String) + module Map = Map.Make(String) + + let equal = String.equal + + let vars = + List.init 26 (fun i -> String.make 1 (Char.chr (Char.code 'a' + i))) + let wildcard = "_" + let pattern_vars = wildcard :: vars +end + +module Environment : sig + type t + + val empty : t + val of_variables : Var.t list -> t + + val add : Var.t -> t -> t + val union : t -> t -> t + + val is_empty : t -> bool + val is_bound : Var.t -> t -> bool + val is_free : Var.t -> t -> bool + + val variables : t -> Var.t list + val variables_seq : t -> Var.t Seq.t +end = struct + include Var.Set + + let of_variables = of_list + let is_bound = mem + let is_free x env = not (is_bound x env) + let variables = elements + let variables_seq = to_seq +end + +module Substitution : sig + type binding = + | Deleted + | Renamed of Var.t + + type t + + val identity : t + val delete : Var.t -> t + val rename : Var.t -> Var.t -> t + val delete_env : Environment.t -> t + val rename_env : Environment.t -> (Var.t -> Var.t) -> t + + val shadow_env : Environment.t -> t -> t + + val apply : t -> Var.t -> binding option +end = struct + type binding = + | Deleted + | Renamed of Var.t + + include Var.Map + + type nonrec t = binding t + + let identity = empty + let delete x = singleton x Deleted + let rename x y = singleton x (Renamed y) + + let create_with_env f env = + of_seq (Seq.map (fun x -> x, f x) (Environment.variables_seq env)) + + let delete_env = create_with_env (Fun.const Deleted) + + let rename_env env f = create_with_env (fun x -> Renamed (f x)) env + + let shadow_env env = filter (fun x _ -> Environment.is_free x env) + + let apply subst x = find_opt x subst +end + +module Comprehension = struct + type int_term = + | Literal of int + | Variable of Var.t + + type direction = + | To + | Downto + + type iterator = + | Range of { start : int_term + ; direction : direction + ; stop : int_term } + | Sequence of int_term list + + type binding = { var : Var.t; iterator : iterator } + + type predicate = + | Positive + | Negative + | Nonzero + | Even + | Odd + + let all_predicates = [Positive; Negative; Nonzero; Even; Odd] + + type clause = + | For of binding list + | When of predicate * Var.t + + (* We assume the body is a tuple of all the variables in the environment *) + type t = { env : Environment.t ; clauses : clause list } + + module Bound_vars = struct + let bindings bs = + bs |> + List.filter_map (fun {var; iterator = _} -> + if Var.equal var Var.wildcard + then None + else Some var) |> + Environment.of_variables + + let clauses = + List.fold_left + (fun env -> function + | For bs -> Environment.union (bindings bs) env + | When _ -> env) + Environment.empty + end + + module Generator = struct + open QuickCheck.Generator + + let in_scope_var env = pick (Environment.variables env) + + let int_term env = + if not (Environment.is_empty env) && Random.int 10 < 1 then + Variable (in_scope_var env) + else + Literal (small_int ()) + + let iterator env = + if Random.bool () + then Range { start = int_term env + ; direction = if Random.bool () then To else Downto + ; stop = int_term env } + else Sequence (replicateG (Random.int 8) (fun () -> int_term env)) + (* Both Ranges and Sequences can range from length 0 to 7 (inclusive), + although with different probabilities *) + + let predicate () = + match Random.int 5 with + | 0 -> Positive + | 1 -> Negative + | 2 -> Nonzero + | 3 -> Even + | 4 -> Odd + | _ -> assert false + + (* Generates bindings that don't share variables *) + let bindings env sz = + let rec go ~bindings ~available ~used = function + | 0 -> + (* We reverse the list because [_] becomes slightly more likely for + later-generated values, and this shifts them towards the end of + the for-and clause *) + List.rev bindings, used + | n -> + let var, available = pick_without_replacement available in + let available, used = + if Var.equal var Var.wildcard + then Var.wildcard :: available, used + else available, Environment.add var used + in + let bindings = { var; iterator = iterator env } :: bindings in + go ~bindings ~available ~used (n-1) + in + go + ~bindings:[] + ~available:Var.pattern_vars + ~used:Environment.empty + (Random.int sz + 1) + + let clause env sz = + if not (Environment.is_empty env) && Random.int 4 < 1 then + When(predicate (), in_scope_var env), env + else + let bs, env' = bindings env sz in + For bs, Environment.union env env' + + let comprehension () = + let clause_n = Random.int 5 + 1 (* [1,5] *) in + let for_max = (7 - clause_n) (* [2,6] *) in + let rec go env i = + if i = clause_n then + [], env + else + let b, env' = clause env for_max in + let bs, env'' = go (Environment.union env env') (i+1) in + b :: bs, env'' + in + let clauses, env = go Environment.empty 0 in + {env; clauses} + end + + module Shrink = struct + open QuickCheck.Shrink + + (* [-3,3], in increasing order of "complexity" *) + let all_small_ints = + let pos = List.init 3 (( + ) 1) in + let neg = List.map Int.neg pos in + 0 :: (pos @ neg) + + let all_small_int_lits = List.map (fun n -> Literal n) all_small_ints + + let pattern_var x = Util.take_while (fun p -> x <> p) Var.pattern_vars + + let int_term = function + | Literal n -> List.map (fun n -> Literal n) (int n) + | Variable _ -> all_small_int_lits + + let iterator = function + | Range { start; direction; stop } -> + [Sequence [start]; Sequence [stop]] @ + Util.guard + (match direction with Downto -> true | To -> false) + (Range { start = stop; direction = To; stop = start }) @ + List.map + (fun start -> Range { start; direction; stop }) + (int_term start) @ + List.map + (fun stop -> Range { start; direction; stop }) + (int_term stop) @ + (match start, stop with + | Literal start, Literal stop -> + let range = match direction with + | To -> Util.range_to + | Downto -> Util.range_downto + in + [Sequence (List.map (fun n -> Literal n) (range start stop))] + | Variable _, _ | _, Variable _ -> []) + | Sequence seq -> + List.map (fun seq -> Sequence seq) (list int_term seq) + + let binding ({var = x; iterator = i} as b) = + List.map (fun iterator -> {b with iterator}) (iterator i) @ + List.map (fun var -> {b with var}) (pattern_var x) + + let predicate p = + Util.take_while (fun p' -> p <> p') all_predicates + + let parallel_bindings bs = + (* I think preventing name collisions genuinely requires a separate + traversal *) + let env = Bound_vars.bindings bs in + let rec del1_shrink1 = function + | [] -> + [], [] + | ({var = x; iterator = i} as b) :: bs -> + let del, shrunk = del1_shrink1 bs in + let cons_b (bs', subst) = b :: bs', subst in + ( (bs, Substitution.delete x) :: List.map cons_b del + , List.map + (fun iterator -> {b with iterator} :: bs, Substitution.identity) + (iterator i) @ + List.filter_map + (fun var -> + if Environment.is_bound var env + then None + else Some ({b with var} :: bs, + if Var.equal var Var.wildcard + then Substitution.delete x + else Substitution.rename x var)) + (pattern_var x) @ + List.map cons_b shrunk ) + in + match del1_shrink1 bs with + | [[], _], shrunk -> shrunk + | del, shrunk -> del @ shrunk + + (* Shrinking-specific substitution: deleted variables become every possible + value *) + module Substitute = struct + open Util.List_monad + + let list elt subst = traverse (elt subst) + + let int_term subst = function + | Literal n -> pure (Literal n) + | Variable x -> match Substitution.apply subst x with + | None -> pure (Variable x) + | Some Deleted -> all_small_int_lits + | Some (Renamed x') -> pure (Variable x') + + let iterator subst = function + | Range { start; direction; stop } -> + let+ start = int_term subst start + and+ stop = int_term subst stop in + Range { start; direction; stop } + | Sequence seq -> + let+ seq = list int_term subst seq in + Sequence seq + + let rec parallel_bindings subst = function + | [] -> + (pure [], Environment.empty) + | ({var; iterator = i} as b) :: bs -> + let bss, env = parallel_bindings subst bs in + ( (let+ iterator = iterator subst i + and+ bs = bss in + {b with iterator} :: bs) + , Environment.add var env ) + + let rec clauses subst = function + | [] -> + pure [] + | For bs :: cs -> + let bss, env = parallel_bindings subst bs in + let subst = Substitution.shadow_env env subst in + let+ cs = clauses subst cs + and+ bs = bss in + For bs :: cs + | (When(pred, x) as c) :: cs -> + let css = clauses subst cs in + match Substitution.apply subst x with + | None -> + let+ cs = css in + c :: cs + | Some Deleted -> + css + | Some (Renamed x') -> + let+ cs = css in + When(pred, x') :: cs + end + + let clauses cs = + let rec del1_shrink1 = function + | [] -> + [], [] + | (For bs as c) :: cs -> + let env = Bound_vars.bindings bs in + let bss_substs = parallel_bindings bs in + let del, shrunk = del1_shrink1 cs in + let cons_c cs' = c :: cs' in + ( Substitute.clauses (Substitution.delete_env env) cs @ + List.map cons_c del + , (let open Util.List_monad in + let* bs, subst = bss_substs in + let+ cs = Substitute.clauses subst cs in + For bs :: cs) @ + List.map cons_c shrunk ) + | (When(pred, x) as c) :: cs -> + (* By the time we get here, [x] is guaranteed to be in scope; + otherwise, [Substitute.clauses] would have deleted it *) + let del, shrunk = del1_shrink1 cs in + let cons_c cs' = c :: cs' in + ( cs :: List.map cons_c del + , List.map (fun pred -> When(pred, x) :: cs) (predicate pred) @ + List.map cons_c shrunk ) + in + match del1_shrink1 cs with + | [[]], shrunk -> shrunk + | del, shrunk -> del @ shrunk + + let comprehension {env = _; clauses = cs} = + (* I don't think there's a nice way to either (1) rule out empty lists of + clauses ahead of time, or (2) compute the environment along the way, so + we handle both directly via post-processing here. *) + List.filter_map + (fun clauses -> + match clauses with + | [] -> None + | _ :: _ -> Some { env = Bound_vars.clauses clauses; clauses }) + (clauses cs) + + (* Shrinking twice simplifies both bugs this found on its first go-round, + since this way we can shrink both the endpoints of a to/downto range or + shrink two parallel variable names at once. *) + let comprehension = QuickCheck.Shrink.shrink2 comprehension + end + + module To_string = struct + type ocaml_type = + | List + | Mutable_array + | Immutable_array + + type format = + | OCaml of ocaml_type + | Haskell + | Python + + let surround o c s = o ^ s ^ c + + let parenthesize = surround "(" ")" + let bracket = surround "[" "]" + let spaced = surround " " " " + + let tokens = String.concat " " + let comma_separated = String.concat ", " + + let comprehension_clauses o = match o with + | OCaml _ | Python -> tokens + | Haskell -> comma_separated + + let tuple = function + | [tok] -> tok + | toks -> toks |> comma_separated |> parenthesize + + let sequence = function + | OCaml List | Haskell | Python -> bracket + | OCaml Mutable_array -> surround "[|" "|]" + | OCaml Immutable_array -> surround "[:" ":]" + + let mod_ = function + | OCaml _ -> "mod" + | Haskell -> "`mod`" + | Python -> "%" + + let eq = function + | OCaml _ -> "=" + | Haskell | Python -> "==" + + let neq = function + | OCaml _ -> "<>" + | Haskell -> "/=" + | Python -> "!=" + + let int_term = function + | Literal n -> Int.to_string n + | Variable x -> x + + let succ_int_term = function + | Literal n -> Int.to_string (n + 1) + | Variable x -> x ^ "+1" + + let pred_int_term = function + | Literal n -> Int.to_string (n - 1) + | Variable x -> x ^ "-1" + + let modulo_check o tgt = [mod_ o; "2"; eq o; tgt] + + let predicate o = function + | Positive -> [], [">"; "0"] + | Negative -> [], ["<"; "0"] + | Nonzero -> [], [neq o; "0"] + | Even -> begin + match o with + | OCaml _ -> ["abs"], modulo_check o "0" + | Haskell -> ["even"], [] + | Python -> [], modulo_check o "0" + end + | Odd -> begin + match o with + | OCaml _ -> ["abs"], modulo_check o "1" + | Haskell -> ["odd"], [] + | Python -> [], modulo_check o "1" + end + + let ocaml_direction = function + | To -> "to" + | Downto -> "downto" + + let binding o {var; iterator} = + let iter = match iterator with + | Range {start; direction; stop} -> begin + match o with + | OCaml _ -> + tokens [ "=" + ; int_term start + ; ocaml_direction direction + ; int_term stop ] + | Haskell -> + let step_sep, format_dotdot = match stop with + | Literal n when n < 0 -> " ", spaced + | _ -> "", Fun.id + in + let step = match direction with + | To -> "" + | Downto -> "," ^ step_sep ^ pred_int_term start + in + tokens [ "<-" + ; "[" ^ + int_term start ^ step ^ + format_dotdot ".." ^ + int_term stop ^ + "]" ] + | Python -> + let stop, step = match direction with + | To -> succ_int_term stop, [] + | Downto -> pred_int_term stop, ["-1"] + in + "in range" ^ tuple ([int_term start; stop] @ step) + end + | Sequence seq -> + (* There is one edge case where Haskell can report an ambiguous type + error: if two variables are drawn from empty lists, and then one + is enumerated to the other, such as in + [[(a,b,c) | a <- [], b <- [], c <- [a..b]]], or even more simply + in [[(a,b) | a <- [], b <- [a..a]]]. Thus, if we have an empty + list in Haskell, we give it a type. *) + let maybe_type_annotation = match o, seq with + | Haskell, [] -> ["::"; "[Int]"] + | _, _ -> [] + in + let sep = match o with + | OCaml _ -> ";" + | Haskell | Python -> "," + in + let seq = seq + |> List.map int_term + |> String.concat (sep ^ " ") + |> sequence o + in + let bind = match o with + | OCaml _ | Python -> "in" + | Haskell -> "<-" + in + tokens ([bind; seq] @ maybe_type_annotation) + in + tokens [var; iter] + + (* In Haskell and Python, parallel bindings are interpreted as sequential + bindings. Python has other problems, so we need a heavier hammer (see + [Make_all_variables_unique]), but for Haskell, this is the only + difference we need to address. It doesn't cause problems unless (1) a + variable [x] is in scope for the parallel bindings, (2) one of the + parallel bindings binds [x] to something new, and (3) [x] is used on the + right-hand side of a later binding. In this case, Haskell will see the + new binding of [x], which will shadow the old one; in OCaml, as these are + all in parallel, this is not the case. This function renames all such + variables to [outer_x], with the given let-binding construct. *) + let protect_parallel_bindings let_clause bindings = + let (_bound_vars, _free_vars, outer_lets), bindings = + List.fold_left_map + (fun (shadowed, free_vars, outer_lets) {var; iterator} -> + let protect free_vars = function + | Variable x when Environment.is_bound x shadowed -> + let outer = "outer_" ^ x in + let free_vars, outer_let = + if Environment.is_bound x free_vars + then free_vars, + None + else Environment.add x free_vars, + Some (let_clause outer x) + in + Variable outer, free_vars, outer_let + | t -> + t, free_vars, None + in + let iterator, free_vars, outer_lets' = + match iterator with + | Range { start; direction; stop } -> + let start, free_vars, start_outer = + protect free_vars start + in + let stop, free_vars, stop_outer = + protect free_vars stop + in + let outer_lets' = + List.filter_map Fun.id [start_outer; stop_outer] + in + Range { start; direction; stop }, free_vars, outer_lets' + | Sequence seq -> + let rev_seq, free_vars, outer_lets' = + List.fold_left + (fun (rev_ts, free_vars, outer_lets') t -> + let t, free_vars, outer = protect free_vars t in + t :: rev_ts, + free_vars, + Option.fold + ~none:Fun.id ~some:List.cons outer outer_lets') + ([], free_vars, []) + seq + in + Sequence (List.rev rev_seq), free_vars, outer_lets' + in + ( ( Environment.add var shadowed + , free_vars + , outer_lets' :: outer_lets ) + , {var; iterator} )) + (Environment.empty, Environment.empty, []) + bindings + in + let outer_lets = + let rec rev_rev_concat acc = function + | [] -> acc + | xs :: xss -> rev_rev_concat (List.rev_append xs acc) xss + in rev_rev_concat [] outer_lets + in + outer_lets, bindings + + (* Python doesn't shadow variables which have the same name, it reuses the + same mutable cell. Thus, in the Python list comprehension + [[a for a in [0] for _ in [0, 0] for a in [a, 1]]], the second [a] + clobbers the first, and the result is [[0, 1, 1, 1]] instead of (as it + would be in OCaml or Haskell) [[0, 1, 0, 1]]. To avoid this, we make + every variable in a Python comprehension unique; the above comprehension + would become [[a for a2 in [0] for _ in [0, 0] for a in [a2, 1]]]. *) + module Make_all_variables_unique = struct + module Rename = struct + let var renaming x = + Option.value ~default:x (Var.Map.find_opt x renaming) + + let int_term renaming = function + | Literal n -> Literal n + | Variable x -> Variable (var renaming x) + + let iterator renaming = function + | Range { start; direction; stop } -> + Range { start = int_term renaming start + ; direction + ; stop = int_term renaming stop } + | Sequence seq -> + Sequence (List.map (int_term renaming) seq) + end + + let duplicate_bindings clauses = + let merge_counts f = + List.fold_left + (fun m x -> Var.Map.union (fun _ n1 n2 -> Some (n1 + n2)) (f x) m) + Var.Map.empty + in + Var.Map.filter + (fun _ n -> n > 1) + (merge_counts + (function + | For bs -> + merge_counts (fun {var; _} -> Var.Map.singleton var 1) bs + | When _ -> + Var.Map.empty) + clauses) + + let bindings dups renaming = + List.fold_left_map + (fun (dups, renaming') {var; iterator} -> + let iterator = Rename.iterator renaming iterator in + match Var.Map.find_opt var dups with + | Some n -> + let var' = var ^ Int.to_string n in + let renaming' = Var.Map.add var var' renaming' in + let dups = + Var.Map.update + var + (function + | Some 2 -> None + | Some n -> Some (n-1) + | None -> assert false) + dups + in + (dups, renaming'), {var = var'; iterator} + | None -> + (dups, Var.Map.remove var renaming'), {var; iterator}) + (dups, renaming) + + let clauses cs = + cs |> + List.fold_left_map + (fun ((dups, renaming) as acc) -> function + | For bs -> + let (dups, renaming), bs = bindings dups renaming bs in + (dups, renaming), For bs + | When(pred, x) -> + acc, When(pred, Rename.var renaming x)) + (duplicate_bindings cs, Var.Map.empty) |> + snd + end + + let clause o = function + | For bindings -> + let intro, sep, (extra_clauses, bindings) = + match o with + | OCaml _ -> + ["for"], " and ", ([], bindings) + | Haskell -> + [], + ", ", + protect_parallel_bindings + (fun x e -> tokens ["let"; x; "="; e]) + bindings + | Python -> + (* [Make_all_variables_unique] has already been applied, so we + don't need to call [protect_parallel_bindings] *) + ["for"], " for ", ([], bindings) + in + comprehension_clauses o + (extra_clauses @ + intro @ + [bindings |> List.map (binding o) |> String.concat sep]) + | When(pred, x) -> + let kwd = match o with + | OCaml _ -> ["when"] + | Haskell -> [] + | Python -> ["if"] + in + let pred_pre, pred_post = predicate o pred in + tokens (kwd @ pred_pre @ (x :: pred_post)) + + let comprehension o {env; clauses} = + let clauses = match o with + | OCaml _ | Haskell -> clauses + | Python -> Make_all_variables_unique.clauses clauses + in + let body = tuple (Environment.variables env) in + let clauses = comprehension_clauses o (List.map (clause o) clauses) in + let sep = match o with + | OCaml _ | Python -> " " + | Haskell -> " | " + in + sequence o (body ^ sep ^ clauses) + end + + let generator = Generator.comprehension + let shrink = Shrink.comprehension + let to_string = To_string.comprehension +end + +module Interactive_command = struct + let command cmd args ~setup ~input ~output ~f = + let inch, outch = + Unix.open_process_args cmd (Array.of_list (cmd :: args)) + in + let output str = Util.output_line outch (output str) in + let interact str = + output str; + input inch + in + let cleanup () = ignore (Unix.close_process (inch, outch)) in + match setup output; f interact with + | result -> cleanup (); result + | exception e -> cleanup (); raise e + + (* We need to read every comprehension's output in a character-wise identical + way. We settle on Python's list syntax: square brackets (no pipes), + comma-separated, with spaces after all the commas. This choice is because + (1) it's easier to replace all of OCaml's semicolons with commas than it it + is to replace *some* of Haskell/Python's commas with semicolons; and (2) it + looks nicer to have spaces after commas (like Python, as well as OCaml) + than to not do so (like Haskell). *) + + (* This custom printer is necessary because long lists cause the default + printer to stack overflow. Since we're writing our own, we use commas as a + separator here, a la Python, rather than relying on the substitution later. + (We do still have to substitute later, though, for arrays.) *) + let ocaml_code_pp_list_as_python = {| + let pp_list pp_elt fmt xs = + let buf = Buffer.create 256 in + let rec fill_buf prefix = function + | x :: xs -> + let fbuf = Format.formatter_of_buffer buf in + Format.pp_set_max_indent fbuf Int.max_int; + Buffer.add_string buf prefix; + Format.fprintf fbuf "%a%!" pp_elt x; + fill_buf ", " xs + | [] -> + (); + in + Buffer.add_char buf '['; + fill_buf "" xs; + Buffer.add_char buf ']'; + Format.fprintf fmt "%s" (Buffer.contents buf) + |} + + let input_ocaml_list_or_array_as_python_list i = + let input = Buffer.create 16 in + let rec input_lines () = + let line = input_line i in + Buffer.add_string input line; + if not (String.contains line ']') then input_lines () + in + input_lines (); + let raw_list = Buffer.contents input in + let start = String.index raw_list '[' in + let stop = String.rindex raw_list ']' in + let list = String.sub raw_list start (stop - start + 1) in + list + |> Str.global_replace (Str.regexp "[ \n]+") " " + |> Str.global_replace (Str.regexp "\\[[|:]") "[" + |> Str.global_replace (Str.regexp "[|:]\\]") "]" + |> Str.global_replace (Str.regexp ";") "," + + let input_haskell_list_as_python_list i = + i |> input_line |> Str.global_replace (Str.regexp ",") ", " + + let ocaml ~f = + command + "../../../ocaml" + [ "-extension"; "comprehensions" + ; "-extension"; "immutable_arrays" + ; "-noprompt"; "-no-version" + ; "-w"; "no-unused-var" ] + ~setup:(fun output -> + output ("#print_length " ^ Int.to_string Int.max_int); + output ocaml_code_pp_list_as_python; + output "#install_printer pp_list") + ~input:input_ocaml_list_or_array_as_python_list + ~output:(fun str -> str ^ ";;") + ~f + + (* If GHCi isn't on a tty, it doesn't display a prompt, AFAICT *) + let haskell ~f = + command + "/usr/bin/ghci" + ["-v0"; "-ignore-dot-ghci"] + ~setup:(Fun.const ()) + ~input:input_haskell_list_as_python_list + ~output:Fun.id + ~f + + let python ~f = + command + "/usr/bin/python3" + ["-qic"; "import sys\nsys.ps1 = ''"] + ~setup:(Fun.const ()) + ~input:input_line + ~output:Fun.id + ~f +end + +module Log_test_cases = struct + let to_file file f = + let oc = open_out file in + try + output_string oc +{|(* TEST + flags = "-extension comprehensions -extension immutable_arrays" + * expect +*) + +(* Generated by quickcheck_lists_arrays_haskell_python.ml; filtered down to all + tests of reasonable size; and reflowed to fit in 80-character lines. *) + +(* NOTE: If you're saving these tests, don't forget to make those last two + changes! *)|}; + let r = f (Printf.fprintf oc "\n\n%s;;\n[%%%%expect{||}];;%!") in + output_char oc '\n'; + close_out oc; + r + with + | exn -> + close_out_noerr oc; + raise exn +end + +module Main = struct + type output = { ocaml_list : string + ; ocaml_mutable_array : string + ; ocaml_immutable_array : string + ; haskell : string + ; python : string } + + let output_for o output = + match (o : Comprehension.To_string.format) with + | OCaml List -> output.ocaml_list + | OCaml Mutable_array -> output.ocaml_mutable_array + | OCaml Immutable_array -> output.ocaml_immutable_array + | Haskell -> output.haskell + | Python -> output.python + + let print_counterexample oc counterexample data = + let printf format_string = Printf.fprintf oc format_string in + let output_for, printf_for_data = match data with + | Some data -> (fun o -> output_for o data), printf + | None -> (fun _ -> ""), Printf.ifprintf oc + in + let print_comprehension tag align o = + let counterexample_str = Comprehension.to_string o counterexample in + let indent = String.make (String.length tag) ' ' in + printf " %s:%s %s\n" tag align counterexample_str; + printf_for_data " %s %s = %s\n" indent align (output_for o) + in + print_comprehension "OCaml list" " " (OCaml List); + print_comprehension "OCaml array" " " (OCaml Mutable_array); + print_comprehension "OCaml iarray" "" (OCaml Immutable_array); + print_comprehension "Haskell" " " Haskell; + print_comprehension "Python" " " Python + + let different_comprehensions_agree ?seed ?output max_tests = + let ( = ) = String.equal in + Interactive_command.ocaml ~f:(fun ocaml -> + Interactive_command.haskell ~f:(fun haskell -> + Interactive_command.python ~f:(fun python -> + Log_test_cases.to_file "comprehensions_from_quickcheck-log.ml" (fun log -> + let ocaml comp = log comp; ocaml comp in + QuickCheck.main + ?seed ?output + max_tests + Comprehension.generator Comprehension.shrink + print_counterexample + (fun c -> + let run repl fmt = repl (Comprehension.to_string fmt c) in + let ocaml_list = run ocaml (OCaml List) in + let ocaml_mutable_array = run ocaml (OCaml Mutable_array) in + let ocaml_immutable_array = run ocaml (OCaml Immutable_array) in + let haskell = run haskell Haskell in + let python = run python Python in + if ocaml_list = ocaml_mutable_array && + ocaml_mutable_array = ocaml_immutable_array && + ocaml_immutable_array = haskell && + haskell = python + then OK + else Failed_with + { ocaml_list + ; ocaml_mutable_array + ; ocaml_immutable_array + ; haskell + ; python }))))) +end + +let () = Main.different_comprehensions_agree 1_000 diff --git a/testsuite/tests/comprehensions/syntax.ml b/testsuite/tests/comprehensions/syntax.ml new file mode 100644 index 000000000000..69ac87d764b1 --- /dev/null +++ b/testsuite/tests/comprehensions/syntax.ml @@ -0,0 +1,82 @@ +(* TEST + include ocamlcommon *) + +let () = Clflags.Extension.enable "comprehensions_experimental";; + +let printf = Printf.printf;; + +let this_test_tests_that = + let first_time = ref true in + let separator o () = + if !first_time + then first_time := false + else Printf.fprintf o "\n" + in + fun msg -> printf "%a**** Test that %s ****\n\n" separator () msg +;; + +(******************************************************************************) + +this_test_tests_that + "we print list comprehensions correctly" +;; + +let test_printing () = + let parsed = (* The wonky formatting here is the best way to keep the line + break visible in the string and also keep things within 80 + characters here *) +"[(i, j)\n\ +\ for i = 0 to 9 when (i mod 2) = 0 for j = 0 to i when (i > 4) && (j > 4)]" + in + let expr = Parse.expression (Lexing.from_string parsed) in + let printed = Pprintast.string_of_expression expr in + if parsed = printed then + printf + "Parsing and printing round-tripped successfully!\n\n\ + %s\n" + parsed + else + printf + "Parsing and printing failed to round-trip:\n\n\ + %s\n\n\ + became\n\n\ + %s\n" + parsed printed +;; + +let () = test_printing ();; + +(******************************************************************************) + +this_test_tests_that + "compiler-generated extension nodes start with \"extension.\"" +;; + +(* In particular: As long as we're in ocaml-jst, the compiler translates list + comprehensions to an AST in terms of %-annotated extension nodes. We want to + confirm that we're only touching ones we intend to use, which we mark by + beginning them with the string "extension.". We print out the other ones we + find, which should be the exact four that were present in the source. *) + +let starts_with pfx str = + String.length str >= String.length pfx + && + String.sub str 0 (String.length pfx) = pfx +;; + +let test_iteration () = + let example = + "[ [%expr payload] for i = [%low] to [%high] when [%cond] ]" + in + let expr = Parse.expression (Lexing.from_string example) in + let extension it ((name, _) : Parsetree.extension) = + Printf.printf " [%%%s ...]\n" name.txt + in + let iterator = + { Ast_iterator.default_iterator with extension } + in + Printf.printf "User [%%extension] nodes found:\n"; + iterator.expr iterator expr +;; + +let () = test_iteration ();; diff --git a/testsuite/tests/comprehensions/syntax.reference b/testsuite/tests/comprehensions/syntax.reference new file mode 100644 index 000000000000..99ce503ede6f --- /dev/null +++ b/testsuite/tests/comprehensions/syntax.reference @@ -0,0 +1,14 @@ +**** Test that we print list comprehensions correctly **** + +Parsing and printing round-tripped successfully! + +[(i, j) + for i = 0 to 9 when (i mod 2) = 0 for j = 0 to i when (i > 4) && (j > 4)] + +**** Test that compiler-generated extension nodes start with "extension." **** + +User [%extension] nodes found: + [%expr ...] + [%low ...] + [%high ...] + [%cond ...] diff --git a/testsuite/tests/formatting/test_locations.dlocations.ocamlc.reference b/testsuite/tests/formatting/test_locations.dlocations.ocamlc.reference index c7d1a4f2fdef..dcfb159e31f4 100644 --- a/testsuite/tests/formatting/test_locations.dlocations.ocamlc.reference +++ b/testsuite/tests/formatting/test_locations.dlocations.ocamlc.reference @@ -86,10 +86,11 @@ let rec fib = function | 0 | 1 -> 1 | n -> (fib (n - 1)) + (fib (n - 2)) pattern (test_locations.ml[17,534+8]..test_locations.ml[17,534+11]) Tpat_var "fib" + alloc_mode global expression (test_locations.ml[17,534+14]..test_locations.ml[19,572+34]) - value_mode global Texp_function region true + alloc_mode global Nolabel [ @@ -100,80 +101,71 @@ let rec fib = function | 0 | 1 -> 1 | n -> (fib (n - 1)) + (fib (n - 2)) pattern (test_locations.ml[18,557+8]..test_locations.ml[18,557+9]) Tpat_constant Const_int 1 expression (test_locations.ml[18,557+13]..test_locations.ml[18,557+14]) - value_mode global Texp_constant Const_int 1 pattern (test_locations.ml[19,572+4]..test_locations.ml[19,572+5]) Tpat_var "n" + alloc_mode expression (test_locations.ml[19,572+9]..test_locations.ml[19,572+34]) - value_mode global Texp_apply apply_mode Tail + alloc_mode global expression (test_locations.ml[19,572+21]..test_locations.ml[19,572+22]) - value_mode Texp_ident "Stdlib!.+" [ Nolabel expression (test_locations.ml[19,572+9]..test_locations.ml[19,572+20]) - value_mode Texp_apply apply_mode Default + alloc_mode expression (test_locations.ml[19,572+9]..test_locations.ml[19,572+12]) - value_mode Texp_ident "fib" [ Nolabel expression (test_locations.ml[19,572+13]..test_locations.ml[19,572+20]) - value_mode Texp_apply apply_mode Default + alloc_mode expression (test_locations.ml[19,572+16]..test_locations.ml[19,572+17]) - value_mode Texp_ident "Stdlib!.-" [ Nolabel expression (test_locations.ml[19,572+14]..test_locations.ml[19,572+15]) - value_mode Texp_ident "n" Nolabel expression (test_locations.ml[19,572+18]..test_locations.ml[19,572+19]) - value_mode Texp_constant Const_int 1 ] ] Nolabel expression (test_locations.ml[19,572+23]..test_locations.ml[19,572+34]) - value_mode Texp_apply apply_mode Default + alloc_mode expression (test_locations.ml[19,572+23]..test_locations.ml[19,572+26]) - value_mode Texp_ident "fib" [ Nolabel expression (test_locations.ml[19,572+27]..test_locations.ml[19,572+34]) - value_mode Texp_apply apply_mode Default + alloc_mode expression (test_locations.ml[19,572+30]..test_locations.ml[19,572+31]) - value_mode Texp_ident "Stdlib!.-" [ Nolabel expression (test_locations.ml[19,572+28]..test_locations.ml[19,572+29]) - value_mode Texp_ident "n" Nolabel expression (test_locations.ml[19,572+32]..test_locations.ml[19,572+33]) - value_mode Texp_constant Const_int 2 ] ] @@ -185,7 +177,7 @@ let rec fib = function | 0 | 1 -> 1 | n -> (fib (n - 1)) + (fib (n - 2)) (setglobal Test_locations! (letrec (fib - (function n[int] : int + (function {nlocal = 0} n[int] : int (funct-body Test_locations.fib test_locations.ml(17):548-606 (if (isout 1 n) (before Test_locations.fib test_locations.ml(19):581-606 diff --git a/testsuite/tests/formatting/test_locations.dno-locations.ocamlc.reference b/testsuite/tests/formatting/test_locations.dno-locations.ocamlc.reference index 4656cb8d42b2..23df0b1752ef 100644 --- a/testsuite/tests/formatting/test_locations.dno-locations.ocamlc.reference +++ b/testsuite/tests/formatting/test_locations.dno-locations.ocamlc.reference @@ -86,10 +86,11 @@ let rec fib = function | 0 | 1 -> 1 | n -> (fib (n - 1)) + (fib (n - 2)) pattern Tpat_var "fib" + alloc_mode global expression - value_mode global Texp_function region true + alloc_mode global Nolabel [ @@ -100,80 +101,71 @@ let rec fib = function | 0 | 1 -> 1 | n -> (fib (n - 1)) + (fib (n - 2)) pattern Tpat_constant Const_int 1 expression - value_mode global Texp_constant Const_int 1 pattern Tpat_var "n" + alloc_mode expression - value_mode global Texp_apply apply_mode Tail + alloc_mode global expression - value_mode Texp_ident "Stdlib!.+" [ Nolabel expression - value_mode Texp_apply apply_mode Default + alloc_mode expression - value_mode Texp_ident "fib" [ Nolabel expression - value_mode Texp_apply apply_mode Default + alloc_mode expression - value_mode Texp_ident "Stdlib!.-" [ Nolabel expression - value_mode Texp_ident "n" Nolabel expression - value_mode Texp_constant Const_int 1 ] ] Nolabel expression - value_mode Texp_apply apply_mode Default + alloc_mode expression - value_mode Texp_ident "fib" [ Nolabel expression - value_mode Texp_apply apply_mode Default + alloc_mode expression - value_mode Texp_ident "Stdlib!.-" [ Nolabel expression - value_mode Texp_ident "n" Nolabel expression - value_mode Texp_constant Const_int 2 ] ] @@ -185,6 +177,6 @@ let rec fib = function | 0 | 1 -> 1 | n -> (fib (n - 1)) + (fib (n - 2)) (setglobal Test_locations! (letrec (fib - (function n[int] : int + (function {nlocal = 0} n[int] : int (if (isout 1 n) (+ (apply fib (- n 1)) (apply fib (- n 2))) 1))) (makeblock 0 fib))) diff --git a/testsuite/tests/functors/functors.compilers.reference b/testsuite/tests/functors/functors.compilers.reference index 65f3181c77c7..bddff500c3a4 100644 --- a/testsuite/tests/functors/functors.compilers.reference +++ b/testsuite/tests/functors/functors.compilers.reference @@ -2,54 +2,62 @@ (let (O = (module-defn(O) Functors functors.ml(12):184-279 - (function X is_a_functor always_inline never_loop + (function {nlocal = 0} X is_a_functor always_inline never_loop (let - (cow = (function x[int] : int (apply (field 0 X) x)) - sheep = (function x[int] : int (+ 1 (apply cow x)))) + (cow = + (function {nlocal = 0} x[int] : int (apply (field 0 X) x)) + sheep = + (function {nlocal = 0} x[int] : int (+ 1 (apply cow x)))) (makeblock 0 cow sheep)))) F = (module-defn(F) Functors functors.ml(17):281-392 - (function X Y is_a_functor always_inline never_loop + (function {nlocal = 0} X Y is_a_functor always_inline never_loop (let (cow = - (function x[int] : int + (function {nlocal = 0} x[int] : int (apply (field 0 Y) (apply (field 0 X) x))) - sheep = (function x[int] : int (+ 1 (apply cow x)))) + sheep = + (function {nlocal = 0} x[int] : int (+ 1 (apply cow x)))) (makeblock 0 cow sheep)))) F1 = (module-defn(F1) Functors functors.ml(31):516-632 - (function X Y is_a_functor always_inline never_loop + (function {nlocal = 0} X Y is_a_functor always_inline never_loop (let (cow = - (function x[int] : int + (function {nlocal = 0} x[int] : int (apply (field 0 Y) (apply (field 0 X) x))) - sheep = (function x[int] : int (+ 1 (apply cow x)))) + sheep = + (function {nlocal = 0} x[int] : int (+ 1 (apply cow x)))) (makeblock 0 sheep)))) F2 = (module-defn(F2) Functors functors.ml(36):634-784 - (function X Y is_a_functor always_inline never_loop + (function {nlocal = 0} X Y is_a_functor always_inline never_loop (let (X =a (makeblock 0 (field 1 X)) Y =a (makeblock 0 (field 1 Y)) cow = - (function x[int] : int + (function {nlocal = 0} x[int] : int (apply (field 0 Y) (apply (field 0 X) x))) - sheep = (function x[int] : int (+ 1 (apply cow x)))) + sheep = + (function {nlocal = 0} x[int] : int (+ 1 (apply cow x)))) (makeblock 0 sheep)))) M = (module-defn(M) Functors functors.ml(41):786-970 (let (F = (module-defn(F) Functors.M functors.ml(44):849-966 - (function X Y is_a_functor always_inline never_loop + (function {nlocal = 0} X Y is_a_functor always_inline + never_loop (let (cow = - (function x[int] : int + (function {nlocal = 0} x[int] : int (apply (field 0 Y) (apply (field 0 X) x))) - sheep = (function x[int] : int (+ 1 (apply cow x)))) + sheep = + (function {nlocal = 0} x[int] : int + (+ 1 (apply cow x)))) (makeblock 0 cow sheep))))) (makeblock 0 - (function funarg funarg is_a_functor stub + (function {nlocal = 0} funarg funarg is_a_functor stub (let (let = (apply F (makeblock 0 (field 1 funarg)) diff --git a/testsuite/tests/generalized-open/gpr1506.ml b/testsuite/tests/generalized-open/gpr1506.ml index bd72ed302fb6..bb1eea1e724f 100644 --- a/testsuite/tests/generalized-open/gpr1506.ml +++ b/testsuite/tests/generalized-open/gpr1506.ml @@ -103,9 +103,9 @@ include struct open struct type t = T end let x = T end Line 1, characters 15-41: 1 | include struct open struct type t = T end let x = T end ^^^^^^^^^^^^^^^^^^^^^^^^^^ -Error: The type t/337 introduced by this open appears in the signature +Error: The type t/340 introduced by this open appears in the signature Line 1, characters 46-47: - The value x has no valid type if t/337 is hidden + The value x has no valid type if t/340 is hidden |}];; module A = struct @@ -123,9 +123,9 @@ Lines 3-6, characters 4-7: 4 | type t = T 5 | let x = T 6 | end -Error: The type t/342 introduced by this open appears in the signature +Error: The type t/345 introduced by this open appears in the signature Line 7, characters 8-9: - The value y has no valid type if t/342 is hidden + The value y has no valid type if t/345 is hidden |}];; module A = struct @@ -142,9 +142,9 @@ Lines 3-5, characters 4-7: 3 | ....open struct 4 | type t = T 5 | end -Error: The type t/347 introduced by this open appears in the signature +Error: The type t/350 introduced by this open appears in the signature Line 6, characters 8-9: - The value y has no valid type if t/347 is hidden + The value y has no valid type if t/350 is hidden |}] (* It was decided to not allow this anymore. *) diff --git a/testsuite/tests/jst-modular-extensions/user_error1.compilers.reference b/testsuite/tests/jst-modular-extensions/user_error1.compilers.reference new file mode 100644 index 000000000000..72bc5fec5351 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error1.compilers.reference @@ -0,0 +1,5 @@ +File "user_error1.ml", line 21, characters 41-60: +21 | let _malformed_extension_has_payload = [%extension.something "no payloads"] ();; + ^^^^^^^^^^^^^^^^^^^ +Error: Modular extension nodes are not allowed to have a payload, + but "extension.something" does diff --git a/testsuite/tests/jst-modular-extensions/user_error1.ml b/testsuite/tests/jst-modular-extensions/user_error1.ml new file mode 100644 index 000000000000..b6192ebaf708 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error1.ml @@ -0,0 +1,29 @@ +(* TEST + ocamlc_byte_exit_status = "2" + * setup-ocamlc.byte-build-env + ** ocamlc.byte + *** check-ocamlc.byte-output +*) + +(* What happens if the user tries to write one of the ocaml-jst extensions in + terms of extension nodes but messes up? In practice we don't expect to ever + see these errors, but one never knows (and a bug in our desugaring could + cause them). The let-binding is named after the constructor in + [extensions.ml] representing this particular error. *) + +(* We cannot use an expect-test here, because these are essentially parsing + errors. The expect-test infrastructure uses Ast_mapper to prepare its + input, and the call to Ast_mapper fails with a bogus extension setup, + because it tries to decode extensions. We thus have this error and others + like it in separate files, because the "compile and test output" + infrastructure reports only one error at a time. *) + +let _malformed_extension_has_payload = [%extension.something "no payloads"] ();; + +(* +Line 1, characters 41-60: +1 | let _malformed_extension_has_payload = [%extension.something "no payloads"] ();; + ^^^^^^^^^^^^^^^^^^^ +Error: Extension extension nodes are not allowed to have a payload, but "extension.something" does + *) + diff --git a/testsuite/tests/jst-modular-extensions/user_error2.compilers.reference b/testsuite/tests/jst-modular-extensions/user_error2.compilers.reference new file mode 100644 index 000000000000..af5d33e41040 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error2.compilers.reference @@ -0,0 +1,6 @@ +File "user_error2.ml", line 21, characters 46-65: +21 | let _malformed_extensions_wrong_arguments = [%extension.something] "two" "arguments";; + ^^^^^^^^^^^^^^^^^^^ +Error: Expression modular extension nodes must be applied to exactly + one unlabeled argument, but "extension.something" was applied to + 2 arguments diff --git a/testsuite/tests/jst-modular-extensions/user_error2.ml b/testsuite/tests/jst-modular-extensions/user_error2.ml new file mode 100644 index 000000000000..b201f6e648c2 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error2.ml @@ -0,0 +1,28 @@ +(* TEST + ocamlc_byte_exit_status = "2" + * setup-ocamlc.byte-build-env + ** ocamlc.byte + *** check-ocamlc.byte-output +*) + +(* What happens if the user tries to write one of the ocaml-jst extensions in + terms of extension nodes but messes up? In practice we don't expect to ever + see these errors, but one never knows (and a bug in our desugaring could + cause them). The let-binding is named after the constructor in + [extensions.ml] representing this particular error. *) + +(* We cannot use an expect-test here, because these are essentially parsing + errors. The expect-test infrastructure uses Ast_mapper to prepare its + input, and the call to Ast_mapper fails with a bogus extension setup, + because it tries to decode extensions. We thus have this error and others + like it in separate files, because the "compile and test output" + infrastructure reports only one error at a time. *) + +let _malformed_extensions_wrong_arguments = [%extension.something] "two" "arguments";; + +(* + Line 1, characters 46-65: +1 | let _malformed_extensions_wrong_arguments = [%extension.something] "two" "arguments";; + ^^^^^^^^^^^^^^^^^^^ +Error: Expression extension extension nodes must be applied to exactly one unlabeled argument, but "extension.something" was applied to 2 arguments +*) diff --git a/testsuite/tests/jst-modular-extensions/user_error3.compilers.reference b/testsuite/tests/jst-modular-extensions/user_error3.compilers.reference new file mode 100644 index 000000000000..9c5c285c78a9 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error3.compilers.reference @@ -0,0 +1,5 @@ +File "user_error3.ml", line 21, characters 25-69: +21 | let _unknown_extension = [%extension.this_extension_doesn't_exist] ();; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: Unknown extension "this_extension_doesn't_exist" referenced via an + [%extension.this_extension_doesn't_exist] extension node diff --git a/testsuite/tests/jst-modular-extensions/user_error3.ml b/testsuite/tests/jst-modular-extensions/user_error3.ml new file mode 100644 index 000000000000..10166dfa0a48 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error3.ml @@ -0,0 +1,29 @@ +(* TEST + ocamlc_byte_exit_status = "2" + * setup-ocamlc.byte-build-env + ** ocamlc.byte + *** check-ocamlc.byte-output +*) + +(* What happens if the user tries to write one of the ocaml-jst extensions in + terms of extension nodes but messes up? In practice we don't expect to ever + see these errors, but one never knows (and a bug in our desugaring could + cause them). The let-binding is named after the constructor in + [extensions.ml] representing this particular error. *) + +(* We cannot use an expect-test here, because these are essentially parsing + errors. The expect-test infrastructure uses Ast_mapper to prepare its + input, and the call to Ast_mapper fails with a bogus extension setup, + because it tries to decode extensions. We thus have this error and others + like it in separate files, because the "compile and test output" + infrastructure reports only one error at a time. *) + +let _unknown_extension = [%extension.this_extension_doesn't_exist] ();; + +(* +Line 1, characters 25-69: +1 | let _unknown_extension = [%extension.this_extension_doesn't_exist] ();; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: Unknown extension "this_extension_doesn't_exist" referenced via an [%extension.this_extension_doesn't_exist] extension node +*) + diff --git a/testsuite/tests/jst-modular-extensions/user_error4.compilers.reference b/testsuite/tests/jst-modular-extensions/user_error4.compilers.reference new file mode 100644 index 000000000000..ba498218b71d --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error4.compilers.reference @@ -0,0 +1,4 @@ +File "user_error4.ml", line 21, characters 26-69: +21 | let _disabled_extension = [%extension.comprehensions_experimental] ();; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: The extension "comprehensions_experimental" is disabled and cannot be used diff --git a/testsuite/tests/jst-modular-extensions/user_error4.ml b/testsuite/tests/jst-modular-extensions/user_error4.ml new file mode 100644 index 000000000000..bafcbb0ceb29 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error4.ml @@ -0,0 +1,30 @@ +(* TEST + ocamlc_byte_exit_status = "2" + * setup-ocamlc.byte-build-env + ** ocamlc.byte + *** check-ocamlc.byte-output +*) + +(* What happens if the user tries to write one of the ocaml-jst extensions in + terms of extension nodes but messes up? In practice we don't expect to ever + see these errors, but one never knows (and a bug in our desugaring could + cause them). The let-binding is named after the constructor in + [extensions.ml] representing this particular error. *) + +(* We cannot use an expect-test here, because these are essentially parsing + errors. The expect-test infrastructure uses Ast_mapper to prepare its + input, and the call to Ast_mapper fails with a bogus extension setup, + because it tries to decode extensions. We thus have this error and others + like it in separate files, because the "compile and test output" + infrastructure reports only one error at a time. *) + +let _disabled_extension = [%extension.comprehensions_experimental] ();; + +(* +Line 1, characters 26-69: +1 | let _disabled_extension = [%extension.comprehensions_experimental] ();; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: The extension "comprehensions_experimental" is disabled and cannot be used +*) + + diff --git a/testsuite/tests/jst-modular-extensions/user_error5.compilers.reference b/testsuite/tests/jst-modular-extensions/user_error5.compilers.reference new file mode 100644 index 000000000000..3524f07f90d1 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error5.compilers.reference @@ -0,0 +1,4 @@ +File "user_error5.ml", line 21, characters 25-40: +21 | let _unnamed_extension = [%extension] ();; + ^^^^^^^^^^^^^^^ +Error: Cannot have an extension node named [%extension] diff --git a/testsuite/tests/jst-modular-extensions/user_error5.ml b/testsuite/tests/jst-modular-extensions/user_error5.ml new file mode 100644 index 000000000000..fab833c99de5 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error5.ml @@ -0,0 +1,31 @@ +(* TEST + ocamlc_byte_exit_status = "2" + * setup-ocamlc.byte-build-env + ** ocamlc.byte + *** check-ocamlc.byte-output +*) + +(* What happens if the user tries to write one of the ocaml-jst extensions in + terms of extension nodes but messes up? In practice we don't expect to ever + see these errors, but one never knows (and a bug in our desugaring could + cause them). The let-binding is named after the constructor in + [extensions.ml] representing this particular error. *) + +(* We cannot use an expect-test here, because these are essentially parsing + errors. The expect-test infrastructure uses Ast_mapper to prepare its + input, and the call to Ast_mapper fails with a bogus extension setup, + because it tries to decode extensions. We thus have this error and others + like it in separate files, because the "compile and test output" + infrastructure reports only one error at a time. *) + +let _unnamed_extension = [%extension] ();; + +(* +Line 1, characters 25-40: +1 | let _unnamed_extension = [%extension] ();; + ^^^^^^^^^^^^^^^ +Error: Cannot have an extension node named [%extension] +*) + + + diff --git a/testsuite/tests/jst-modular-extensions/user_error6.compilers.reference b/testsuite/tests/jst-modular-extensions/user_error6.compilers.reference new file mode 100644 index 000000000000..7deea9374c3a --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error6.compilers.reference @@ -0,0 +1,6 @@ +File "user_error6.ml", line 21, characters 24-56: +21 | let _bad_introduction = [%extension.something.nested] ();; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: The extension "something" was referenced improperly; it started with an + [%extension.something.nested] extension node, + not an [%extension.something] one diff --git a/testsuite/tests/jst-modular-extensions/user_error6.ml b/testsuite/tests/jst-modular-extensions/user_error6.ml new file mode 100644 index 000000000000..d31997bf1558 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error6.ml @@ -0,0 +1,32 @@ +(* TEST + ocamlc_byte_exit_status = "2" + * setup-ocamlc.byte-build-env + ** ocamlc.byte + *** check-ocamlc.byte-output +*) + +(* What happens if the user tries to write one of the ocaml-jst extensions in + terms of extension nodes but messes up? In practice we don't expect to ever + see these errors, but one never knows (and a bug in our desugaring could + cause them). The let-binding is named after the constructor in + [extensions.ml] representing this particular error. *) + +(* We cannot use an expect-test here, because these are essentially parsing + errors. The expect-test infrastructure uses Ast_mapper to prepare its + input, and the call to Ast_mapper fails with a bogus extension setup, + because it tries to decode extensions. We thus have this error and others + like it in separate files, because the "compile and test output" + infrastructure reports only one error at a time. *) + +let _bad_introduction = [%extension.something.nested] ();; + +(* +Line 1, characters 24-56: +1 | let _bad_introduction = [%extension.something.nested] ();; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: The extension "something" was referenced improperly; it started with an [%extension.something.nested] extension node, not an [%extension.something] one +*) + + + + diff --git a/testsuite/tests/jst-modular-extensions/user_error7.ml b/testsuite/tests/jst-modular-extensions/user_error7.ml new file mode 100644 index 000000000000..733f7b7246f5 --- /dev/null +++ b/testsuite/tests/jst-modular-extensions/user_error7.ml @@ -0,0 +1,26 @@ +(* TEST + * expect +*) + +(* If you don't use these as applications, they don't pass through the modular + extensions machinery and fail with a normal OCaml error *) + +let _ = [%extension];; +[%%expect{| +Line 1, characters 10-19: +1 | let _ = [%extension];; + ^^^^^^^^^ +Error: Uninterpreted extension 'extension'. +|}];; + +let _ = [%extension "payload"];; +[%%expect{| +Line 1, characters 10-19: +1 | let _ = [%extension "payload"];; + ^^^^^^^^^ +Error: Uninterpreted extension 'extension'. +|}];; + + + + diff --git a/testsuite/tests/lib-array/test_iarray.ml b/testsuite/tests/lib-array/test_iarray.ml new file mode 100644 index 000000000000..d6de9e5a516f --- /dev/null +++ b/testsuite/tests/lib-array/test_iarray.ml @@ -0,0 +1,527 @@ +(* TEST + flags = "-extension immutable_arrays_experimental" + * expect +*) + +(** Create some immutable and mutable arrays *) + +let iarray : int iarray = [:1;2;3;4;5:];; +let ifarray : float iarray = [:1.5;2.5;3.5;4.5;5.5:];; + +let marray : int array = [|1;2;3;4;5|];; +let mfarray : float array = [|1.5;2.5;3.5;4.5;5.5|];; + +[%%expect{| +val iarray : int iarray = [:1; 2; 3; 4; 5:] +val ifarray : float iarray = [:1.5; 2.5; 3.5; 4.5; 5.5:] +val marray : int array = [|1; 2; 3; 4; 5|] +val mfarray : float array = [|1.5; 2.5; 3.5; 4.5; 5.5|] +|}];; + +(** Pattern-match on some immutable arrays, and check the typing of array + patterns, both mutable and immutable *) + +match iarray with +| [::] -> "empty" +| [:1;2;3;4;5:] -> "1--5" +| _ -> "who knows?" +;; +[%%expect{| +- : string = "1--5" +|}];; + +match ifarray with +| [::] -> "empty" +| [:1.5;2.5;3.5;4.5;5.5:] -> "1.5--5.5" +| _ -> "who knows?" +;; +[%%expect{| +- : string = "1.5--5.5" +|}];; + +match iarray with +| [::] -> "empty" +| [:1;2;3;4;6:] -> "1--5" +| _ -> "who knows?" +;; +[%%expect{| +- : string = "who knows?" +|}];; + +match ifarray with +| [::] -> "empty" +| [:1;2;3;4;5:] -> "1--5" +| _ -> "who knows?" +;; +[%%expect{| +Line 3, characters 4-5: +3 | | [:1;2;3;4;5:] -> "1--5" + ^ +Error: This pattern matches values of type int + but a pattern was expected which matches values of type float + Hint: Did you mean `1.'? +|}];; + +match marray with +| [::] -> "empty" +| [:1;2;3;4;5:] -> "1--5" +| _ -> "who knows?" +;; +[%%expect{| +Line 2, characters 2-6: +2 | | [::] -> "empty" + ^^^^ +Error: This pattern matches values of type 'a iarray + but a pattern was expected which matches values of type int array +|}];; + +match iarray with +| [||] -> "empty" +| [|1;2;3;4;5|] -> "1--5" +| _ -> "who knows?" +;; +[%%expect{| +Line 2, characters 2-6: +2 | | [||] -> "empty" + ^^^^ +Error: This pattern matches values of type 'a array + but a pattern was expected which matches values of type int iarray +|}];; + +(** Confirm that immutable and mutable arrays have the same representation, even + when they're different objects *) + +Obj.repr iarray = Obj.repr marray;; +[%%expect{| +- : bool = true +|}];; + +Obj.repr ifarray = Obj.repr mfarray;; +[%%expect{| +- : bool = true +|}];; + +iarray == Obj.magic marray;; +[%%expect{| +- : bool = false +|}];; + +ifarray == Obj.magic mfarray;; +[%%expect{| +- : bool = false +|}];; + +(** Confirm that immutable and mutable arrays don't collide *) + +Obj.repr iarray <> Obj.repr ifarray;; +[%%expect{| +- : bool = true +|}];; + +Obj.repr marray <> Obj.repr mfarray;; +[%%expect{| +- : bool = true +|}];; + +(** Test basic functionality: One or a few tests for every function in [Iarray]. + We test both success and error cases, and in general try to have coverage of + edge cases. Comments are attached everywhere something subtle is being + checked. *) + +Iarray.length iarray, Iarray.length ifarray;; +[%%expect{| +- : int * int = (5, 5) +|}];; + +iarray.:(0), Iarray.get iarray 1, ifarray.:(2), Iarray.get ifarray 3;; +[%%expect{| +- : int * int * float * float = (1, 2, 3.5, 4.5) +|}];; + +iarray.:(10) +[%%expect{| +Exception: Invalid_argument "index out of bounds". +|}];; + +Iarray.get iarray (-1);; +[%%expect{| +Exception: Invalid_argument "index out of bounds". +|}];; + +ifarray.:(-10);; +[%%expect{| +Exception: Invalid_argument "index out of bounds". +|}];; + +Iarray.get ifarray 5;; +[%%expect{| +Exception: Invalid_argument "index out of bounds". +|}];; + +Iarray.init 10 (fun x -> x * 2);; +[%%expect{| +- : int iarray = [:0; 2; 4; 6; 8; 10; 12; 14; 16; 18:] +|}];; + +Iarray.append iarray iarray;; +[%%expect{| +- : int iarray = [:1; 2; 3; 4; 5; 1; 2; 3; 4; 5:] +|}];; + +Iarray.concat [];; +[%%expect{| +- : 'a iarray = [::] +|}];; + +Iarray.concat [ Iarray.init 1 (fun x -> 1 + x) + ; Iarray.init 2 (fun x -> 20 + x) + ; Iarray.init 3 (fun x -> 300 + x) ];; +[%%expect{| +- : int iarray = [:1; 20; 21; 300; 301; 302:] +|}];; + +Iarray.sub iarray 0 2, Iarray.sub iarray 2 3;; +[%%expect{| +- : int iarray * int iarray = ([:1; 2:], [:3; 4; 5:]) +|}];; + +Iarray.sub iarray (-1) 3;; +[%%expect{| +Exception: Invalid_argument "Array.sub". +|}];; + +Iarray.sub iarray 1 (-3);; +[%%expect{| +Exception: Invalid_argument "Array.sub". +|}];; + +Iarray.sub iarray 3 10;; +[%%expect{| +Exception: Invalid_argument "Array.sub". +|}];; + +Iarray.to_list iarray;; +[%%expect{| +- : int list = [1; 2; 3; 4; 5] +|}];; + +Iarray.of_list [10;20;30];; +[%%expect{| +- : int iarray = [:10; 20; 30:] +|}];; + + +Iarray.to_array iarray;; +[%%expect{| +- : int array = [|1; 2; 3; 4; 5|] +|}];; + +Iarray.of_array mfarray;; +[%%expect{| +- : float iarray = [:1.5; 2.5; 3.5; 4.5; 5.5:] +|}];; + +(* [Array] has an analog to [Iarray.to_array] *) +Array.of_iarray ifarray;; +[%%expect{| +- : float array = [|1.5; 2.5; 3.5; 4.5; 5.5|] +|}];; + +(* [Array] has an analog to [Iarray.of_array] *) +Array.to_iarray marray;; +[%%expect{| +- : int iarray = [:1; 2; 3; 4; 5:] +|}];; + +(* [Iarray.to_array] creates a fresh mutable array every time *) +Iarray.to_array iarray == marray;; +[%%expect{| +- : bool = false +|}];; + +(* [Iarray.to_array] creates a fresh mutable array every time *) +Iarray.to_array ifarray == Iarray.to_array ifarray;; +[%%expect{| +- : bool = false +|}];; + +(* Round-tripping from and to an [iarray] creates a fresh copy every time *) +Iarray.of_array (Iarray.to_array iarray) == iarray;; +[%%expect{| +- : bool = false +|}];; + +let sum = ref 0. in +Iarray.iter (fun x -> sum := !sum +. x) ifarray; +!sum;; +[%%expect{| +- : float = 17.5 +|}];; + +let total = ref 0 in +Iarray.iteri (fun i x -> total := !total + i*x) iarray; +!total;; +[%%expect{| +- : int = 40 +|}];; + +Iarray.map Int.neg iarray;; +[%%expect{| +- : int iarray = [:-1; -2; -3; -4; -5:] +|}];; + +Iarray.mapi (fun i x -> i, 10.*.x) ifarray;; +[%%expect{| +- : (int * float) iarray = +[:(0, 15.); (1, 25.); (2, 35.); (3, 45.); (4, 55.):] +|}];; + +Iarray.fold_left (fun acc x -> -x :: acc) [] iarray;; +[%%expect{| +- : int list = [-5; -4; -3; -2; -1] +|}];; + +Iarray.fold_left_map (fun acc x -> acc + x, string_of_int x) 0 iarray;; +[%%expect{| +- : int * string iarray = (15, [:"1"; "2"; "3"; "4"; "5":]) +|}];; + +(* Confirm the function isn't called on the empty immutable array *) +Iarray.fold_left_map (fun _ _ -> assert false) 0 [::];; +[%%expect{| +- : int * 'a iarray = (0, [::]) +|}];; + +Iarray.fold_right (fun x acc -> -.x :: acc) ifarray [];; +[%%expect{| +- : float list = [-1.5; -2.5; -3.5; -4.5; -5.5] +|}];; + +let ints = ref 0 in +let floats = ref 0. in +Iarray.iter2 + (fun i f -> + ints := i + !ints; + floats := f +. !floats) + iarray + ifarray; +!ints, !floats;; +[%%expect{| +- : int * float = (15, 17.5) +|}];; + +Iarray.map2 (fun i f -> f, i) iarray ifarray;; +[%%expect{| +- : (float * int) iarray = +[:(1.5, 1); (2.5, 2); (3.5, 3); (4.5, 4); (5.5, 5):] +|}];; + +Iarray.for_all (fun i -> i > 0) iarray;; +[%%expect{| +- : bool = true +|}];; + +Iarray.for_all (fun f -> f < 5.) ifarray;; +[%%expect{| +- : bool = false +|}];; + +Iarray.exists (fun f -> f < 5.) ifarray;; +[%%expect{| +- : bool = true +|}];; + +Iarray.exists (fun i -> i > 10) iarray;; +[%%expect{| +- : bool = false +|}];; + +Iarray.for_all2 (fun i f -> Float.of_int i < f) iarray ifarray;; +[%%expect{| +- : bool = true +|}];; + +Iarray.for_all2 (fun f i -> i = 1 && f = 1.5) ifarray iarray;; +[%%expect{| +- : bool = false +|}];; + +Iarray.exists2 (fun f i -> Float.of_int i +. f = 8.5) ifarray iarray;; +[%%expect{| +- : bool = true +|}];; + +Iarray.exists2 (fun i f -> Float.of_int i > f) iarray ifarray;; +[%%expect{| +- : bool = false +|}];; + +Iarray.mem 3 iarray, Iarray.mem 3.5 ifarray;; +[%%expect{| +- : bool * bool = (true, true) +|}];; + +Iarray.mem 30 iarray, Iarray.mem 35. ifarray;; +[%%expect{| +- : bool * bool = (false, false) +|}];; + +let x = ref 0 in +Iarray.memq x (Iarray.init 3 (Fun.const x));; +[%%expect{| +- : bool = true +|}];; + +Iarray.memq (ref 0) (Iarray.init 3 (Fun.const (ref 0))) +[%%expect{| +- : bool = false +|}];; + +Iarray.find_opt (fun x -> x*x > 5) iarray, +Iarray.find_opt (fun x -> x*.x > 5.) ifarray;; +[%%expect{| +- : int option * float option = (Some 3, Some 2.5) +|}];; + +Iarray.find_opt (fun x -> x*x > 50) iarray, +Iarray.find_opt (fun x -> x*.x > 50.) ifarray;; +[%%expect{| +- : int option * float option = (None, None) +|}];; + +Iarray.find_map (fun x -> if x mod 2 = 0 + then Some (x / 2) + else None) + iarray, +Iarray.find_map (fun x -> if Float.rem x 2. = 0.5 + then Some ((x -. 0.5) /. 2.) + else None) + ifarray;; +[%%expect{| +- : int option * float option = (Some 1, Some 1.) +|}];; + +Iarray.find_map (fun x -> if x mod 7 = 0 + then Some (x / 7) + else None) + iarray, +Iarray.find_map (fun x -> if Float.rem x 7. = 0.5 + then Some ((x -. 0.5) /. 7.) + else None) + ifarray;; +[%%expect{| +- : int option * float option = (None, None) +|}];; + +Iarray.split [: 1, "a"; 2, "b"; 3, "c" :];; +[%%expect{| +- : int iarray * string iarray = ([:1; 2; 3:], [:"a"; "b"; "c":]) +|}];; + +Iarray.split [::];; +[%%expect{| +- : 'a iarray * 'b iarray = ([::], [::]) +|}];; + +Iarray.combine iarray ifarray;; +[%%expect{| +- : (int * float) iarray = +[:(1, 1.5); (2, 2.5); (3, 3.5); (4, 4.5); (5, 5.5):] +|}];; + +Iarray.combine [::] [::];; +[%%expect{| +- : ('a * 'b) iarray = [::] +|}];; + +Iarray.combine iarray [: "wrong length" :];; +[%%expect{| +Exception: Invalid_argument "Array.combine". +|}];; + +Iarray.sort (Fun.flip Int.compare) iarray, +Iarray.sort (Fun.flip Float.compare) ifarray;; +[%%expect{| +- : int iarray * Float.t iarray = +([:5; 4; 3; 2; 1:], [:5.5; 4.5; 3.5; 2.5; 1.5:]) +|}];; + +Iarray.stable_sort (Fun.flip Int.compare) iarray, +Iarray.stable_sort (Fun.flip Float.compare) ifarray;; +[%%expect{| +- : int iarray * Float.t iarray = +([:5; 4; 3; 2; 1:], [:5.5; 4.5; 3.5; 2.5; 1.5:]) +|}];; + +(* Check stability *) +Iarray.stable_sort + (fun s1 s2 -> Int.compare (String.length s1) (String.length s2)) + [: "zero"; "one"; "two"; "three"; "four"; + "five"; "six"; "seven"; "eight"; "nine"; + "ten" :];; +[%%expect{| +- : string iarray = +[:"one"; "two"; "six"; "ten"; "zero"; "four"; "five"; "nine"; "three"; + "seven"; "eight":] +|}];; + +Iarray.fast_sort (Fun.flip Int.compare) iarray, +Iarray.fast_sort (Fun.flip Float.compare) ifarray;; +[%%expect{| +- : int iarray * Float.t iarray = +([:5; 4; 3; 2; 1:], [:5.5; 4.5; 3.5; 2.5; 1.5:]) +|}];; + +Iarray.to_seq iarray |> List.of_seq;; +[%%expect{| +- : int list = [1; 2; 3; 4; 5] +|}];; + +Iarray.to_seqi ifarray |> List.of_seq;; +[%%expect{| +- : (int * float) list = [(0, 1.5); (1, 2.5); (2, 3.5); (3, 4.5); (4, 5.5)] +|}];; + +["hello"; "world"] |> List.to_seq |> Iarray.of_seq;; +[%%expect{| +- : string iarray = [:"hello"; "world":] +|}];; + +(** Confirm that we haven't edited the immutable arrays, and that editing + mutable siblings or copies does nothing *) + +Array.fill marray 0 3 0; +marray;; +[%%expect{| +- : int array = [|0; 0; 0; 4; 5|] +|}];; + +Array.fill (Iarray.to_array iarray) 3 2 10; +iarray;; +[%%expect{| +- : int iarray = [:1; 2; 3; 4; 5:] +|}];; + +Array.fill mfarray 3 2 0.; +mfarray;; +[%%expect{| +- : float array = [|1.5; 2.5; 3.5; 0.; 0.|] +|}];; + +Array.fill (Iarray.to_array ifarray) 0 3 10.; +ifarray;; +[%%expect{| +- : float iarray = [:1.5; 2.5; 3.5; 4.5; 5.5:] +|}];; + +(* Confirm that nothing has changed *) + +iarray;; +[%%expect{| +- : int iarray = [:1; 2; 3; 4; 5:] +|}];; + +ifarray;; +[%%expect{| +- : float iarray = [:1.5; 2.5; 3.5; 4.5; 5.5:] +|}];; diff --git a/testsuite/tests/shapes/comp_units.ml b/testsuite/tests/shapes/comp_units.ml index 1de07d7fcdf5..ea64f67af5eb 100644 --- a/testsuite/tests/shapes/comp_units.ml +++ b/testsuite/tests/shapes/comp_units.ml @@ -25,7 +25,7 @@ module Mproj = Unit module F (X : sig type t end) = X [%%expect{| { - "F"[module] -> Abs<.4>(X/277, X/277<.3>); + "F"[module] -> Abs<.4>(X/280, X/280<.3>); } module F : functor (X : sig type t end) -> sig type t = X.t end |}] diff --git a/testsuite/tests/shapes/functors.ml b/testsuite/tests/shapes/functors.ml index a909d53ebbcc..aa4fe0d0f011 100644 --- a/testsuite/tests/shapes/functors.ml +++ b/testsuite/tests/shapes/functors.ml @@ -17,7 +17,7 @@ module type S = sig type t val x : t end module Falias (X : S) = X [%%expect{| { - "Falias"[module] -> Abs<.4>(X/279, X/279<.3>); + "Falias"[module] -> Abs<.4>(X/282, X/282<.3>); } module Falias : functor (X : S) -> sig type t = X.t val x : t end |}] @@ -29,10 +29,10 @@ end { "Finclude"[module] -> Abs<.6> - (X/283, + (X/286, { - "t"[type] -> X/283<.5> . "t"[type]; - "x"[value] -> X/283<.5> . "x"[value]; + "t"[type] -> X/286<.5> . "t"[type]; + "x"[value] -> X/286<.5> . "x"[value]; }); } module Finclude : functor (X : S) -> sig type t = X.t val x : t end @@ -45,7 +45,7 @@ end [%%expect{| { "Fredef"[module] -> - Abs<.10>(X/290, { + Abs<.10>(X/293, { "t"[type] -> <.8>; "x"[value] -> <.9>; }); @@ -223,8 +223,8 @@ module Big_to_small1 : B2S = functor (X : Big) -> X [%%expect{| { "Big_to_small1"[module] -> - Abs<.40>(X/385, {<.39> - "t"[type] -> X/385<.39> . "t"[type]; + Abs<.40>(X/388, {<.39> + "t"[type] -> X/388<.39> . "t"[type]; }); } module Big_to_small1 : B2S @@ -234,8 +234,8 @@ module Big_to_small2 : B2S = functor (X : Big) -> struct include X end [%%expect{| { "Big_to_small2"[module] -> - Abs<.42>(X/388, { - "t"[type] -> X/388<.41> . "t"[type]; + Abs<.42>(X/391, { + "t"[type] -> X/391<.41> . "t"[type]; }); } module Big_to_small2 : B2S diff --git a/testsuite/tests/shapes/open_arg.ml b/testsuite/tests/shapes/open_arg.ml index e0c502523497..9dd8cbe05a67 100644 --- a/testsuite/tests/shapes/open_arg.ml +++ b/testsuite/tests/shapes/open_arg.ml @@ -22,7 +22,7 @@ end = struct end [%%expect{| { - "Make"[module] -> Abs<.3>(I/279, { + "Make"[module] -> Abs<.3>(I/282, { }); } module Make : functor (I : sig end) -> sig end diff --git a/testsuite/tests/shapes/recmodules.ml b/testsuite/tests/shapes/recmodules.ml index 1911efd4fc6a..2f31951dc478 100644 --- a/testsuite/tests/shapes/recmodules.ml +++ b/testsuite/tests/shapes/recmodules.ml @@ -43,8 +43,8 @@ and B : sig end = B [%%expect{| { - "A"[module] -> A/302<.11>; - "B"[module] -> B/303<.12>; + "A"[module] -> A/305<.11>; + "B"[module] -> B/306<.12>; } module rec A : sig type t = Leaf of B.t end and B : sig type t = int end @@ -82,13 +82,13 @@ end = Set.Make(A) "ASet"[module] -> { "compare"[value] -> - CU Stdlib . "Set"[module] . "Make"[module](A/324<.19>) . + CU Stdlib . "Set"[module] . "Make"[module](A/327<.19>) . "compare"[value]; "elt"[type] -> - CU Stdlib . "Set"[module] . "Make"[module](A/324<.19>) . + CU Stdlib . "Set"[module] . "Make"[module](A/327<.19>) . "elt"[type]; "t"[type] -> - CU Stdlib . "Set"[module] . "Make"[module](A/324<.19>) . "t"[type]; + CU Stdlib . "Set"[module] . "Make"[module](A/327<.19>) . "t"[type]; }; } module rec A : diff --git a/testsuite/tests/shapes/rotor_example.ml b/testsuite/tests/shapes/rotor_example.ml index e8f96a6c39be..d0d4632bb3c0 100644 --- a/testsuite/tests/shapes/rotor_example.ml +++ b/testsuite/tests/shapes/rotor_example.ml @@ -26,7 +26,7 @@ end { "Pair"[module] -> Abs<.9> - (X/279, Abs(Y/280, { + (X/282, Abs(Y/283, { "t"[type] -> <.5>; "to_string"[value] -> <.6>; })); diff --git a/testsuite/tests/tmc/readable_output.ml b/testsuite/tests/tmc/readable_output.ml index 29c0c82491d0..66148a82c781 100644 --- a/testsuite/tests/tmc/readable_output.ml +++ b/testsuite/tests/tmc/readable_output.ml @@ -10,7 +10,7 @@ let[@tail_mod_cons] rec map f = function [%%expect{| (letrec (map - (function f + (function {nlocal = 0} f param[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] tail_mod_cons @@ -27,7 +27,7 @@ let[@tail_mod_cons] rec map f = function (seq (apply map_dps block 1 f (field 1 param)) block)) 0)) map_dps - (function dst offset[int] f + (function {nlocal = 0} dst offset[int] f param[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] tail_mod_cons @@ -65,7 +65,8 @@ let[@tail_mod_cons] rec rec_map f = function [%%expect{| (letrec (rec_map - (function f param[(consts (0)) (non_consts ([0: *]))] tail_mod_cons + (function {nlocal = 0} f param[(consts (0)) (non_consts ([0: *]))] + tail_mod_cons [(consts (0)) (non_consts ([0: *]))](if param (let (*match* =a (field 0 param)) @@ -90,8 +91,8 @@ let[@tail_mod_cons] rec rec_map f = function block)))) 0)) rec_map_dps - (function dst offset[int] f param[(consts (0)) (non_consts ([0: *]))] - tail_mod_cons + (function {nlocal = 0} dst offset[int] f + param[(consts (0)) (non_consts ([0: *]))] tail_mod_cons [(consts (0)) (non_consts ([0: *]))](if param (let (*match* =a (field 0 param) @@ -132,7 +133,7 @@ let[@tail_mod_cons] rec trip = function [%%expect{| (letrec (trip - (function + (function {nlocal = 0} param[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] tail_mod_cons @@ -164,7 +165,7 @@ let[@tail_mod_cons] rec trip = function (seq (apply trip_dps block 1 (field 1 param)) block))))) 0)) trip_dps - (function dst offset[int] + (function {nlocal = 0} dst offset[int] param[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] tail_mod_cons @@ -210,7 +211,7 @@ let[@tail_mod_cons] rec effects f = function [%%expect{| (letrec (effects - (function f + (function {nlocal = 0} f param[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] tail_mod_cons @@ -233,7 +234,7 @@ let[@tail_mod_cons] rec effects f = function (seq (apply effects_dps block 1 f (field 1 param)) block)))) 0)) effects_dps - (function dst offset[int] f + (function {nlocal = 0} dst offset[int] f param[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] tail_mod_cons @@ -276,7 +277,7 @@ let[@tail_mod_cons] rec map_stutter f xs = [%%expect{| (letrec (map_stutter - (function f + (function {nlocal = 0} f xs[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] tail_mod_cons @@ -297,7 +298,7 @@ let[@tail_mod_cons] rec map_stutter f xs = (seq (apply map_stutter_dps block 1 f (field 1 xs)) block)) 0))) map_stutter_dps - (function dst offset[int] f + (function {nlocal = 0} dst offset[int] f xs[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] tail_mod_cons @@ -346,7 +347,7 @@ let[@tail_mod_cons] rec smap_stutter f xs n = type 'a stream = { hd : 'a; tl : unit -> 'a stream; } (letrec (smap_stutter - (function f xs[(consts ()) (non_consts ([0: *, *]))] n[int] + (function {nlocal = 0} f xs[(consts ()) (non_consts ([0: *, *]))] n[int] tail_mod_cons [(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] @@ -369,8 +370,8 @@ type 'a stream = { hd : 'a; tl : unit -> 'a stream; } (- n 1)) block))))) smap_stutter_dps - (function dst offset[int] f xs[(consts ()) (non_consts ([0: *, *]))] - n[int] tail_mod_cons + (function {nlocal = 0} dst offset[int] f + xs[(consts ()) (non_consts ([0: *, *]))] n[int] tail_mod_cons [(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] (if (== n 0) (setfield_ptr(heap-init)_computed dst offset 0) diff --git a/testsuite/tests/translprim/array_spec.compilers.flat.reference b/testsuite/tests/translprim/array_spec.compilers.flat.reference index acc4d00c943d..37577d7925e8 100644 --- a/testsuite/tests/translprim/array_spec.compilers.flat.reference +++ b/testsuite/tests/translprim/array_spec.compilers.flat.reference @@ -5,59 +5,74 @@ addr_a =[addrarray] (makearray[addr] "a" "b" "c")) (seq (array.length[int] int_a) (array.length[float] float_a) (array.length[addr] addr_a) - (function a[genarray] : int (array.length[gen] a)) + (function {nlocal = 0} a[genarray] : int (array.length[gen] a)) (array.get[int] int_a 0) (array.get[float] float_a 0) - (array.get[addr] addr_a 0) (function a[genarray] (array.get[gen] a 0)) + (array.get[addr] addr_a 0) + (function {nlocal = 0} a[genarray] (array.get[gen] a 0)) (array.unsafe_get[int] int_a 0) (array.unsafe_get[float] float_a 0) (array.unsafe_get[addr] addr_a 0) - (function a[genarray] (array.unsafe_get[gen] a 0)) + (function {nlocal = 0} a[genarray] (array.unsafe_get[gen] a 0)) (array.set[int] int_a 0 1) (array.set[float] float_a 0 1.) (array.set[addr] addr_a 0 "a") - (function a[genarray] x : int (array.set[gen] a 0 x)) + (function {nlocal = 2} a[genarray] x : int (array.set[gen] a 0 x)) (array.unsafe_set[int] int_a 0 1) (array.unsafe_set[float] float_a 0 1.) (array.unsafe_set[addr] addr_a 0 "a") - (function a[genarray] x : int (array.unsafe_set[gen] a 0 x)) + (function {nlocal = 2} a[genarray] x : int + (array.unsafe_set[gen] a 0 x)) (let - (eta_gen_len = (function prim stub (array.length[gen] prim)) + (eta_gen_len = + (function {nlocal = 0} prim stub (array.length[gen] prim)) eta_gen_safe_get = - (function prim prim stub (array.get[gen] prim prim)) + (function {nlocal = 0} prim prim stub (array.get[gen] prim prim)) eta_gen_unsafe_get = - (function prim prim stub (array.unsafe_get[gen] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[gen] prim prim)) eta_gen_safe_set = - (function prim prim prim stub (array.set[gen] prim prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[gen] prim prim prim)) eta_gen_unsafe_set = - (function prim prim prim stub + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[gen] prim prim prim)) - eta_int_len = (function prim stub (array.length[int] prim)) + eta_int_len = + (function {nlocal = 0} prim stub (array.length[int] prim)) eta_int_safe_get = - (function prim prim stub (array.get[int] prim prim)) + (function {nlocal = 0} prim prim stub (array.get[int] prim prim)) eta_int_unsafe_get = - (function prim prim stub (array.unsafe_get[int] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[int] prim prim)) eta_int_safe_set = - (function prim prim prim stub (array.set[int] prim prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[int] prim prim prim)) eta_int_unsafe_set = - (function prim prim prim stub + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[int] prim prim prim)) - eta_float_len = (function prim stub (array.length[float] prim)) + eta_float_len = + (function {nlocal = 0} prim stub (array.length[float] prim)) eta_float_safe_get = - (function prim prim stub (array.get[float] prim prim)) + (function {nlocal = 0} prim prim stub + (array.get[float] prim prim)) eta_float_unsafe_get = - (function prim prim stub (array.unsafe_get[float] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[float] prim prim)) eta_float_safe_set = - (function prim prim prim stub (array.set[float] prim prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[float] prim prim prim)) eta_float_unsafe_set = - (function prim prim prim stub + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[float] prim prim prim)) - eta_addr_len = (function prim stub (array.length[addr] prim)) + eta_addr_len = + (function {nlocal = 0} prim stub (array.length[addr] prim)) eta_addr_safe_get = - (function prim prim stub (array.get[addr] prim prim)) + (function {nlocal = 0} prim prim stub (array.get[addr] prim prim)) eta_addr_unsafe_get = - (function prim prim stub (array.unsafe_get[addr] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[addr] prim prim)) eta_addr_safe_set = - (function prim prim prim stub (array.set[addr] prim prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[addr] prim prim prim)) eta_addr_unsafe_set = - (function prim prim prim stub + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[addr] prim prim prim))) (makeblock 0 int_a float_a addr_a eta_gen_len eta_gen_safe_get eta_gen_unsafe_get eta_gen_safe_set eta_gen_unsafe_set eta_int_len diff --git a/testsuite/tests/translprim/comparison_table.compilers.reference b/testsuite/tests/translprim/comparison_table.compilers.reference index 68235a1c71e1..8351a6a6ea35 100644 --- a/testsuite/tests/translprim/comparison_table.compilers.reference +++ b/testsuite/tests/translprim/comparison_table.compilers.reference @@ -1,148 +1,208 @@ (setglobal Comparison_table! (let - (gen_cmp = (function x y : int (caml_compare x y)) - int_cmp = (function x[int] y[int] : int (compare_ints x y)) - bool_cmp = (function x[int] y[int] : int (compare_ints x y)) - intlike_cmp = (function x[int] y[int] : int (compare_ints x y)) - float_cmp = (function x[float] y[float] : int (compare_floats x y)) - string_cmp = (function x y : int (caml_string_compare x y)) - int32_cmp = (function x[int32] y[int32] : int (compare_bints int32 x y)) - int64_cmp = (function x[int64] y[int64] : int (compare_bints int64 x y)) + (gen_cmp = (function {nlocal = 0} x y : int (caml_compare x y)) + int_cmp = (function {nlocal = 0} x[int] y[int] : int (compare_ints x y)) + bool_cmp = + (function {nlocal = 0} x[int] y[int] : int (compare_ints x y)) + intlike_cmp = + (function {nlocal = 0} x[int] y[int] : int (compare_ints x y)) + float_cmp = + (function {nlocal = 0} x[float] y[float] : int (compare_floats x y)) + string_cmp = (function {nlocal = 0} x y : int (caml_string_compare x y)) + int32_cmp = + (function {nlocal = 0} x[int32] y[int32] : int + (compare_bints int32 x y)) + int64_cmp = + (function {nlocal = 0} x[int64] y[int64] : int + (compare_bints int64 x y)) nativeint_cmp = - (function x[nativeint] y[nativeint] : int + (function {nlocal = 0} x[nativeint] y[nativeint] : int (compare_bints nativeint x y)) - gen_eq = (function x y : int (caml_equal x y)) - int_eq = (function x[int] y[int] : int (== x y)) - bool_eq = (function x[int] y[int] : int (== x y)) - intlike_eq = (function x[int] y[int] : int (== x y)) - float_eq = (function x[float] y[float] : int (==. x y)) - string_eq = (function x y : int (caml_string_equal x y)) - int32_eq = (function x[int32] y[int32] : int (Int32.== x y)) - int64_eq = (function x[int64] y[int64] : int (Int64.== x y)) + gen_eq = (function {nlocal = 0} x y : int (caml_equal x y)) + int_eq = (function {nlocal = 0} x[int] y[int] : int (== x y)) + bool_eq = (function {nlocal = 0} x[int] y[int] : int (== x y)) + intlike_eq = (function {nlocal = 0} x[int] y[int] : int (== x y)) + float_eq = (function {nlocal = 0} x[float] y[float] : int (==. x y)) + string_eq = (function {nlocal = 0} x y : int (caml_string_equal x y)) + int32_eq = + (function {nlocal = 0} x[int32] y[int32] : int (Int32.== x y)) + int64_eq = + (function {nlocal = 0} x[int64] y[int64] : int (Int64.== x y)) nativeint_eq = - (function x[nativeint] y[nativeint] : int (Nativeint.== x y)) - gen_ne = (function x y : int (caml_notequal x y)) - int_ne = (function x[int] y[int] : int (!= x y)) - bool_ne = (function x[int] y[int] : int (!= x y)) - intlike_ne = (function x[int] y[int] : int (!= x y)) - float_ne = (function x[float] y[float] : int (!=. x y)) - string_ne = (function x y : int (caml_string_notequal x y)) - int32_ne = (function x[int32] y[int32] : int (Int32.!= x y)) - int64_ne = (function x[int64] y[int64] : int (Int64.!= x y)) + (function {nlocal = 0} x[nativeint] y[nativeint] : int + (Nativeint.== x y)) + gen_ne = (function {nlocal = 0} x y : int (caml_notequal x y)) + int_ne = (function {nlocal = 0} x[int] y[int] : int (!= x y)) + bool_ne = (function {nlocal = 0} x[int] y[int] : int (!= x y)) + intlike_ne = (function {nlocal = 0} x[int] y[int] : int (!= x y)) + float_ne = (function {nlocal = 0} x[float] y[float] : int (!=. x y)) + string_ne = (function {nlocal = 0} x y : int (caml_string_notequal x y)) + int32_ne = + (function {nlocal = 0} x[int32] y[int32] : int (Int32.!= x y)) + int64_ne = + (function {nlocal = 0} x[int64] y[int64] : int (Int64.!= x y)) nativeint_ne = - (function x[nativeint] y[nativeint] : int (Nativeint.!= x y)) - gen_lt = (function x y : int (caml_lessthan x y)) - int_lt = (function x[int] y[int] : int (< x y)) - bool_lt = (function x[int] y[int] : int (< x y)) - intlike_lt = (function x[int] y[int] : int (< x y)) - float_lt = (function x[float] y[float] : int (<. x y)) - string_lt = (function x y : int (caml_string_lessthan x y)) - int32_lt = (function x[int32] y[int32] : int (Int32.< x y)) - int64_lt = (function x[int64] y[int64] : int (Int64.< x y)) + (function {nlocal = 0} x[nativeint] y[nativeint] : int + (Nativeint.!= x y)) + gen_lt = (function {nlocal = 0} x y : int (caml_lessthan x y)) + int_lt = (function {nlocal = 0} x[int] y[int] : int (< x y)) + bool_lt = (function {nlocal = 0} x[int] y[int] : int (< x y)) + intlike_lt = (function {nlocal = 0} x[int] y[int] : int (< x y)) + float_lt = (function {nlocal = 0} x[float] y[float] : int (<. x y)) + string_lt = (function {nlocal = 0} x y : int (caml_string_lessthan x y)) + int32_lt = (function {nlocal = 0} x[int32] y[int32] : int (Int32.< x y)) + int64_lt = (function {nlocal = 0} x[int64] y[int64] : int (Int64.< x y)) nativeint_lt = - (function x[nativeint] y[nativeint] : int (Nativeint.< x y)) - gen_gt = (function x y : int (caml_greaterthan x y)) - int_gt = (function x[int] y[int] : int (> x y)) - bool_gt = (function x[int] y[int] : int (> x y)) - intlike_gt = (function x[int] y[int] : int (> x y)) - float_gt = (function x[float] y[float] : int (>. x y)) - string_gt = (function x y : int (caml_string_greaterthan x y)) - int32_gt = (function x[int32] y[int32] : int (Int32.> x y)) - int64_gt = (function x[int64] y[int64] : int (Int64.> x y)) + (function {nlocal = 0} x[nativeint] y[nativeint] : int + (Nativeint.< x y)) + gen_gt = (function {nlocal = 0} x y : int (caml_greaterthan x y)) + int_gt = (function {nlocal = 0} x[int] y[int] : int (> x y)) + bool_gt = (function {nlocal = 0} x[int] y[int] : int (> x y)) + intlike_gt = (function {nlocal = 0} x[int] y[int] : int (> x y)) + float_gt = (function {nlocal = 0} x[float] y[float] : int (>. x y)) + string_gt = + (function {nlocal = 0} x y : int (caml_string_greaterthan x y)) + int32_gt = (function {nlocal = 0} x[int32] y[int32] : int (Int32.> x y)) + int64_gt = (function {nlocal = 0} x[int64] y[int64] : int (Int64.> x y)) nativeint_gt = - (function x[nativeint] y[nativeint] : int (Nativeint.> x y)) - gen_le = (function x y : int (caml_lessequal x y)) - int_le = (function x[int] y[int] : int (<= x y)) - bool_le = (function x[int] y[int] : int (<= x y)) - intlike_le = (function x[int] y[int] : int (<= x y)) - float_le = (function x[float] y[float] : int (<=. x y)) - string_le = (function x y : int (caml_string_lessequal x y)) - int32_le = (function x[int32] y[int32] : int (Int32.<= x y)) - int64_le = (function x[int64] y[int64] : int (Int64.<= x y)) + (function {nlocal = 0} x[nativeint] y[nativeint] : int + (Nativeint.> x y)) + gen_le = (function {nlocal = 0} x y : int (caml_lessequal x y)) + int_le = (function {nlocal = 0} x[int] y[int] : int (<= x y)) + bool_le = (function {nlocal = 0} x[int] y[int] : int (<= x y)) + intlike_le = (function {nlocal = 0} x[int] y[int] : int (<= x y)) + float_le = (function {nlocal = 0} x[float] y[float] : int (<=. x y)) + string_le = + (function {nlocal = 0} x y : int (caml_string_lessequal x y)) + int32_le = + (function {nlocal = 0} x[int32] y[int32] : int (Int32.<= x y)) + int64_le = + (function {nlocal = 0} x[int64] y[int64] : int (Int64.<= x y)) nativeint_le = - (function x[nativeint] y[nativeint] : int (Nativeint.<= x y)) - gen_ge = (function x y : int (caml_greaterequal x y)) - int_ge = (function x[int] y[int] : int (>= x y)) - bool_ge = (function x[int] y[int] : int (>= x y)) - intlike_ge = (function x[int] y[int] : int (>= x y)) - float_ge = (function x[float] y[float] : int (>=. x y)) - string_ge = (function x y : int (caml_string_greaterequal x y)) - int32_ge = (function x[int32] y[int32] : int (Int32.>= x y)) - int64_ge = (function x[int64] y[int64] : int (Int64.>= x y)) + (function {nlocal = 0} x[nativeint] y[nativeint] : int + (Nativeint.<= x y)) + gen_ge = (function {nlocal = 0} x y : int (caml_greaterequal x y)) + int_ge = (function {nlocal = 0} x[int] y[int] : int (>= x y)) + bool_ge = (function {nlocal = 0} x[int] y[int] : int (>= x y)) + intlike_ge = (function {nlocal = 0} x[int] y[int] : int (>= x y)) + float_ge = (function {nlocal = 0} x[float] y[float] : int (>=. x y)) + string_ge = + (function {nlocal = 0} x y : int (caml_string_greaterequal x y)) + int32_ge = + (function {nlocal = 0} x[int32] y[int32] : int (Int32.>= x y)) + int64_ge = + (function {nlocal = 0} x[int64] y[int64] : int (Int64.>= x y)) nativeint_ge = - (function x[nativeint] y[nativeint] : int (Nativeint.>= x y)) - eta_gen_cmp = (function prim prim stub (caml_compare prim prim)) - eta_int_cmp = (function prim prim stub (compare_ints prim prim)) - eta_bool_cmp = (function prim prim stub (compare_ints prim prim)) - eta_intlike_cmp = (function prim prim stub (compare_ints prim prim)) - eta_float_cmp = (function prim prim stub (compare_floats prim prim)) + (function {nlocal = 0} x[nativeint] y[nativeint] : int + (Nativeint.>= x y)) + eta_gen_cmp = + (function {nlocal = 0} prim prim stub (caml_compare prim prim)) + eta_int_cmp = + (function {nlocal = 0} prim prim stub (compare_ints prim prim)) + eta_bool_cmp = + (function {nlocal = 0} prim prim stub (compare_ints prim prim)) + eta_intlike_cmp = + (function {nlocal = 0} prim prim stub (compare_ints prim prim)) + eta_float_cmp = + (function {nlocal = 0} prim prim stub (compare_floats prim prim)) eta_string_cmp = - (function prim prim stub (caml_string_compare prim prim)) + (function {nlocal = 0} prim prim stub (caml_string_compare prim prim)) eta_int32_cmp = - (function prim prim stub (compare_bints int32 prim prim)) + (function {nlocal = 0} prim prim stub (compare_bints int32 prim prim)) eta_int64_cmp = - (function prim prim stub (compare_bints int64 prim prim)) + (function {nlocal = 0} prim prim stub (compare_bints int64 prim prim)) eta_nativeint_cmp = - (function prim prim stub (compare_bints nativeint prim prim)) - eta_gen_eq = (function prim prim stub (caml_equal prim prim)) - eta_int_eq = (function prim prim stub (== prim prim)) - eta_bool_eq = (function prim prim stub (== prim prim)) - eta_intlike_eq = (function prim prim stub (== prim prim)) - eta_float_eq = (function prim prim stub (==. prim prim)) - eta_string_eq = (function prim prim stub (caml_string_equal prim prim)) - eta_int32_eq = (function prim prim stub (Int32.== prim prim)) - eta_int64_eq = (function prim prim stub (Int64.== prim prim)) - eta_nativeint_eq = (function prim prim stub (Nativeint.== prim prim)) - eta_gen_ne = (function prim prim stub (caml_notequal prim prim)) - eta_int_ne = (function prim prim stub (!= prim prim)) - eta_bool_ne = (function prim prim stub (!= prim prim)) - eta_intlike_ne = (function prim prim stub (!= prim prim)) - eta_float_ne = (function prim prim stub (!=. prim prim)) + (function {nlocal = 0} prim prim stub + (compare_bints nativeint prim prim)) + eta_gen_eq = + (function {nlocal = 0} prim prim stub (caml_equal prim prim)) + eta_int_eq = (function {nlocal = 0} prim prim stub (== prim prim)) + eta_bool_eq = (function {nlocal = 0} prim prim stub (== prim prim)) + eta_intlike_eq = (function {nlocal = 0} prim prim stub (== prim prim)) + eta_float_eq = (function {nlocal = 0} prim prim stub (==. prim prim)) + eta_string_eq = + (function {nlocal = 0} prim prim stub (caml_string_equal prim prim)) + eta_int32_eq = + (function {nlocal = 0} prim prim stub (Int32.== prim prim)) + eta_int64_eq = + (function {nlocal = 0} prim prim stub (Int64.== prim prim)) + eta_nativeint_eq = + (function {nlocal = 0} prim prim stub (Nativeint.== prim prim)) + eta_gen_ne = + (function {nlocal = 0} prim prim stub (caml_notequal prim prim)) + eta_int_ne = (function {nlocal = 0} prim prim stub (!= prim prim)) + eta_bool_ne = (function {nlocal = 0} prim prim stub (!= prim prim)) + eta_intlike_ne = (function {nlocal = 0} prim prim stub (!= prim prim)) + eta_float_ne = (function {nlocal = 0} prim prim stub (!=. prim prim)) eta_string_ne = - (function prim prim stub (caml_string_notequal prim prim)) - eta_int32_ne = (function prim prim stub (Int32.!= prim prim)) - eta_int64_ne = (function prim prim stub (Int64.!= prim prim)) - eta_nativeint_ne = (function prim prim stub (Nativeint.!= prim prim)) - eta_gen_lt = (function prim prim stub (caml_lessthan prim prim)) - eta_int_lt = (function prim prim stub (< prim prim)) - eta_bool_lt = (function prim prim stub (< prim prim)) - eta_intlike_lt = (function prim prim stub (< prim prim)) - eta_float_lt = (function prim prim stub (<. prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_notequal prim prim)) + eta_int32_ne = + (function {nlocal = 0} prim prim stub (Int32.!= prim prim)) + eta_int64_ne = + (function {nlocal = 0} prim prim stub (Int64.!= prim prim)) + eta_nativeint_ne = + (function {nlocal = 0} prim prim stub (Nativeint.!= prim prim)) + eta_gen_lt = + (function {nlocal = 0} prim prim stub (caml_lessthan prim prim)) + eta_int_lt = (function {nlocal = 0} prim prim stub (< prim prim)) + eta_bool_lt = (function {nlocal = 0} prim prim stub (< prim prim)) + eta_intlike_lt = (function {nlocal = 0} prim prim stub (< prim prim)) + eta_float_lt = (function {nlocal = 0} prim prim stub (<. prim prim)) eta_string_lt = - (function prim prim stub (caml_string_lessthan prim prim)) - eta_int32_lt = (function prim prim stub (Int32.< prim prim)) - eta_int64_lt = (function prim prim stub (Int64.< prim prim)) - eta_nativeint_lt = (function prim prim stub (Nativeint.< prim prim)) - eta_gen_gt = (function prim prim stub (caml_greaterthan prim prim)) - eta_int_gt = (function prim prim stub (> prim prim)) - eta_bool_gt = (function prim prim stub (> prim prim)) - eta_intlike_gt = (function prim prim stub (> prim prim)) - eta_float_gt = (function prim prim stub (>. prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_lessthan prim prim)) + eta_int32_lt = + (function {nlocal = 0} prim prim stub (Int32.< prim prim)) + eta_int64_lt = + (function {nlocal = 0} prim prim stub (Int64.< prim prim)) + eta_nativeint_lt = + (function {nlocal = 0} prim prim stub (Nativeint.< prim prim)) + eta_gen_gt = + (function {nlocal = 0} prim prim stub (caml_greaterthan prim prim)) + eta_int_gt = (function {nlocal = 0} prim prim stub (> prim prim)) + eta_bool_gt = (function {nlocal = 0} prim prim stub (> prim prim)) + eta_intlike_gt = (function {nlocal = 0} prim prim stub (> prim prim)) + eta_float_gt = (function {nlocal = 0} prim prim stub (>. prim prim)) eta_string_gt = - (function prim prim stub (caml_string_greaterthan prim prim)) - eta_int32_gt = (function prim prim stub (Int32.> prim prim)) - eta_int64_gt = (function prim prim stub (Int64.> prim prim)) - eta_nativeint_gt = (function prim prim stub (Nativeint.> prim prim)) - eta_gen_le = (function prim prim stub (caml_lessequal prim prim)) - eta_int_le = (function prim prim stub (<= prim prim)) - eta_bool_le = (function prim prim stub (<= prim prim)) - eta_intlike_le = (function prim prim stub (<= prim prim)) - eta_float_le = (function prim prim stub (<=. prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_greaterthan prim prim)) + eta_int32_gt = + (function {nlocal = 0} prim prim stub (Int32.> prim prim)) + eta_int64_gt = + (function {nlocal = 0} prim prim stub (Int64.> prim prim)) + eta_nativeint_gt = + (function {nlocal = 0} prim prim stub (Nativeint.> prim prim)) + eta_gen_le = + (function {nlocal = 0} prim prim stub (caml_lessequal prim prim)) + eta_int_le = (function {nlocal = 0} prim prim stub (<= prim prim)) + eta_bool_le = (function {nlocal = 0} prim prim stub (<= prim prim)) + eta_intlike_le = (function {nlocal = 0} prim prim stub (<= prim prim)) + eta_float_le = (function {nlocal = 0} prim prim stub (<=. prim prim)) eta_string_le = - (function prim prim stub (caml_string_lessequal prim prim)) - eta_int32_le = (function prim prim stub (Int32.<= prim prim)) - eta_int64_le = (function prim prim stub (Int64.<= prim prim)) - eta_nativeint_le = (function prim prim stub (Nativeint.<= prim prim)) - eta_gen_ge = (function prim prim stub (caml_greaterequal prim prim)) - eta_int_ge = (function prim prim stub (>= prim prim)) - eta_bool_ge = (function prim prim stub (>= prim prim)) - eta_intlike_ge = (function prim prim stub (>= prim prim)) - eta_float_ge = (function prim prim stub (>=. prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_lessequal prim prim)) + eta_int32_le = + (function {nlocal = 0} prim prim stub (Int32.<= prim prim)) + eta_int64_le = + (function {nlocal = 0} prim prim stub (Int64.<= prim prim)) + eta_nativeint_le = + (function {nlocal = 0} prim prim stub (Nativeint.<= prim prim)) + eta_gen_ge = + (function {nlocal = 0} prim prim stub (caml_greaterequal prim prim)) + eta_int_ge = (function {nlocal = 0} prim prim stub (>= prim prim)) + eta_bool_ge = (function {nlocal = 0} prim prim stub (>= prim prim)) + eta_intlike_ge = (function {nlocal = 0} prim prim stub (>= prim prim)) + eta_float_ge = (function {nlocal = 0} prim prim stub (>=. prim prim)) eta_string_ge = - (function prim prim stub (caml_string_greaterequal prim prim)) - eta_int32_ge = (function prim prim stub (Int32.>= prim prim)) - eta_int64_ge = (function prim prim stub (Int64.>= prim prim)) - eta_nativeint_ge = (function prim prim stub (Nativeint.>= prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_greaterequal prim prim)) + eta_int32_ge = + (function {nlocal = 0} prim prim stub (Int32.>= prim prim)) + eta_int64_ge = + (function {nlocal = 0} prim prim stub (Int64.>= prim prim)) + eta_nativeint_ge = + (function {nlocal = 0} prim prim stub (Nativeint.>= prim prim)) int_vec =[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] [0: [0: 1 1] [0: [0: 1 2] [0: [0: 2 1] 0]]] @@ -171,7 +231,7 @@ [(consts (0)) (non_consts ([0: *, *]))]]))] [0: [0: 1n 1n] [0: [0: 1n 2n] [0: [0: 2n 1n] 0]]] test_vec = - (function cmp eq ne lt gt le ge + (function {nlocal = 0} cmp eq ne lt gt le ge vec[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] [(consts ()) @@ -179,6 +239,7 @@ [(consts (0)) (non_consts ([0: *, *]))]]))](let (uncurry = (function + {nlocal = 0} f param [(consts ()) @@ -191,6 +252,7 @@ param))) map = (function + {nlocal = 2} f l[(consts (0)) (non_consts ( @@ -249,6 +311,7 @@ (apply map (function + {nlocal = 2} gen spec [(consts ()) (non_consts ( @@ -375,7 +438,7 @@ nativeint_gt nativeint_le nativeint_ge nativeint_vec) (let (eta_test_vec = - (function cmp eq ne lt gt le ge + (function {nlocal = 0} cmp eq ne lt gt le ge vec[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] [(consts ()) @@ -383,10 +446,11 @@ [(consts (0)) (non_consts ([0: *, *]))]]))] (let (uncurry = - (function f param[(consts ()) (non_consts ([0: *, *]))] + (function {nlocal = 0} f + param[(consts ()) (non_consts ([0: *, *]))] (apply f (field 0 param) (field 1 param))) map = - (function f + (function {nlocal = 2} f l[(consts (0)) (non_consts ([0: *, [(consts (0)) (non_consts ([0: *, *]))]]))] @@ -413,7 +477,7 @@ [(consts (0)) (non_consts ([0: *, *]))]]))]) (apply map eta_gen_cmp vec) (apply map cmp vec)) (apply map - (function gen spec + (function {nlocal = 2} gen spec [(consts ()) (non_consts ([0: [(consts (0)) (non_consts ([0: *, *]))], diff --git a/testsuite/tests/translprim/module_coercion.compilers.flat.reference b/testsuite/tests/translprim/module_coercion.compilers.flat.reference index 34715159329a..09f893bb0a22 100644 --- a/testsuite/tests/translprim/module_coercion.compilers.flat.reference +++ b/testsuite/tests/translprim/module_coercion.compilers.flat.reference @@ -5,86 +5,114 @@ (makeblock 0))) (makeblock 0 M (module-defn(M_int) Module_coercion module_coercion.ml(46):1552-1591 - (makeblock 0 (function prim stub (array.length[int] prim)) - (function prim prim stub (array.get[int] prim prim)) - (function prim prim stub (array.unsafe_get[int] prim prim)) - (function prim prim prim stub (array.set[int] prim prim prim)) - (function prim prim prim stub + (makeblock 0 + (function {nlocal = 0} prim stub (array.length[int] prim)) + (function {nlocal = 0} prim prim stub (array.get[int] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[int] prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[int] prim prim prim)) + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[int] prim prim prim)) - (function prim prim stub (compare_ints prim prim)) - (function prim prim stub (== prim prim)) - (function prim prim stub (!= prim prim)) - (function prim prim stub (< prim prim)) - (function prim prim stub (> prim prim)) - (function prim prim stub (<= prim prim)) - (function prim prim stub (>= prim prim)))) + (function {nlocal = 0} prim prim stub (compare_ints prim prim)) + (function {nlocal = 0} prim prim stub (== prim prim)) + (function {nlocal = 0} prim prim stub (!= prim prim)) + (function {nlocal = 0} prim prim stub (< prim prim)) + (function {nlocal = 0} prim prim stub (> prim prim)) + (function {nlocal = 0} prim prim stub (<= prim prim)) + (function {nlocal = 0} prim prim stub (>= prim prim)))) (module-defn(M_float) Module_coercion module_coercion.ml(47):1594-1637 - (makeblock 0 (function prim stub (array.length[float] prim)) - (function prim prim stub (array.get[float] prim prim)) - (function prim prim stub (array.unsafe_get[float] prim prim)) - (function prim prim prim stub (array.set[float] prim prim prim)) - (function prim prim prim stub + (makeblock 0 + (function {nlocal = 0} prim stub (array.length[float] prim)) + (function {nlocal = 0} prim prim stub (array.get[float] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[float] prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[float] prim prim prim)) + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[float] prim prim prim)) - (function prim prim stub (compare_floats prim prim)) - (function prim prim stub (==. prim prim)) - (function prim prim stub (!=. prim prim)) - (function prim prim stub (<. prim prim)) - (function prim prim stub (>. prim prim)) - (function prim prim stub (<=. prim prim)) - (function prim prim stub (>=. prim prim)))) + (function {nlocal = 0} prim prim stub (compare_floats prim prim)) + (function {nlocal = 0} prim prim stub (==. prim prim)) + (function {nlocal = 0} prim prim stub (!=. prim prim)) + (function {nlocal = 0} prim prim stub (<. prim prim)) + (function {nlocal = 0} prim prim stub (>. prim prim)) + (function {nlocal = 0} prim prim stub (<=. prim prim)) + (function {nlocal = 0} prim prim stub (>=. prim prim)))) (module-defn(M_string) Module_coercion module_coercion.ml(48):1640-1685 - (makeblock 0 (function prim stub (array.length[addr] prim)) - (function prim prim stub (array.get[addr] prim prim)) - (function prim prim stub (array.unsafe_get[addr] prim prim)) - (function prim prim prim stub (array.set[addr] prim prim prim)) - (function prim prim prim stub + (makeblock 0 + (function {nlocal = 0} prim stub (array.length[addr] prim)) + (function {nlocal = 0} prim prim stub (array.get[addr] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[addr] prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[addr] prim prim prim)) + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[addr] prim prim prim)) - (function prim prim stub (caml_string_compare prim prim)) - (function prim prim stub (caml_string_equal prim prim)) - (function prim prim stub (caml_string_notequal prim prim)) - (function prim prim stub (caml_string_lessthan prim prim)) - (function prim prim stub (caml_string_greaterthan prim prim)) - (function prim prim stub (caml_string_lessequal prim prim)) - (function prim prim stub (caml_string_greaterequal prim prim)))) + (function {nlocal = 0} prim prim stub + (caml_string_compare prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_equal prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_notequal prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_lessthan prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_greaterthan prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_lessequal prim prim)) + (function {nlocal = 0} prim prim stub + (caml_string_greaterequal prim prim)))) (module-defn(M_int32) Module_coercion module_coercion.ml(49):1688-1731 - (makeblock 0 (function prim stub (array.length[addr] prim)) - (function prim prim stub (array.get[addr] prim prim)) - (function prim prim stub (array.unsafe_get[addr] prim prim)) - (function prim prim prim stub (array.set[addr] prim prim prim)) - (function prim prim prim stub + (makeblock 0 + (function {nlocal = 0} prim stub (array.length[addr] prim)) + (function {nlocal = 0} prim prim stub (array.get[addr] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[addr] prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[addr] prim prim prim)) + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[addr] prim prim prim)) - (function prim prim stub (compare_bints int32 prim prim)) - (function prim prim stub (Int32.== prim prim)) - (function prim prim stub (Int32.!= prim prim)) - (function prim prim stub (Int32.< prim prim)) - (function prim prim stub (Int32.> prim prim)) - (function prim prim stub (Int32.<= prim prim)) - (function prim prim stub (Int32.>= prim prim)))) + (function {nlocal = 0} prim prim stub + (compare_bints int32 prim prim)) + (function {nlocal = 0} prim prim stub (Int32.== prim prim)) + (function {nlocal = 0} prim prim stub (Int32.!= prim prim)) + (function {nlocal = 0} prim prim stub (Int32.< prim prim)) + (function {nlocal = 0} prim prim stub (Int32.> prim prim)) + (function {nlocal = 0} prim prim stub (Int32.<= prim prim)) + (function {nlocal = 0} prim prim stub (Int32.>= prim prim)))) (module-defn(M_int64) Module_coercion module_coercion.ml(50):1734-1777 - (makeblock 0 (function prim stub (array.length[addr] prim)) - (function prim prim stub (array.get[addr] prim prim)) - (function prim prim stub (array.unsafe_get[addr] prim prim)) - (function prim prim prim stub (array.set[addr] prim prim prim)) - (function prim prim prim stub + (makeblock 0 + (function {nlocal = 0} prim stub (array.length[addr] prim)) + (function {nlocal = 0} prim prim stub (array.get[addr] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[addr] prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[addr] prim prim prim)) + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[addr] prim prim prim)) - (function prim prim stub (compare_bints int64 prim prim)) - (function prim prim stub (Int64.== prim prim)) - (function prim prim stub (Int64.!= prim prim)) - (function prim prim stub (Int64.< prim prim)) - (function prim prim stub (Int64.> prim prim)) - (function prim prim stub (Int64.<= prim prim)) - (function prim prim stub (Int64.>= prim prim)))) + (function {nlocal = 0} prim prim stub + (compare_bints int64 prim prim)) + (function {nlocal = 0} prim prim stub (Int64.== prim prim)) + (function {nlocal = 0} prim prim stub (Int64.!= prim prim)) + (function {nlocal = 0} prim prim stub (Int64.< prim prim)) + (function {nlocal = 0} prim prim stub (Int64.> prim prim)) + (function {nlocal = 0} prim prim stub (Int64.<= prim prim)) + (function {nlocal = 0} prim prim stub (Int64.>= prim prim)))) (module-defn(M_nativeint) Module_coercion module_coercion.ml(51):1780-1831 - (makeblock 0 (function prim stub (array.length[addr] prim)) - (function prim prim stub (array.get[addr] prim prim)) - (function prim prim stub (array.unsafe_get[addr] prim prim)) - (function prim prim prim stub (array.set[addr] prim prim prim)) - (function prim prim prim stub + (makeblock 0 + (function {nlocal = 0} prim stub (array.length[addr] prim)) + (function {nlocal = 0} prim prim stub (array.get[addr] prim prim)) + (function {nlocal = 0} prim prim stub + (array.unsafe_get[addr] prim prim)) + (function {nlocal = 0} prim prim prim stub + (array.set[addr] prim prim prim)) + (function {nlocal = 0} prim prim prim stub (array.unsafe_set[addr] prim prim prim)) - (function prim prim stub (compare_bints nativeint prim prim)) - (function prim prim stub (Nativeint.== prim prim)) - (function prim prim stub (Nativeint.!= prim prim)) - (function prim prim stub (Nativeint.< prim prim)) - (function prim prim stub (Nativeint.> prim prim)) - (function prim prim stub (Nativeint.<= prim prim)) - (function prim prim stub (Nativeint.>= prim prim))))))) + (function {nlocal = 0} prim prim stub + (compare_bints nativeint prim prim)) + (function {nlocal = 0} prim prim stub (Nativeint.== prim prim)) + (function {nlocal = 0} prim prim stub (Nativeint.!= prim prim)) + (function {nlocal = 0} prim prim stub (Nativeint.< prim prim)) + (function {nlocal = 0} prim prim stub (Nativeint.> prim prim)) + (function {nlocal = 0} prim prim stub (Nativeint.<= prim prim)) + (function {nlocal = 0} prim prim stub (Nativeint.>= prim prim))))))) diff --git a/testsuite/tests/translprim/ref_spec.compilers.reference b/testsuite/tests/translprim/ref_spec.compilers.reference index 311d4a4c3d4c..a794d40d4415 100644 --- a/testsuite/tests/translprim/ref_spec.compilers.reference +++ b/testsuite/tests/translprim/ref_spec.compilers.reference @@ -25,14 +25,22 @@ (setfield_ptr 1 gen_rec [0: "foo"]) (setfield_ptr 1 gen_rec 0) (setfield_ptr 1 flt_rec 1.) (setfloatfield 1 flt_rec' 1.) (let - (set_open_poly = (function r y : int (setfield_ptr 0 r y)) - set_open_poly = (function r y[int] : int (setfield_imm 0 r y)) - set_open_poly = (function r y[int] : int (setfield_imm 0 r y)) - set_open_poly = (function r y[int] : int (setfield_imm 0 r y)) - set_open_poly = (function r y : int (setfield_ptr 0 r y)) - set_open_poly = (function r y : int (setfield_ptr 0 r y)) - set_open_poly = (function r y : int (setfield_ptr 0 r y)) - set_open_poly = (function r y : int (setfield_ptr 0 r y))) + (set_open_poly = + (function {nlocal = 2} r y : int (setfield_ptr 0 r y)) + set_open_poly = + (function {nlocal = 2} r y[int] : int (setfield_imm 0 r y)) + set_open_poly = + (function {nlocal = 2} r y[int] : int (setfield_imm 0 r y)) + set_open_poly = + (function {nlocal = 2} r y[int] : int (setfield_imm 0 r y)) + set_open_poly = + (function {nlocal = 2} r y : int (setfield_ptr 0 r y)) + set_open_poly = + (function {nlocal = 2} r y : int (setfield_ptr 0 r y)) + set_open_poly = + (function {nlocal = 2} r y : int (setfield_ptr 0 r y)) + set_open_poly = + (function {nlocal = 0} r y : int (setfield_ptr 0 r y))) (makeblock 0 int_ref var_ref vargen_ref cst_ref gen_ref flt_ref int_rec var_rec vargen_rec cst_rec gen_rec flt_rec flt_rec' set_open_poly))))))) diff --git a/testsuite/tests/typing-local/crossing.ml b/testsuite/tests/typing-local/crossing.ml index 352dc723f420..c3c77a7429d6 100644 --- a/testsuite/tests/typing-local/crossing.ml +++ b/testsuite/tests/typing-local/crossing.ml @@ -343,4 +343,4 @@ module M : sig type t [@@immediate] end type t2 = { x : int; } [@@unboxed] val f : local_ M.t -> M.t = val f : local_ t2 -> t2 = -|}] +|}] diff --git a/testsuite/tests/typing-local/crossing_64.ml b/testsuite/tests/typing-local/crossing_64.ml new file mode 100644 index 000000000000..e38011d1db1e --- /dev/null +++ b/testsuite/tests/typing-local/crossing_64.ml @@ -0,0 +1,14 @@ +(* TEST + * arch64 + ** expect *) + +(* Mode crossing works on immediate64 types *) +module F (M : sig type t [@@immediate64] end) = struct + let f : local_ M.t -> _ = fun t -> t +end + +[%%expect{| +module F : + functor (M : sig type t [@@immediate64] end) -> + sig val f : local_ M.t -> M.t end +|}] diff --git a/testsuite/tests/typing-local/local.ml b/testsuite/tests/typing-local/local.ml index 7c1564db6a60..e2fe4653ce52 100644 --- a/testsuite/tests/typing-local/local.ml +++ b/testsuite/tests/typing-local/local.ml @@ -269,6 +269,8 @@ Line 1, characters 15-21: ^^^^^^ Error: This local value escapes its region Hint: Cannot return local value without an explicit "local_" annotation + Hint: This is a partial application + Adding 2 more arguments will make the value non-local |}] let apply3 x = f4 x x x [%%expect{| @@ -277,6 +279,8 @@ Line 1, characters 15-23: ^^^^^^^^ Error: This local value escapes its region Hint: Cannot return local value without an explicit "local_" annotation + Hint: This is a partial application + Adding 1 more argument will make the value non-local |}] let apply4 x = f4 x x x x @@ -313,6 +317,8 @@ Line 1, characters 15-18: ^^^ Error: This local value escapes its region Hint: Cannot return local value without an explicit "local_" annotation + Hint: This is a partial application + Adding 1 more argument will make the value non-local |}] let apply2 x = g x x [%%expect{| @@ -320,15 +326,59 @@ val apply2 : int -> local_ 'a -> int -> int = |}] let apply3 x = g x x x [%%expect{| -Line 1, characters 15-22: +Line 1, characters 15-20: 1 | let apply3 x = g x x x - ^^^^^^^ + ^^^^^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try wrapping the marked application in parentheses. +|}] +let apply3_wrapped x = (g x x) x +[%%expect{| +Line 1, characters 23-32: +1 | let apply3_wrapped x = (g x x) x + ^^^^^^^^^ Error: This local value escapes its region Hint: Cannot return local value without an explicit "local_" annotation + Hint: This is a partial application + Adding 1 more argument will make the value non-local |}] let apply4 x = g x x x x [%%expect{| -val apply4 : int -> int = +Line 1, characters 15-20: +1 | let apply4 x = g x x x x + ^^^^^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try wrapping the marked application in parentheses. +|}] +let apply4_wrapped x = (g x x) x x +[%%expect{| +val apply4_wrapped : int -> int = +|}] +let ill_typed () = g 1 2 3 4 5 +[%%expect{| +Line 1, characters 19-20: +1 | let ill_typed () = g 1 2 3 4 5 + ^ +Error: This function has type local_ 'a -> int -> (local_ 'b -> int -> int) + It is applied to too many arguments; maybe you forgot a `;'. +|}] + +(* + * Defaulting of modes in module type of (like mli-less files) + *) + +let f g = g (local_ (1, 2)) 1 2 3 [@nontail] +[%%expect{| +val f : (local_ int * int -> int -> int -> int -> 'a) -> 'a = +|}] +module type F = module type of struct + let f g = g (local_ (1, 2)) 1 2 3 [@nontail] +end +[%%expect{| +module type F = + sig val f : (local_ int * int -> int -> int -> int -> 'a) -> 'a end |}] (* @@ -370,7 +420,17 @@ Error: This local value escapes its region let app42 (f : a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) = f ~a:(local_ ref 1) 2 ~c:4 [%%expect{| -val app42 : +Line 2, characters 2-21: +2 | f ~a:(local_ ref 1) 2 ~c:4 + ^^^^^^^^^^^^^^^^^^^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try wrapping the marked application in parentheses. +|}] +let app42_wrapped (f : a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) = + (f ~a:(local_ ref 1)) 2 ~c:4 +[%%expect{| +val app42_wrapped : (a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) -> b:local_ int ref -> unit = |}] @@ -417,18 +477,40 @@ Line 1, characters 52-65: ^^^^^^^^^^^^^ Error: This local value escapes its region Hint: Cannot return local value without an explicit "local_" annotation + Hint: This is a partial application + Adding 1 more argument will make the value non-local |}] let app42' (f : a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) = f ~a:(ref 1) 2 ~c:4 [%%expect{| -val app42' : +Line 2, characters 2-14: +2 | f ~a:(ref 1) 2 ~c:4 + ^^^^^^^^^^^^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try wrapping the marked application in parentheses. +|}] +let app42'_wrapped (f : a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) = + (f ~a:(ref 1)) 2 ~c:4 +[%%expect{| +val app42'_wrapped : (a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) -> b:local_ int ref -> unit = |}] let app43' (f : a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) = f ~a:(ref 1) 2 [%%expect{| -val app43' : +Line 2, characters 2-14: +2 | f ~a:(ref 1) 2 + ^^^^^^^^^^^^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try wrapping the marked application in parentheses. +|}] +let app43'_wrapped (f : a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) = + (f ~a:(ref 1)) 2 +[%%expect{| +val app43'_wrapped : (a:local_ int ref -> (int -> b:local_ int ref -> c:int -> unit)) -> b:local_ int ref -> c:int -> unit = |}] @@ -474,7 +556,13 @@ let bug2 () = let res = bar ~a:"world" in res [%%expect{| -val bug2 : unit -> c:int -> unit = +Line 5, characters 19-33: +5 | let bar = local_ foo ~b:"hello" in + ^^^^^^^^^^^^^^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try splitting the application in two. The arguments that come + after a in the function's type should be applied separately. |}] let bug3 () = let foo : a:local_ string -> (b:local_ string -> (c:int -> unit)) = @@ -489,6 +577,52 @@ Line 3, characters 63-64: ^ Error: The value a is local, so cannot be used inside a closure that might escape |}] +let overapp ~(local_ a) ~b = (); fun ~c ~d -> () + +let () = overapp ~a:1 ~b:2 ~c:3 ~d:4 +[%%expect{| +val overapp : a:local_ 'a -> b:'b -> (c:'c -> d:'d -> unit) = +Line 3, characters 9-26: +3 | let () = overapp ~a:1 ~b:2 ~c:3 ~d:4 + ^^^^^^^^^^^^^^^^^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try wrapping the marked application in parentheses. +|}] + +let () = overapp ~b:2 ~a:1 ~c:3 ~d:4 +[%%expect{| +Line 1, characters 20-21: +1 | let () = overapp ~b:2 ~a:1 ~c:3 ~d:4 + ^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try splitting the application in two. The arguments that come + after this one in the function's type should be applied separately. +|}] + +let () = overapp ~c:1 ~b:2 +[%%expect{| +Line 1, characters 25-26: +1 | let () = overapp ~c:1 ~b:2 + ^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try splitting the application in two. The arguments that come + after this one in the function's type should be applied separately. +|}] + +let () = overapp ~d:1 ~a:2 +[%%expect{| +Line 1, characters 9-26: +1 | let () = overapp ~d:1 ~a:2 + ^^^^^^^^^^^^^^^^^ +Error: This application is complete, but surplus arguments were provided afterwards. + When passing or calling a local value, extra arguments are passed in a separate application. + Hint: Try splitting the application in two. The arguments that come + after b in the function's type should be applied separately. +|}] + (* Regression test for bug with mishandled regional function modes *) let bug4 : local_ (string -> foo:string -> unit) -> (string -> unit) = @@ -498,6 +632,8 @@ Line 2, characters 11-25: 2 | fun f -> f ~foo:"hello" ^^^^^^^^^^^^^^ Error: This value escapes its region + Hint: This is a partial application + Adding 1 more argument will make the value non-local |}] let bug4' () = @@ -510,6 +646,8 @@ Line 3, characters 25-31: ^^^^^^ Error: This local value escapes its region Hint: Cannot return local value without an explicit "local_" annotation + Hint: This is a partial application + Adding 1 more argument may make the value non-local |}] (* @@ -552,6 +690,8 @@ Line 1, characters 61-65: ^^^^ Error: This local value escapes its region Hint: Cannot return local value without an explicit "local_" annotation + Hint: This is a partial application + Adding 1 more argument will make the value non-local |}] (* Optional argument elimination eta-expands and therefore allocates *) @@ -673,9 +813,9 @@ val local_closure : unit -> unit = *) let toplevel_stack = local_ {contents=42} [%%expect{| -Line 1, characters 4-18: +Line 1, characters 21-41: 1 | let toplevel_stack = local_ {contents=42} - ^^^^^^^^^^^^^^ + ^^^^^^^^^^^^^^^^^^^^ Error: This value escapes its region |}] @@ -688,9 +828,9 @@ module M : sig end let _ = local_ {contents=42} [%%expect{| -Line 1, characters 4-5: +Line 1, characters 8-28: 1 | let _ = local_ {contents=42} - ^ + ^^^^^^^^^^^^^^^^^^^^ Error: This value escapes its region |}] @@ -1904,7 +2044,7 @@ val primloc : int32 -> int = |}] (* (&&) and (||) tail call on the right *) -let testbool1 f = let local_ r = ref 42 in (f r || false) && true +let testbool1 f = let local_ r = ref 42 in (f r || false) && true let testbool2 f = let local_ r = ref 42 in true && (false || f r) [%%expect{| @@ -2577,7 +2717,7 @@ Error: This value escapes its region (* on construction of array, we ensure elements are global *) -let f (local_ x : string) = +let f (local_ x : string) = [|x; "foo"|] [%%expect{| Line 2, characters 4-5: @@ -2586,21 +2726,46 @@ Line 2, characters 4-5: Error: This value escapes its region |}] -let f (x : string) = +let f (x : string) = [|x; "foo"|] [%%expect{| val f : string -> string array = -|}] +|}] -(* on pattern matching of array, - elements are strengthened to global +(* on pattern matching of array, + elements are strengthened to global even if array itself is local *) -let f (local_ a : string array) = +let f (local_ a : string array) = match a with | [| x; _ |] -> ref x | _ -> ref "foo" [%%expect{| val f : local_ string array -> string ref = -|}] \ No newline at end of file +|}] + +(* reported internal to Jane Street as TANDC-1742 *) + +module M = struct + let fold_until : + 'a list -> init:'accum -> + f:local_ ('accum -> 'a -> ('accum, 'final) Either.t) -> + finish:local_ ('accum -> 'final) -> + 'final = + fun _ -> assert false + + (* this led to a poor error message about a value that escapes its region, + but really it's just under-applied *) + let f () = fold_until [] ~init:0 ~f:(fun _ _ -> Right ()) +end + +[%%expect {| +Line 11, characters 13-59: +11 | let f () = fold_until [] ~init:0 ~f:(fun _ _ -> Right ()) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: This local value escapes its region + Hint: Cannot return local value without an explicit "local_" annotation + Hint: This is a partial application + Adding 1 more argument will make the value non-local +|}] diff --git a/testsuite/tests/typing-sigsubst/sigsubst.ml b/testsuite/tests/typing-sigsubst/sigsubst.ml index 5636e9abe258..c09643864ea0 100644 --- a/testsuite/tests/typing-sigsubst/sigsubst.ml +++ b/testsuite/tests/typing-sigsubst/sigsubst.ml @@ -24,11 +24,11 @@ end Line 3, characters 2-36: 3 | include Comparable with type t = t ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Error: Illegal shadowing of included type t/284 by t/289 +Error: Illegal shadowing of included type t/287 by t/292 Line 2, characters 2-19: - Type t/284 came from this include + Type t/287 came from this include Line 3, characters 2-23: - The value print has no valid type if t/284 is shadowed + The value print has no valid type if t/287 is shadowed |}] module type Sunderscore = sig diff --git a/testsuite/tests/warnings/marshall_for_w53.ml b/testsuite/tests/warnings/marshall_for_w53.ml new file mode 100644 index 000000000000..6c24e98c8a88 --- /dev/null +++ b/testsuite/tests/warnings/marshall_for_w53.ml @@ -0,0 +1,4 @@ +let w53_ast = + Pparse.parse_implementation ~tool_name:"w53_test" "w53.ml" + +let () = Pparse.write_ast Pparse.Structure "w53.marshalled.ml" w53_ast diff --git a/testsuite/tests/warnings/w53.compilers.reference b/testsuite/tests/warnings/w53.compilers.reference index 8559ab4abae2..597b581cee96 100644 --- a/testsuite/tests/warnings/w53.compilers.reference +++ b/testsuite/tests/warnings/w53.compilers.reference @@ -6,10 +6,6 @@ File "w53.ml", line 12, characters 4-5: 12 | let h x = x [@inline] (* rejected *) ^ Warning 32 [unused-value-declaration]: unused value h. -File "w53.ml", line 334, characters 2-33: -334 | let x : int64 = 42L [@@noalloc] (* rejected *) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context File "w53.ml", line 12, characters 14-20: 12 | let h x = x [@inline] (* rejected *) ^^^^^^ @@ -558,6 +554,10 @@ File "w53.ml", line 333, characters 19-26: 333 | type s1 = Foo1 [@noalloc] (* rejected *) ^^^^^^^ Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 334, characters 25-32: +334 | let x : int64 = 42L [@@noalloc] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context File "w53.ml", line 336, characters 24-31: 336 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) ^^^^^^^ @@ -590,3 +590,55 @@ File "w53.ml", line 352, characters 22-30: 352 | let x : int = 42 [@@untagged] (* rejected *) ^^^^^^^^ Warning 53 [misplaced-attribute]: the "untagged" attribute cannot appear in this context +File "w53.ml", line 359, characters 21-25: +359 | type 'a t1 = 'a [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 360, characters 19-23: +360 | type s1 = Foo1 [@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 361, characters 19-23: +361 | val x : int64 [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 363, characters 24-28: +363 | external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 363, characters 49-53: +363 | external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 365, characters 39-43: +365 | external z : int64 -> int64 = "x" [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 369, characters 21-25: +369 | type 'a t1 = 'a [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 370, characters 19-23: +370 | type s1 = Foo1 [@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 371, characters 25-29: +371 | let x : int64 = 42L [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 374, characters 24-28: +374 | external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 374, characters 49-53: +374 | external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 376, characters 39-43: +376 | external z : int64 -> int64 = "x" [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 385, characters 17-26: +385 | let f2 = fun [@immediate] (type a) (x : a) -> x (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "immediate" attribute cannot appear in this context diff --git a/testsuite/tests/warnings/w53.ml b/testsuite/tests/warnings/w53.ml index f19e03e19ffa..c49711ae073f 100644 --- a/testsuite/tests/warnings/w53.ml +++ b/testsuite/tests/warnings/w53.ml @@ -355,3 +355,32 @@ module TestUntaggedStruct = struct external z : int -> int = "x" "y" [@@untagged] (* accepted *) end +module type TestPollSig = sig + type 'a t1 = 'a [@@poll error] (* rejected *) + type s1 = Foo1 [@poll error] (* rejected *) + val x : int64 [@@poll error] (* rejected *) + + external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + "x" + external z : int64 -> int64 = "x" [@@poll error] (* rejected *) +end + +module TestPollStruct = struct + type 'a t1 = 'a [@@poll error] (* rejected *) + type s1 = Foo1 [@poll error] (* rejected *) + let x : int64 = 42L [@@poll error] (* rejected *) + let [@poll error] f x = x (* accepted *) + + external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + "x" + external z : int64 -> int64 = "x" [@@poll error] (* rejected *) +end + +(* Attributes in attributes shouldn't be tracked for w53 *) +[@@@foo [@@@deprecated]] + +module TestNewtypeAttr = struct + (* Check for handling of attributes on Pexp_newtype *) + let f1 = fun [@inline] (type a) (x : a) -> x (* accepted *) + let f2 = fun [@immediate] (type a) (x : a) -> x (* rejected *) +end diff --git a/testsuite/tests/warnings/w53_marshalled.compilers.reference b/testsuite/tests/warnings/w53_marshalled.compilers.reference new file mode 100644 index 000000000000..0d9d5a756ce4 --- /dev/null +++ b/testsuite/tests/warnings/w53_marshalled.compilers.reference @@ -0,0 +1,640 @@ +File "w53.ml", line 64, characters 37-46: +64 | let test_ppwarning = 42 [@@ppwarning "warning"] + ^^^^^^^^^ +Warning 22 [preprocessor]: warning +File "w53.ml", line 12, characters 14-20: +12 | let h x = x [@inline] (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "inline" attribute cannot appear in this context +File "w53.ml", line 13, characters 14-26: +13 | let h x = x [@ocaml.inline] (* rejected *) + ^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "ocaml.inline" attribute cannot appear in this context +File "w53.ml", line 15, characters 14-21: +15 | let i x = x [@inlined] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "inlined" attribute cannot appear in this context +File "w53.ml", line 16, characters 14-27: +16 | let j x = x [@ocaml.inlined] (* rejected *) + ^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "ocaml.inlined" attribute cannot appear in this context +File "w53.ml", line 19, characters 16-23: +19 | let l x = h x [@inlined] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "inlined" attribute cannot appear in this context +File "w53.ml", line 21, characters 14-22: +21 | let m x = x [@tailcall] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "tailcall" attribute cannot appear in this context +File "w53.ml", line 22, characters 14-28: +22 | let n x = x [@ocaml.tailcall] (* rejected *) + ^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "ocaml.tailcall" attribute cannot appear in this context +File "w53.ml", line 25, characters 16-24: +25 | let q x = h x [@tailcall] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "tailcall" attribute cannot appear in this context +File "w53.ml", line 33, characters 25-31: +33 | module C = struct end [@@inline] (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "inline" attribute cannot appear in this context +File "w53.ml", line 34, characters 26-38: +34 | module C' = struct end [@@ocaml.inline] (* rejected *) + ^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "ocaml.inline" attribute cannot appear in this context +File "w53.ml", line 35, characters 25-32: +35 | module D = struct end [@@inlined] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "inlined" attribute cannot appear in this context +File "w53.ml", line 36, characters 26-39: +36 | module D' = struct end [@@ocaml.inlined] (* rejected *) + ^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "ocaml.inlined" attribute cannot appear in this context +File "w53.ml", line 40, characters 16-22: +40 | module G = (A [@inline])(struct end) (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "inline" attribute cannot appear in this context +File "w53.ml", line 41, characters 17-29: +41 | module G' = (A [@ocaml.inline])(struct end) (* rejected *) + ^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "ocaml.inline" attribute cannot appear in this context +File "w53.ml", line 45, characters 22-29: +45 | module I = Set.Make [@inlined] + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "inlined" attribute cannot appear in this context +File "w53.ml", line 46, characters 23-36: +46 | module I' = Set.Make [@ocaml.inlined] + ^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "ocaml.inlined" attribute cannot appear in this context +File "w53.ml", line 48, characters 23-30: +48 | module J = Set.Make [@@inlined] + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "inlined" attribute cannot appear in this context +File "w53.ml", line 49, characters 24-37: +49 | module J' = Set.Make [@@ocaml.inlined] + ^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "ocaml.inlined" attribute cannot appear in this context +File "w53.ml", line 52, characters 17-27: +52 | val a1 : int [@deprecated] (* rejected *) + ^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "deprecated" attribute cannot appear in this context +File "w53.ml", line 57, characters 6-14: +57 | let [@unrolled 42] rec test_unrolled x = (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "unrolled" attribute cannot appear in this context +File "w53.ml", line 69, characters 23-46: +69 | | Lit_pat2 of int [@@warn_on_literal_pattern] (* rejected *) + ^^^^^^^^^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "warn_on_literal_pattern" attribute cannot appear in this context +File "w53.ml", line 73, characters 14-23: +73 | type t2 [@@@immediate] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "immediate" attribute cannot appear in this context +File "w53.ml", line 75, characters 14-25: +75 | type t4 [@@@immediate64] (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "immediate64" attribute cannot appear in this context +File "w53.ml", line 79, characters 32-43: +79 | let x = (4 [@immediate], 42 [@immediate64]) (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "immediate64" attribute cannot appear in this context +File "w53.ml", line 79, characters 15-24: +79 | let x = (4 [@immediate], 42 [@immediate64]) (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "immediate" attribute cannot appear in this context +File "w53.ml", line 84, characters 26-31: +84 | type t2 = {x : int} [@@@boxed] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "boxed" attribute cannot appear in this context +File "w53.ml", line 86, characters 26-33: +86 | type t4 = {x : int} [@@@unboxed] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "unboxed" attribute cannot appear in this context +File "w53.ml", line 87, characters 17-24: +87 | val x : int [@@unboxed] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "unboxed" attribute cannot appear in this context +File "w53.ml", line 91, characters 30-35: +91 | let x = (5 [@unboxed], 42 [@boxed]) (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "boxed" attribute cannot appear in this context +File "w53.ml", line 91, characters 15-22: +91 | let x = (5 [@unboxed], 42 [@boxed]) (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "unboxed" attribute cannot appear in this context +File "w53.ml", line 95, characters 21-30: +95 | type 'a t1 = 'a [@@principal] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "principal" attribute cannot appear in this context +File "w53.ml", line 96, characters 21-32: +96 | type 'a t2 = 'a [@@noprincipal] (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "noprincipal" attribute cannot appear in this context +File "w53.ml", line 98, characters 19-28: +98 | type s1 = Foo1 [@principal] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "principal" attribute cannot appear in this context +File "w53.ml", line 99, characters 19-30: +99 | type s2 = Foo2 [@noprincipal] (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "noprincipal" attribute cannot appear in this context +File "w53.ml", line 101, characters 16-25: +101 | val x : int [@principal] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "principal" attribute cannot appear in this context +File "w53.ml", line 102, characters 16-27: +102 | val y : int [@noprincipal] (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "noprincipal" attribute cannot appear in this context +File "w53.ml", line 109, characters 21-30: +109 | type 'a t1 = 'a [@@principal] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "principal" attribute cannot appear in this context +File "w53.ml", line 110, characters 21-32: +110 | type 'a t2 = 'a [@@noprincipal] (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "noprincipal" attribute cannot appear in this context +File "w53.ml", line 112, characters 19-28: +112 | type s1 = Foo1 [@principal] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "principal" attribute cannot appear in this context +File "w53.ml", line 113, characters 19-30: +113 | type s2 = Foo2 [@noprincipal] (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "noprincipal" attribute cannot appear in this context +File "w53.ml", line 115, characters 14-23: +115 | let x = 5 [@principal] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "principal" attribute cannot appear in this context +File "w53.ml", line 116, characters 15-26: +116 | let y = 42 [@noprincipal] (* rejected *) + ^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "noprincipal" attribute cannot appear in this context +File "w53.ml", line 123, characters 21-29: +123 | type 'a t1 = 'a [@@nolabels] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nolabels" attribute cannot appear in this context +File "w53.ml", line 125, characters 19-27: +125 | type s1 = Foo1 [@nolabels] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nolabels" attribute cannot appear in this context +File "w53.ml", line 127, characters 16-24: +127 | val x : int [@nolabels] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nolabels" attribute cannot appear in this context +File "w53.ml", line 133, characters 21-29: +133 | type 'a t1 = 'a [@@nolabels] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nolabels" attribute cannot appear in this context +File "w53.ml", line 135, characters 19-27: +135 | type s1 = Foo1 [@nolabels] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nolabels" attribute cannot appear in this context +File "w53.ml", line 137, characters 14-22: +137 | let x = 5 [@nolabels] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nolabels" attribute cannot appear in this context +File "w53.ml", line 143, characters 21-31: +143 | type 'a t1 = 'a [@@flambda_o3] (* rejected *) + ^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_o3" attribute cannot appear in this context +File "w53.ml", line 144, characters 21-37: +144 | type 'a t2 = 'a [@@flambda_oclassic] (* rejected *) + ^^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_oclassic" attribute cannot appear in this context +File "w53.ml", line 146, characters 19-29: +146 | type s1 = Foo1 [@flambda_o3] (* rejected *) + ^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_o3" attribute cannot appear in this context +File "w53.ml", line 147, characters 19-35: +147 | type s2 = Foo2 [@flambda_oclassic] (* rejected *) + ^^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_oclassic" attribute cannot appear in this context +File "w53.ml", line 149, characters 16-26: +149 | val x : int [@flambda_o3] (* rejected *) + ^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_o3" attribute cannot appear in this context +File "w53.ml", line 150, characters 16-32: +150 | val y : int [@flambda_oclassic] (* rejected *) + ^^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_oclassic" attribute cannot appear in this context +File "w53.ml", line 152, characters 6-16: +152 | [@@@flambda_o3] (* rejected *) + ^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_o3" attribute cannot appear in this context +File "w53.ml", line 153, characters 6-22: +153 | [@@@flambda_oclassic] (* rejected *) + ^^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_oclassic" attribute cannot appear in this context +File "w53.ml", line 157, characters 21-31: +157 | type 'a t1 = 'a [@@flambda_o3] (* rejected *) + ^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_o3" attribute cannot appear in this context +File "w53.ml", line 158, characters 21-37: +158 | type 'a t2 = 'a [@@flambda_oclassic] (* rejected *) + ^^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_oclassic" attribute cannot appear in this context +File "w53.ml", line 160, characters 19-29: +160 | type s1 = Foo1 [@flambda_o3] (* rejected *) + ^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_o3" attribute cannot appear in this context +File "w53.ml", line 161, characters 19-35: +161 | type s2 = Foo2 [@flambda_oclassic] (* rejected *) + ^^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_oclassic" attribute cannot appear in this context +File "w53.ml", line 163, characters 14-24: +163 | let x = 5 [@flambda_o3] (* rejected *) + ^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_o3" attribute cannot appear in this context +File "w53.ml", line 164, characters 15-31: +164 | let y = 42 [@flambda_oclassic] (* rejected *) + ^^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "flambda_oclassic" attribute cannot appear in this context +File "w53.ml", line 171, characters 21-35: +171 | type 'a t1 = 'a [@@afl_inst_ratio 42] (* rejected *) + ^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "afl_inst_ratio" attribute cannot appear in this context +File "w53.ml", line 173, characters 19-33: +173 | type s1 = Foo1 [@afl_inst_ratio 42] (* rejected *) + ^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "afl_inst_ratio" attribute cannot appear in this context +File "w53.ml", line 175, characters 16-30: +175 | val x : int [@afl_inst_ratio 42] (* rejected *) + ^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "afl_inst_ratio" attribute cannot appear in this context +File "w53.ml", line 177, characters 6-20: +177 | [@@@afl_inst_ratio 42] (* rejected *) + ^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "afl_inst_ratio" attribute cannot appear in this context +File "w53.ml", line 181, characters 21-35: +181 | type 'a t1 = 'a [@@afl_inst_ratio 42] (* rejected *) + ^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "afl_inst_ratio" attribute cannot appear in this context +File "w53.ml", line 183, characters 19-33: +183 | type s1 = Foo1 [@afl_inst_ratio 42] (* rejected *) + ^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "afl_inst_ratio" attribute cannot appear in this context +File "w53.ml", line 185, characters 14-28: +185 | let x = 5 [@afl_inst_ratio 42] (* rejected *) + ^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "afl_inst_ratio" attribute cannot appear in this context +File "w53.ml", line 192, characters 21-26: +192 | type 'a t1 = 'a [@@curry 42] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "curry" attribute cannot appear in this context +File "w53.ml", line 194, characters 19-24: +194 | type s1 = Foo1 [@curry 42] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "curry" attribute cannot appear in this context +File "w53.ml", line 196, characters 16-21: +196 | val x : int [@curry 42] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "curry" attribute cannot appear in this context +File "w53.ml", line 198, characters 6-11: +198 | [@@@curry 42] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "curry" attribute cannot appear in this context +File "w53.ml", line 202, characters 21-26: +202 | type 'a t1 = 'a [@@curry 42] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "curry" attribute cannot appear in this context +File "w53.ml", line 204, characters 19-24: +204 | type s1 = Foo1 [@curry 42] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "curry" attribute cannot appear in this context +File "w53.ml", line 206, characters 14-19: +206 | let x = 5 [@curry 42] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "curry" attribute cannot appear in this context +File "w53.ml", line 208, characters 6-11: +208 | [@@@curry 42] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "curry" attribute cannot appear in this context +File "w53.ml", line 213, characters 21-36: +213 | type 'a t1 = 'a [@@include_functor 42] (* rejected *) + ^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "include_functor" attribute cannot appear in this context +File "w53.ml", line 215, characters 19-34: +215 | type s1 = Foo1 [@include_functor 42] (* rejected *) + ^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "include_functor" attribute cannot appear in this context +File "w53.ml", line 217, characters 16-31: +217 | val x : int [@include_functor 42] (* rejected *) + ^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "include_functor" attribute cannot appear in this context +File "w53.ml", line 219, characters 6-21: +219 | [@@@include_functor 42] (* rejected *) + ^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "include_functor" attribute cannot appear in this context +File "w53.ml", line 223, characters 21-36: +223 | type 'a t1 = 'a [@@include_functor 42] (* rejected *) + ^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "include_functor" attribute cannot appear in this context +File "w53.ml", line 225, characters 19-34: +225 | type s1 = Foo1 [@include_functor 42] (* rejected *) + ^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "include_functor" attribute cannot appear in this context +File "w53.ml", line 227, characters 14-29: +227 | let x = 5 [@include_functor 42] (* rejected *) + ^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "include_functor" attribute cannot appear in this context +File "w53.ml", line 229, characters 6-21: +229 | [@@@include_functor 42] (* rejected *) + ^^^^^^^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "include_functor" attribute cannot appear in this context +File "w53.ml", line 233, characters 21-30: +233 | type 'a t1 = 'a [@@local_opt] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "local_opt" attribute cannot appear in this context +File "w53.ml", line 234, characters 19-28: +234 | type s1 = Foo1 [@local_opt] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "local_opt" attribute cannot appear in this context +File "w53.ml", line 235, characters 19-28: +235 | val x : int64 [@@local_opt] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "local_opt" attribute cannot appear in this context +File "w53.ml", line 238, characters 39-48: +238 | external z : int64 -> int64 = "x" [@@local_opt] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "local_opt" attribute cannot appear in this context +File "w53.ml", line 242, characters 21-30: +242 | type 'a t1 = 'a [@@local_opt] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "local_opt" attribute cannot appear in this context +File "w53.ml", line 243, characters 19-28: +243 | type s1 = Foo1 [@local_opt] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "local_opt" attribute cannot appear in this context +File "w53.ml", line 244, characters 25-34: +244 | let x : int64 = 42L [@@local_opt] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "local_opt" attribute cannot appear in this context +File "w53.ml", line 247, characters 39-48: +247 | external z : int64 -> int64 = "x" [@@local_opt] (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "local_opt" attribute cannot appear in this context +File "w53.ml", line 251, characters 20-25: +251 | type 'a t1 = 'a [@local] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "local" attribute cannot appear in this context +File "w53.ml", line 252, characters 21-27: +252 | type 'a t1' = 'a [@global] (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "global" attribute cannot appear in this context +File "w53.ml", line 253, characters 22-30: +253 | type 'a t1'' = 'a [@nonlocal] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nonlocal" attribute cannot appear in this context +File "w53.ml", line 255, characters 24-29: +255 | type t2 = { x : int [@local] } (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "local" attribute cannot appear in this context +File "w53.ml", line 259, characters 27-32: +259 | val x : 'a list -> ('a [@local]) list (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "local" attribute cannot appear in this context +File "w53.ml", line 260, characters 28-34: +260 | val x' : 'a list -> ('a [@global]) list (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "global" attribute cannot appear in this context +File "w53.ml", line 261, characters 29-37: +261 | val x'' : 'a list -> ('a [@nonlocal]) list (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nonlocal" attribute cannot appear in this context +File "w53.ml", line 264, characters 33-39: +264 | val y' : 'a -> f:(('a -> 'b) [@global]) -> 'b (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "global" attribute cannot appear in this context +File "w53.ml", line 265, characters 34-42: +265 | val y'' : 'a -> f:(('a -> 'b) [@nonlocal]) -> 'b (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nonlocal" attribute cannot appear in this context +File "w53.ml", line 267, characters 16-21: +267 | val z : 'a [@@local] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "local" attribute cannot appear in this context +File "w53.ml", line 268, characters 17-23: +268 | val z' : 'a [@@global] (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "global" attribute cannot appear in this context +File "w53.ml", line 269, characters 18-26: +269 | val z'' : 'a [@@nonlocal] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nonlocal" attribute cannot appear in this context +File "w53.ml", line 271, characters 17-22: +271 | val w : 'a [@@@local] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "local" attribute cannot appear in this context +File "w53.ml", line 272, characters 18-24: +272 | val w' : 'a [@@@global] (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "global" attribute cannot appear in this context +File "w53.ml", line 273, characters 19-27: +273 | val w'' : 'a [@@@nonlocal] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nonlocal" attribute cannot appear in this context +File "w53.ml", line 277, characters 20-25: +277 | type 'a t1 = 'a [@local] (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "local" attribute cannot appear in this context +File "w53.ml", line 278, characters 21-27: +278 | type 'a t1' = 'a [@global] (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "global" attribute cannot appear in this context +File "w53.ml", line 279, characters 22-30: +279 | type 'a t1'' = 'a [@nonlocal] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nonlocal" attribute cannot appear in this context +File "w53.ml", line 281, characters 24-29: +281 | type t2 = { x : int [@local] } (* rejected *) + ^^^^^ +Warning 53 [misplaced-attribute]: the "local" attribute cannot appear in this context +File "w53.ml", line 286, characters 13-19: +286 | let g (a [@global]) = a (* rejected *) + ^^^^^^ +Warning 53 [misplaced-attribute]: the "global" attribute cannot appear in this context +File "w53.ml", line 287, characters 13-21: +287 | let h (a [@nonlocal]) = a (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "nonlocal" attribute cannot appear in this context +File "w53.ml", line 292, characters 20-24: +292 | type 'a t1 = 'a [@tail] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "tail" attribute cannot appear in this context +File "w53.ml", line 293, characters 21-28: +293 | type 'a t1' = 'a [@nontail] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "nontail" attribute cannot appear in this context +File "w53.ml", line 295, characters 24-28: +295 | type t2 = { x : int [@tail] } (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "tail" attribute cannot appear in this context +File "w53.ml", line 296, characters 25-32: +296 | type t2' = { x : int [@nontail] } (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "nontail" attribute cannot appear in this context +File "w53.ml", line 298, characters 32-36: +298 | val y : 'a -> f:(('a -> 'b) [@tail]) -> 'b (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "tail" attribute cannot appear in this context +File "w53.ml", line 299, characters 33-40: +299 | val y' : 'a -> f:(('a -> 'b) [@nontail]) -> 'b (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "nontail" attribute cannot appear in this context +File "w53.ml", line 301, characters 16-20: +301 | val z : 'a [@@tail] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "tail" attribute cannot appear in this context +File "w53.ml", line 302, characters 17-24: +302 | val z' : 'a [@@nontail] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "nontail" attribute cannot appear in this context +File "w53.ml", line 304, characters 6-10: +304 | [@@@tail] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "tail" attribute cannot appear in this context +File "w53.ml", line 305, characters 6-13: +305 | [@@@nontail] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "nontail" attribute cannot appear in this context +File "w53.ml", line 309, characters 13-17: +309 | let f (a [@tail]) = a (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "tail" attribute cannot appear in this context +File "w53.ml", line 310, characters 14-21: +310 | let f' (a [@nontail]) = a (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "nontail" attribute cannot appear in this context +File "w53.ml", line 312, characters 8-12: +312 | let [@tail] g a = a (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "tail" attribute cannot appear in this context +File "w53.ml", line 313, characters 8-15: +313 | let [@nontail] g' a = a (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "nontail" attribute cannot appear in this context +File "w53.ml", line 315, characters 16-20: +315 | let h a = a [@tail] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "tail" attribute cannot appear in this context +File "w53.ml", line 316, characters 17-24: +316 | let h' a = a [@nontail] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "nontail" attribute cannot appear in this context +File "w53.ml", line 323, characters 21-28: +323 | type 'a t1 = 'a [@@noalloc] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 324, characters 19-26: +324 | type s1 = Foo1 [@noalloc] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 325, characters 19-26: +325 | val x : int64 [@@noalloc] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 327, characters 24-31: +327 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 327, characters 46-53: +327 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 332, characters 21-28: +332 | type 'a t1 = 'a [@@noalloc] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 333, characters 19-26: +333 | type s1 = Foo1 [@noalloc] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 334, characters 25-32: +334 | let x : int64 = 42L [@@noalloc] (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 336, characters 24-31: +336 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 336, characters 46-53: +336 | external y : (int64 [@noalloc]) -> (int64 [@noalloc]) = "x" (* rejected *) + ^^^^^^^ +Warning 53 [misplaced-attribute]: the "noalloc" attribute cannot appear in this context +File "w53.ml", line 341, characters 21-29: +341 | type 'a t1 = 'a [@@untagged] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "untagged" attribute cannot appear in this context +File "w53.ml", line 342, characters 19-27: +342 | type s1 = Foo1 [@untagged] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "untagged" attribute cannot appear in this context +File "w53.ml", line 343, characters 17-25: +343 | val x : int [@@untagged] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "untagged" attribute cannot appear in this context +File "w53.ml", line 350, characters 21-29: +350 | type 'a t1 = 'a [@@untagged] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "untagged" attribute cannot appear in this context +File "w53.ml", line 351, characters 19-27: +351 | type s1 = Foo1 [@untagged] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "untagged" attribute cannot appear in this context +File "w53.ml", line 352, characters 22-30: +352 | let x : int = 42 [@@untagged] (* rejected *) + ^^^^^^^^ +Warning 53 [misplaced-attribute]: the "untagged" attribute cannot appear in this context +File "w53.ml", line 359, characters 21-25: +359 | type 'a t1 = 'a [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 360, characters 19-23: +360 | type s1 = Foo1 [@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 361, characters 19-23: +361 | val x : int64 [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 363, characters 24-28: +363 | external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 363, characters 49-53: +363 | external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 365, characters 39-43: +365 | external z : int64 -> int64 = "x" [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 369, characters 21-25: +369 | type 'a t1 = 'a [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 370, characters 19-23: +370 | type s1 = Foo1 [@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 371, characters 25-29: +371 | let x : int64 = 42L [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 374, characters 24-28: +374 | external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 374, characters 49-53: +374 | external y : (int64 [@poll error]) -> (int64 [@poll error]) = (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 376, characters 39-43: +376 | external z : int64 -> int64 = "x" [@@poll error] (* rejected *) + ^^^^ +Warning 53 [misplaced-attribute]: the "poll" attribute cannot appear in this context +File "w53.ml", line 385, characters 17-26: +385 | let f2 = fun [@immediate] (type a) (x : a) -> x (* rejected *) + ^^^^^^^^^ +Warning 53 [misplaced-attribute]: the "immediate" attribute cannot appear in this context diff --git a/testsuite/tests/warnings/w53_marshalled.ml b/testsuite/tests/warnings/w53_marshalled.ml new file mode 100644 index 000000000000..29c3e9fd14ea --- /dev/null +++ b/testsuite/tests/warnings/w53_marshalled.ml @@ -0,0 +1,16 @@ +(* TEST +readonly_files = "marshall_for_w53.ml w53.ml" +include ocamlcommon +* setup-ocamlc.byte-build-env +** ocamlc.byte +program = "${test_build_directory}/marshall_for_w53.exe" +all_modules = "marshall_for_w53.ml" +*** run +**** ocamlc.byte +module = "w53.marshalled.ml" +***** check-ocamlc.byte-output +*) + +(* This tests that warning 53 happen appropriately when dealing with marshalled + ASTs. It does that by marshalling `w53.ml` to disk and then passing the + marshalled ast to the compiler. *) diff --git a/testsuite/tests/warnings/w53_ppx.ml b/testsuite/tests/warnings/w53_ppx.ml new file mode 100644 index 000000000000..1e70705544c8 --- /dev/null +++ b/testsuite/tests/warnings/w53_ppx.ml @@ -0,0 +1,13 @@ +open Ast_mapper + +let replace_attr ({ Parsetree.attr_name; _} as attr) = + { attr with + attr_name = + if String.equal attr.attr_name.txt "test" then + { attr_name with txt = "immediate" } + else attr_name + } + +let () = + register "test" (fun _ -> + { default_mapper with attribute = fun _ attr -> replace_attr attr }) diff --git a/testsuite/tests/warnings/w53_with_ppx.compilers.reference b/testsuite/tests/warnings/w53_with_ppx.compilers.reference new file mode 100644 index 000000000000..496d983a9cf2 --- /dev/null +++ b/testsuite/tests/warnings/w53_with_ppx.compilers.reference @@ -0,0 +1,4 @@ +File "w53_with_ppx.ml", line 18, characters 13-17: +18 | let x = 3 [@@test] + ^^^^ +Warning 53 [misplaced-attribute]: the "immediate" attribute cannot appear in this context diff --git a/testsuite/tests/warnings/w53_with_ppx.ml b/testsuite/tests/warnings/w53_with_ppx.ml new file mode 100644 index 000000000000..1fe38decee22 --- /dev/null +++ b/testsuite/tests/warnings/w53_with_ppx.ml @@ -0,0 +1,20 @@ +(* TEST +readonly_files = "w53_ppx.ml" +include ocamlcommon +* setup-ocamlc.byte-build-env +** ocamlc.byte +program = "${test_build_directory}/w53_ppx.exe" +all_modules = "w53_ppx.ml" +*** ocamlc.byte +module = "w53_with_ppx.ml" +flags = "-ppx ${program}" +**** check-ocamlc.byte-output +*) + +(* This test checks that compiler-builtin attributes inserted by a ppx still + trigger the misplaced attribute warning if they are unused (and not if + they are used). *) + +let x = 3 [@@test] + +type t = int [@@test] diff --git a/tools/.depend b/tools/.depend index fed542a88e68..dadf6aeb47db 100644 --- a/tools/.depend +++ b/tools/.depend @@ -99,6 +99,7 @@ objinfo.cmo : \ ../middle_end/printclambda.cmi \ ../utils/misc.cmi \ ../lambda/lambda.cmi \ + ../utils/import_info.cmi \ ../typing/ident.cmi \ ../middle_end/flambda/export_info.cmi \ ../utils/compilation_unit.cmi \ @@ -116,6 +117,7 @@ objinfo.cmx : \ ../middle_end/printclambda.cmx \ ../utils/misc.cmx \ ../lambda/lambda.cmx \ + ../utils/import_info.cmx \ ../typing/ident.cmx \ ../middle_end/flambda/export_info.cmx \ ../utils/compilation_unit.cmx \ diff --git a/tools/Makefile b/tools/Makefile index 4d7392932081..7b26c7a6b98f 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -85,8 +85,8 @@ ocamldep.opt$(EXE): $(call byte2native, $(OCAMLDEP)) OCAMLPROF=config.cmo build_path_prefix_map.cmo misc.cmo identifiable.cmo \ numbers.cmo arg_helper.cmo clflags.cmo terminfo.cmo \ warnings.cmo location.cmo longident.cmo docstrings.cmo \ - syntaxerr.cmo ast_helper.cmo \ - extensions.cmo builtin_attributes.cmo \ + syntaxerr.cmo ast_helper.cmo extensions_parsing.cmo extensions.cmo \ + ast_iterator.cmo builtin_attributes.cmo \ camlinternalMenhirLib.cmo parser.cmo \ pprintast.cmo \ lexer.cmo parse.cmo ocamlprof.cmo diff --git a/tools/sync_stdlib_docs b/tools/sync_stdlib_docs index 083c6f0fb7d4..4f37b2e224fb 100755 --- a/tools/sync_stdlib_docs +++ b/tools/sync_stdlib_docs @@ -40,12 +40,14 @@ INDENTREGEX="s/^(.+)$/ \1/m" #Stdlib perl -p -e "$LABREGEX" stdlib/listLabels.mli > stdlib/list.temp.mli perl -p -e "$LABREGEX" stdlib/arrayLabels.mli > stdlib/array.temp.mli +perl -p -e "$LABREGEX" stdlib/iarrayLabels.mli > stdlib/iarray.temp.mli perl -p -e "$LABREGEX" stdlib/stringLabels.mli > stdlib/string.temp.mli perl -p -e "$LABREGEX" stdlib/bytesLabels.mli > stdlib/bytes.temp.mli #Stdlib tildes perl -p -e "$TILDEREGEX" stdlib/list.temp.mli > stdlib/list.mli perl -p -e "$TILDEREGEX" stdlib/array.temp.mli > stdlib/array.mli +perl -p -e "$TILDEREGEX" stdlib/iarray.temp.mli > stdlib/iarray.mli perl -p -e "$TILDEREGEX" stdlib/string.temp.mli > stdlib/string.mli perl -p -e "$TILDEREGEX" stdlib/bytes.temp.mli > stdlib/bytes.mli diff --git a/toplevel/genprintval.ml b/toplevel/genprintval.ml index 548f1fd0b784..700b18155021 100644 --- a/toplevel/genprintval.ml +++ b/toplevel/genprintval.ml @@ -291,24 +291,10 @@ module Make(O : OBJ)(EVP : EVALPATH with type valu = O.t) = struct Oval_list [] | Tconstr(path, [ty_arg], _) when Path.same path Predef.path_array -> - let length = O.size obj in - if length > 0 then - match check_depth depth obj ty with - Some x -> x - | None -> - let rec tree_of_items tree_list i = - if !printer_steps < 0 || depth < 0 then - Oval_ellipsis :: tree_list - else if i < length then - let tree = - nest tree_of_val (depth - 1) (O.field obj i) ty_arg - in - tree_of_items (tree :: tree_list) (i + 1) - else tree_list - in - Oval_array (List.rev (tree_of_items [] 0)) - else - Oval_array [] + tree_of_generic_array Asttypes.Mutable depth obj ty_arg + | Tconstr(path, [ty_arg], _) + when Path.same path Predef.path_iarray -> + tree_of_generic_array Asttypes.Immutable depth obj ty_arg | Tconstr(path, [], _) when Path.same path Predef.path_string -> @@ -517,6 +503,27 @@ module Make(O : OBJ)(EVP : EVALPATH with type valu = O.t) = struct tree :: tree_list (i + 1) ty_list in tree_list start ty_list + and tree_of_generic_array am depth obj ty_arg = + let oval elts = Oval_array (elts, am) in + let length = O.size obj in + if length > 0 then + match check_depth depth obj ty with + Some x -> x + | None -> + let rec tree_of_items tree_list i = + if !printer_steps < 0 || depth < 0 then + Oval_ellipsis :: tree_list + else if i < length then + let tree = + nest tree_of_val (depth - 1) (O.field obj i) ty_arg + in + tree_of_items (tree :: tree_list) (i + 1) + else tree_list + in + oval (List.rev (tree_of_items [] 0)) + else + oval [] + and tree_of_constr_with_args tree_of_cstr cstr_name inlined start depth obj ty_args unboxed = let lid = tree_of_cstr (Out_name.create cstr_name) in diff --git a/toplevel/native/topeval.ml b/toplevel/native/topeval.ml index 56071bd004ff..83758415dbca 100644 --- a/toplevel/native/topeval.ml +++ b/toplevel/native/topeval.ml @@ -134,12 +134,11 @@ let name_expression ~loc ~attrs exp = in let sg = [Sig_value(id, vd, Exported)] in let pat = - { pat_desc = Tpat_var(id, mknoloc name); + { pat_desc = Tpat_var(id, mknoloc name, Value_mode.global); pat_loc = loc; pat_extra = []; pat_type = exp.exp_type; pat_env = exp.exp_env; - pat_mode = Value_mode.global; pat_attributes = []; } in let vb = diff --git a/typing/cmt2annot.ml b/typing/cmt2annot.ml index d9e0fa64b15a..eeba23fbda5a 100644 --- a/typing/cmt2annot.ml +++ b/typing/cmt2annot.ml @@ -23,7 +23,7 @@ let variables_iterator scope = let super = default_iterator in let pat sub (type k) (p : k general_pattern) = begin match p.pat_desc with - | Tpat_var (id, _) | Tpat_alias (_, id, _) -> + | Tpat_var (id, _, _) | Tpat_alias (_, id, _, _) -> Stypes.record (Stypes.An_ident (p.pat_loc, Ident.name id, Annot.Idef scope)) diff --git a/typing/env.ml b/typing/env.ml index 85d482fcd790..95c9b11342cd 100644 --- a/typing/env.ml +++ b/typing/env.ml @@ -799,11 +799,11 @@ let check_functor_application = f0_path:Path.t -> args:(Path.t * Types.module_type) list -> arg_path:Path.t -> arg_mty:module_type -> param_mty:module_type -> t -> unit) -let strengthen = - (* to be filled with Mtype.strengthen *) - ref ((fun ~aliasable:_ _env _mty _path -> assert false) : - aliasable:bool -> t -> Subst.Lazy.modtype -> - Path.t -> Subst.Lazy.modtype) + +let scrape_alias = + (* to be filled with Mtype.scrape_alias *) + ref ((fun _env _mty -> assert false) : + t -> Subst.Lazy.modtype -> Subst.Lazy.modtype) let md md_type = {md_type; md_attributes=[]; md_loc=Location.none @@ -1089,7 +1089,7 @@ and find_functor_components path env = | Functor_comps f -> f | Structure_comps _ -> raise Not_found -let find_module ~alias path env = +let find_module path env = match path with | Pident id -> let data = find_ident_module id env in @@ -1100,8 +1100,7 @@ let find_module ~alias path env = Subst.Lazy.force_module_decl data.mda_declaration | Papply(p1, p2) -> let fc = find_functor_components p1 env in - if alias then md (fc.fcomp_res) - else md (modtype_of_functor_appl fc p1 p2) + md (modtype_of_functor_appl fc p1 p2) let find_module_lazy ~alias path env = match path with @@ -1120,11 +1119,6 @@ let find_module_lazy ~alias path env = in Subst.Lazy.of_module_decl md -let find_strengthened_module ~aliasable path env = - let md = find_module_lazy ~alias:true path env in - let mty = !strengthen ~aliasable env md.mdl_type path in - Subst.Lazy.force_modtype mty - let find_value_full path env = match path with | Pident id -> begin @@ -1452,9 +1446,6 @@ and expand_modtype_path env path = | Some (MtyL_ident path) -> normalize_modtype_path env path | _ | exception Not_found -> path -let find_module path env = - find_module ~alias:false path env - let find_module_lazy path env = find_module_lazy ~alias:false path env @@ -1653,29 +1644,6 @@ let find_shadowed_types path env = (find_shadowed wrap_identity (fun env -> env.types) (fun comps -> comps.comp_types) path env) -(* Expand manifest module type names at the top of the given module type *) - -let rec scrape_alias env ?path mty = - let open Subst.Lazy in - match mty, path with - MtyL_ident p, _ -> - begin try - scrape_alias env (find_modtype_expansion_lazy p env) ?path - with Not_found -> - mty - end - | MtyL_alias path, _ -> - begin try - scrape_alias env ((find_module_lazy path env).mdl_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 - (* Given a signature and a root path, prefix all idents in the signature by the root path and build the corresponding substitution. *) @@ -1774,7 +1742,7 @@ let is_identchar c = let rec components_of_module_maker {cm_env; cm_prefixing_subst; cm_path; cm_addr; cm_mty; cm_shape} : _ result = - match scrape_alias cm_env cm_mty with + match !scrape_alias cm_env cm_mty with MtyL_signature sg -> let c = { comp_values = NameMap.empty; @@ -2209,8 +2177,6 @@ and store_cltype id desc shape env = cltypes = IdTbl.add id cltda env.cltypes; summary = Env_cltype(env.summary, id, desc) } -let scrape_alias env mty = scrape_alias env mty - (* Compute the components of a functor application in a path. *) let components_of_functor_appl ~loc ~f_path ~f_comp ~arg env = @@ -2326,10 +2292,6 @@ let add_local_type path info env = { env with local_constraints = Path.Map.add path info env.local_constraints } -(* Non-lazy version of scrape_alias *) -let scrape_alias t mty = - mty |> Subst.Lazy.of_modtype |> scrape_alias t |> Subst.Lazy.force_modtype - (* Insertion of bindings by name *) let enter_value ?check name desc env = diff --git a/typing/env.mli b/typing/env.mli index 2e3df10b7e21..6b8f86fedc96 100644 --- a/typing/env.mli +++ b/typing/env.mli @@ -86,14 +86,12 @@ val without_cmis: ('a -> 'b) -> 'a -> 'b 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_lazy: Path.t -> t -> Subst.Lazy.module_decl 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_strengthened_module: - aliasable:bool -> Path.t -> t -> module_type - val find_ident_constructor: Ident.t -> t -> constructor_description val find_ident_label: Ident.t -> t -> label_description @@ -481,9 +479,8 @@ val check_well_formed_module: (* 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 -> Subst.Lazy.modtype -> - Path.t -> Subst.Lazy.modtype) ref +val scrape_alias: + (t -> Subst.Lazy.modtype -> Subst.Lazy.modtype) ref (* Forward declaration to break mutual recursion with Ctype. *) val same_constr: (t -> type_expr -> type_expr -> bool) ref (* Forward declaration to break mutual recursion with Printtyp. *) @@ -524,7 +521,6 @@ val fold_cltypes: (** Utilities *) -val scrape_alias: t -> module_type -> module_type val check_value_name: string -> Location.t -> unit val print_address : Format.formatter -> address -> unit diff --git a/typing/includemod.ml b/typing/includemod.ml index ca32b328fd8b..f85289382cbf 100644 --- a/typing/includemod.ml +++ b/typing/includemod.ml @@ -190,10 +190,7 @@ let expand_modtype_path env path = | x -> Some x let expand_module_alias ~strengthen env path = - match - if strengthen then Env.find_strengthened_module ~aliasable:true path env - else (Env.find_module path env).md_type - with + match Mtype.find_type_of_module ~strengthen ~aliasable:true env path with | x -> Ok x | exception Not_found -> Error (Error.Unbound_module_path path) @@ -1230,8 +1227,7 @@ let strengthened_module_decl ~loc ~aliasable env ~mark md1 path1 md2 = let expand_module_alias ~strengthen env path = match expand_module_alias ~strengthen env path with | Ok x -> x - | Result.Error _ -> - raise (Error(env,In_Expansion(Error.Unbound_module_path path))) + | Result.Error e -> raise (Error(env,In_Expansion e)) let check_modtype_equiv ~loc env id mty1 mty2 = match check_modtype_equiv ~in_eq:false ~loc env ~mark:Mark_both mty1 mty2 with diff --git a/typing/includemod_errorprinter.ml b/typing/includemod_errorprinter.ml index e5c276920875..1a470e613569 100644 --- a/typing/includemod_errorprinter.ml +++ b/typing/includemod_errorprinter.ml @@ -140,12 +140,8 @@ module Illegal_permutation = struct (* Find module type at position [path] and convert the [coerce_pos] path to a [pos] path *) - let rec find env ctx path (mt:Types.module_type) = match mt, path with - | (Mty_ident p | Mty_alias p), _ -> - begin match (Env.find_modtype p env).mtd_type with - | None -> raise Not_found - | Some mt -> find env ctx path mt - end + let rec find env ctx path (mt:Types.module_type) = + match Mtype.scrape_alias env mt, path with | Mty_signature s , [] -> List.rev ctx, s | Mty_signature s, Item k :: q -> begin match runtime_item k s with diff --git a/typing/mtype.ml b/typing/mtype.ml index 7145f871ce53..91d185059c2a 100644 --- a/typing/mtype.ml +++ b/typing/mtype.ml @@ -126,8 +126,6 @@ and strengthen_lazy_decl ~aliasable env md p = | _ when aliasable -> {md with mdl_type = MtyL_alias p} | mty -> {md with mdl_type = strengthen_lazy ~aliasable env mty p} -let () = Env.strengthen := strengthen_lazy - let strengthen ~aliasable env mty p = let mty = strengthen_lazy ~aliasable env (Subst.Lazy.of_modtype mty) p in Subst.Lazy.force_modtype mty @@ -211,6 +209,45 @@ let scrape_for_type_of env pres mty = in make_aliases_absent pres (loop env None mty) +(* Expand manifest module type names at the top of the given module type *) + +let rec scrape_alias_lazy env ?path mty = + let open Subst.Lazy in + match mty, path with + MtyL_ident p, _ -> + begin try + scrape_alias_lazy env (Env.find_modtype_expansion_lazy p env) ?path + with Not_found -> + mty + end + | MtyL_alias path, _ -> + begin try + scrape_alias_lazy env ((Env.find_module_lazy path env).mdl_type) ~path + with Not_found -> + (*Location.prerr_warning Location.none + (Warnings.No_cmi_file (Path.name path));*) + mty + end + | mty, Some path -> + strengthen_lazy ~aliasable:true env mty path + | _ -> mty + +(* Non-lazy version of scrape_alias *) +let scrape_alias env mty = + Subst.Lazy.of_modtype mty + |> scrape_alias_lazy env + |> Subst.Lazy.force_modtype + +let () = Env.scrape_alias := fun env mty -> scrape_alias_lazy env mty + +let find_type_of_module ~strengthen ~aliasable env path = + if strengthen then + let md = Env.find_module_lazy path env in + let mty = strengthen_lazy ~aliasable env md.mdl_type path in + Subst.Lazy.force_modtype mty + else + (Env.find_module path env).md_type + (* In nondep_supertype, env is only used for the type it assigns to id. Hence there is no need to keep env up-to-date by adding the bindings traversed. *) @@ -409,13 +446,9 @@ let no_code_needed env mty = no_code_needed_mod env Mp_present mty (* Check whether a module type may return types *) -let rec contains_type env = function - Mty_ident path -> - begin try match (Env.find_modtype path env).mtd_type with - | None -> raise Exit (* PR#6427 *) - | Some mty -> contains_type env mty - with Not_found -> raise Exit - end +let rec contains_type env mty = + match scrape env mty with + Mty_ident _ -> raise Exit (* PR#6427 *) | Mty_signature sg -> contains_type_sig env sg | Mty_functor (_, body) -> @@ -524,7 +557,7 @@ let rec remove_aliases_mty env args pres mty = Mty_signature sg -> Mp_present, Mty_signature (remove_aliases_sig env args' sg) | Mty_alias _ -> - let mty' = Env.scrape_alias env mty in + let mty' = scrape_alias env mty in if mty' = mty then begin pres, mty end else begin diff --git a/typing/mtype.mli b/typing/mtype.mli index 1b10d6dbef70..7a53298511ef 100644 --- a/typing/mtype.mli +++ b/typing/mtype.mli @@ -21,6 +21,10 @@ val scrape: Env.t -> module_type -> module_type (* Expand toplevel module type abbreviations till hitting a "hard" module type (signature, functor, or abstract module type ident. *) +val scrape_alias: Env.t -> module_type -> module_type + (* Expand toplevel module type abbreviations and aliases + till hitting a "hard" module type (signature, functor, + or abstract module type ident. *) val scrape_for_functor_arg: Env.t -> module_type -> module_type (* Remove aliases in a functor argument type *) val scrape_for_type_of: @@ -35,6 +39,10 @@ val strengthen: aliasable:bool -> Env.t -> module_type -> Path.t -> module_type val strengthen_decl: aliasable:bool -> Env.t -> module_declaration -> Path.t -> module_declaration +val find_type_of_module: + strengthen:bool -> aliasable:bool -> Env.t -> Path.t -> module_type + (* Get the type of a module, strengthening if necessary. *) + val sig_make_manifest : signature -> signature (* Make abstract types manifest. Similar to strengthening, but rather than providing definitions by making the name of the current module diff --git a/typing/oprint.ml b/typing/oprint.ml index 121bb77c4166..d1f0dc5f1be2 100644 --- a/typing/oprint.ml +++ b/typing/oprint.ml @@ -213,8 +213,13 @@ let print_out_value ppf tree = end | Oval_list tl -> fprintf ppf "@[<1>[%a]@]" (print_tree_list print_tree_1 ";") tl - | Oval_array tl -> - fprintf ppf "@[<2>[|%a|]@]" (print_tree_list print_tree_1 ";") tl + | Oval_array (tl, am) -> + let sigil = match am with + | Mutable -> '|' + | Immutable -> ':' + in + fprintf ppf "@[<2>[%c%a%c]@]" + sigil (print_tree_list print_tree_1 ";") tl sigil | Oval_constr (name, []) -> print_ident ppf name | Oval_variant (name, None) -> fprintf ppf "`%s" name | Oval_stuff s -> pp_print_string ppf s diff --git a/typing/outcometree.mli b/typing/outcometree.mli index 895295964e62..0d573c946c4e 100644 --- a/typing/outcometree.mli +++ b/typing/outcometree.mli @@ -39,7 +39,7 @@ type out_attribute = { oattr_name: string } type out_value = - | Oval_array of out_value list + | Oval_array of out_value list * Asttypes.mutable_flag | Oval_char of char | Oval_constr of out_ident * out_value list | Oval_ellipsis diff --git a/typing/parmatch.ml b/typing/parmatch.ml index 1207847f4914..a6bb2fa8f6ee 100644 --- a/typing/parmatch.ml +++ b/typing/parmatch.ml @@ -24,9 +24,9 @@ open Typedtree (* Utilities for building patterns *) (*************************************) -let make_pat desc ty mode tenv = +let make_pat desc ty tenv = {pat_desc = desc; pat_loc = Location.none; pat_extra = []; - pat_type = ty ; pat_mode = mode; pat_env = tenv; + pat_type = ty ; pat_env = tenv; pat_attributes = []; } @@ -36,8 +36,8 @@ let omega_list = Patterns.omega_list let extra_pat = make_pat - (Tpat_var (Ident.create_local "+", mknoloc "+")) - Ctype.none Value_mode.max_mode Env.empty + (Tpat_var (Ident.create_local "+", mknoloc "+", Value_mode.max_mode)) + Ctype.none Env.empty (*******************) @@ -142,11 +142,11 @@ let all_coherent column = | Tuple l1, Tuple l2 -> l1 = l2 | Record (lbl1 :: _), Record (lbl2 :: _) -> Array.length lbl1.lbl_all = Array.length lbl2.lbl_all + | Array (am1, _), Array (am2, _) -> am1 = am2 | Any, _ | _, Any | Record [], Record [] | Variant _, Variant _ - | Array _, Array _ | Lazy, Lazy -> true | _, _ -> false in @@ -282,8 +282,8 @@ module Compat | ((Tpat_any|Tpat_var _),_) | (_,(Tpat_any|Tpat_var _)) -> true (* Structural induction *) - | Tpat_alias (p,_,_),_ -> compat p q - | _,Tpat_alias (q,_,_) -> compat p q + | Tpat_alias (p,_,_,_),_ -> compat p q + | _,Tpat_alias (q,_,_,_) -> compat p q | Tpat_or (p1,p2,_),_ -> (compat p1 q || compat p2 q) | _,Tpat_or (q1,q2,_) -> @@ -301,7 +301,8 @@ module Compat | Tpat_record (l1,_),Tpat_record (l2,_) -> let ps,qs = records_args l1 l2 in compats ps qs - | Tpat_array ps, Tpat_array qs -> + | Tpat_array (am1, ps), Tpat_array (am2, qs) -> + am1 = am2 && List.length ps = List.length qs && compats ps qs | _,_ -> false @@ -362,8 +363,8 @@ let simple_match d h = | Constant c1, Constant c2 -> const_compare c1 c2 = 0 | Lazy, Lazy -> true | Record _, Record _ -> true - | Tuple len1, Tuple len2 - | Array len1, Array len2 -> len1 = len2 + | Tuple len1, Tuple len2 -> len1 = len2 + | Array (am1, len1), Array (am2, len2) -> am1 = am2 && len1 = len2 | _, Any -> true | _, _ -> false @@ -403,7 +404,7 @@ let simple_match_args discr head args = | Variant { has_arg = true } | Lazy -> [Patterns.omega] | Record lbls -> omega_list lbls - | Array len + | Array (_, len) | Tuple len -> Patterns.omegas len | Variant { has_arg = false } | Any @@ -488,7 +489,7 @@ let rec read_args xs r = match xs,r with let do_set_args ~erase_mutable q r = match q with | {pat_desc = Tpat_tuple omegas} -> let args,rest = read_args omegas r in - make_pat (Tpat_tuple args) q.pat_type q.pat_mode q.pat_env::rest + make_pat (Tpat_tuple args) q.pat_type q.pat_env::rest | {pat_desc = Tpat_record (omegas,closed)} -> let args,rest = read_args omegas r in make_pat @@ -503,13 +504,13 @@ let do_set_args ~erase_mutable q r = match q with else lid, lbl, arg) omegas args, closed)) - q.pat_type q.pat_mode q.pat_env:: + q.pat_type q.pat_env:: rest | {pat_desc = Tpat_construct (lid, c, omegas, _)} -> let args,rest = read_args omegas r in make_pat (Tpat_construct (lid, c, args, None)) - q.pat_type q.pat_mode q.pat_env:: + q.pat_type q.pat_env:: rest | {pat_desc = Tpat_variant (l, omega, row)} -> let arg, rest = @@ -519,18 +520,18 @@ let do_set_args ~erase_mutable q r = match q with | _ -> assert false in make_pat - (Tpat_variant (l, arg, row)) q.pat_type q.pat_mode q.pat_env:: + (Tpat_variant (l, arg, row)) q.pat_type q.pat_env:: rest | {pat_desc = Tpat_lazy _omega} -> begin match r with arg::rest -> - make_pat (Tpat_lazy arg) q.pat_type q.pat_mode q.pat_env::rest + make_pat (Tpat_lazy arg) q.pat_type q.pat_env::rest | _ -> fatal_error "Parmatch.do_set_args (lazy)" end -| {pat_desc = Tpat_array omegas} -> +| {pat_desc = Tpat_array (am, omegas)} -> let args,rest = read_args omegas r in make_pat - (Tpat_array args) q.pat_type q.pat_mode q.pat_env:: + (Tpat_array (am, args)) q.pat_type q.pat_env:: rest | {pat_desc=Tpat_constant _|Tpat_any} -> q::r (* case any is used in matching.ml *) @@ -709,7 +710,7 @@ let set_last a = (* mark constructor lines for failure when they are incomplete *) let mark_partial = let zero = - make_pat (`Constant (Const_int 0)) Ctype.none Value_mode.max_mode Env.empty + make_pat (`Constant (Const_int 0)) Ctype.none Env.empty in List.map (fun ((hp, _), _ as ps) -> match hp.pat_desc with @@ -800,7 +801,8 @@ let should_extend ext env = match ext with let path = get_constructor_type_path p.pat_type p.pat_env in Path.same path ext | Construct {cstr_tag=(Cstr_extension _)} -> false - | Constant _ | Tuple _ | Variant _ | Record _ | Array _ | Lazy -> false + | Constant _ | Tuple _ | Variant _ | Record _ + | Array _ | Lazy -> false | Any -> assert false end end @@ -812,7 +814,7 @@ let pat_of_constr ex_pat cstr = cstr, omegas cstr.cstr_arity, None)} let orify x y = - make_pat (Tpat_or (x, y, None)) x.pat_type x.pat_mode x.pat_env + make_pat (Tpat_or (x, y, None)) x.pat_type x.pat_env let rec orify_many = function | [] -> assert false @@ -825,7 +827,7 @@ let pat_of_constrs ex_pat cstrs = if cstrs = [] then raise Empty else orify_many (List.map (pat_of_constr ex_pat) cstrs) -let pats_of_type ?(always=false) env ty mode = +let pats_of_type ?(always=false) env ty = let ty' = Ctype.expand_head env ty in match get_desc ty' with | Tconstr (path, _, _) -> @@ -834,18 +836,18 @@ let pats_of_type ?(always=false) env ty mode = | Type_variant (cstrs,_) when always || List.length cstrs <= 1 || (* Only explode when all constructors are GADTs *) List.for_all (fun cd -> cd.cstr_generalized) cstrs -> - List.map (pat_of_constr (make_pat Tpat_any ty mode env)) cstrs + List.map (pat_of_constr (make_pat Tpat_any ty env)) cstrs | Type_record (labels, _) -> let fields = List.map (fun ld -> mknoloc (Longident.Lident ld.lbl_name), ld, omega) labels in - [make_pat (Tpat_record (fields, Closed)) ty mode env] + [make_pat (Tpat_record (fields, Closed)) ty env] | Type_variant _ | Type_abstract | Type_open -> [omega] end | Ttuple tl -> - [make_pat (Tpat_tuple (omegas (List.length tl))) ty mode env] + [make_pat (Tpat_tuple (omegas (List.length tl))) ty env] | _ -> [omega] let rec get_variant_constructors env ty = @@ -903,7 +905,7 @@ let build_other_constant proj make first next p env = let rec try_const i = if List.mem i all then try_const (next i) - else make_pat (make i) p.pat_type p.pat_mode p.pat_env + else make_pat (make i) p.pat_type p.pat_env in try_const first (* @@ -923,8 +925,9 @@ let build_other ext env = (* let c = {c with cstr_name = "*extension*"} in *) (* PR#7330 *) make_pat (Tpat_var (Ident.create_local "*extension*", - {txt="*extension*"; loc = d.pat_loc})) - Ctype.none Value_mode.max_mode Env.empty + {txt="*extension*"; loc = d.pat_loc}, + Value_mode.max_mode)) + Ctype.none Env.empty | Construct _ -> begin match ext with | Some ext -> @@ -948,7 +951,7 @@ let build_other ext env = let make_other_pat tag const = let arg = if const then None else Some Patterns.omega in make_pat (Tpat_variant(tag, arg, cstr_row)) - d.pat_type d.pat_mode d.pat_env + d.pat_type d.pat_env in let row = type_row () in begin match @@ -973,7 +976,7 @@ let build_other ext env = List.fold_left (fun p_res pat -> make_pat (Tpat_or (pat, p_res, None)) - d.pat_type d.pat_mode d.pat_env) + d.pat_type d.pat_env) pat other_pats end | Constant Const_char _ -> @@ -992,7 +995,7 @@ let build_other ext env = find_other (i+1) imax else make_pat (Tpat_constant (Const_char ci)) - d.pat_type d.pat_mode d.pat_env + d.pat_type d.pat_env in let rec try_chars = function | [] -> Patterns.omega @@ -1039,27 +1042,27 @@ let build_other ext env = | _ -> assert false) (function f -> Tpat_constant(Const_float (string_of_float f))) 0.0 (fun f -> f +. 1.0) d env - | Array _ -> + | Array (am, _) -> let all_lengths = List.map (fun (p,_) -> match p.pat_desc with - | Array len -> len + | Array (am', len) when am = am' -> len | _ -> assert false) env in let rec try_arrays l = if List.mem l all_lengths then try_arrays (l+1) else - make_pat (Tpat_array (omegas l)) - d.pat_type d.pat_mode d.pat_env in + make_pat (Tpat_array (am, omegas l)) + d.pat_type d.pat_env in try_arrays 0 | _ -> Patterns.omega let rec has_instance p = match p.pat_desc with | Tpat_variant (l,_,r) when is_absent l r -> false | Tpat_any | Tpat_var _ | Tpat_constant _ | Tpat_variant (_,None,_) -> true - | Tpat_alias (p,_,_) | Tpat_variant (_,Some p,_) -> has_instance p + | Tpat_alias (p,_,_,_) | Tpat_variant (_,Some p,_) -> has_instance p | Tpat_or (p1,p2,_) -> has_instance p1 || has_instance p2 - | Tpat_construct (_,_,ps,_) | Tpat_tuple ps | Tpat_array ps -> + | Tpat_construct (_,_,ps, _) | Tpat_tuple ps | Tpat_array (_, ps) -> has_instances ps | Tpat_record (lps,_) -> has_instances (List.map (fun (_,_,x) -> x) lps) | Tpat_lazy p @@ -1263,6 +1266,7 @@ let print_pat pat = | Tpat_variant (_, _, _) -> "variant" | Tpat_record (_, _) -> "record" | Tpat_array _ -> "array" + | Tpat_immutable_array _ -> "immutable array" in Printf.fprintf stderr "PAT[%s]\n%!" (string_of_pat pat) *) @@ -1511,7 +1515,7 @@ let is_var_column rs = (* Standard or-args for left-to-right matching *) let rec or_args p = match p.pat_desc with | Tpat_or (p1,p2,_) -> p1,p2 -| Tpat_alias (p,_,_) -> or_args p +| Tpat_alias (p,_,_,_) -> or_args p | _ -> assert false (* Just remove current column *) @@ -1691,8 +1695,8 @@ and every_both pss qs q1 q2 = let rec le_pat p q = match (p.pat_desc, q.pat_desc) with | (Tpat_var _|Tpat_any),_ -> true - | Tpat_alias(p,_,_), _ -> le_pat p q - | _, Tpat_alias(q,_,_) -> le_pat p q + | Tpat_alias(p,_,_,_), _ -> le_pat p q + | _, Tpat_alias(q,_,_,_) -> le_pat p q | Tpat_constant(c1), Tpat_constant(c2) -> const_compare c1 c2 = 0 | Tpat_construct(_,c1,ps,_), Tpat_construct(_,c2,qs,_) -> Types.equal_tag c1.cstr_tag c2.cstr_tag && le_pats ps qs @@ -1706,8 +1710,8 @@ let rec le_pat p q = | Tpat_record (l1,_), Tpat_record (l2,_) -> let ps,qs = records_args l1 l2 in le_pats ps qs - | Tpat_array(ps), Tpat_array(qs) -> - List.length ps = List.length qs && le_pats ps qs + | Tpat_array(am1, ps), Tpat_array(am2, qs) -> + am1 = am2 && List.length ps = List.length qs && le_pats ps qs (* In all other cases, enumeration is performed *) | _,_ -> not (satisfiable [[p]] [q]) @@ -1731,8 +1735,8 @@ let get_mins le ps = *) let rec lub p q = match p.pat_desc,q.pat_desc with -| Tpat_alias (p,_,_),_ -> lub p q -| _,Tpat_alias (q,_,_) -> lub p q +| Tpat_alias (p,_,_,_),_ -> lub p q +| _,Tpat_alias (q,_,_,_) -> lub p q | (Tpat_any|Tpat_var _),_ -> q | _,(Tpat_any|Tpat_var _) -> p | Tpat_or (p1,p2,_),_ -> orlub p1 p2 q @@ -1740,31 +1744,31 @@ let rec lub p q = match p.pat_desc,q.pat_desc with | Tpat_constant c1, Tpat_constant c2 when const_compare c1 c2 = 0 -> p | Tpat_tuple ps, Tpat_tuple qs -> let rs = lubs ps qs in - make_pat (Tpat_tuple rs) p.pat_type p.pat_mode p.pat_env + make_pat (Tpat_tuple rs) p.pat_type p.pat_env | Tpat_lazy p, Tpat_lazy q -> let r = lub p q in - make_pat (Tpat_lazy r) p.pat_type p.pat_mode p.pat_env + make_pat (Tpat_lazy r) p.pat_type p.pat_env | Tpat_construct (lid,c1,ps1,_), Tpat_construct (_,c2,ps2,_) when Types.equal_tag c1.cstr_tag c2.cstr_tag -> let rs = lubs ps1 ps2 in make_pat (Tpat_construct (lid, c1, rs, None)) - p.pat_type p.pat_mode p.pat_env + p.pat_type p.pat_env | Tpat_variant(l1,Some p1,row), Tpat_variant(l2,Some p2,_) when l1=l2 -> let r=lub p1 p2 in make_pat (Tpat_variant (l1,Some r,row)) - p.pat_type p.pat_mode p.pat_env + p.pat_type p.pat_env | Tpat_variant (l1,None,_row), Tpat_variant(l2,None,_) when l1 = l2 -> p | Tpat_record (l1,closed),Tpat_record (l2,_) -> let rs = record_lubs l1 l2 in make_pat (Tpat_record (rs, closed)) - p.pat_type p.pat_mode p.pat_env -| Tpat_array ps, Tpat_array qs - when List.length ps = List.length qs -> + p.pat_type p.pat_env +| Tpat_array (am1, ps), Tpat_array (am2, qs) + when am1 = am2 && List.length ps = List.length qs -> let rs = lubs ps qs in - make_pat (Tpat_array rs) - p.pat_type p.pat_mode p.pat_env + make_pat (Tpat_array (am1, rs)) + p.pat_type p.pat_env | _,_ -> raise Empty @@ -1870,14 +1874,14 @@ module Conv = struct match pat.pat_desc with Tpat_or (pa,pb,_) -> mkpat (Ppat_or (loop pa, loop pb)) - | Tpat_var (_, ({txt="*extension*"} as nm)) -> (* PR#7330 *) + | Tpat_var (_, ({txt="*extension*"} as nm), _) -> (* PR#7330 *) mkpat (Ppat_var nm) | Tpat_any | Tpat_var _ -> mkpat Ppat_any | Tpat_constant c -> mkpat (Ppat_constant (Untypeast.constant c)) - | Tpat_alias (p,_,_) -> loop p + | Tpat_alias (p,_,_,_) -> loop p | Tpat_tuple lst -> mkpat (Ppat_tuple (List.map loop lst)) | Tpat_construct (cstr_lid, cstr, lst, _) -> @@ -1904,8 +1908,17 @@ module Conv = struct subpatterns in mkpat (Ppat_record (fields, Open)) - | Tpat_array lst -> - mkpat (Ppat_array (List.map loop lst)) + | Tpat_array (am, lst) -> + let pats = (List.map loop lst) in + let ppat = match am with + | Mutable -> Ppat_array pats + | Immutable -> + (Extensions.Immutable_arrays.pat_of + ~loc:pat.pat_loc + (Iapat_immutable_array pats) + ).ppat_desc + in + mkpat ppat | Tpat_lazy p -> mkpat (Ppat_lazy (loop p)) in @@ -1918,7 +1931,7 @@ end let contains_extension pat = exists_pattern (function - | {pat_desc=Tpat_var (_, {txt="*extension*"})} -> true + | {pat_desc=Tpat_var (_, {txt="*extension*"}, _)} -> true | _ -> false) pat @@ -1934,7 +1947,7 @@ type ppat_of_type = (string, label_description) Hashtbl.t let ppat_of_type env ty = - match pats_of_type env ty Value_mode.max_mode with + match pats_of_type env ty with | [] -> PT_empty | [{pat_desc = Tpat_any}] -> PT_any | [pat] -> @@ -2023,14 +2036,14 @@ let rec collect_paths_from_pat r p = match p.pat_desc with (if extendable_path path then add_path path r else r) ps | Tpat_any|Tpat_var _|Tpat_constant _| Tpat_variant (_,None,_) -> r -| Tpat_tuple ps | Tpat_array ps +| Tpat_tuple ps | Tpat_array (_, ps) | Tpat_construct (_, {cstr_tag=Cstr_extension _}, ps, _)-> List.fold_left collect_paths_from_pat r ps | Tpat_record (lps,_) -> List.fold_left (fun r (_, _, p) -> collect_paths_from_pat r p) r lps -| Tpat_variant (_, Some p, _) | Tpat_alias (p,_,_) -> collect_paths_from_pat r p +| Tpat_variant (_, Some p, _) | Tpat_alias (p,_,_,_) -> collect_paths_from_pat r p | Tpat_or (p1,p2,_) -> collect_paths_from_pat (collect_paths_from_pat r p1) p2 | Tpat_lazy p @@ -2152,7 +2165,7 @@ let inactive ~partial pat = | Total -> begin let rec loop pat = match pat.pat_desc with - | Tpat_lazy _ | Tpat_array _ -> + | Tpat_lazy _ | Tpat_array (Mutable, _) -> false | Tpat_any | Tpat_var _ | Tpat_variant (_, None, _) -> true @@ -2162,9 +2175,10 @@ let inactive ~partial pat = | Const_int _ | Const_char _ | Const_float _ | Const_int32 _ | Const_int64 _ | Const_nativeint _ -> true end - | Tpat_tuple ps | Tpat_construct (_, _, ps, _) -> + | Tpat_tuple ps | Tpat_construct (_, _, ps, _) + | Tpat_array (Immutable, ps) -> List.for_all (fun p -> loop p) ps - | Tpat_alias (p,_,_) | Tpat_variant (_, Some p, _) -> + | Tpat_alias (p,_,_,_) | Tpat_variant (_, Some p, _) -> loop p | Tpat_record (ldps,_) -> List.for_all @@ -2283,9 +2297,9 @@ type amb_row = { row : pattern list ; varsets : Ident.Set.t list; } let simplify_head_amb_pat head_bound_variables varsets ~add_column p ps k = let rec simpl head_bound_variables varsets p ps k = match (Patterns.General.view p).pat_desc with - | `Alias (p,x,_) -> + | `Alias (p,x,_,_) -> simpl (Ident.Set.add x head_bound_variables) varsets p ps k - | `Var (x, _) -> + | `Var (x, _, _) -> simpl (Ident.Set.add x head_bound_variables) varsets Patterns.omega ps k | `Or (p1,p2,_) -> simpl head_bound_variables varsets p1 ps diff --git a/typing/patterns.ml b/typing/patterns.ml index f7e8537bef6f..343d5b3830a5 100644 --- a/typing/patterns.ml +++ b/typing/patterns.ml @@ -25,7 +25,6 @@ let omega = { pat_loc = Location.none; pat_extra = []; pat_type = Ctype.none; - pat_mode = Value_mode.min_mode; pat_env = Env.empty; pat_attributes = []; } @@ -59,7 +58,7 @@ module Simple = struct | `Variant of label * pattern option * row_desc ref | `Record of (Longident.t loc * label_description * pattern) list * closed_flag - | `Array of pattern list + | `Array of mutable_flag * pattern list | `Lazy of pattern ] @@ -80,18 +79,18 @@ end module General = struct type view = [ | Half_simple.view - | `Var of Ident.t * string loc - | `Alias of pattern * Ident.t * string loc + | `Var of Ident.t * string loc * value_mode + | `Alias of pattern * Ident.t * string loc * value_mode ] type pattern = view pattern_data let view_desc = function | Tpat_any -> `Any - | Tpat_var (id, str) -> - `Var (id, str) - | Tpat_alias (p, id, str) -> - `Alias (p, id, str) + | Tpat_var (id, str, mode) -> + `Var (id, str, mode) + | Tpat_alias (p, id, str, mode) -> + `Alias (p, id, str, mode) | Tpat_constant cst -> `Constant cst | Tpat_tuple ps -> @@ -102,7 +101,7 @@ module General = struct `Variant (cstr, arg, row_desc) | Tpat_record (fields, closed) -> `Record (fields, closed) - | Tpat_array ps -> `Array ps + | Tpat_array (am,ps) -> `Array (am, ps) | Tpat_or (p, q, row_desc) -> `Or (p, q, row_desc) | Tpat_lazy p -> `Lazy p @@ -111,8 +110,8 @@ module General = struct let erase_desc = function | `Any -> Tpat_any - | `Var (id, str) -> Tpat_var (id, str) - | `Alias (p, id, str) -> Tpat_alias (p, id, str) + | `Var (id, str, mode) -> Tpat_var (id, str, mode) + | `Alias (p, id, str, mode) -> Tpat_alias (p, id, str, mode) | `Constant cst -> Tpat_constant cst | `Tuple ps -> Tpat_tuple ps | `Construct (cstr, cst_descr, args) -> @@ -121,7 +120,7 @@ module General = struct Tpat_variant (cstr, arg, row_desc) | `Record (fields, closed) -> Tpat_record (fields, closed) - | `Array ps -> Tpat_array ps + | `Array (am, ps) -> Tpat_array (am, ps) | `Or (p, q, row_desc) -> Tpat_or (p, q, row_desc) | `Lazy p -> Tpat_lazy p @@ -130,7 +129,7 @@ module General = struct let rec strip_vars (p : pattern) : Half_simple.pattern = match p.pat_desc with - | `Alias (p, _, _) -> strip_vars (view p) + | `Alias (p, _, _, _) -> strip_vars (view p) | `Var _ -> { p with pat_desc = `Any } | #Half_simple.view as view -> { p with pat_desc = view } end @@ -148,7 +147,7 @@ module Head : sig { tag: label; has_arg: bool; cstr_row: row_desc ref; type_row : unit -> row_desc; } - | Array of int + | Array of mutable_flag * int | Lazy type t = desc pattern_data @@ -175,7 +174,7 @@ end = struct type_row : unit -> row_desc; } (* the row of the type may evolve if [close_variant] is called, hence the (unit -> ...) delay *) - | Array of int + | Array of mutable_flag * int | Lazy type t = desc pattern_data @@ -200,8 +199,8 @@ end = struct | _ -> assert false in Variant {tag; has_arg; cstr_row; type_row}, pats - | `Array args -> - Array (List.length args), args + | `Array (am, args) -> + Array (am, List.length args), args | `Record (largs, _) -> let lbls = List.map (fun (_,lbl,_) -> lbl) largs in let pats = List.map (fun (_,_,pat) -> pat) largs in @@ -217,7 +216,7 @@ end = struct | Any -> 0 | Constant _ -> 0 | Construct c -> c.cstr_arity - | Tuple n | Array n -> n + | Tuple n | Array (_, n) -> n | Record l -> List.length l | Variant { has_arg; _ } -> if has_arg then 1 else 0 | Lazy -> 1 @@ -230,7 +229,7 @@ end = struct | Lazy -> Tpat_lazy omega | Constant c -> Tpat_constant c | Tuple n -> Tpat_tuple (omegas n) - | Array n -> Tpat_array (omegas n) + | Array (am, n) -> Tpat_array (am, omegas n) | Construct c -> let lid_loc = mkloc (Longident.Lident c.cstr_name) in Tpat_construct (lid_loc, c, omegas c.cstr_arity, None) diff --git a/typing/patterns.mli b/typing/patterns.mli index 66dd2d05a4a8..3116386b7425 100644 --- a/typing/patterns.mli +++ b/typing/patterns.mli @@ -46,7 +46,7 @@ module Simple : sig | `Variant of label * pattern option * row_desc ref | `Record of (Longident.t loc * label_description * pattern) list * closed_flag - | `Array of pattern list + | `Array of mutable_flag * pattern list | `Lazy of pattern ] type pattern = view pattern_data @@ -65,8 +65,8 @@ end module General : sig type view = [ | Half_simple.view - | `Var of Ident.t * string loc - | `Alias of pattern * Ident.t * string loc + | `Var of Ident.t * string loc * value_mode + | `Alias of pattern * Ident.t * string loc * value_mode ] type pattern = view pattern_data @@ -89,7 +89,7 @@ module Head : sig type_row : unit -> row_desc; } (* the row of the type may evolve if [close_variant] is called, hence the (unit -> ...) delay *) - | Array of int + | Array of mutable_flag * int | Lazy type t = desc pattern_data diff --git a/typing/predef.ml b/typing/predef.ml index 9c7aa5ba916a..81bbc1b9e98f 100644 --- a/typing/predef.ml +++ b/typing/predef.ml @@ -36,6 +36,7 @@ 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_iarray = ident_create "iarray" and ident_list = ident_create "list" and ident_option = ident_create "option" and ident_nativeint = ident_create "nativeint" @@ -54,6 +55,7 @@ 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_iarray = Pident ident_iarray and path_list = Pident ident_list and path_option = Pident ident_option and path_nativeint = Pident ident_nativeint @@ -72,6 +74,7 @@ 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_iarray t = newgenty (Tconstr(path_iarray, [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_nativeint = newgenty (Tconstr(path_nativeint, [], ref Mnil)) @@ -113,6 +116,7 @@ let all_predef_exns = [ ] let path_match_failure = Pident ident_match_failure +and path_invalid_argument = Pident ident_invalid_argument and path_assert_failure = Pident ident_assert_failure and path_undefined_recursive_module = Pident ident_undefined_recursive_module @@ -200,6 +204,9 @@ let common_initial_env add_type add_extension empty_env = |> add_type1 ident_array ~variance:Variance.full ~separability:Separability.Ind + |> add_type1 ident_iarray + ~variance:Variance.covariant + ~separability:Separability.Ind |> add_type ident_bool ~immediate:Always ~kind:(variant [cstr ident_false []; cstr ident_true []]) diff --git a/typing/predef.mli b/typing/predef.mli index 962a276a92db..bb779b310aff 100644 --- a/typing/predef.mli +++ b/typing/predef.mli @@ -26,6 +26,7 @@ val type_bool: type_expr val type_unit: type_expr val type_exn: type_expr val type_array: type_expr -> type_expr +val type_iarray: type_expr -> type_expr val type_list: type_expr -> type_expr val type_option: type_expr -> type_expr val type_nativeint: type_expr @@ -44,6 +45,7 @@ val path_bool: Path.t val path_unit: Path.t val path_exn: Path.t val path_array: Path.t +val path_iarray: Path.t val path_list: Path.t val path_option: Path.t val path_nativeint: Path.t @@ -54,6 +56,7 @@ val path_extension_constructor: Path.t val path_floatarray: Path.t val path_match_failure: Path.t +val path_invalid_argument: Path.t val path_assert_failure : Path.t val path_undefined_recursive_module : Path.t diff --git a/typing/printpat.ml b/typing/printpat.ml index 64094b63ec3a..5dcf70b5bddc 100644 --- a/typing/printpat.ml +++ b/typing/printpat.ml @@ -52,7 +52,7 @@ let rec pretty_val : type k . _ -> k general_pattern -> _ = fun ppf v -> | [] -> match v.pat_desc with | Tpat_any -> fprintf ppf "_" - | Tpat_var (x,_) -> fprintf ppf "%s" (Ident.name x) + | Tpat_var (x,_,_) -> fprintf ppf "%s" (Ident.name x) | Tpat_constant c -> fprintf ppf "%s" (pretty_const c) | Tpat_tuple vs -> fprintf ppf "@[(%a)@]" (pretty_vals ",") vs @@ -94,11 +94,15 @@ let rec pretty_val : type k . _ -> k general_pattern -> _ = fun ppf v -> fprintf ppf "@[{%a%t}@]" pretty_lvals filtered_lvs elision_mark end - | Tpat_array vs -> - fprintf ppf "@[[| %a |]@]" (pretty_vals " ;") vs + | Tpat_array (am, vs) -> + let punct = match am with + | Mutable -> '|' + | Immutable -> ':' + in + fprintf ppf "@[[%c %a %c]@]" punct (pretty_vals " ;") vs punct | Tpat_lazy v -> fprintf ppf "@[<2>lazy@ %a@]" pretty_arg v - | Tpat_alias (v, x,_) -> + | Tpat_alias (v, x, _, _) -> fprintf ppf "@[(%a@ as %a)@]" pretty_val v Ident.print x | Tpat_value v -> fprintf ppf "%a" pretty_val (v :> pattern) diff --git a/typing/printtyped.ml b/typing/printtyped.ml index efa566247b34..010eff6d1b0d 100644 --- a/typing/printtyped.ml +++ b/typing/printtyped.ml @@ -242,9 +242,12 @@ and pattern : type k . _ -> _ -> k general_pattern -> unit = fun i ppf x -> end; match x.pat_desc with | Tpat_any -> line i ppf "Tpat_any\n"; - | Tpat_var (s,_) -> line i ppf "Tpat_var \"%a\"\n" fmt_ident s; - | Tpat_alias (p, s,_) -> + | Tpat_var (s,_,m) -> + line i ppf "Tpat_var \"%a\"\n" fmt_ident s; + value_mode i ppf m + | Tpat_alias (p, s,_,m) -> line i ppf "Tpat_alias \"%a\"\n" fmt_ident s; + value_mode i ppf m; pattern i ppf p; | Tpat_constant (c) -> line i ppf "Tpat_constant %a\n" fmt_constant c; | Tpat_tuple (l) -> @@ -265,8 +268,8 @@ and pattern : type k . _ -> _ -> k general_pattern -> unit = fun i ppf x -> | Tpat_record (l, _c) -> line i ppf "Tpat_record\n"; list i longident_x_pattern ppf l; - | Tpat_array (l) -> - line i ppf "Tpat_array\n"; + | Tpat_array (am, l) -> + line i ppf "Tpat_array %a\n" fmt_mutable_flag am; list i pattern ppf l; | Tpat_lazy p -> line i ppf "Tpat_lazy\n"; @@ -317,21 +320,28 @@ and expression_extra i ppf (x,_,attrs) = line i ppf "Texp_newtype \"%s\"\n" s; attributes i ppf attrs; -and comprehension i ppf comp_types= - List.iter (fun {clauses; guard} -> - List.iter (fun comp_type -> - match comp_type with - | From_to (s, _, e2, e3, df) -> - line i ppf "From_to \"%a\" %a\n" fmt_ident s fmt_direction_flag df; - expression i ppf e2; - expression i ppf e3 - | In (p, e2) -> - line i ppf "In\n" ; - pattern i ppf p; - expression i ppf e2) - clauses; - Option.iter (expression i ppf) guard - ) comp_types +and alloc_mode i ppf m = + line i ppf "alloc_mode %s\n" + (match Types.Alloc_mode.check_const m with + | Some Global -> "global" + | Some Local -> "local" + | None -> "" + ) + +and alloc_mode_option i ppf m = Option.iter (alloc_mode i ppf) m + +and value_mode i ppf m = + line i ppf "alloc_mode %s\n" + (match Types.Value_mode.check_const m with + | Some Global -> "global" + | Some Local -> "local" + | Some Regional -> "regional" + | None -> "" + ) + +and expression_alloc_mode i ppf (expr, am) = + alloc_mode i ppf am; + expression i ppf expr and expression i ppf x = line i ppf "expression %a\n" fmt_location x.exp_loc; @@ -343,11 +353,6 @@ and expression i ppf x = line i ppf "extra\n"; List.iter (expression_extra (i+1) ppf) extra; end; - (match Types.Value_mode.check_const x.exp_mode with - | Some Global -> line i ppf "value_mode global\n" - | Some Regional -> line i ppf "value_mode regional\n" - | Some Local -> line i ppf "value_mode local\n" - | None -> line i ppf "value_mode \n"); match x.exp_desc with | Texp_ident (li,_,_,_) -> line i ppf "Texp_ident %a\n" fmt_path li; | Texp_instvar (_, li,_) -> line i ppf "Texp_instvar %a\n" fmt_path li; @@ -356,18 +361,20 @@ and expression i ppf x = line i ppf "Texp_let %a\n" fmt_rec_flag rf; list i value_binding ppf l; expression i ppf e; - | Texp_function { arg_label = p; param = _; cases; partial = _; region } -> + | Texp_function { arg_label = p; param = _; cases; partial = _; region; alloc_mode = am } -> line i ppf "Texp_function\n"; line i ppf "region %b\n" region; + alloc_mode i ppf am; arg_label i ppf p; list i case ppf cases; - | Texp_apply (e, l, m) -> + | Texp_apply (e, l, m, am) -> line i ppf "Texp_apply\n"; line i ppf "apply_mode %s\n" (match m with | Tail -> "Tail" | Nontail -> "Nontail" | Default -> "Default"); + alloc_mode i ppf am; expression i ppf e; list i label_x_apply_arg ppf l; | Texp_match (e, l, _partial) -> @@ -378,36 +385,48 @@ and expression i ppf x = line i ppf "Texp_try\n"; expression i ppf e; list i case ppf l; - | Texp_tuple (l) -> + | Texp_tuple (l, am) -> line i ppf "Texp_tuple\n"; + alloc_mode i ppf am; list i expression ppf l; - | Texp_construct (li, _, eo) -> + | Texp_construct (li, _, eo, am) -> line i ppf "Texp_construct %a\n" fmt_longident li; + alloc_mode_option i ppf am; list i expression ppf eo; | Texp_variant (l, eo) -> line i ppf "Texp_variant \"%s\"\n" l; - option i expression ppf eo; - | Texp_record { fields; representation; extended_expression } -> + option i expression_alloc_mode ppf eo; + | Texp_record { fields; representation; extended_expression; alloc_mode = am} -> line i ppf "Texp_record\n"; let i = i+1 in + alloc_mode_option i ppf am; line i ppf "fields =\n"; array (i+1) record_field ppf fields; line i ppf "representation =\n"; record_representation (i+1) ppf representation; line i ppf "extended_expression =\n"; option (i+1) expression ppf extended_expression; - | Texp_field (e, li, _) -> + | Texp_field (e, li, _, am) -> line i ppf "Texp_field\n"; + alloc_mode_option i ppf am; expression i ppf e; longident i ppf li; - | Texp_setfield (e1, li, _, e2) -> + | Texp_setfield (e1, am, li, _, e2) -> line i ppf "Texp_setfield\n"; + alloc_mode i ppf am; expression i ppf e1; longident i ppf li; expression i ppf e2; - | Texp_array (l) -> - line i ppf "Texp_array\n"; + | Texp_array (amut, l, amode) -> + line i ppf "Texp_array %a\n" fmt_mutable_flag amut; + alloc_mode i ppf amode; list i expression ppf l; + | Texp_list_comprehension comp -> + line i ppf "Texp_list_comprehension\n"; + comprehension i ppf comp + | Texp_array_comprehension (amut, comp) -> + line i ppf "Texp_array_comprehension %a\n" fmt_mutable_flag amut; + comprehension i ppf comp | Texp_ifthenelse (e1, e2, eo) -> line i ppf "Texp_ifthenelse\n"; expression i ppf e1; @@ -423,14 +442,6 @@ and expression i ppf x = expression i ppf wh_cond; line i ppf "body_region %b\n" wh_body_region; expression i ppf wh_body; - | Texp_list_comprehension(e1, type_comp) -> - line i ppf "Texp_list_comprehension\n"; - expression i ppf e1; - comprehension i ppf type_comp - | Texp_arr_comprehension(e1, type_comp) -> - line i ppf "Texp_arr_comprehension\n"; - expression i ppf e1; - comprehension i ppf type_comp | Texp_for {for_id; for_from; for_to; for_dir; for_body; for_region} -> line i ppf "Texp_for \"%a\" %a\n" fmt_ident for_id fmt_direction_flag for_dir; @@ -438,14 +449,17 @@ and expression i ppf x = expression i ppf for_to; line i ppf "region %b\n" for_region; expression i ppf for_body - | Texp_send (e, Tmeth_name s, _) -> + | Texp_send (e, Tmeth_name s, _, am) -> line i ppf "Texp_send \"%s\"\n" s; + alloc_mode i ppf am; expression i ppf e - | Texp_send (e, Tmeth_val s, _) -> + | Texp_send (e, Tmeth_val s, _, am) -> line i ppf "Texp_send \"%a\"\n" fmt_ident s; + alloc_mode i ppf am; expression i ppf e - | Texp_send (e, Tmeth_ancestor(s, _), _) -> + | Texp_send (e, Tmeth_ancestor(s, _), _, am) -> line i ppf "Texp_send \"%a\"\n" fmt_ident s; + alloc_mode i ppf am; expression i ppf e | Texp_new (li, _, _, _) -> line i ppf "Texp_new %a\n" fmt_path li; | Texp_setinstvar (_, s, _, e) -> @@ -963,6 +977,37 @@ and longident_x_pattern i ppf (li, _, p) = line i ppf "%a\n" fmt_longident li; pattern (i+1) ppf p; +and comprehension i ppf {comp_body; comp_clauses} = + line i ppf "comprehension\n"; + expression i ppf comp_body; + List.iter (comprehension_clause i ppf) comp_clauses + +and comprehension_clause i ppf = function + | Texp_comp_for ccbs -> + line i ppf "Texp_comp_for\n"; + List.iter (comprehension_clause_binding i ppf) ccbs + | Texp_comp_when cond -> + line i ppf "Texp_comp_when\n"; + expression i ppf cond + +and comprehension_clause_binding + i ppf { comp_cb_iterator; comp_cb_attributes} = + line i ppf "comprehension_clause_binding\n"; + comprehension_iterator i ppf comp_cb_iterator; + attributes i ppf comp_cb_attributes + +and comprehension_iterator i ppf = function + | Texp_comp_range { ident; pattern = _; start; stop; direction } -> + line i ppf "Texp_comp_range \"%a\" %a\n" + fmt_ident ident + fmt_direction_flag direction; + expression i ppf start; + expression i ppf stop + | Texp_comp_in { pattern = pattern'; sequence } -> + line i ppf "Texp_comp_in\n"; + pattern i ppf pattern'; + expression i ppf sequence + and case : type k . _ -> _ -> k case -> unit = fun i ppf {c_lhs; c_guard; c_rhs} -> diff --git a/typing/rec_check.ml b/typing/rec_check.ml index 7601d6761ca8..283c8737ae35 100644 --- a/typing/rec_check.ml +++ b/typing/rec_check.ml @@ -157,7 +157,7 @@ let classify_expression : Typedtree.expression -> sd = | Texp_letexception (_, e) -> classify_expression env e - | Texp_construct (_, {cstr_tag = Cstr_unboxed}, [e]) -> + | Texp_construct (_, {cstr_tag = Cstr_unboxed}, [e], _) -> classify_expression env e | Texp_construct _ -> Static @@ -168,19 +168,15 @@ let classify_expression : Typedtree.expression -> sd = | Texp_record _ -> Static - | Texp_apply ({exp_desc = Texp_ident (_, _, vd, Id_prim _)}, _, _) + | Texp_apply ({exp_desc = Texp_ident (_, _, vd, Id_prim _)}, _, _, _) when is_ref vd -> Static - | Texp_apply (_, args, _) + | Texp_apply (_, args, _, _) when List.exists is_abstracted_arg args -> Static | Texp_apply _ -> Dynamic - | Texp_list_comprehension _ -> - Dynamic - | Texp_arr_comprehension _ -> - Dynamic | Texp_for _ | Texp_constant _ | Texp_new _ @@ -202,6 +198,8 @@ let classify_expression : Typedtree.expression -> sd = Static | Texp_match _ + | Texp_list_comprehension _ + | Texp_array_comprehension _ | Texp_ifthenelse _ | Texp_send _ | Texp_field _ @@ -226,7 +224,7 @@ let classify_expression : Typedtree.expression -> sd = let old_env = env in let add_value_binding env vb = match vb.vb_pat.pat_desc with - | Tpat_var (id, _loc) -> + | Tpat_var (id, _loc, _mode) -> let size = classify_expression old_env vb.vb_expr in Ident.add id size env | _ -> @@ -515,6 +513,19 @@ let (<<) : term_judg -> Mode.t -> term_judg = let (>>) : bind_judg -> term_judg -> term_judg = fun binder term mode -> binder mode (term mode) +(* Compute the appropriate [mode] for an array expression *) +let array_mode exp = match Typeopt.array_kind exp with + | Lambda.Pfloatarray -> + (* (flat) float arrays unbox their elements *) + Dereference + | Lambda.Pgenarray -> + (* This is counted as a use, because constructing a generic array + involves inspecting to decide whether to unbox (PR#6939). *) + Dereference + | Lambda.Paddrarray | Lambda.Pintarray -> + (* non-generic, non-float arrays act as constructors *) + Guard + (* Expression judgment: G |- e : m where (m) is an input of the code and (G) is an output; @@ -546,22 +557,6 @@ let rec expression : Typedtree.expression -> term_judg = List.split (List.map (fun c -> case c mode) cases) in let env_e = expression e (List.fold_left Mode.join Ignore pat_modes) in Env.join_list (env_e :: pat_envs)) - | Texp_list_comprehension(body, comp_types) -> - join ((expression body << Guard)::(comprehension comp_types)) - | Texp_arr_comprehension(body, comp_types) -> - let array_mode = match Typeopt.array_kind exp with - | Lambda.Pfloatarray -> - (* (flat) float arrays unbox their elements *) - Dereference - | Lambda.Pgenarray -> - (* This is counted as a use, because constructing a generic array - involves inspecting to decide whether to unbox (PR#6939). *) - Dereference - | Lambda.Paddrarray | Lambda.Pintarray -> - (* non-generic, non-float arrays act as constructors *) - Guard - in - join ((expression body << array_mode)::(comprehension comp_types)) | Texp_for tf -> (* G1 |- low: m[Dereference] @@ -587,7 +582,7 @@ let rec expression : Typedtree.expression -> term_judg = | Texp_instvar (self_path, pth, _inst_var) -> join [path self_path << Dereference; path pth] | Texp_apply - ({exp_desc = Texp_ident (_, _, vd, Id_prim _)}, [_, Arg arg], _) + ({exp_desc = Texp_ident (_, _, vd, Id_prim _)}, [_, Arg arg], _, _) when is_ref vd -> (* G |- e: m[Guard] @@ -595,7 +590,7 @@ let rec expression : Typedtree.expression -> term_judg = G |- ref e: m *) expression arg << Guard - | Texp_apply (e, args, _) -> + | Texp_apply (e, args, _, _) -> let arg (_, arg) = match arg with | Omitted _ -> empty @@ -609,23 +604,17 @@ let rec expression : Typedtree.expression -> term_judg = else Dereference in join [expression e; list arg args] << app_mode - | Texp_tuple exprs -> + | Texp_tuple (exprs, _) -> list expression exprs << Guard - | Texp_array exprs -> - let array_mode = match Typeopt.array_kind exp with - | Lambda.Pfloatarray -> - (* (flat) float arrays unbox their elements *) - Dereference - | Lambda.Pgenarray -> - (* This is counted as a use, because constructing a generic array - involves inspecting to decide whether to unbox (PR#6939). *) - Dereference - | Lambda.Paddrarray | Lambda.Pintarray -> - (* non-generic, non-float arrays act as constructors *) - Guard - in - list expression exprs << array_mode - | Texp_construct (_, desc, exprs) -> + | Texp_array (_, exprs, _) -> + list expression exprs << array_mode exp + | Texp_list_comprehension { comp_body; comp_clauses } -> + join ((expression comp_body << Guard) :: + comprehension_clauses comp_clauses) + | Texp_array_comprehension (_, { comp_body; comp_clauses }) -> + join ((expression comp_body << array_mode exp) :: + comprehension_clauses comp_clauses) + | Texp_construct (_, desc, exprs, _) -> let access_constructor = match desc.cstr_tag with | Cstr_extension (pth, _) -> @@ -648,7 +637,7 @@ let rec expression : Typedtree.expression -> term_judg = ------------------ ----------- G |- `A e: m [] |- `A: m *) - option expression eo << Guard + option (fun (e, _) -> expression e) eo << Guard | Texp_record { fields = es; extended_expression = eo; representation = rep } -> let field_mode = match rep with @@ -681,7 +670,7 @@ let rec expression : Typedtree.expression -> term_judg = expression ifso; option expression ifnot; ] - | Texp_setfield (e1, _, _, e2) -> + | Texp_setfield (e1, _, _, _, e2) -> (* G1 |- e1: m[Dereference] G2 |- e2: m[Dereference] @@ -720,7 +709,7 @@ let rec expression : Typedtree.expression -> term_judg = expression wh_cond << Dereference; expression wh_body << Guard; ] - | Texp_send (e1, _, _) -> + | Texp_send (e1, _, _, _) -> (* G |- e: m[Dereference] ---------------------- (plus weird 'eo' option) @@ -729,7 +718,7 @@ let rec expression : Typedtree.expression -> term_judg = join [ expression e1 << Dereference ] - | Texp_field (e, _, _) -> + | Texp_field (e, _, _, _) -> (* G |- e: m[Dereference] ----------------------- @@ -848,26 +837,21 @@ let rec expression : Typedtree.expression -> term_judg = expression handler << Dereference | Texp_probe_is_enabled _ -> empty -and comprehension comp_types= - List.concat_map (fun {clauses; guard} -> - let clauses = - List.concat_map (fun comp_type -> - match comp_type with - | From_to (_, _, low, high, _) -> - [ - expression low << Dereference; - expression high << Dereference; - ] - | In (_, in_) -> - [ - expression in_ << Dereference; - ] - ) clauses - in - match guard with - | None -> clauses - | Some guard -> (expression guard << Dereference)::clauses) - comp_types +and comprehension_clauses clauses = + List.concat_map + (function + | Texp_comp_for bindings -> + List.concat_map + (fun { comp_cb_iterator; comp_cb_attributes = _ } -> + match comp_cb_iterator with + | Texp_comp_range { ident = _; start; stop; direction = _ } -> + [expression start << Dereference; expression stop << Dereference] + | Texp_comp_in { pattern = _; sequence } -> + [expression sequence << Dereference]) + bindings + | Texp_comp_when guard -> + [expression guard << Dereference]) + clauses and binding_op : Typedtree.binding_op -> term_judg = fun bop -> @@ -1242,8 +1226,8 @@ and pattern : type k . k general_pattern -> Env.t -> mode = fun pat env -> and is_destructuring_pattern : type k . k general_pattern -> bool = fun pat -> match pat.pat_desc with | Tpat_any -> false - | Tpat_var (_, _) -> false - | Tpat_alias (pat, _, _) -> is_destructuring_pattern pat + | Tpat_var (_, _, _) -> false + | Tpat_alias (pat, _, _, _) -> is_destructuring_pattern pat | Tpat_constant _ -> true | Tpat_tuple _ -> true | Tpat_construct _ -> true diff --git a/typing/tast_iterator.ml b/typing/tast_iterator.ml index 42cd8c240d2b..584764197e1e 100644 --- a/typing/tast_iterator.ml +++ b/typing/tast_iterator.ml @@ -180,8 +180,8 @@ let pat Option.iter (fun (_ids, ct) -> sub.typ sub ct) vto | Tpat_variant (_, po, _) -> Option.iter (sub.pat sub) po | Tpat_record (l, _) -> List.iter (fun (_, _, i) -> sub.pat sub i) l - | Tpat_array l -> List.iter (sub.pat sub) l - | Tpat_alias (p, _, _) -> sub.pat sub p + | Tpat_array (_, l) -> List.iter (sub.pat sub) l + | Tpat_alias (p, _, _, _) -> sub.pat sub p | Tpat_lazy p -> sub.pat sub p | Tpat_value p -> sub.pat sub (p :> pattern) | Tpat_exception p -> sub.pat sub p @@ -208,7 +208,7 @@ let expr sub {exp_extra; exp_desc; exp_env; _} = sub.expr sub exp | Texp_function {cases; _} -> List.iter (sub.case sub) cases - | Texp_apply (exp, list, _) -> + | Texp_apply (exp, list, _, _) -> sub.expr sub exp; List.iter (function | (_, Arg exp) -> sub.expr sub exp @@ -220,20 +220,39 @@ let expr sub {exp_extra; exp_desc; exp_env; _} = | Texp_try (exp, cases) -> sub.expr sub exp; List.iter (sub.case sub) cases - | Texp_tuple list -> List.iter (sub.expr sub) list - | Texp_construct (_, _, args) -> List.iter (sub.expr sub) args - | Texp_variant (_, expo) -> Option.iter (sub.expr sub) expo + | Texp_tuple (list, _) -> List.iter (sub.expr sub) list + | Texp_construct (_, _, args, _) -> List.iter (sub.expr sub) args + | Texp_variant (_, expo) -> Option.iter (fun (expr, _) -> sub.expr sub expr) expo | Texp_record { fields; extended_expression; _} -> Array.iter (function | _, Kept _ -> () | _, Overridden (_, exp) -> sub.expr sub exp) fields; Option.iter (sub.expr sub) extended_expression; - | Texp_field (exp, _, _) -> sub.expr sub exp - | Texp_setfield (exp1, _, _, exp2) -> + | Texp_field (exp, _, _, _) -> sub.expr sub exp + | Texp_setfield (exp1, _, _, _, exp2) -> sub.expr sub exp1; sub.expr sub exp2 - | Texp_array list -> List.iter (sub.expr sub) list + | Texp_array (_, list, _) -> List.iter (sub.expr sub) list + | Texp_list_comprehension { comp_body; comp_clauses } + | Texp_array_comprehension (_, { comp_body; comp_clauses }) -> + sub.expr sub comp_body; + List.iter + (function + | Texp_comp_for bindings -> + List.iter + (fun { comp_cb_iterator; comp_cb_attributes = _ } -> + match comp_cb_iterator with + | Texp_comp_range { ident = _; start; stop; direction = _ } -> + sub.expr sub start; + sub.expr sub stop + | Texp_comp_in { pattern; sequence } -> + sub.pat sub pattern; + sub.expr sub sequence) + bindings + | Texp_comp_when exp -> + sub.expr sub exp) + comp_clauses | Texp_ifthenelse (exp1, exp2, expo) -> sub.expr sub exp1; sub.expr sub exp2; @@ -244,22 +263,11 @@ let expr sub {exp_extra; exp_desc; exp_env; _} = | Texp_while { wh_cond; wh_body } -> sub.expr sub wh_cond; sub.expr sub wh_body - | Texp_list_comprehension (exp1, type_comps) - | Texp_arr_comprehension (exp1, type_comps) -> - sub.expr sub exp1; - List.iter (fun {clauses; guard} -> - List.iter (fun type_comp -> - match type_comp with - | From_to (_, _,e2,e3, _) -> sub.expr sub e2; sub.expr sub e3 - | In (_, e2) -> sub.expr sub e2 - ) clauses; - Option.iter (fun g -> sub.expr sub g) guard) - type_comps | Texp_for {for_from; for_to; for_body} -> sub.expr sub for_from; sub.expr sub for_to; sub.expr sub for_body - | Texp_send (exp, _, _) -> + | Texp_send (exp, _, _, _) -> sub.expr sub exp | Texp_new _ -> () | Texp_instvar _ -> () diff --git a/typing/tast_mapper.ml b/typing/tast_mapper.ml index e49991f7555f..4ca8321f27f9 100644 --- a/typing/tast_mapper.ml +++ b/typing/tast_mapper.ml @@ -233,8 +233,8 @@ let pat Tpat_variant (l, Option.map (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_alias (p, id, s) -> Tpat_alias (sub.pat sub p, id, s) + | Tpat_array (am, l) -> Tpat_array (am, List.map (sub.pat sub) l) + | Tpat_alias (p, id, s, m) -> Tpat_alias (sub.pat sub p, id, s, m) | Tpat_lazy p -> Tpat_lazy (sub.pat sub p) | Tpat_value p -> (as_computation_pattern (sub.pat sub (p :> pattern))).pat_desc @@ -256,18 +256,39 @@ let expr sub x = 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 map_comprehension comp_types= - List.map (fun {clauses; guard} -> - let clauses = - List.map (fun comp_type -> - match comp_type with - | From_to (id, p, e2, e3, dir) -> - From_to(id, p, sub.expr sub e2, sub.expr sub e3, dir) - | In (p, e2) -> In(sub.pat sub p, sub.expr sub e2) - ) clauses - in - {clauses; guard=(Option.map (sub.expr sub) guard)} - ) comp_types + let map_comprehension {comp_body; comp_clauses} = + { comp_body = + sub.expr sub comp_body + ; comp_clauses = + List.map + (function + | Texp_comp_for bindings -> + Texp_comp_for + (List.map + (fun {comp_cb_iterator; comp_cb_attributes} -> + let comp_cb_iterator = match comp_cb_iterator with + | Texp_comp_range + { ident; pattern; start; stop; direction } + -> + Texp_comp_range + { ident + ; pattern + (* Just mirroring [ident], ignored (see + [Texp_for] *) + ; start = sub.expr sub start + ; stop = sub.expr sub stop + ; direction } + | Texp_comp_in { pattern; sequence } -> + Texp_comp_in + { pattern = sub.pat sub pattern + ; sequence = sub.expr sub sequence } + in + {comp_cb_iterator; comp_cb_attributes}) + bindings) + | Texp_comp_when exp -> + Texp_comp_when (sub.expr sub exp)) + comp_clauses + } in let exp_desc = match x.exp_desc with @@ -277,18 +298,18 @@ let expr sub x = 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; region; curry; warnings } -> + partial; region; curry; warnings; arg_mode; alloc_mode } -> let cases = List.map (sub.case sub) cases in Texp_function { arg_label; param; cases; - partial; region; curry; warnings } - | Texp_apply (exp, list, pos) -> + partial; region; curry; warnings; arg_mode; alloc_mode } + | Texp_apply (exp, list, pos, am) -> Texp_apply ( sub.expr sub exp, List.map (function | (lbl, Arg exp) -> (lbl, Arg (sub.expr sub exp)) | (lbl, Omitted o) -> (lbl, Omitted o)) list, - pos + pos, am ) | Texp_match (exp, cases, p) -> Texp_match ( @@ -301,13 +322,13 @@ let expr sub x = sub.expr sub exp, List.map (sub.case 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_tuple (list, am) -> + Texp_tuple (List.map (sub.expr sub) list, am) + | Texp_construct (lid, cd, args, am) -> + Texp_construct (lid, cd, List.map (sub.expr sub) args, am) | Texp_variant (l, expo) -> - Texp_variant (l, Option.map (sub.expr sub) expo) - | Texp_record { fields; representation; extended_expression } -> + Texp_variant (l, Option.map (fun (e, am) -> (sub.expr sub e, am)) expo) + | Texp_record { fields; representation; extended_expression; alloc_mode } -> let fields = Array.map (function | label, Kept t -> label, Kept t | label, Overridden (lid, exp) -> @@ -317,18 +338,24 @@ let expr sub x = Texp_record { fields; representation; extended_expression = Option.map (sub.expr sub) extended_expression; + alloc_mode } - | Texp_field (exp, lid, ld) -> - Texp_field (sub.expr sub exp, lid, ld) - | Texp_setfield (exp1, lid, ld, exp2) -> + | Texp_field (exp, lid, ld, am) -> + Texp_field (sub.expr sub exp, lid, ld, am) + | Texp_setfield (exp1, am, lid, ld, exp2) -> Texp_setfield ( sub.expr sub exp1, + am, lid, ld, sub.expr sub exp2 ) - | Texp_array list -> - Texp_array (List.map (sub.expr sub) list) + | Texp_array (amut, list, alloc_mode) -> + Texp_array (amut, List.map (sub.expr sub) list, alloc_mode) + | Texp_list_comprehension comp -> + Texp_list_comprehension (map_comprehension comp) + | Texp_array_comprehension (amut, comp) -> + Texp_array_comprehension (amut, map_comprehension comp) | Texp_ifthenelse (exp1, exp2, expo) -> Texp_ifthenelse ( sub.expr sub exp1, @@ -344,26 +371,17 @@ let expr sub x = Texp_while { wh with wh_cond = sub.expr sub wh.wh_cond; wh_body = sub.expr sub wh.wh_body } - | Texp_list_comprehension(e1, type_comp) -> - Texp_list_comprehension( - sub.expr sub e1, - map_comprehension type_comp - ) - | Texp_arr_comprehension(e1, type_comp) -> - Texp_arr_comprehension( - sub.expr sub e1, - map_comprehension type_comp - ) | Texp_for tf -> Texp_for {tf with for_from = sub.expr sub tf.for_from; for_to = sub.expr sub tf.for_to; for_body = sub.expr sub tf.for_body} - | Texp_send (exp, meth, ap) -> + | Texp_send (exp, meth, ap, am) -> Texp_send ( sub.expr sub exp, meth, - ap + ap, + am ) | Texp_new _ | Texp_instvar _ as d -> d diff --git a/typing/typeclass.ml b/typing/typeclass.ml index 864df442311c..5659b1c3639d 100644 --- a/typing/typeclass.ml +++ b/typing/typeclass.ml @@ -259,9 +259,9 @@ let unify_delayed_method_type loc env label ty expected_ty= raise(Error(loc, env, Field_type_mismatch ("method", label, trace))) let type_constraint val_env sty sty' loc = - let cty = transl_simple_type val_env false Global sty in + let cty = transl_simple_type val_env ~closed:false Global sty in let ty = cty.ctyp_type in - let cty' = transl_simple_type val_env false Global sty' in + let cty' = transl_simple_type val_env ~closed:false Global sty' in let ty' = cty'.ctyp_type in begin try Ctype.unify val_env ty ty' with Ctype.Unify err -> @@ -301,7 +301,7 @@ let rec class_type_field env sign self_scope ctf = | Pctf_val ({txt=lab}, mut, virt, sty) -> mkctf_with_attrs (fun () -> - let cty = transl_simple_type env false Global sty in + let cty = transl_simple_type env ~closed:false Global sty in let ty = cty.ctyp_type in add_instance_variable ~strict:false loc env lab mut virt ty sign; Tctf_val (lab, mut, virt, cty)) @@ -325,7 +325,7 @@ let rec class_type_field env sign self_scope ctf = ) :: !delayed_meth_specs; Tctf_method (lab, priv, virt, returned_cty) | _ -> - let cty = transl_simple_type env false Global sty in + let cty = transl_simple_type env ~closed:false Global sty in let ty = cty.ctyp_type in add_method loc env lab priv virt ty sign; Tctf_method (lab, priv, virt, cty)) @@ -349,7 +349,7 @@ and class_signature virt env pcsig self_scope loc = (* Introduce a dummy method preventing self type from being closed. *) Ctype.add_dummy_method env ~scope:self_scope sign; - let self_cty = transl_simple_type env false Global sty in + let self_cty = transl_simple_type env ~closed:false Global sty in let self_type = self_cty.ctyp_type in begin try Ctype.unify env self_type sign.csig_self @@ -399,7 +399,7 @@ and class_type_aux env virt self_scope scty = List.length styl))); let ctys = List.map2 (fun sty ty -> - let cty' = transl_simple_type env false Global sty in + let cty' = transl_simple_type env ~closed:false Global sty in let ty' = cty'.ctyp_type in begin try Ctype.unify env ty' ty with Ctype.Unify err -> @@ -419,7 +419,7 @@ and class_type_aux env virt self_scope scty = cltyp (Tcty_signature clsig) typ | Pcty_arrow (l, sty, scty) -> - let cty = transl_simple_type env false Global sty in + let cty = transl_simple_type env ~closed:false Global sty in let ty = cty.ctyp_type in let ty = if Btype.is_optional l @@ -651,7 +651,7 @@ let rec class_field_first_pass self_loc cl_num sign self_scope acc cf = with_attrs (fun () -> if !Clflags.principal then Ctype.begin_def (); - let cty = Typetexp.transl_simple_type val_env false Global styp in + let cty = Typetexp.transl_simple_type val_env ~closed:false Global styp in let ty = cty.ctyp_type in if !Clflags.principal then begin Ctype.end_def (); @@ -725,7 +725,7 @@ let rec class_field_first_pass self_loc cl_num sign self_scope acc cf = with_attrs (fun () -> let sty = Ast_helper.Typ.force_poly sty in - let cty = transl_simple_type val_env false Global sty in + let cty = transl_simple_type val_env ~closed:false Global sty in let ty = cty.ctyp_type in add_method loc val_env label.txt priv Virtual ty sign; let field = @@ -765,7 +765,7 @@ let rec class_field_first_pass self_loc cl_num sign self_scope acc cf = | Some sty -> let sty = Ast_helper.Typ.force_poly sty in let cty' = - Typetexp.transl_simple_type val_env false Global sty + Typetexp.transl_simple_type val_env ~closed:false Global sty in cty'.ctyp_type in @@ -1073,7 +1073,7 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = if Path.same decl.cty_path unbound_class then raise(Error(scl.pcl_loc, val_env, Unbound_class_2 lid.txt)); let tyl = List.map - (fun sty -> transl_simple_type val_env false Global sty) + (fun sty -> transl_simple_type val_env ~closed:false Global sty) styl in let (params, clty) = @@ -1178,7 +1178,6 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = Id_value); exp_loc = Location.none; exp_extra = []; exp_type = Ctype.instance vd.val_type; - exp_mode = Value_mode.global; exp_attributes = []; (* check *) exp_env = val_env'}) end @@ -1256,7 +1255,7 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = ) in let eliminate_optional_arg () = - Arg (option_none val_env ty0 Value_mode.global Location.none) + Arg (option_none val_env ty0 Location.none) in let remaining_sargs, arg = if ignore_labels then begin @@ -1330,7 +1329,8 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = List.fold_right (fun (id, modes) (vals, met_env) -> List.iter - (fun (loc, mode) -> Typecore.escape ~loc ~env:val_env mode) + (fun (loc, mode) -> + Typecore.escape ~loc ~env:val_env ~reason:Other mode) modes; let path = Pident id in (* do not mark the value as used *) @@ -1342,7 +1342,6 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = Id_value); exp_loc = Location.none; exp_extra = []; exp_type = Ctype.instance vd.val_type; - exp_mode = Value_mode.global; exp_attributes = []; exp_env = val_env; } @@ -1376,14 +1375,14 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = } | Pcl_constraint (scl', scty) -> Ctype.begin_class_def (); - let context = Typetexp.narrow () in - let cl = class_expr cl_num val_env met_env virt self_scope scl' in - complete_class_type cl.cl_loc val_env virt Class_type cl.cl_type; - Typetexp.widen context; - let context = Typetexp.narrow () in - let clty = class_type val_env virt self_scope scty in - complete_class_type clty.cltyp_loc val_env virt Class clty.cltyp_type; - Typetexp.widen context; + let cl = Typetexp.TyVarEnv.with_local_scope (fun () -> + let cl = class_expr cl_num val_env met_env virt self_scope scl' in + complete_class_type cl.cl_loc val_env virt Class_type cl.cl_type; + cl) in + let clty = Typetexp.TyVarEnv.with_local_scope (fun () -> + let clty = class_type val_env virt self_scope scty in + complete_class_type clty.cltyp_loc val_env virt Class clty.cltyp_type; + clty) in Ctype.end_def (); Ctype.limited_generalize_class_type @@ -1549,7 +1548,7 @@ let class_infos define_class kind constr_type, dummy_class) (res, env) = - reset_type_variables (); + TyVarEnv.reset (); Ctype.begin_class_def (); (* Introduce class parameters *) diff --git a/typing/typecore.ml b/typing/typecore.ml index 352c0ae87048..c2a969e587f3 100644 --- a/typing/typecore.ml +++ b/typing/typecore.ml @@ -23,18 +23,25 @@ open Typedtree open Btype open Ctype +type comprehension_type = + | List_comprehension + | Array_comprehension of mutable_flag + type type_forcing_context = | If_conditional | If_no_else_branch | While_loop_conditional | While_loop_body - | In_comprehension_argument | For_loop_start_index | For_loop_stop_index | For_loop_body | Assert_condition | Sequence_left_hand_side | When_guard + | Comprehension_in_iterator of comprehension_type + | Comprehension_for_start + | Comprehension_for_stop + | Comprehension_when type type_expected = { ty: type_expr; @@ -94,6 +101,10 @@ type existential_restriction = | In_class_def (** or in [class c = let ... in ...] *) | In_self_pattern (** or in self pattern *) +type submode_reason = + | Application of type_expr + | Other + type error = | Constructor_arity_mismatch of Longident.t * int * int | Label_mismatch of Longident.t * Errortrace.unification_error @@ -146,6 +157,7 @@ type error = | Unexpected_existential of existential_restriction * string * string list | Invalid_interval | Invalid_for_loop_index + | Invalid_comprehension_for_range_iterator_index | No_value_clauses | Exception_pattern_disallowed | Mixed_value_and_exception_patterns_under_guard @@ -172,7 +184,8 @@ type error = | Missing_type_constraint | Wrong_expected_kind of wrong_kind_sort * wrong_kind_context * type_expr | Expr_not_a_record_type of type_expr - | Local_value_escapes of Value_mode.error * Env.escaping_context option + | Local_value_escapes of Value_mode.error * submode_reason * Env.escaping_context option + | Local_application_complete of Asttypes.arg_label * [`Prefix|`Single_arg|`Entire_apply] | Param_mode_mismatch of type_expr | Uncurried_function_escapes | Local_return_annotation_mismatch of Location.t @@ -378,7 +391,7 @@ let mode_lazy = let tuple_modes = [] in { position; escaping_context; mode; tuple_modes } -let submode ~loc ~env mode expected_mode = +let submode ~loc ~env ~reason mode expected_mode = let res = match expected_mode.tuple_modes with | [] -> Value_mode.submode mode expected_mode.mode @@ -386,12 +399,13 @@ let submode ~loc ~env mode expected_mode = in match res with | Ok () -> () - | Error reason -> + | Error failure_reason -> let context = expected_mode.escaping_context in - raise (Error(loc, env, Local_value_escapes(reason, context))) + let error = Local_value_escapes(failure_reason, reason, context) in + raise (Error(loc, env, error)) -let escape ~loc ~env m = - submode ~loc ~env m mode_global +let escape ~loc ~env ~reason m = + submode ~loc ~env ~reason m mode_global let eqmode ~loc ~env m1 m2 err = match Alloc_mode.equate m1 m2 with @@ -418,8 +432,9 @@ let register_allocation_mode alloc_mode = | Amodevar _ -> allocations := alloc_mode :: !allocations let register_allocation_value_mode mode = - register_allocation_mode - (Value_mode.regional_to_global_alloc mode) + let alloc_mode = Value_mode.regional_to_global_alloc mode in + register_allocation_mode alloc_mode; + alloc_mode let register_allocation (expected_mode : expected_mode) = register_allocation_value_mode expected_mode.mode @@ -479,21 +494,21 @@ let constant_or_raise env loc cst = let type_option ty = newty (Tconstr(Predef.path_option,[ty], ref Mnil)) -let mkexp exp_desc exp_type exp_mode exp_loc exp_env = - { exp_desc; exp_type; exp_mode; +let mkexp exp_desc exp_type exp_loc exp_env = + { exp_desc; exp_type; exp_loc; exp_env; exp_extra = []; exp_attributes = [] } -let option_none env ty mode loc = +let option_none env ty loc = let lid = Longident.Lident "None" in let cnone = Env.find_ident_constructor Predef.ident_none env in - mkexp (Texp_construct(mknoloc lid, cnone, [])) ty mode loc env + mkexp (Texp_construct(mknoloc lid, cnone, [], None)) ty loc env let option_some env texp mode = - register_allocation_value_mode mode; + let alloc_mode = register_allocation_value_mode mode in let lid = Longident.Lident "Some" in let csome = Env.find_ident_constructor Predef.ident_some env in - mkexp ( Texp_construct(mknoloc lid , csome, [texp]) ) - (type_option texp.exp_type) mode texp.exp_loc texp.exp_env + mkexp (Texp_construct(mknoloc lid , csome, [texp], Some alloc_mode)) + (type_option texp.exp_type) texp.exp_loc texp.exp_env let extract_option_type env ty = match get_desc (expand_head env ty) with @@ -501,14 +516,14 @@ let extract_option_type env ty = | _ -> assert false type record_extraction_result = - | Record_type of Path.t * Path.t * Types.label_declaration list + | Record_type of Path.t * Path.t * Types.label_declaration list * record_representation | Not_a_record_type | Maybe_a_record_type let extract_concrete_record env ty = match extract_concrete_typedecl env ty with - | Typedecl(p0, p, {type_kind=Type_record (fields, _)}) -> - Record_type (p0, p, fields) + | Typedecl(p0, p, {type_kind=Type_record (fields, repres)}) -> + Record_type (p0, p, fields, repres) | Has_no_typedecl | Typedecl(_, _, _) -> Not_a_record_type | May_have_typedecl -> Maybe_a_record_type @@ -528,7 +543,7 @@ let extract_concrete_variant env ty = let extract_label_names env ty = match extract_concrete_record env ty with - | Record_type (_, _,fields) -> List.map (fun l -> l.Types.ld_id) fields + | Record_type (_, _,fields, _) -> List.map (fun l -> l.Types.ld_id) fields | Not_a_record_type | Maybe_a_record_type -> assert false let is_principal ty = @@ -559,7 +574,7 @@ let mode_cross env (ty : type_expr) mode = if is_principal ty then begin match immediacy env ty with | Type_immediacy.Always -> Value_mode.newvar () - | Type_immediacy.Always_on_64bits when !Clflags.native_code && Sys.word_size = 64 -> + | Type_immediacy.Always_on_64bits when Sys.word_size = 64 -> Value_mode.newvar () (* floating and relaxed *) | _ -> mode end @@ -702,6 +717,21 @@ let maybe_add_pattern_variables_ghost loc_let env pv = end ) pv env +let iter_pattern_variables_type f : pattern_variable list -> unit = + List.iter (fun {pv_type; _} -> f pv_type) + +let add_pattern_variables ?check ?check_as env pv = + List.fold_right + (fun {pv_id; pv_mode; pv_type; pv_loc; pv_as_var; pv_attributes} env -> + let check = if pv_as_var then check_as else check in + Env.add_value ?check ~mode:pv_mode pv_id + {val_type = pv_type; val_kind = Val_reg; Types.val_loc = pv_loc; + val_attributes = pv_attributes; + val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + } env + ) + pv env + let enter_variable ?(is_module=false) ?(is_as_variable=false) loc name mode ty attrs = if List.exists (fun {pv_id; _} -> Ident.name pv_id = name.txt) @@ -719,7 +749,7 @@ let enter_variable ?(is_module=false) ?(is_as_variable=false) loc name mode ty (* Note: unpack patterns enter a variable of the same name *) if not !allow_modules then raise (Error (loc, Env.empty, Modules_not_allowed)); - escape ~loc ~env:Env.empty mode; + escape ~loc ~env:Env.empty ~reason:Other mode; module_variables := (name, loc) :: !module_variables end; id @@ -769,8 +799,8 @@ let enter_orpat_variables loc env p1_vs p2_vs = raise (Error (loc, env, err)) in unify_vars p1_vs p2_vs -let rec build_as_type_and_mode ~refine (env : Env.t ref) p = - let as_ty, as_mode = build_as_type_aux ~refine env p in +let rec build_as_type_and_mode ~refine ~mode (env : Env.t ref) p = + let as_ty, as_mode = build_as_type_aux ~refine ~mode env p in let as_ty = (* Cf. #1655 *) List.fold_left (fun as_ty (extra, _loc, _attrs) -> @@ -793,20 +823,18 @@ let rec build_as_type_and_mode ~refine (env : Env.t ref) p = in as_ty, as_mode -and build_as_type ~refine env p = - fst (build_as_type_and_mode ~refine env p) - -and build_as_type_aux ~refine (env : Env.t ref) p = - let build_as_type = build_as_type ~refine in +and build_as_type_aux ~refine ~mode (env : Env.t ref) p = + let build_as_type env p = + fst (build_as_type_and_mode ~refine ~mode env p) in match p.pat_desc with - Tpat_alias(p1,_, _) -> build_as_type_and_mode ~refine env p1 + Tpat_alias(p1,_, _, _) -> build_as_type_and_mode ~refine ~mode env p1 | Tpat_tuple pl -> let tyl = List.map (build_as_type env) pl in - newty (Ttuple tyl), p.pat_mode + newty (Ttuple tyl), mode | Tpat_construct(_, cstr, pl, vto) -> let priv = (cstr.cstr_private = Private) in let mode = - if priv || pl <> [] then p.pat_mode + if priv || pl <> [] then mode else Value_mode.newvar () in let keep = @@ -825,7 +853,7 @@ and build_as_type_aux ~refine (env : Env.t ref) p = let ty = Option.map (build_as_type env) p' in let mode = if p' = None then Value_mode.newvar () - else p.pat_mode + else mode in let ty = let fields = [l, rf_present ty] in @@ -835,7 +863,7 @@ and build_as_type_aux ~refine (env : Env.t ref) p = ty, mode | Tpat_record (lpl,_) -> let lbl = snd3 (List.hd lpl) in - if lbl.lbl_private = Private then p.pat_type, p.pat_mode else + if lbl.lbl_private = Private then p.pat_type, mode else let ty = newvar () in let ppl = List.map (fun (_, l, p) -> l.lbl_pos, p) lpl in let do_label lbl = @@ -854,12 +882,12 @@ and build_as_type_aux ~refine (env : Env.t ref) p = unify_pat ~refine env p ty_res' end in Array.iter do_label lbl.lbl_all; - ty, p.pat_mode + ty, mode | Tpat_or(p1, p2, row) -> begin match row with None -> - let ty1, mode1 = build_as_type_and_mode ~refine env p1 in - let ty2, mode2 = build_as_type_and_mode ~refine env p2 in + let ty1, mode1 = build_as_type_and_mode ~refine ~mode env p1 in + let ty2, mode2 = build_as_type_and_mode ~refine ~mode env p2 in unify_pat ~refine env {p2 with pat_type = ty2} ty1; ty1, Value_mode.join [mode1; mode2] | Some row -> @@ -873,7 +901,7 @@ and build_as_type_aux ~refine (env : Env.t ref) p = in let mode = if all_constant then Value_mode.newvar () - else p.pat_mode + else mode in let ty = newty (Tvariant (create_row ~fields ~fixed ~name @@ -885,17 +913,18 @@ and build_as_type_aux ~refine (env : Env.t ref) p = let mode = match Ctype.immediacy !env p.pat_type with | Always -> Value_mode.newvar () - | Unknown | Always_on_64bits -> p.pat_mode + | Unknown | Always_on_64bits -> mode in p.pat_type, mode | Tpat_any | Tpat_var _ - | Tpat_array _ | Tpat_lazy _ -> p.pat_type, p.pat_mode + | Tpat_array _ | Tpat_lazy _ -> + p.pat_type, mode (* Constraint solving during typing of patterns *) -let solve_Ppat_alias ~refine env pat = +let solve_Ppat_alias ~refine ~mode env pat = begin_def (); - let ty_var, mode = build_as_type_and_mode ~refine env pat in + let ty_var, mode = build_as_type_and_mode ~refine ~mode env pat in end_def (); generalize ty_var; ty_var, mode @@ -999,7 +1028,7 @@ let solve_Ppat_construct ~refine env loc constr no_existentials let ty_args, ty_res, ty_ex = instance_constructor ?in_pattern constr in let equated_types = unify_res ty_res in - let ty_args_ty, ty_args_gf = List.split ty_args in + let ty_args_ty, ty_args_gf = List.split ty_args in let ty_args_ty, existential_ctyp = solve_constructor_annotation env name_list sty ty_args_ty ty_ex in ty_args_ty, ty_args_gf, ty_res, equated_types, existential_ctyp @@ -1048,11 +1077,15 @@ let solve_Ppat_record_field ~refine loc env label label_lid record_ty = generalize_structure ty_arg; ty_arg -let solve_Ppat_array ~refine loc env expected_ty = +let solve_Ppat_array ~refine loc env mutability expected_ty = + let type_some_array = match mutability with + | Immutable -> Predef.type_iarray + | Mutable -> Predef.type_array + in let ty_elt = newgenvar() in let expected_ty = generic_instance expected_ty in unify_pat_types ~refine - loc env (Predef.type_array ty_elt) expected_ty; + loc env (type_some_array ty_elt) expected_ty; ty_elt let solve_Ppat_lazy ~refine loc env expected_ty = @@ -1092,7 +1125,7 @@ let solve_Ppat_variant ~refine loc env tag no_arg expected_ty = (arg_type, make_row (newvar ()), instance expected_ty) (* Building the or-pattern corresponding to a polymorphic variant type *) -let build_or_pat env loc mode lid = +let build_or_pat env loc lid = let path, decl = Env.lookup_type ~loc:lid.loc lid.txt env in let tyl = List.map (fun _ -> newvar()) decl.type_params in let row0 = @@ -1112,7 +1145,7 @@ let build_or_pat env loc mode lid = | Rpresent (Some ty) -> let f = rf_either [ty] ~no_arg:false ~matched:true in (l, Some {pat_desc=Tpat_any; pat_loc=Location.none; pat_env=env; - pat_type=ty; pat_mode=mode; pat_extra=[]; + pat_type=ty; pat_extra=[]; pat_attributes=[]}) :: pats, (l, f) :: fields @@ -1129,7 +1162,7 @@ let build_or_pat env loc mode lid = List.map (fun (l,p) -> {pat_desc=Tpat_variant(l,p,row'); pat_loc=gloc; - pat_env=env; pat_type=ty; pat_mode=mode; + pat_env=env; pat_type=ty; pat_extra=[]; pat_attributes=[]}) pats in @@ -1143,7 +1176,7 @@ let build_or_pat env loc mode lid = List.fold_left (fun pat pat0 -> {pat_desc=Tpat_or(pat0,pat,Some row0); pat_extra=[]; - pat_loc=gloc; pat_env=env; pat_type=ty; pat_mode=mode; + pat_loc=gloc; pat_env=env; pat_type=ty; pat_attributes=[]}) pat pats in (path, rp { r with pat_loc = loc }) @@ -1161,20 +1194,69 @@ let split_cases env cases = | vp, ep -> add_case vals case vp, add_case exns case ep ) cases ([], []) -let type_for_loop_index ~loc ~env ~param ty = +(* When typing a for-loop index or similar, we need to restrict ourselves to the + [Ppat_any] and [Ppat_var] cases, and construct a [pattern_variable] with + consistent fields. However, in the case where we're reifying a name for + [Ppat_any], we don't need a pattern variable at all. This function reifies + that pattern match and construction: [any] controls what happens with the + synthesized name for an [_] ([Ppat_any]), and [var] takes all the fields + necessary for a [pattern_variable] so that one can be created or, similarly, + so [enter_variable] can be called, depending on the usage. *) +let type_for_loop_like_index ~error ~loc ~env ~param ~any ~var = match param.ppat_desc with - | Ppat_any -> Ident.create_local "_for", env - | Ppat_var {txt} -> - Env.enter_value txt - {val_type = instance ty; - val_attributes = []; - val_kind = Val_reg; - val_loc = loc; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); - } env - ~check:(fun s -> Warnings.Unused_for_index s) + | Ppat_any -> any (Ident.create_local "_for") + | Ppat_var name -> + var ~name + ~pv_mode:Value_mode.global + ~pv_type:(instance Predef.type_int) + ~pv_loc:loc + ~pv_as_var:false + ~pv_attributes:[] | _ -> - raise (Error (param.ppat_loc, env, Invalid_for_loop_index)) + raise (Error (param.ppat_loc, env, error)) + +let type_for_loop_index ~loc ~env ~param = + type_for_loop_like_index + ~error:Invalid_for_loop_index + ~loc + ~env + ~param + (* We don't add the synthesized name for [_] to the environment because it + can't have been referenced later. *) + ~any:(fun wildcard_name -> wildcard_name, env) + ~var:(fun ~name:{txt; loc = _} + ~pv_mode + ~pv_type + ~pv_loc + ~pv_as_var + ~pv_attributes + -> + let check s = Warnings.Unused_for_index s in + let pv_id = Ident.create_local txt in + let pv = + { pv_id; pv_mode; pv_type; pv_loc; pv_as_var; pv_attributes } + in + pv_id, add_pattern_variables ~check ~check_as:check env [pv]) + +let type_comprehension_for_range_iterator_index ~loc ~env ~param = + type_for_loop_like_index + ~error:Invalid_comprehension_for_range_iterator_index + ~loc + ~env + ~param + (* We don't [enter_variable] the synthesized name for [_] to the environment + because it can't have been referenced later so we don't need to track it + for duplicates or anything else. *) + ~any:Fun.id + ~var:(fun ~name ~pv_mode ~pv_type ~pv_loc ~pv_as_var ~pv_attributes -> + enter_variable + ~is_as_variable:pv_as_var + pv_loc + name + pv_mode + pv_type + pv_attributes) + (* Type paths *) @@ -1624,7 +1706,10 @@ type 'case_pattern half_typed_case = unpacks: module_variable list; contains_gadt: bool; } -let rec has_literal_pattern p = match p.ppat_desc with +let rec has_literal_pattern p = + match Extensions.Pattern.of_ast p with + | Some epat -> has_literal_pattern_extension epat + | None -> match p.ppat_desc with | Ppat_constant _ | Ppat_interval _ -> true @@ -1651,6 +1736,9 @@ let rec has_literal_pattern p = match p.ppat_desc with List.exists (fun (_,p) -> has_literal_pattern p) ps | Ppat_or (p, q) -> has_literal_pattern p || has_literal_pattern q +and has_literal_pattern_extension : Extensions.Pattern.t -> _ = function + | Epat_immutable_array (Iapat_immutable_array ps) -> + List.exists has_literal_pattern ps let check_scope_escape loc env level ty = try Ctype.check_scope_escape env level ty @@ -1941,13 +2029,38 @@ and type_pat_aux | Some Backtrack_or -> false | Some (Refine_or {inside_nonsplit_or}) -> inside_nonsplit_or in + let type_pat_array mutability spl = + (* Sharing the code between the two array cases means we're guaranteed to + keep them in sync, at the cost of a worse diff with upstream; it + shouldn't be too bad. We can inline this when we upstream this code and + combine the two array pattern constructors. *) + let ty_elt = solve_Ppat_array ~refine loc env mutability expected_ty in + map_fold_cont (fun p -> type_pat ~alloc_mode:(simple_pat_mode Value_mode.global) + Value p ty_elt) spl (fun pl -> + rvp k { + pat_desc = Tpat_array (mutability, pl); + pat_loc = loc; pat_extra=[]; + pat_type = instance expected_ty; + pat_attributes = sp.ppat_attributes; + pat_env = !env }) + in + match Extensions.Pattern.of_ast sp with + | Some epat -> begin + (* Normally this would go to an auxiliary function, but this function + takes so many parameters, has such a complex type, and uses so many + local definitions, it seems better to just put the pattern matching + here. This shouldn't mess up the diff *too* much. *) + match epat with + | Epat_immutable_array (Iapat_immutable_array spl) -> + type_pat_array Immutable spl + end + | None -> match sp.ppat_desc with Ppat_any -> let k' d = rvp k { pat_desc = d; pat_loc = loc; pat_extra=[]; pat_type = instance expected_ty; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env } in @@ -1984,10 +2097,9 @@ and type_pat_aux enter_variable loc name alloc_mode.mode ty sp.ppat_attributes in rvp k { - pat_desc = Tpat_var (id, name); + pat_desc = Tpat_var (id, name, alloc_mode.mode); pat_loc = loc; pat_extra=[]; pat_type = ty; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env } | Ppat_unpack name -> @@ -2000,7 +2112,6 @@ and type_pat_aux pat_loc = sp.ppat_loc; pat_extra=[Tpat_unpack, name.loc, sp.ppat_attributes]; pat_type = t; - pat_mode = alloc_mode.mode; pat_attributes = []; pat_env = !env } | Some s -> @@ -2008,10 +2119,9 @@ and type_pat_aux let id = enter_variable loc v alloc_mode.mode t ~is_module:true sp.ppat_attributes in rvp k { - pat_desc = Tpat_var (id, v); + pat_desc = Tpat_var (id, v, alloc_mode.mode); pat_loc = sp.ppat_loc; pat_extra=[Tpat_unpack, loc, sp.ppat_attributes]; - pat_mode = alloc_mode.mode; pat_type = t; pat_attributes = []; pat_env = !env } @@ -2019,17 +2129,16 @@ and type_pat_aux | Ppat_alias(sq, name) -> assert construction_not_used_in_counterexamples; type_pat Value sq expected_ty (fun q -> - let ty_var, mode = solve_Ppat_alias ~refine env q in - let mode = mode_cross !env expected_ty mode in + let ty_var, mode = solve_Ppat_alias ~refine ~mode:alloc_mode.mode env q in + let mode = mode_cross !env expected_ty mode in let id = enter_variable ~is_as_variable:true loc name mode ty_var sp.ppat_attributes in rvp k { - pat_desc = Tpat_alias(q, id, name); + pat_desc = Tpat_alias(q, id, name, mode); pat_loc = loc; pat_extra=[]; pat_type = q.pat_type; - pat_mode = q.pat_mode; pat_attributes = sp.ppat_attributes; pat_env = !env }) | Ppat_constant cst -> @@ -2038,7 +2147,6 @@ and type_pat_aux pat_desc = Tpat_constant cst; pat_loc = loc; pat_extra=[]; pat_type = type_constant cst; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env } | Ppat_interval (Pconst_char c1, Pconst_char c2) -> @@ -2065,7 +2173,6 @@ and type_pat_aux pat_desc = Tpat_tuple pl; pat_loc = loc; pat_extra=[]; pat_type = newty (Ttuple(List.map (fun p -> p.pat_type) pl)); - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env }) | Ppat_construct(lid, sarg) -> @@ -2177,7 +2284,6 @@ and type_pat_aux pat_desc=Tpat_construct(lid, constr, args, existential_ctyp); pat_loc = loc; pat_extra=[]; pat_type = instance expected_ty; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env }) | Ppat_variant(tag, sarg) -> @@ -2191,7 +2297,6 @@ and type_pat_aux pat_desc = Tpat_variant(tag, arg, ref row); pat_loc = loc; pat_extra = []; pat_type = pat_type; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env } in begin @@ -2204,7 +2309,7 @@ and type_pat_aux assert (lid_sp_list <> []); let expected_type, record_ty = match extract_concrete_record !env expected_ty with - | Record_type(p0, p, _) -> + | Record_type(p0, p, _, _) -> let ty = generic_instance expected_ty in Some (p0, p, is_principal expected_ty), ty | Maybe_a_record_type -> None, newvar () @@ -2231,7 +2336,6 @@ and type_pat_aux pat_desc = Tpat_record (lbl_pat_list, closed); pat_loc = loc; pat_extra=[]; pat_type = instance record_ty; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env; } @@ -2250,16 +2354,7 @@ and type_pat_aux (fun lbl_pat_list -> k' (make_record_pat lbl_pat_list)) end | Ppat_array spl -> - let ty_elt = solve_Ppat_array ~refine loc env expected_ty in - map_fold_cont (fun p -> type_pat ~alloc_mode:(simple_pat_mode Value_mode.global) - Value p ty_elt) spl (fun pl -> - rvp k { - pat_desc = Tpat_array pl; - pat_loc = loc; pat_extra=[]; - pat_type = instance expected_ty; - pat_mode = alloc_mode.mode; - pat_attributes = sp.ppat_attributes; - pat_env = !env }) + type_pat_array Mutable spl | Ppat_or(sp1, sp2) -> begin match mode with | Normal -> @@ -2300,7 +2395,6 @@ and type_pat_aux rp k { pat_desc = Tpat_or (p1, p2, None); pat_loc = loc; pat_extra = []; pat_type = instance expected_ty; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env } | Counter_example {splitting_mode; _} -> @@ -2343,7 +2437,6 @@ and type_pat_aux rp k { pat_desc = Tpat_or (p1, p2, None); pat_loc = loc; pat_extra = []; pat_type = instance expected_ty; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env } end @@ -2355,7 +2448,6 @@ and type_pat_aux pat_desc = Tpat_lazy p1; pat_loc = loc; pat_extra=[]; pat_type = instance expected_ty; - pat_mode = alloc_mode.mode; pat_attributes = sp.ppat_attributes; pat_env = !env }) | Ppat_constraint(sp', sty) -> @@ -2377,7 +2469,7 @@ and type_pat_aux in k p) | Ppat_type lid -> assert construction_not_used_in_counterexamples; - let (path, p) = build_or_pat !env loc alloc_mode.mode lid in + let (path, p) = build_or_pat !env loc lid in k @@ pure category @@ solve_expected { p with pat_extra = (Tpat_type (path, lid), loc, sp.ppat_attributes) :: p.pat_extra } @@ -2386,7 +2478,7 @@ and type_pat_aux let path, new_env = !type_open Asttypes.Fresh !env sp.ppat_loc lid in env := new_env; - type_pat category ~env p expected_ty ( fun p -> + type_pat category ~env p expected_ty (fun p -> let new_env = !env in begin match Env.remove_last_open path new_env with | None -> assert false @@ -2403,7 +2495,6 @@ and type_pat_aux pat_loc = sp.ppat_loc; pat_extra = []; pat_type = expected_ty; - pat_mode = alloc_mode.mode; pat_env = !env; pat_attributes = sp.ppat_attributes; }) @@ -2458,21 +2549,6 @@ let check_unused ?(lev=get_current_level ()) env expected_ty cases = | r -> r) cases -let iter_pattern_variables_type f : pattern_variable list -> unit = - List.iter (fun {pv_type; _} -> f pv_type) - -let add_pattern_variables ?check ?check_as env pv = - List.fold_right - (fun {pv_id; pv_mode; pv_type; pv_loc; pv_as_var; pv_attributes} env -> - let check = if pv_as_var then check_as else check in - Env.add_value ?check ~mode:pv_mode pv_id - {val_type = pv_type; val_kind = Val_reg; Types.val_loc = pv_loc; - val_attributes = pv_attributes; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); - } env - ) - pv env - let type_pattern category ~lev ~alloc_mode env spat expected_ty = reset_pattern true; let new_env = ref env in @@ -2587,6 +2663,9 @@ let combine_pat_tuple_arity a b = else Not_local_tuple let rec pat_tuple_arity spat = + match Extensions.Pattern.of_ast spat with + | Some epat -> pat_tuple_arity_extension epat + | None -> match spat.ppat_desc with | Ppat_tuple args -> Local_tuple (List.length args) | Ppat_any | Ppat_exception _ | Ppat_var _ -> Maybe_local_tuple @@ -2597,6 +2676,8 @@ let rec pat_tuple_arity spat = | Ppat_or(sp1, sp2) -> combine_pat_tuple_arity (pat_tuple_arity sp1) (pat_tuple_arity sp2) | Ppat_constraint(p, _) | Ppat_open(_, p) | Ppat_alias(p, _) -> pat_tuple_arity p +and pat_tuple_arity_extension : Extensions.Pattern.t -> _ = function + | Epat_immutable_array (Iapat_immutable_array _) -> Not_local_tuple let rec cases_tuple_arity cases = match cases with @@ -2662,17 +2743,20 @@ type untyped_apply_arg = { sarg : Parsetree.expression; ty_arg : type_expr; ty_arg0 : type_expr; + commuted : bool; + mode_fun : Alloc_mode.t; mode_arg : Alloc_mode.t; wrapped_in_some : bool; } | Unknown_arg of { sarg : Parsetree.expression; ty_arg_mono : type_expr; + mode_fun : Alloc_mode.t; mode_arg : Alloc_mode.t; } | Eliminated_optional_arg of { mode_fun: Alloc_mode.t; ty_arg : type_expr; mode_arg : Alloc_mode.t; - level: int;} + level: int; } type untyped_omitted_param = { mode_fun: Alloc_mode.t; @@ -2712,6 +2796,61 @@ let remaining_function_type ty_ret mode_ret rev_args = in ty_ret +(* Check that within a single application, the return modes of curried arrows + increase along the application. That is, check that this is not an + unparenthesized over-application of a local function that returns a global + function. + + This check is not required for soundness, but including it simplifies the + principal types of applications, making the inferred types more sensible + in ml files that lack an mli. *) +let check_local_application_complete ~env ~app_loc args = + let arg_mode_fun (_lbl, arg) = + match arg with + | Arg ( Known_arg { mode_fun; _ } + | Unknown_arg { mode_fun; _ } + | Eliminated_optional_arg { mode_fun; _ }) + | Omitted { mode_fun; _ } -> mode_fun + in + let rec loop has_commuted = function + | [] | [_] -> () + | (lbl, ( Arg ( Known_arg { mode_fun; mode_arg; _ } + | Unknown_arg { mode_fun; mode_arg; _ } + | Eliminated_optional_arg { mode_fun; mode_arg; _ }) + | Omitted { mode_fun; mode_arg; _ } as arg)) + :: ((next :: _) as rest) -> + let mode_ret = arg_mode_fun next in + let has_commuted = + has_commuted || + match arg with + | Arg (Known_arg { commuted }) -> commuted + | _ -> false + in + let submode m1 m2 = + match Alloc_mode.submode m1 m2 with + | Ok () -> () + | Error () -> + let loc, loc_kind = + match arg with + | Arg (Known_arg {sarg; _} | Unknown_arg {sarg; _}) -> + if has_commuted then + sarg.pexp_loc, `Single_arg + else + Location.{ loc_start = app_loc.loc_start; + loc_end = sarg.pexp_loc.loc_end; + loc_ghost = app_loc.loc_ghost || sarg.pexp_loc.loc_ghost }, + `Prefix + | _ -> + app_loc, `Entire_apply + in + raise (Error(loc, env, Local_application_complete (lbl, loc_kind))) + in + submode mode_fun mode_ret; + submode mode_arg mode_ret; + loop has_commuted rest + in + loop false args + let collect_unknown_apply_args env funct ty_fun mode_fun rev_args sargs ret_tvar = let labels_match ~param ~arg = param = arg @@ -2725,7 +2864,7 @@ let collect_unknown_apply_args env funct ty_fun mode_fun rev_args sargs ret_tvar match sargs with | [] -> ty_fun, mode_fun, List.rev rev_args | (lbl, sarg) :: rest -> - let (mode_arg, ty_arg_mono, mode_res, ty_res) = + let (mode_arg, ty_arg_mono, mode_ret, ty_res) = let ty_fun = expand_head env ty_fun in match get_desc ty_fun with | Tvar _ -> @@ -2739,14 +2878,14 @@ let collect_unknown_apply_args env funct ty_fun mode_fun rev_args sargs ret_tvar Location.prerr_warning sarg.pexp_loc Warnings.Ignored_extra_argument; let mode_arg = Alloc_mode.newvar () in - let mode_res = Alloc_mode.newvar () in - let kind = (lbl, mode_arg, mode_res) in + let mode_ret = Alloc_mode.newvar () in + let kind = (lbl, mode_arg, mode_ret) in unify env ty_fun (newty (Tarrow(kind,ty_arg,ty_res,commu_var ()))); - (mode_arg, ty_arg_mono, mode_res, ty_res) - | Tarrow ((l, mode_arg, mode_res), ty_arg, ty_res, _) + (mode_arg, ty_arg_mono, mode_ret, ty_res) + | Tarrow ((l, mode_arg, mode_ret), ty_arg, ty_res, _) when labels_match ~param:l ~arg:lbl -> - (mode_arg, tpoly_get_mono ty_arg, mode_res, ty_res) + (mode_arg, tpoly_get_mono ty_arg, mode_ret, ty_res) | td -> let ty_fun = match td with Tarrow _ -> newty td | _ -> ty_fun in let ty_res = remaining_function_type ty_fun mode_fun rev_args in @@ -2761,8 +2900,8 @@ let collect_unknown_apply_args env funct ty_fun mode_fun rev_args sargs ret_tvar raise(Error(funct.exp_loc, env, Apply_non_function (expand_head env funct.exp_type))) in - let arg = Unknown_arg { sarg; ty_arg_mono; mode_arg; } in - loop ty_res mode_res ((lbl, Arg arg) :: rev_args) rest + let arg = Unknown_arg { sarg; ty_arg_mono; mode_fun; mode_arg } in + loop ty_res mode_ret ((lbl, Arg arg) :: rev_args) rest in loop ty_fun mode_fun rev_args sargs @@ -2785,13 +2924,14 @@ let collect_apply_args env funct ignore_labels ty_fun ty_fun0 mode_fun sargs ret in let name = label_name l and optional = is_optional l in - let use_arg sarg l' = + let use_arg ~commuted sarg l' = let wrapped_in_some = optional && not (is_optional l') in if wrapped_in_some then may_warn sarg.pexp_loc (Warnings.Not_principal "using an optional argument here"); Arg (Known_arg - { sarg; ty_arg; ty_arg0; mode_arg; wrapped_in_some }) + { sarg; ty_arg; ty_arg0; commuted; + mode_fun; mode_arg; wrapped_in_some }) in let eliminate_optional_arg () = may_warn funct.exp_loc @@ -2807,7 +2947,7 @@ let collect_apply_args env funct ignore_labels ty_fun ty_fun0 mode_fun sargs ret | [] -> assert false | (l', sarg) :: remaining_sargs -> if name = label_name l' || (not optional && l' = Nolabel) then - (remaining_sargs, use_arg sarg l') + (remaining_sargs, use_arg ~commuted:false sarg l') else if optional && not (List.exists (fun (l, _) -> name = label_name l) @@ -2831,7 +2971,7 @@ let collect_apply_args env funct ignore_labels ty_fun ty_fun0 mode_fun sargs ret if not optional && is_optional l' then Location.prerr_warning sarg.pexp_loc (Warnings.Nonoptional_label (Printtyp.string_of_label l)); - remaining_sargs, use_arg sarg l' + remaining_sargs, use_arg ~commuted sarg l' | None -> sargs, if optional && List.mem_assoc Nolabel sargs then @@ -2857,9 +2997,9 @@ let type_omitted_parameters expected_mode env ty_ret mode_ret args = List.fold_left (fun (ty_ret, mode_ret, open_args, closed_args, args) (lbl, arg) -> match arg with - | Arg exp as arg -> - let open_args = (exp.exp_mode, exp) :: open_args in - let args = (lbl, arg) :: args in + | Arg (exp, exp_mode) -> + let open_args = (exp_mode, exp) :: open_args in + let args = (lbl, Arg exp) :: args in (ty_ret, mode_ret, open_args, closed_args, args) | Omitted { mode_fun; ty_arg; mode_arg; level } -> let arrow_desc = (lbl, mode_arg, mode_ret) in @@ -2870,7 +3010,7 @@ let type_omitted_parameters expected_mode env ty_ret mode_ret args = let new_closed_args = List.map (fun (marg, exp) -> - submode ~loc:exp.exp_loc ~env + submode ~loc:exp.exp_loc ~env ~reason:Other marg (mode_partial_application expected_mode); Value_mode.regional_to_local_alloc marg) open_args @@ -2895,11 +3035,11 @@ let rec is_nonexpansive exp = | Texp_unreachable | Texp_function _ | Texp_probe_is_enabled _ - | Texp_array [] -> true + | Texp_array (_, [], _) -> true | Texp_let(_rec_flag, pat_exp_list, body) -> List.for_all (fun vb -> is_nonexpansive vb.vb_expr) pat_exp_list && is_nonexpansive body - | Texp_apply(e, (_,Omitted _)::el, _) -> + | Texp_apply(e, (_,Omitted _)::el, _, _) -> is_nonexpansive e && List.for_all is_nonexpansive_arg (List.map snd el) | Texp_match(e, cases, _) -> (* Not sure this is necessary, if [e] is nonexpansive then we shouldn't @@ -2918,11 +3058,11 @@ let rec is_nonexpansive exp = && not (contains_exception_pat c_lhs) ) cases | Texp_probe {handler} -> is_nonexpansive handler - | Texp_tuple el -> + | Texp_tuple (el, _) -> List.for_all is_nonexpansive el - | Texp_construct( _, _, el) -> + | Texp_construct(_, _, el, _) -> List.for_all is_nonexpansive el - | Texp_variant(_, arg) -> is_nonexpansive_opt arg + | Texp_variant(_, arg) -> is_nonexpansive_opt (Option.map fst arg) | Texp_record { fields; extended_expression } -> Array.for_all (fun (lbl, definition) -> @@ -2932,7 +3072,7 @@ let rec is_nonexpansive exp = | Kept _ -> true) fields && is_nonexpansive_opt extended_expression - | Texp_field(exp, _, _) -> is_nonexpansive exp + | Texp_field(exp, _, _, _) -> is_nonexpansive exp | Texp_ifthenelse(_cond, ifso, ifnot) -> is_nonexpansive ifso && is_nonexpansive_opt ifnot | Texp_sequence (_e1, e2) -> is_nonexpansive e2 (* PR#4354 *) @@ -2972,15 +3112,15 @@ let rec is_nonexpansive exp = Val_prim {Primitive.prim_name = ("%raise" | "%reraise" | "%raise_notrace")}}, Id_prim _) }, - [Nolabel, Arg e], _) -> + [Nolabel, Arg e], _, _) -> is_nonexpansive e - | Texp_array (_ :: _) + | Texp_array (_, _ :: _, _) | Texp_apply _ | Texp_try _ | Texp_setfield _ - | Texp_while _ | Texp_list_comprehension _ - | Texp_arr_comprehension _ + | Texp_array_comprehension _ + | Texp_while _ | Texp_for _ | Texp_send _ | Texp_instvar _ @@ -3063,6 +3203,13 @@ let is_local_returning_expr e = raise(Error(loc2, Env.empty, Local_return_annotation_mismatch loc1)) in let rec loop e = + match Extensions.Expression.of_ast e with + | Some eexp -> begin + match eexp with + | Eexp_comprehension _ -> false, e.pexp_loc + | Eexp_immutable_array _ -> false, e.pexp_loc + end + | None -> match e.pexp_desc with | Pexp_apply ({ pexp_desc = Pexp_extension( @@ -3147,7 +3294,7 @@ let rec approx_type env sty = (* Polymorphic types will only unify with types that match all of their polymorphic parts, so we need to fully translate the type here unlike in the monomorphic case *) - Typetexp.transl_simple_type env false arg_mode arg_sty + Typetexp.transl_simple_type env ~closed:false arg_mode arg_sty in let ret = approx_type env sty in let marg = Alloc_mode.of_const arg_mode in @@ -3174,7 +3321,13 @@ let rec approx_type env sty = end | _ -> newvar () +let type_pattern_approx_extension : Extensions.Pattern.t -> _ = function + | Epat_immutable_array _ -> () + let type_pattern_approx env spat ty_expected = + match Extensions.Pattern.of_ast spat with + | Some epat -> type_pattern_approx_extension epat + | None -> match spat.ppat_desc with | Ppat_constraint(_, ({ptyp_desc=Ptyp_poly _} as sty)) -> let arg_type_mode = @@ -3182,7 +3335,7 @@ let type_pattern_approx env spat ty_expected = else Alloc_mode.Global in let ty_pat = - Typetexp.transl_simple_type env false arg_type_mode sty + Typetexp.transl_simple_type env ~closed:false arg_type_mode sty in begin try unify env ty_pat.ctyp_type ty_expected with Unify trace -> raise(Error(spat.ppat_loc, env, Pattern_type_clash(trace, None))) @@ -3234,7 +3387,9 @@ let rec type_function_approx env loc label spato sexp in_function ty_expected = type_approx_aux env sexp in_function ty_res and type_approx_aux env sexp in_function ty_expected = - match sexp.pexp_desc with + match Extensions.Expression.of_ast sexp with + | Some eexp -> type_approx_aux_extension eexp + | None -> match sexp.pexp_desc with Pexp_let (_, _, e) -> type_approx_aux env e None ty_expected | Pexp_fun (l, _, p, e) -> type_function_approx env sexp.pexp_loc l (Some p) e @@ -3277,6 +3432,10 @@ and type_approx_aux env sexp in_function ty_expected = type_approx_aux env e None ty_expected | _ -> () +and type_approx_aux_extension : Extensions.Expression.t -> _ = function + | Eexp_comprehension _ + | Eexp_immutable_array _ -> () + let type_approx env sexp ty = type_approx_aux env sexp None ty @@ -3384,7 +3543,7 @@ let check_partial_application ~statement exp = | Texp_ident _ | Texp_constant _ | Texp_tuple _ | Texp_construct _ | Texp_variant _ | Texp_record _ | Texp_field _ | Texp_setfield _ | Texp_array _ - | Texp_list_comprehension _ | Texp_arr_comprehension _ + | Texp_list_comprehension _ | Texp_array_comprehension _ | Texp_while _ | Texp_for _ | Texp_instvar _ | Texp_setinstvar _ | Texp_override _ | Texp_assert _ | Texp_lazy _ | Texp_object _ | Texp_pack _ | Texp_unreachable @@ -3453,7 +3612,13 @@ let contains_variant_either ty = try loop ty; unmark_type ty; false with Exit -> unmark_type ty; true +let shallow_iter_ppat_extension f : Extensions.Pattern.t -> _ = function + | Epat_immutable_array (Iapat_immutable_array pats) -> List.iter f pats + let shallow_iter_ppat f p = + match Extensions.Pattern.of_ast p with + | Some epat -> shallow_iter_ppat_extension f epat + | None -> match p.ppat_desc with | Ppat_any | Ppat_var _ | Ppat_constant _ | Ppat_interval _ | Ppat_construct (_, None) @@ -3550,8 +3715,8 @@ let rec name_pattern default = function [] -> Ident.create_local default | p :: rem -> match p.pat_desc with - Tpat_var (id, _) -> id - | Tpat_alias(_, id, _) -> id + Tpat_var (id, _, _) -> id + | Tpat_alias(_, id, _, _) -> id | _ -> name_pattern default rem let name_cases default lst = @@ -3570,12 +3735,17 @@ let unify_exp env exp expected_ty = the "expected type" provided by the context. *) let rec is_inferred sexp = - match sexp.pexp_desc with + match Extensions.Expression.of_ast sexp with + | Some eexp -> is_inferred_extension eexp + | None -> match sexp.pexp_desc with | Pexp_ident _ | Pexp_apply _ | Pexp_field _ | Pexp_constraint _ | Pexp_coerce _ | Pexp_send _ | Pexp_new _ -> true | Pexp_sequence (_, e) | Pexp_open (_, e) -> is_inferred e | Pexp_ifthenelse (_, e1, Some e2) -> is_inferred e1 && is_inferred e2 | _ -> false +and is_inferred_extension : Extensions.Expression.t -> _ = function + | Eexp_comprehension _ + | Eexp_immutable_array _ -> false (* check if the type of %apply or %revapply matches the type expected by the specialized typing rule for those primitives. @@ -3656,10 +3826,14 @@ and type_expect_ in let ruem ~mode ~expected_mode exp = let exp = rue exp in - submode ~env ~loc:exp.exp_loc mode expected_mode; + submode ~env ~loc:exp.exp_loc ~reason:Other mode expected_mode; exp in - match sexp.pexp_desc with + match Extensions.Expression.of_ast sexp with + | Some eexp -> + type_expect_extension + ~loc ~env ~expected_mode ~ty_expected ~explanation eexp + | None -> match sexp.pexp_desc with | Pexp_ident lid -> let path, mode, desc, kind = type_ident env ~recarg lid in let exp_desc = @@ -3684,47 +3858,43 @@ and type_expect_ ruem ~mode ~expected_mode { exp_desc; exp_loc = loc; exp_extra = []; exp_type = desc.val_type; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_constant(Pconst_string (str, _, _) as cst) -> - register_allocation expected_mode; - let cst = constant_or_raise env loc cst in - (* Terrible hack for format strings *) - let ty_exp = expand_head env ty_expected in - let fmt6_path = - Path.(Pdot (Pident (Ident.create_persistent "CamlinternalFormatBasics"), - "format6")) - in - let is_format = match get_desc ty_exp with - | Tconstr(path, _, _) when Path.same path fmt6_path -> - if !Clflags.principal && get_level ty_exp <> generic_level then - Location.prerr_warning loc - (Warnings.Not_principal "this coercion to format6"); - true - | _ -> false - in - if is_format then begin - let format_parsetree = - { (type_format loc str env) with pexp_loc = sexp.pexp_loc } in - type_expect ?in_function env expected_mode - format_parsetree ty_expected_explained - end else begin - rue { - exp_desc = Texp_constant cst; - exp_loc = loc; exp_extra = []; - exp_type = instance Predef.type_string; - exp_mode = expected_mode.mode; - exp_attributes = sexp.pexp_attributes; - exp_env = env } - end + let cst = constant_or_raise env loc cst in + (* Terrible hack for format strings *) + let ty_exp = expand_head env ty_expected in + let fmt6_path = + Path.(Pdot (Pident (Ident.create_persistent "CamlinternalFormatBasics"), + "format6")) + in + let is_format = match get_desc ty_exp with + | Tconstr(path, _, _) when Path.same path fmt6_path -> + if !Clflags.principal && get_level ty_exp <> generic_level then + Location.prerr_warning loc + (Warnings.Not_principal "this coercion to format6"); + true + | _ -> false + in + if is_format then begin + let format_parsetree = + { (type_format loc str env) with pexp_loc = sexp.pexp_loc } in + type_expect ?in_function env expected_mode + format_parsetree ty_expected_explained + end else begin + rue { + exp_desc = Texp_constant cst; + exp_loc = loc; exp_extra = []; + exp_type = instance Predef.type_string; + exp_attributes = sexp.pexp_attributes; + exp_env = env } + end | Pexp_constant cst -> let cst = constant_or_raise env loc cst in rue { exp_desc = Texp_constant cst; exp_loc = loc; exp_extra = []; exp_type = type_constant cst; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_let(Nonrecursive, @@ -3758,7 +3928,6 @@ and type_expect_ exp_desc = Texp_let(rec_flag, pat_exp_list, body); exp_loc = loc; exp_extra = []; exp_type = body.exp_type; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_fun (l, Some default, spat, sbody) -> @@ -3827,7 +3996,7 @@ and type_expect_ if not (Clflags.Extension.is_enabled Local) then raise (Typetexp.Error (loc, Env.empty, Unsupported_extension Local)); let mode = expect_mode_cross env ty_expected mode_local in - submode ~loc ~env Value_mode.local expected_mode; + submode ~loc ~env ~reason:Other Value_mode.local expected_mode; let exp = type_expect ?in_function ~recarg env mode sbody ty_expected_explained @@ -3837,7 +4006,7 @@ and type_expect_ ({ pexp_desc = Pexp_extension({txt = ("ocaml.local" | "local")}, PStr []) }, [Nolabel, sbody]) -> let mode = expect_mode_cross env ty_expected mode_local in - submode ~loc ~env mode.mode expected_mode; + submode ~loc ~env ~reason:Other mode.mode expected_mode; let exp = type_expect ?in_function ~recarg env mode sbody ty_expected_explained @@ -3872,13 +4041,13 @@ and type_expect_ (try unify_var env (newvar()) ty_arg with Unify _ -> assert false); ret_tvar (TypeSet.add ty seen) ty_fun - | Tvar _ -> - let v = newvar () in - let rt = get_level ty > get_level v in + | Tvar _ -> + let v = newvar () in + let rt = get_level ty > get_level v in unify_var env v ty; rt - | _ -> - let v = newvar () in + | _ -> + let v = newvar () in unify_var env v ty; false in @@ -3892,7 +4061,7 @@ and type_expect_ end; let ty = instance funct.exp_type in end_def (); - let rt = wrap_trace_gadt_instances env (ret_tvar TypeSet.empty) ty in + let rt = wrap_trace_gadt_instances env (ret_tvar TypeSet.empty) ty in rt, funct in let type_sfunct_args sfunct extra_args = @@ -3924,10 +4093,10 @@ and type_expect_ in rue { - exp_desc = Texp_apply(funct, args, position); + exp_desc = Texp_apply(funct, args, position, + Value_mode.regional_to_global_alloc expected_mode.mode); exp_loc = loc; exp_extra = []; exp_type = ty_res; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_match(sarg, caselist) -> @@ -3953,7 +4122,6 @@ and type_expect_ exp_desc = Texp_match(arg, cases, partial); exp_loc = loc; exp_extra = []; exp_type = instance ty_expected; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_try(sbody, caselist) -> @@ -3969,13 +4137,12 @@ and type_expect_ exp_desc = Texp_try(body, cases); exp_loc = loc; exp_extra = []; exp_type = body.exp_type; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_tuple sexpl -> let arity = List.length sexpl in assert (arity >= 2); - register_allocation expected_mode; + let alloc_mode = register_allocation expected_mode in let subtypes = List.map (fun _ -> newgenvar ()) sexpl in let to_unify = newgenty (Ttuple subtypes) in with_explanation (fun () -> @@ -3997,11 +4164,10 @@ and type_expect_ sexpl types_and_modes in re { - exp_desc = Texp_tuple expl; + exp_desc = Texp_tuple (expl, alloc_mode); exp_loc = loc; exp_extra = []; (* Keep sharing *) exp_type = newty (Ttuple (List.map (fun e -> e.exp_type) expl)); - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_construct(lid, sarg) -> @@ -4009,8 +4175,6 @@ and type_expect_ sarg ty_expected_explained sexp.pexp_attributes | Pexp_variant(l, sarg) -> (* Keep sharing *) - if sarg <> None then - register_allocation expected_mode; let ty_expected0 = instance ty_expected in let argument_mode = mode_subcomponent expected_mode in begin try match @@ -4024,18 +4188,24 @@ and type_expect_ with Rpresent (Some ty), Rpresent (Some ty0) -> let arg = type_argument env argument_mode sarg ty ty0 in - re { exp_desc = Texp_variant(l, Some arg); + let alloc_mode = register_allocation expected_mode in + re { exp_desc = Texp_variant(l, Some (arg, alloc_mode)); exp_loc = loc; exp_extra = []; exp_type = ty_expected0; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | _ -> raise Exit end | _ -> raise Exit with Exit -> - let arg = Option.map (type_exp env argument_mode) sarg in - let arg_type = Option.map (fun arg -> arg.exp_type) arg in + let arg = match sarg with + | None -> None + | Some sarg -> + let arg = type_exp env argument_mode sarg in + let alloc_mode = register_allocation expected_mode in + Some (arg, alloc_mode) + in + let arg_type = Option.map (fun (arg, _) -> arg.exp_type) arg in let row = create_row ~fields: [l, rf_present arg_type] @@ -4048,7 +4218,6 @@ and type_expect_ exp_desc = Texp_variant(l, arg); exp_loc = loc; exp_extra = []; exp_type = newty (Tvariant row); - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } end @@ -4070,7 +4239,7 @@ and type_expect_ let ty_record, expected_type = let expected_opath = match extract_concrete_record env ty_expected with - | Record_type (p0, p, _) -> Some (p0, p, is_principal ty_expected) + | Record_type (p0, p, _, _) -> Some (p0, p, is_principal ty_expected) | Maybe_a_record_type -> None | Not_a_record_type -> let error = @@ -4083,7 +4252,7 @@ and type_expect_ | None -> None | Some exp -> match extract_concrete_record env exp.exp_type with - | Record_type (p0, p, _) -> Some (p0, p, is_principal exp.exp_type) + | Record_type (p0, p, _, _) -> Some (p0, p, is_principal exp.exp_type) | Maybe_a_record_type -> None | Not_a_record_type -> let error = Expr_not_a_record_type exp.exp_type in @@ -4112,13 +4281,16 @@ and type_expect_ in with_explanation (fun () -> unify_exp_types loc env (instance ty_record) (instance ty_expected)); - if List.exists - (function - | _, { lbl_repres = Record_unboxed _; _ }, _ -> false - | _ -> true) - lbl_exp_list then - register_allocation expected_mode; - + let alloc_mode = + if List.exists + (function + | _, { lbl_repres = Record_unboxed _; _ }, _ -> false + | _ -> true) + lbl_exp_list then + Some (register_allocation expected_mode) + else + None + in (* type_label_a_list returns a list of labels sorted by lbl_pos *) (* note: check_duplicates would better be implemented in type_label_a_list directly *) @@ -4197,17 +4369,22 @@ and type_expect_ re { exp_desc = Texp_record { fields; representation; - extended_expression = opt_exp + extended_expression = opt_exp; + alloc_mode }; exp_loc = loc; exp_extra = []; exp_type = instance ty_expected; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_field(srecord, lid) -> let (record, rmode, label, _) = type_label_access env srecord Env.Projection lid in + let alloc_mode = match label.lbl_repres with + (* projecting out of packed-float-record needs allocation *) + | Record_float -> Some (register_allocation expected_mode) + | _ -> None + in let mode = match label.lbl_global with | Global -> Value_mode.global @@ -4233,10 +4410,9 @@ and type_expect_ end; let mode = mode_cross env ty_arg mode in ruem ~mode ~expected_mode { - exp_desc = Texp_field(record, lid, label); + exp_desc = Texp_field(record, lid, label, alloc_mode); exp_loc = loc; exp_extra = []; exp_type = ty_arg; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_setfield(srecord, lid, snewval) -> @@ -4251,31 +4427,24 @@ and type_expect_ if label.lbl_mut = Immutable then raise(Error(loc, env, Label_not_mutable lid.txt)); rue { - exp_desc = Texp_setfield(record, label_loc, label, newval); + exp_desc = Texp_setfield(record, + Value_mode.regional_to_local_alloc rmode, + label_loc, label, newval); exp_loc = loc; exp_extra = []; exp_type = instance Predef.type_unit; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_array(sargl) -> - register_allocation expected_mode; - let ty = newgenvar() in - let to_unify = Predef.type_array ty in - with_explanation (fun () -> - unify_exp_types loc env to_unify (generic_instance ty_expected)); - let argument_mode = expect_mode_cross env ty mode_global in - let argl = - List.map - (fun sarg -> type_expect env argument_mode sarg (mk_expected ty)) - sargl - in - re { - exp_desc = Texp_array argl; - exp_loc = loc; exp_extra = []; - exp_type = instance ty_expected; - exp_mode = expected_mode.mode; - exp_attributes = sexp.pexp_attributes; - exp_env = env } + type_generic_array + ~loc + ~env + ~expected_mode + ~ty_expected + ~explanation + ~type_:Predef.type_array + ~mutability:Mutable + ~attributes:sexp.pexp_attributes + sargl | Pexp_ifthenelse(scond, sifso, sifnot) -> let cond = type_expect env (mode_var ()) scond @@ -4290,7 +4459,6 @@ and type_expect_ exp_desc = Texp_ifthenelse(cond, ifso, None); exp_loc = loc; exp_extra = []; exp_type = ifso.exp_type; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Some sifnot -> @@ -4306,7 +4474,6 @@ and type_expect_ exp_desc = Texp_ifthenelse(cond, ifso, Some ifnot); exp_loc = loc; exp_extra = []; exp_type = ifso.exp_type; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } end @@ -4318,7 +4485,6 @@ and type_expect_ exp_desc = Texp_sequence(exp1, exp2); exp_loc = loc; exp_extra = []; exp_type = exp2.exp_type; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_while(scond, sbody) -> @@ -4342,7 +4508,6 @@ and type_expect_ Texp_while {wh_cond; wh_cond_region; wh_body; wh_body_region}; exp_loc = loc; exp_extra = []; exp_type = instance Predef.type_unit; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_for(param, slow, shigh, dir, sbody) -> @@ -4355,7 +4520,7 @@ and type_expect_ (mk_expected ~explanation:For_loop_stop_index Predef.type_int) in let for_id, new_env = - type_for_loop_index ~loc ~env ~param Predef.type_int + type_for_loop_index ~loc ~env ~param in let new_env, for_region = if is_local_returning_expr sbody then new_env, false @@ -4369,17 +4534,16 @@ and type_expect_ for_dir = dir; for_body; for_region}; exp_loc = loc; exp_extra = []; exp_type = instance Predef.type_unit; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_constraint (sarg, sty) -> - (* Pretend separate = true, 1% slowdown for lablgtk *) + (* Pretend separate = true, 1% slowdown for lablgtk *) begin_def (); let type_mode = if has_local_attr_exp sexp then Alloc_mode.Local else Alloc_mode.Global in - let cty = Typetexp.transl_simple_type env false type_mode sty in + let cty = Typetexp.transl_simple_type env ~closed:false type_mode sty in let ty = cty.ctyp_type in end_def (); generalize_structure ty; @@ -4389,7 +4553,6 @@ and type_expect_ exp_desc = arg.exp_desc; exp_loc = arg.exp_loc; exp_type = ty'; - exp_mode = expected_mode.mode; exp_attributes = arg.exp_attributes; exp_env = env; exp_extra = @@ -4474,7 +4637,6 @@ and type_expect_ exp_desc = arg.exp_desc; exp_loc = arg.exp_loc; exp_type = ty'; - exp_mode = expected_mode.mode; exp_attributes = arg.exp_attributes; exp_env = env; exp_extra = (Texp_coerce (cty, cty'), loc, sexp.pexp_attributes) :: @@ -4585,10 +4747,11 @@ and type_expect_ assert false in rue { - exp_desc = Texp_send(obj, meth, ap_pos); + exp_desc = Texp_send(obj, meth, ap_pos, + register_allocation expected_mode + ); exp_loc = loc; exp_extra = []; exp_type = typ; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_new cl -> @@ -4602,7 +4765,7 @@ and type_expect_ exp_desc = Texp_new (cl_path, cl, cl_decl, ap_pos); exp_loc = loc; exp_extra = []; - exp_type = instance ty; exp_mode = Value_mode.global; + exp_type = instance ty; exp_attributes = sexp.pexp_attributes; exp_env = env } end @@ -4622,7 +4785,7 @@ and type_expect_ rue { exp_desc = Texp_setinstvar(path_self, path, lab, newval); exp_loc = loc; exp_extra = []; - exp_type = instance Predef.type_unit; exp_mode = Value_mode.global; + exp_type = instance Predef.type_unit; exp_attributes = sexp.pexp_attributes; exp_env = env } | _ -> @@ -4664,7 +4827,6 @@ and type_expect_ exp_desc = Texp_override(path_self, modifs); exp_loc = loc; exp_extra = []; exp_type = self_ty; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | _ -> @@ -4674,29 +4836,30 @@ and type_expect_ let ty = newvar() in (* remember original level *) begin_def (); - let context = Typetexp.narrow () in - let modl, md_shape = !type_module env smodl in - Mtype.lower_nongen (get_level ty) modl.mod_type; - let pres = - match modl.mod_type with - | Mty_alias _ -> Mp_absent - | _ -> Mp_present - in - let scope = create_scope () in - let md = - { md_type = modl.mod_type; md_attributes = []; md_loc = name.loc; - md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); } - in - let (id, new_env) = - match name.txt with - | None -> None, env - | Some name -> - let id, env = - Env.enter_module_declaration ~scope ~shape:md_shape name pres md env - in - Some id, env - in - Typetexp.widen context; + let modl, pres, id, new_env = Typetexp.TyVarEnv.with_local_scope begin fun () -> + let modl, md_shape = !type_module env smodl in + Mtype.lower_nongen (get_level ty) modl.mod_type; + let pres = + match modl.mod_type with + | Mty_alias _ -> Mp_absent + | _ -> Mp_present + in + let scope = create_scope () in + let md = + { md_type = modl.mod_type; md_attributes = []; md_loc = name.loc; + md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); } + in + let (id, new_env) = + match name.txt with + | None -> None, env + | Some name -> + let id, env = + Env.enter_module_declaration ~scope ~shape:md_shape name pres md env + in + Some id, env + in + modl, pres, id, new_env + end in (* ideally, we should catch Expr_type_clash errors in type_expect triggered by escaping identifiers from the local module and refine them into Scoping_let_module errors @@ -4711,7 +4874,6 @@ and type_expect_ exp_desc = Texp_letmodule(id, name, pres, modl, body); exp_loc = loc; exp_extra = []; exp_type = ty; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_letexception(cd, sbody) -> @@ -4723,7 +4885,6 @@ and type_expect_ exp_desc = Texp_letexception(cd, body); exp_loc = loc; exp_extra = []; exp_type = body.exp_type; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } @@ -4734,7 +4895,7 @@ and type_expect_ in let exp_type = match cond.exp_desc with - | Texp_construct(_, {cstr_name="false"}, _) -> + | Texp_construct(_, {cstr_name="false"}, _, _) -> instance ty_expected | _ -> instance Predef.type_unit @@ -4743,7 +4904,6 @@ and type_expect_ exp_desc = Texp_assert cond; exp_loc = loc; exp_extra = []; exp_type; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env; } @@ -4758,7 +4918,6 @@ and type_expect_ exp_desc = Texp_lazy arg; exp_loc = loc; exp_extra = []; exp_type = instance ty_expected; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env; } @@ -4768,7 +4927,6 @@ and type_expect_ exp_desc = Texp_object (desc, meths); exp_loc = loc; exp_extra = []; exp_type = desc.cstr_type.csig_self; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env; } @@ -4778,7 +4936,7 @@ and type_expect_ match sty with None -> ty_expected, None | Some sty -> let sty = Ast_helper.Typ.force_poly sty in - let cty = Typetexp.transl_simple_type env false Global sty in + let cty = Typetexp.transl_simple_type env ~closed:false Global sty in cty.ctyp_type, Some cty in if !Clflags.principal then begin @@ -4875,7 +5033,6 @@ and type_expect_ exp_desc = Texp_pack modl; exp_loc = loc; exp_extra = []; exp_type = newty (Tpackage (p, fl')); - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_open (od, e) -> @@ -4888,7 +5045,6 @@ and type_expect_ re { exp_desc = Texp_open (od, exp); exp_type = exp.exp_type; - exp_mode = expected_mode.mode; exp_loc = loc; exp_extra = []; exp_attributes = sexp.pexp_attributes; @@ -4967,7 +5123,6 @@ and type_expect_ exp_loc = sexp.pexp_loc; exp_extra = []; exp_type = instance ty_result; - exp_mode = expected_mode.mode; exp_env = env; exp_attributes = sexp.pexp_attributes; } @@ -4990,7 +5145,6 @@ and type_expect_ exp_desc = Texp_extension_constructor (lid, path); exp_loc = loc; exp_extra = []; exp_type = instance Predef.type_extension_constructor; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | _ -> @@ -5019,7 +5173,6 @@ and type_expect_ exp_desc = Texp_probe {name; handler=exp}; exp_loc = loc; exp_extra = []; exp_type = instance Predef.type_unit; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | _ -> raise (Error (loc, env, Probe_format)) @@ -5042,20 +5195,10 @@ and type_expect_ exp_desc = Texp_probe_is_enabled {name}; exp_loc = loc; exp_extra = []; exp_type = instance Predef.type_bool; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } | _ -> raise (Error (loc, env, Probe_is_enabled_format)) end - | Pexp_extension (({ txt = ("extension.list_comprehension" - | "extension.arr_comprehension"); _ }, - _ ) as extension) -> - if Clflags.Extension.(is_enabled Comprehensions) then - let ext_expr = Extensions.extension_expr_of_payload ~loc extension in - type_extension ~loc ~env ~ty_expected ~expected_mode ~sexp ext_expr - else - raise - (Error (loc, env, Extension_not_enabled(Clflags.Extension.Comprehensions))) | Pexp_extension ext -> raise (Error_forward (Builtin_attributes.error_of_extension ext)) @@ -5063,7 +5206,6 @@ and type_expect_ re { exp_desc = Texp_unreachable; exp_loc = loc; exp_extra = []; exp_type = instance ty_expected; - exp_mode = expected_mode.mode; exp_attributes = sexp.pexp_attributes; exp_env = env } @@ -5100,7 +5242,7 @@ and type_binding_op_ident env s = let loc = s.loc in let lid = Location.mkloc (Longident.Lident s.txt) loc in let path, mode, desc, kind = type_ident env lid in - submode ~env ~loc:lid.loc mode mode_global; + submode ~env ~loc:lid.loc ~reason:Other mode mode_global; let path = match desc.val_kind with | Val_ivar _ -> @@ -5119,8 +5261,7 @@ and type_binding_op_ident env s = and type_function ?in_function loc attrs env (expected_mode : expected_mode) ty_expected_explained arg_label ~has_local ~has_poly caselist = let { ty = ty_expected; explanation } = ty_expected_explained in - register_allocation expected_mode; - let alloc_mode = Value_mode.regional_to_global_alloc expected_mode.mode in + let alloc_mode = register_allocation expected_mode in let (loc_fun, ty_fun) = match in_function with | Some (loc_fun, ty_fun, _) -> (loc_fun, ty_fun) @@ -5224,8 +5365,8 @@ and type_function ?in_function loc attrs env (expected_mode : expected_mode) let ret_value_mode = if region_locked then Value_mode.local_to_regional ret_value_mode else ret_value_mode - in - let ret_value_mode = mode_cross env ty_res ret_value_mode in + in + let ret_value_mode = mode_cross env ty_res ret_value_mode in mode_return ret_value_mode, Final_arg { partial_mode = Alloc_mode.join [arg_mode; alloc_mode] } end @@ -5266,12 +5407,11 @@ and type_function ?in_function loc attrs env (expected_mode : expected_mode) re { exp_desc = Texp_function - { arg_label; param; cases; partial; region; curry; warnings }; + { arg_label; param; cases; partial; region; curry; warnings; arg_mode; alloc_mode }; exp_loc = loc; exp_extra = []; exp_type = instance (newgenty (Tarrow((arg_label,arg_mode,ret_mode), ty_arg, ty_res, commu_ok))); - exp_mode = expected_mode.mode; exp_attributes = attrs; exp_env = env } @@ -5287,7 +5427,7 @@ and type_label_access env srecord usage lid = let ty_exp = record.exp_type in let expected_type = match extract_concrete_record env ty_exp with - | Record_type(p0, p, _) -> + | Record_type(p0, p, _, _) -> Some(p0, p, is_principal ty_exp) | Maybe_a_record_type -> None | Not_a_record_type -> @@ -5692,11 +5832,10 @@ and type_argument ?explanation ?recarg env (mode : expected_mode) sarg end; let rec make_args args ty_fun = match get_desc (expand_head env ty_fun) with - | Tarrow ((l,marg,_mret),ty_arg,ty_fun,_) when is_optional l -> - let marg = Value_mode.of_alloc marg in + | Tarrow ((l,_marg,_mret),ty_arg,ty_fun,_) when is_optional l -> let ty = option_none env (instance (tpoly_get_mono ty_arg)) - marg sarg.pexp_loc + sarg.pexp_loc in make_args ((l, Arg ty) :: args) ty_fun | Tarrow ((l,_,_),_,ty_res',_) when l = Nolabel || !Clflags.classic -> @@ -5724,8 +5863,9 @@ and type_argument ?explanation ?recarg env (mode : expected_mode) sarg if args = [] then texp else begin (* In this case, we're allocating a new closure, so [sarg] needs to be valid at [mode_subcomponent mode], not just [mode] *) - register_allocation mode; - submode ~loc:sarg.pexp_loc ~env exp_mode (mode_subcomponent mode); + let alloc_mode = register_allocation mode in + submode ~loc:sarg.pexp_loc ~env ~reason:Other + exp_mode (mode_subcomponent mode); (* eta-expand to avoid side effects *) let var_pair ~mode name ty = let id = Ident.create_local name in @@ -5737,10 +5877,10 @@ and type_argument ?explanation ?recarg env (mode : expected_mode) sarg } in let exp_env = Env.add_value ~mode id desc env in - {pat_desc = Tpat_var (id, mknoloc name); pat_type = ty;pat_extra=[]; - pat_mode = mode; pat_attributes = []; + {pat_desc = Tpat_var (id, mknoloc name, mode); pat_type = ty;pat_extra=[]; + pat_attributes = []; pat_loc = Location.none; pat_env = env}, - {exp_type = ty; exp_mode = mode; exp_loc = Location.none; exp_env = exp_env; + {exp_type = ty; exp_loc = Location.none; exp_env = exp_env; exp_extra = []; exp_attributes = []; exp_desc = Texp_ident(Path.Pident id, mknoloc (Longident.Lident name), @@ -5751,10 +5891,11 @@ and type_argument ?explanation ?recarg env (mode : expected_mode) sarg let func texp = let ret_mode = Value_mode.of_alloc mret in let e = - {texp with exp_type = ty_res; exp_mode = ret_mode; exp_desc = + {texp with exp_type = ty_res; exp_desc = Texp_apply (texp, - args @ [Nolabel, Arg eta_var], Nontail)} + args @ [Nolabel, Arg eta_var], Nontail, + Value_mode.regional_to_global_alloc ret_mode)} in let cases = [case eta_pat e] in let param = name_cases "param" cases in @@ -5762,10 +5903,11 @@ and type_argument ?explanation ?recarg env (mode : expected_mode) sarg Alloc_mode.join [marg; Value_mode.regional_to_global_alloc mode.mode] in let curry = Final_arg {partial_mode} in - { texp with exp_type = ty_fun; exp_mode = mode.mode; + { texp with exp_type = ty_fun; exp_desc = Texp_function { arg_label = Nolabel; param; cases; partial = Total; region = false; curry; - warnings = Warnings.backup () } } + warnings = Warnings.backup (); + arg_mode = marg; alloc_mode } } in Location.prerr_warning texp.exp_loc (Warnings.Eliminated_optional_arguments @@ -5773,8 +5915,8 @@ and type_argument ?explanation ?recarg env (mode : expected_mode) sarg if warn then Location.prerr_warning texp.exp_loc (Warnings.Non_principal_labels "eliminated optional argument"); (* let-expand to have side effects *) - let let_pat, let_var = var_pair ~mode:texp.exp_mode "arg" texp.exp_type in - re { texp with exp_type = ty_fun; exp_mode = mode.mode; + let let_pat, let_var = var_pair ~mode:exp_mode "arg" texp.exp_type in + re { texp with exp_type = ty_fun; exp_desc = Texp_let (Nonrecursive, [{vb_pat=let_pat; vb_expr=texp; vb_attributes=[]; @@ -5801,7 +5943,7 @@ and type_apply_arg env ~app_loc ~funct ~index ~position ~partial_app (lbl, arg) in if is_optional lbl then unify_exp env arg (type_option(newvar())); - (lbl, Arg arg) + (lbl, Arg (arg, expected_mode.mode)) | Arg (Known_arg { sarg; ty_arg; ty_arg0; mode_arg; wrapped_in_some }) -> let mode, _ = Alloc_mode.newvar_below mode_arg in @@ -5858,13 +6000,10 @@ and type_apply_arg env ~app_loc ~funct ~index ~position ~partial_app (lbl, arg) {arg with exp_type = instance arg.exp_type} end in - (lbl, Arg arg) + (lbl, Arg (arg, expected_mode.mode)) | Arg (Eliminated_optional_arg { ty_arg; _ }) -> - let arg = - option_none env (instance ty_arg) - Value_mode.global Location.none - in - (lbl, Arg arg) + let arg = option_none env (instance ty_arg) Location.none in + (lbl, Arg (arg, Value_mode.global)) | Omitted _ as arg -> (lbl, arg) and type_application env app_loc expected_mode position funct funct_mode sargs ret_tvar = @@ -5881,11 +6020,11 @@ and type_application env app_loc expected_mode position funct funct_mode sargs r filter_arrow_mono env (instance funct.exp_type) Nolabel in if !Clflags.principal then begin - end_def (); + end_def (); generalize_structure ty_res - end; + end; let mode = mode_cross env ty_res (Value_mode.of_alloc mres) in - submode ~loc:app_loc ~env + submode ~loc:app_loc ~env ~reason:Other mode expected_mode; let marg = mode_argument ~funct ~index:0 ~position ~partial_app:false marg @@ -5913,27 +6052,29 @@ and type_application env app_loc expected_mode position funct funct_mode sargs r end in if !Clflags.principal then begin_def () ; - let ty_ret, mode_ret, args = + let ty_ret, mode_ret, untyped_args = collect_apply_args env funct ignore_labels ty (instance ty) (Value_mode.regional_to_local_alloc funct_mode) sargs ret_tvar in - let partial_app = is_partial_apply args in + let partial_app = is_partial_apply untyped_args in let position = if partial_app then Default else position in let args = List.mapi (fun index arg -> type_apply_arg env ~app_loc ~funct ~index ~position ~partial_app arg) - args + untyped_args in let ty_ret, mode_ret, args = type_omitted_parameters expected_mode env ty_ret mode_ret args in + check_local_application_complete ~env ~app_loc untyped_args; if !Clflags.principal then begin end_def () ; generalize_structure ty_ret end; let mode = mode_cross env ty_ret (Value_mode.of_alloc mode_ret) in - submode ~loc:app_loc ~env mode expected_mode; + submode ~loc:app_loc ~env ~reason:(Application ty_ret) + mode expected_mode; args, ty_ret, position and type_construct env (expected_mode : expected_mode) loc lid sarg @@ -5973,10 +6114,9 @@ and type_construct env (expected_mode : expected_mode) loc lid sarg let (ty_args, ty_res, _) = instance_constructor constr in let texp = re { - exp_desc = Texp_construct(lid, constr, []); + exp_desc = Texp_construct(lid, constr, [], None); exp_loc = loc; exp_extra = []; exp_type = ty_res; - exp_mode = expected_mode.mode; exp_attributes = attrs; exp_env = env } in if separate then begin @@ -6009,15 +6149,15 @@ and type_construct env (expected_mode : expected_mode) loc lid sarg raise (Error(loc, env, Inlined_record_expected)) end in - let argument_mode = + let (argument_mode, alloc_mode) = match constr.cstr_tag with - | Cstr_unboxed -> expected_mode + | Cstr_unboxed -> expected_mode, None | Cstr_constant _ -> assert (sargs = []); - expected_mode + expected_mode, None | Cstr_block _ | Cstr_extension _ -> - register_allocation expected_mode; - mode_subcomponent expected_mode + mode_subcomponent expected_mode, + Some (register_allocation expected_mode) in let args = List.map2 @@ -6043,7 +6183,7 @@ and type_construct env (expected_mode : expected_mode) loc lid sarg end; (* NOTE: shouldn't we call "re" on this final expression? -- AF *) { texp with - exp_desc = Texp_construct(lid, constr, args) } + exp_desc = Texp_construct(lid, constr, args, alloc_mode) } (* Typing of statements (expressions whose values are discarded) *) @@ -6075,33 +6215,33 @@ and type_unpacks ?(in_function : (Location.t * type_expr * bool) option) let extended_env, tunpacks = List.fold_left (fun (env, tunpacks) unpack -> begin_def (); - let context = Typetexp.narrow () in - let modl, md_shape = - !type_module env - Ast_helper.( - Mod.unpack ~loc:unpack.tu_loc - (Exp.ident ~loc:unpack.tu_name.loc - (mkloc (Longident.Lident unpack.tu_name.txt) - unpack.tu_name.loc))) - in - Mtype.lower_nongen (get_level ty) modl.mod_type; - let pres = - match modl.mod_type with - | Mty_alias _ -> Mp_absent - | _ -> Mp_present - in - let scope = create_scope () in - let md = - { md_type = modl.mod_type; md_attributes = []; - md_loc = unpack.tu_name.loc; - md_uid = unpack.tu_uid; } - in - let (id, env) = - Env.enter_module_declaration ~scope ~shape:md_shape - unpack.tu_name.txt pres md env - in - Typetexp.widen context; - env, (id, unpack.tu_name, pres, modl) :: tunpacks + Typetexp.TyVarEnv.with_local_scope begin fun () -> + let modl, md_shape = + !type_module env + Ast_helper.( + Mod.unpack ~loc:unpack.tu_loc + (Exp.ident ~loc:unpack.tu_name.loc + (mkloc (Longident.Lident unpack.tu_name.txt) + unpack.tu_name.loc))) + in + Mtype.lower_nongen (get_level ty) modl.mod_type; + let pres = + match modl.mod_type with + | Mty_alias _ -> Mp_absent + | _ -> Mp_present + in + let scope = create_scope () in + let md = + { md_type = modl.mod_type; md_attributes = []; + md_loc = unpack.tu_name.loc; + md_uid = unpack.tu_uid; } + in + let (id, env) = + Env.enter_module_declaration ~scope ~shape:md_shape + unpack.tu_name.txt pres md env + in + env, (id, unpack.tu_name, pres, modl) :: tunpacks + end ) (env, []) unpacks in (* ideally, we should catch Expr_type_clash errors @@ -6124,7 +6264,6 @@ and type_unpacks ?(in_function : (Location.t * type_expr * bool) option) exp_attributes; exp_extra = []; exp_type = ty; - exp_mode = expected_mode.mode; exp_env = env } ) body tunpacks @@ -6340,6 +6479,7 @@ and type_cases and type_let ?(check = fun s -> Warnings.Unused_var s) ?(check_strict = fun s -> Warnings.Unused_var_strict s) + ?(force_global = false) existential_context env rec_flag spat_sexp_list allow = let open Ast_helper in @@ -6354,8 +6494,10 @@ and type_let | _ -> false in - let rec sexp_is_fun e = - match e.pexp_desc with + let rec sexp_is_fun sexp = + match Extensions.Expression.of_ast sexp with + | Some eexp -> eexp_is_fun eexp + | None -> match sexp.pexp_desc with | Pexp_fun _ | Pexp_function _ -> true | Pexp_constraint (e, _) | Pexp_newtype (_, e) @@ -6364,6 +6506,9 @@ and type_let {txt = "extension.local"|"ocaml.local"|"local"}, PStr []) }, [Nolabel, e]) -> sexp_is_fun e | _ -> false + and eexp_is_fun : Extensions.Expression.t -> _ = function + | Eexp_comprehension _ + | Eexp_immutable_array _ -> false in let vb_is_fun { pvb_expr = sexp; _ } = sexp_is_fun sexp in let entirely_functions = List.for_all vb_is_fun spat_sexp_list in @@ -6391,7 +6536,9 @@ and type_let | _ -> spat in let pat_mode, exp_mode = - match rec_mode_var with + if force_global + then simple_pat_mode Value_mode.global, mode_global + else match rec_mode_var with | None -> begin match pat_tuple_arity spat with | Not_local_tuple | Maybe_local_tuple -> @@ -6703,121 +6850,307 @@ and type_andops env sarg sands expected_ty = let let_arg, rev_ands = loop env sarg (List.rev sands) expected_ty in let_arg, List.rev rev_ands - and type_extension ~loc ~env ~ty_expected ~expected_mode ~sexp = function - | Extensions.Eexp_list_comprehension (sbody, comp_typell) -> - type_comprehension ~loc ~env ~ty_expected ~expected_mode - ~sexp ~sbody ~comp_typell - ~container_type:Predef.type_list ~build:(fun body comp_type -> - Texp_list_comprehension (body, comp_type)) -| Extensions.Eexp_arr_comprehension (sbody, comp_typell) -> - type_comprehension ~loc ~env ~ty_expected ~expected_mode - ~sexp ~sbody ~comp_typell - ~container_type:Predef.type_array ~build:(fun body comp_type -> - Texp_arr_comprehension (body, comp_type)) - - and type_comprehension ~loc ~env ~ty_expected ~(expected_mode : expected_mode) - ~sexp ~sbody ~comp_typell - ~container_type ~build = - if !Clflags.principal then begin_def (); - let without_arr_ty = Ctype.newvar () in - unify_exp_types loc env - (instance (container_type without_arr_ty)) (instance ty_expected); - if !Clflags.principal then begin - end_def(); - generalize_structure without_arr_ty; - end; - let env = Env.add_lock Value_mode.global env in - let comp_type, new_env = - type_comprehension_list ~loc ~env ~container_type ~comp_typell - in - let body = type_expect new_env mode_global sbody (mk_expected without_arr_ty) in - re { - exp_desc = build body comp_type; - exp_loc = loc; exp_extra = []; - exp_type = instance (container_type body.exp_type); - exp_mode = expected_mode.mode; - exp_attributes = sexp.pexp_attributes; - exp_env = env } +(* Can be re-inlined when we upstream immutable arrays *) +and type_generic_array + ~loc + ~env + ~expected_mode + ~ty_expected + ~explanation + ~type_ + ~mutability + ~attributes + sargl + = + let alloc_mode = register_allocation expected_mode in + let ty = newgenvar() in + let to_unify = type_ ty in + with_explanation explanation (fun () -> + unify_exp_types loc env to_unify (generic_instance ty_expected)); + let argument_mode = expect_mode_cross env ty mode_global in + let argl = + List.map + (fun sarg -> type_expect env argument_mode sarg (mk_expected ty)) + sargl + in + re { + exp_desc = Texp_array (mutability, argl, alloc_mode); + exp_loc = loc; exp_extra = []; + exp_type = instance ty_expected; + exp_attributes = attributes; + exp_env = env } - and type_comprehension_clause ~body_env ~env ~loc ~container_type - ~(comp_type : Extensions.comprehension_clause) = - let comp, env = match comp_type with - | From_to (param, slow, shigh, dir) -> - let low = type_expect env mode_global slow - (mk_expected ~explanation:For_loop_start_index Predef.type_int) in - let high = type_expect env mode_global shigh - (mk_expected ~explanation:For_loop_stop_index Predef.type_int) in - let id, new_env = - type_for_loop_index ~loc ~env:body_env ~param Predef.type_int - in - From_to(id, param, low, high, dir), new_env - | In (param, siter) -> - let item_ty = newvar() in - let iter_ty = instance (container_type item_ty) in - let iter = type_expect env mode_global siter - (mk_expected ~explanation:In_comprehension_argument iter_ty) in - let pat = - let alloc_mode = simple_pat_mode Value_mode.global in - type_pat Value ~no_existentials:In_self_pattern ~alloc_mode (ref env) param item_ty - in - let pv = !pattern_variables in - pattern_variables := []; - let new_env = - List.fold_right - (fun {pv_id; pv_type; pv_loc; pv_as_var=_; pv_attributes} - env -> - Env.add_value pv_id - { val_type = pv_type; - val_attributes = pv_attributes; - val_kind = Val_reg; - val_loc = pv_loc; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); - } env - (*Perhaps this should be Unused_var_strict if some of the pattern - is used.*) - ~check:(fun s -> Warnings.Unused_var s)) - pv body_env - in - In(pat, iter), new_env - in - comp, env - - and type_comprehension_block ~env ~loc - ~comp:({clauses; guard} : Extensions.comprehension) ~container_type = - let new_comps, new_env = List.fold_right - (fun comp_type (comps, body_env)-> - let comp, new_env = - type_comprehension_clause ~body_env ~env ~loc - ~container_type ~comp_type in - comp::comps, new_env) - clauses - ([], env) - in - let new_guard = Option.map (fun gu -> type_expect new_env mode_global gu - (mk_expected ~explanation:When_guard Predef.type_bool)) guard in - {clauses=new_comps; guard=new_guard}, new_env - - and type_comprehension_list ~loc ~env ~container_type ~comp_typell = - let comps, new_env = List.fold_right - (fun comp (comps, env) -> - let new_comps, new_env = - type_comprehension_block - ~env ~loc ~comp ~container_type - in - new_comps::comps, new_env - ) - comp_typell ([], env) - in - comps, new_env +and type_expect_extension ~loc ~env ~expected_mode ~ty_expected ~explanation + : Extensions.Expression.t -> _ = function + | Eexp_comprehension cexpr -> + type_comprehension_expr + ~loc ~env ~expected_mode ~ty_expected ~explanation cexpr + | Eexp_immutable_array iaexpr -> + type_immutable_array + ~loc ~env ~expected_mode ~ty_expected ~explanation iaexpr + +(* What modes should comprehensions use? Let us be generic over the sequence + type we use for comprehensions, calling it [sequence] (standing for either + [list] or [array]) and writing [[? ... ?]]. If we ignore modes, we may + consider a comprehension as having been typechecked per the following + modeless rule: + + {[ + G |- a type + G |- b type + G |- seq : a sequence + G |- low : int + G |- high : int + G, x : a, i : int |- cond : bool + G, x : a, i : int |- body : b + ----------------------------------------------------------------------- + G |- [? body for x in seq and i = low to high when cond ?] : b sequence + ]} + + To reason about modes, we have to separately consider the modes of [body], + [x], [seq], [i], [low], [high], [cond], and the entire comprehension. + + - The modes of [i], [low], [high], and [cond] are simple: We may be + *polymorphic* in each of them individually. As [int] and [bool] are + immediates, values of these types may freely be used at any mode. We thus + don't need to consider these modes any further. + + - The modes of [x] and [seq] must be *the same as each other*, as we do not + distinguish between the "spine mode" and the "value mode" for types; a list + or array must be as local or as global as its elements are. (If these were + separate concepts, we could unconditionally allocate a list or array + "spine-locally", and handle [x]'s mode separately.) We'll refer to this as + the "input mode" below. + + - By the same token, the modes of [body] and the entire comprehension must be + *the same as each other*, as we are generating a sequence made up of the + result of evaluating [body] repeatedly. We'll refer to this as the "output + mode" below. + + - The input mode must be *below* the output mode. Clearly, the two can be + the same as each other; and if the input is local, then the output surely + cannot be global, as it can refer to the input and we cannot have heap + pointers pointing into the stack. However, if the input is global, then it + is perfectly safe for a local sequence to contain references to it, and so + there is no harm in allowing the output to be local. + + Thus, the question turns on what mode we are to use for the output, the mode + of [body] and the entire comprehension. While it would be nice to be + polymorphic here, *we are unfortunately currently constrained to check + comprehensions at global mode*. This is not a fundamental limitation, and + would just require updating the translation code to be layout-aware as it + happens after inference. The changes this would require for list and array + comprehensions are different: + + - For list comprehensions: List comprehensions are desugared in terms of + functions and types from [CamlinternalComprehension]; as part of regular + OCaml, they cannot cannot have the desired (or any) mode polymorphism. + However, as there are only two modes, we could duplicate the module to + contain two nearly-identical copies of the code: one that operates on the + current spine-local but element-global intermediate type and constructs a + global list at th end; and the other that operates on a very similar spine- + *and* element-local intermediate type and constructs a local list at the + end. + + - For array comprehensions: We currently only have global arrays, and do not + currently allow there to be such a thing as a local array at all. If this + changed, we could add mode-directed support for allocating the resulting + array apropriately. + + Until we make either of these changes, we do not pass modes to other + functions for typechecking comprehensions. + + In order to understand the reasoning about modes for comprehensions, anywhere + we need to provide modes while typechecking comprehensions, we will reference + this comment by its incipit (the initial question, right at the start). *) + +and type_comprehension_expr + ~loc ~env ~expected_mode:_ ~ty_expected ~explanation:_ cexpr = + let open Extensions.Comprehensions in + (* - [comprehension_type]: + For printing nicer error messages. + - [container_type]: + For type checking [for]-[in] iterators and the type of the whole + comprehension. + - [make_texp]: + For building the final typedtree node containing the translated + comprehension. + - [{body = sbody; clauses}]: + The actual comprehension to be translated. *) + let comprehension_type, container_type, make_texp, {body = sbody; clauses} = + match cexpr with + | Cexp_list_comprehension comp -> + List_comprehension, + Predef.type_list, + (fun tcomp -> Texp_list_comprehension tcomp), + comp + | Cexp_array_comprehension (amut, comp) -> + let container_type = match amut with + | Mutable -> Predef.type_array + | Immutable -> Predef.type_iarray + in + Array_comprehension amut, + container_type, + (fun tcomp -> Texp_array_comprehension (amut, tcomp)), + comp + in + if !Clflags.principal then begin_def (); + let element_ty = newvar () in + unify_exp_types + loc + env + (instance (container_type element_ty)) + (instance ty_expected); + if !Clflags.principal then begin + end_def(); + generalize_structure element_ty; + end; + let new_env, comp_clauses = + (* To understand why we don't provide modes here, see "What modes should + comprehensions use?", above *) + type_comprehension_clauses + ~loc ~env ~comprehension_type ~container_type clauses + in + let comp_body = + (* To understand why comprehension bodies are checked at [mode_global], see + "What modes should comprehensions use?", above *) + type_expect new_env mode_global sbody (mk_expected element_ty) + in + re { exp_desc = make_texp { comp_body ; comp_clauses } + ; exp_loc = loc + ; exp_extra = [] + ; exp_type = instance (container_type comp_body.exp_type) + ; exp_attributes = [] + (* CR aspectorzabusky: These should come from somewhere *) + ; exp_env = env } + +and type_comprehension_clauses + ~loc ~env ~comprehension_type ~container_type clauses = + List.fold_left_map + (type_comprehension_clause ~loc ~comprehension_type ~container_type) + env + clauses + +(* Calls [reset_pattern] *) +and type_comprehension_clause ~loc ~comprehension_type ~container_type env + : Extensions.Comprehensions.clause -> _ = function + | For bindings -> + reset_pattern true; + let tbindings = + List.map + (type_comprehension_binding + ~loc ~comprehension_type ~container_type ~env) + bindings + in + let pvs = get_ref pattern_variables in + let env = + let check s = Warnings.Unused_var s in + add_pattern_variables ~check ~check_as:check env pvs + in + env, Texp_comp_for tbindings + | When cond -> + let tcond = + (* To understand why [when] conditions can be checked at an arbitrary + mode, see "What modes should comprehensions use?" in + [type_comprehension_expr]*) + type_expect + env + (mode_var ()) + cond + (mk_expected ~explanation:Comprehension_when Predef.type_bool) + in + env, Texp_comp_when tcond + +(* Uses [pattern_variables] *) +and type_comprehension_binding + ~loc + ~comprehension_type + ~container_type + ~env + Extensions.Comprehensions.{ pattern; iterator; attributes } = + { comp_cb_iterator = + type_comprehension_iterator + ~loc ~env ~comprehension_type ~container_type pattern iterator + ; comp_cb_attributes = + attributes + } + +(* Uses [pattern_variables] *) +and type_comprehension_iterator + ~loc ~env ~comprehension_type ~container_type pattern + : Extensions.Comprehensions.iterator -> _ = function + | Range { start; stop; direction } -> + let tbound ~explanation bound = + (* To understand why [for ... = ...] iterator range endpoints can be + checked at an arbitrary mode, see "What modes should comprehensions + use?" in [type_comprehension_expr]*) + type_expect + env + (mode_var ()) + bound + (mk_expected ~explanation Predef.type_int) + in + let start = tbound ~explanation:Comprehension_for_start start in + let stop = tbound ~explanation:Comprehension_for_stop stop in + let ident = + type_comprehension_for_range_iterator_index + ~loc + ~env + ~param:pattern + in + Texp_comp_range { ident; pattern; start; stop; direction } + | In seq -> + let item_ty = newvar () in + let seq_ty = container_type item_ty in + let sequence = + (* To understand why we can currently only iterate over [mode_global] + (and not local) sequences, see "What modes should comprehensions + use?" in [type_comprehension_expr]*) + type_expect + env + mode_global + seq + (mk_expected + ~explanation:(Comprehension_in_iterator comprehension_type) + seq_ty) + in + let pattern = + (* To understand why we can currently only provide [global] bindings for + the contents of sequences comprehensions iterate over, see "What + modes should comprehensions use?" in [type_comprehension_expr]*) + type_pat + Value + ~no_existentials:In_self_pattern + ~alloc_mode:(simple_pat_mode Value_mode.global) + (ref env) + pattern + item_ty + in + Texp_comp_in { pattern; sequence } + +and type_immutable_array ~loc ~env ~expected_mode ~ty_expected ~explanation + : Extensions.Immutable_arrays.expression -> _ = function + | Iaexp_immutable_array elts -> + type_generic_array + ~loc + ~env + ~expected_mode + ~ty_expected + ~explanation + ~type_:Predef.type_iarray + ~mutability:Immutable + ~attributes:[] (* CR aspectorzabusky: This can't be right *) + elts (* Typing of toplevel bindings *) -let type_binding env rec_flag spat_sexp_list = - Typetexp.reset_type_variables(); +let type_binding env rec_flag ?force_global spat_sexp_list = + Typetexp.TyVarEnv.reset (); let (pat_exp_list, new_env, _unpacks) = type_let ~check:(fun s -> Warnings.Unused_value_declaration s) ~check_strict:(fun s -> Warnings.Unused_value_declaration s) + ?force_global At_toplevel env rec_flag spat_sexp_list false in @@ -6831,7 +7164,7 @@ let type_let existential_ctx env rec_flag spat_sexp_list = (* Typing of toplevel expressions *) let type_expression env sexp = - Typetexp.reset_type_variables(); + Typetexp.TyVarEnv.reset (); begin_def(); let exp = type_exp env mode_global sexp in end_def(); @@ -6937,8 +7270,6 @@ let report_type_expected_explanation expl ppf = because "the condition of a while-loop" | While_loop_body -> because "the body of a while-loop" - | In_comprehension_argument -> - because "the iteration argument of a comprehension" | For_loop_start_index -> because "a for-loop start index" | For_loop_stop_index -> @@ -6951,9 +7282,24 @@ let report_type_expected_explanation expl ppf = because "the left-hand side of a sequence" | When_guard -> because "a when-guard" - -let escaping_hint reason (context : Env.escaping_context option) = - match reason, context with + | Comprehension_in_iterator comp_ty -> + let a_comp_ty = + match comp_ty with + | List_comprehension -> "a list" + | Array_comprehension Mutable -> "an array" + | Array_comprehension Immutable -> "an immutable array" + in + because ("a for-in iterator in " ^ a_comp_ty ^ " comprehension") + | Comprehension_for_start -> + because "a range-based for iterator start index in a comprehension" + | Comprehension_for_stop -> + because "a range-based for iterator stop index in a comprehension" + | Comprehension_when -> + because "a when-clause in a comprehension" + +let escaping_hint failure_reason submode_reason + (context : Env.escaping_context option) = + begin match failure_reason, context with | `Locality, Some Return -> [ Location.msg "@[Hint: Cannot return local value without an explicit@ \ @@ -6968,6 +7314,43 @@ let escaping_hint reason (context : Env.escaping_context option) = [ Location.msg "@[Hint: It is captured by a partial application@]" ] | _, _ -> [] + end + @ + begin match submode_reason with + | Application result_ty -> + (* [get_non_local_arity ty] returns [Some (n_args, sureness)] iff [ty] is a + function type with [n_args] arguments and its return type is + local. [sureness] <=> the return type is definitely local. *) + let get_non_local_arity ty = + let rec loop sureness n ty = + match get_desc ty with + | Tarrow ((_, _, res_mode), _, res_ty, _) -> + begin match Alloc_mode.check_const res_mode with + | Some Global -> + Some (n+1, true) + | (None | Some Local) as res_mode -> + let sureness = sureness && Option.is_some res_mode in + loop sureness (n+1) res_ty + end + | _ -> + if n = 0 + then None + else Some (n, sureness) + in + loop true 0 ty + in + begin match get_non_local_arity result_ty with + | Some (n, sure) -> + let args = if n = 1 then "argument" else "arguments" in + let qualifier = if sure then "will" else "may" in + [ Location.msg + "Hint: @[This is a partial application@,\ + Adding %d more %s %s make the value non-local@]" + n args qualifier ] + | None -> [] + end + | Other -> [] + end let report_type_expected_explanation_opt expl ppf = match expl with @@ -7267,6 +7650,10 @@ let report_error ~loc env = function | Invalid_for_loop_index -> Location.errorf ~loc "@[Invalid for-loop index: only variables and _ are allowed.@]" + | Invalid_comprehension_for_range_iterator_index -> + Location.errorf ~loc + "@[Invalid pattern in comprehension for-range iterator: \ + only variables and _ are allowed.@]" | No_value_clauses -> Location.errorf ~loc "None of the patterns in this 'match' expression match values." @@ -7392,14 +7779,37 @@ let report_error ~loc env = function "This expression has type %a@ \ which is not a record type." Printtyp.type_expr ty - | Local_value_escapes(reason, context) -> - let sub = escaping_hint reason context in + | Local_value_escapes(failure_reason, submode_reason, context) -> + let sub = escaping_hint failure_reason submode_reason context in let mode = - match reason with + match failure_reason with | `Locality -> "local " | `Regionality -> "" in Location.errorf ~loc ~sub "This %svalue escapes its region" mode + | Local_application_complete (lbl, loc_kind) -> + let sub = + match loc_kind with + | `Prefix -> + [Location.msg + "@[Hint: Try wrapping the marked application in parentheses.@]"] + | `Single_arg -> + [Location.msg + "@[Hint: Try splitting the application in two. The arguments that come@ \ + after this one in the function's type should be applied separately.@]"] + | `Entire_apply -> + let lbl = + match lbl with + | Nolabel -> "_" + | Labelled s | Optional s -> s + in + [Location.msg + "@[Hint: Try splitting the application in two. The arguments that come@ \ + after %s in the function's type should be applied separately.@]" lbl] + in + Location.errorf ~loc ~sub + "@[This application is complete, but surplus arguments were provided afterwards.@ \ + When passing or calling a local value, extra arguments are passed in a separate application.@]" | Param_mode_mismatch ty -> Location.errorf ~loc "@[This function has a local parameter, but was expected to have type:@ %a@]" diff --git a/typing/typecore.mli b/typing/typecore.mli index 908920fafc17..0593189632e2 100644 --- a/typing/typecore.mli +++ b/typing/typecore.mli @@ -18,6 +18,12 @@ open Asttypes open Types +(* This variant is used for printing which type of comprehension something is + found in; it's used by [type_forcing_context], which see. *) +type comprehension_type = + | List_comprehension + | Array_comprehension of mutable_flag + (* This variant is used to print improved error messages, and does not affect the behavior of the typechecker itself. @@ -31,13 +37,16 @@ type type_forcing_context = | If_no_else_branch | While_loop_conditional | While_loop_body - | In_comprehension_argument | For_loop_start_index | For_loop_stop_index | For_loop_body | Assert_condition | Sequence_left_hand_side | When_guard + | Comprehension_in_iterator of comprehension_type + | Comprehension_for_start + | Comprehension_for_stop + | Comprehension_when (* The combination of a type and a "type forcing context". The intent is that it describes a type that is "expected" (required) by the context. If unifying @@ -102,6 +111,7 @@ type existential_restriction = val type_binding: Env.t -> rec_flag -> + ?force_global:bool -> Parsetree.value_binding list -> Typedtree.value_binding list * Env.t val type_let: @@ -134,7 +144,7 @@ val type_argument: val option_some: Env.t -> Typedtree.expression -> value_mode -> Typedtree.expression val option_none: - Env.t -> type_expr -> value_mode -> Location.t -> Typedtree.expression + Env.t -> type_expr -> Location.t -> Typedtree.expression val extract_option_type: Env.t -> type_expr -> type_expr val generalizable: int -> type_expr -> bool val reset_delayed_checks: unit -> unit @@ -149,7 +159,15 @@ val has_poly_constraint : Parsetree.pattern -> bool val name_pattern : string -> Typedtree.pattern list -> Ident.t val name_cases : string -> Typedtree.value Typedtree.case list -> Ident.t -val escape : loc:Location.t -> env:Env.t -> value_mode -> unit +(* Why are we calling [submode]? This tells us why. *) +type submode_reason = + | Application of type_expr + (* Check that the result of an application is a submode of the expected mode + from the context *) + + | Other (* add more cases here for better hints *) + +val escape : loc:Location.t -> env:Env.t -> reason:submode_reason -> value_mode -> unit val self_coercion : (Path.t * Location.t list ref) list ref @@ -206,6 +224,7 @@ type error = | Unexpected_existential of existential_restriction * string * string list | Invalid_interval | Invalid_for_loop_index + | Invalid_comprehension_for_range_iterator_index | No_value_clauses | Exception_pattern_disallowed | Mixed_value_and_exception_patterns_under_guard @@ -233,7 +252,8 @@ type error = | Missing_type_constraint | Wrong_expected_kind of wrong_kind_sort * wrong_kind_context * type_expr | Expr_not_a_record_type of type_expr - | Local_value_escapes of Value_mode.error * Env.escaping_context option + | Local_value_escapes of Value_mode.error * submode_reason * Env.escaping_context option + | Local_application_complete of Asttypes.arg_label * [`Prefix|`Single_arg|`Entire_apply] | Param_mode_mismatch of type_expr | Uncurried_function_escapes | Local_return_annotation_mismatch of Location.t diff --git a/typing/typedecl.ml b/typing/typedecl.ml index d6fe6d624a2b..b050fde55a44 100644 --- a/typing/typedecl.ml +++ b/typing/typedecl.ml @@ -215,8 +215,8 @@ let transl_global_flags loc attrs = | Ok b -> b | Error () -> raise(Error(loc, Local_not_enabled)) in - let global = transl_global_flag loc (Builtin_attributes.has_global attrs) in - let nonlocal = transl_global_flag loc (Builtin_attributes.has_nonlocal attrs) in + let global = transl_global_flag loc (Builtin_attributes.has_global attrs) in + let nonlocal = transl_global_flag loc (Builtin_attributes.has_nonlocal attrs) in match global, nonlocal with | true, true -> raise(Error(loc, Global_and_nonlocal)) | true, false -> Types.Global @@ -237,7 +237,7 @@ let transl_labels env univars closed lbls = Builtin_attributes.warning_scope attrs (fun () -> let arg = Ast_helper.Typ.force_poly arg in - let cty = transl_simple_type env ?univars closed Global arg in + let cty = transl_simple_type env ?univars ~closed Global arg in let gbl = match mut with | Mutable -> Types.Global @@ -268,7 +268,7 @@ let transl_labels env univars closed lbls = let transl_types_gf env univars closed tyl = let mk arg = - let cty = transl_simple_type env ?univars closed Global arg in + let cty = transl_simple_type env ?univars ~closed Global arg in let gf = transl_global_flags arg.ptyp_loc arg.ptyp_attributes in (cty, gf) in @@ -293,22 +293,21 @@ let make_constructor env loc type_path type_params svars sargs sret_type = transl_constructor_arguments env None true sargs in targs, None, args, None - | Some sret_type -> - (* if it's a generalized constructor we must first narrow and - then widen so as to not introduce any new constraints *) - let z = narrow () in - reset_type_variables (); + | Some sret_type -> TyVarEnv.with_local_scope begin fun () -> + (* if it's a generalized constructor we must work in a narrowed + context so as to not introduce any new constraints *) + TyVarEnv.reset (); let univars, closed = match svars with | [] -> None, false | vs -> Ctype.begin_def(); - Some (make_poly_univars (List.map (fun v -> v.txt) vs)), true + Some (TyVarEnv.make_poly_univars (List.map (fun v -> v.txt) vs)), true in let args, targs = transl_constructor_arguments env univars closed sargs in - let tret_type = transl_simple_type env ?univars closed Global sret_type in + let tret_type = transl_simple_type env ?univars ~closed Global sret_type in let ret_type = tret_type.ctyp_type in (* TODO add back type_path as a parameter ? *) begin match get_desc ret_type with @@ -332,24 +331,24 @@ let make_constructor env loc type_path type_params svars sargs sret_type = Ctype.end_def(); Btype.iter_type_expr_cstr_args Ctype.generalize args; Ctype.generalize ret_type; - let _vars = instance_poly_univars env loc univars in + let _vars = TyVarEnv.instance_poly_univars env loc univars in let set_level t = Ctype.unify_var env (Ctype.newvar()) t in Btype.iter_type_expr_cstr_args set_level args; set_level ret_type; end; - widen z; targs, Some tret_type, args, Some ret_type + end let transl_declaration env sdecl (id, uid) = (* Bind type parameters *) - reset_type_variables(); + TyVarEnv.reset (); Ctype.begin_def (); let tparams = make_params env sdecl.ptype_params in let params = List.map (fun (cty, _) -> cty.ctyp_type) tparams in let cstrs = List.map (fun (sty, sty', loc) -> - transl_simple_type env false Global sty, - transl_simple_type env false Global sty', loc) + transl_simple_type env ~closed:false Global sty, + transl_simple_type env ~closed:false Global sty', loc) sdecl.ptype_cstrs in let unboxed_attr = get_unboxed_from_attributes sdecl in @@ -464,7 +463,7 @@ let transl_declaration env sdecl (id, uid) = None -> None, None | Some sty -> let no_row = not (is_fixed_type sdecl) in - let cty = transl_simple_type env no_row Global sty in + let cty = transl_simple_type env ~closed:no_row Global sty in Some cty, Some cty.ctyp_type in let arity = List.length params in @@ -1145,9 +1144,9 @@ let is_rebind ext = let transl_type_extension extend env loc styext = (* Note: it would be incorrect to call [create_scope] *after* - [reset_type_variables] or after [begin_def] (see #10010). *) + [TyVarEnv.reset] or after [begin_def] (see #10010). *) let scope = Ctype.create_scope () in - reset_type_variables(); + TyVarEnv.reset (); Ctype.begin_def(); let type_path, type_decl = let lid = styext.ptyext_path in @@ -1256,7 +1255,7 @@ let transl_type_extension extend env loc styext = let transl_exception env sext = let scope = Ctype.create_scope () in - reset_type_variables(); + TyVarEnv.reset (); Ctype.begin_def(); let ext = transl_extension_constructor ~scope env @@ -1489,7 +1488,7 @@ let transl_value_decl env loc valdecl = let transl_with_constraint id ?fixed_row_path ~sig_env ~sig_decl ~outer_env sdecl = Env.mark_type_used sig_decl.type_uid; - reset_type_variables(); + TyVarEnv.reset (); Ctype.begin_def(); (* In the first part of this function, we typecheck the syntactic declaration [sdecl] in the outer environment [outer_env]. *) @@ -1500,8 +1499,8 @@ let transl_with_constraint id ?fixed_row_path ~sig_env ~sig_decl ~outer_env let arity = List.length params in let constraints = List.map (fun (ty, ty', loc) -> - let cty = transl_simple_type env false Global ty in - let cty' = transl_simple_type env false Global ty' in + let cty = transl_simple_type env ~closed:false Global ty in + let cty' = transl_simple_type env ~closed:false Global ty' in (* Note: We delay the unification of those constraints after the unification of parameters, so that clashing constraints report an error on the constraint location @@ -1513,7 +1512,7 @@ let transl_with_constraint id ?fixed_row_path ~sig_env ~sig_decl ~outer_env let (tman, man) = match sdecl.ptype_manifest with None -> None, None | Some sty -> - let cty = transl_simple_type env no_row Global sty in + let cty = transl_simple_type env ~closed:no_row Global sty in Some cty, Some cty.ctyp_type in (* In the second part, we check the consistency between the two diff --git a/typing/typedtree.ml b/typing/typedtree.ml index 0ffc9101624a..0b46a738e179 100644 --- a/typing/typedtree.ml +++ b/typing/typedtree.ml @@ -40,7 +40,6 @@ and 'a pattern_data = pat_loc: Location.t; pat_extra : (pat_extra * Location.t * attribute list) list; pat_type: type_expr; - pat_mode: value_mode; pat_env: Env.t; pat_attributes: attribute list; } @@ -54,9 +53,9 @@ and pat_extra = and 'k pattern_desc = (* value patterns *) | Tpat_any : value pattern_desc - | Tpat_var : Ident.t * string loc -> value pattern_desc + | Tpat_var : Ident.t * string loc * value_mode -> value pattern_desc | Tpat_alias : - value general_pattern * Ident.t * string loc -> value pattern_desc + value general_pattern * Ident.t * string loc * value_mode -> value pattern_desc | Tpat_constant : constant -> value pattern_desc | Tpat_tuple : value general_pattern list -> value pattern_desc | Tpat_construct : @@ -70,7 +69,8 @@ and 'k pattern_desc = (Longident.t loc * label_description * value general_pattern) list * closed_flag -> value pattern_desc - | Tpat_array : value general_pattern list -> value pattern_desc + | Tpat_array : + mutable_flag * value general_pattern list -> value pattern_desc | Tpat_lazy : value general_pattern -> value pattern_desc (* computation patterns *) | Tpat_value : tpat_value_argument -> computation pattern_desc @@ -87,7 +87,6 @@ and expression = exp_loc: Location.t; exp_extra: (exp_extra * Location.t * attribute list) list; exp_type: type_expr; - exp_mode: value_mode; exp_env: Env.t; exp_attributes: attribute list; } @@ -111,23 +110,28 @@ and expression_desc = | Texp_function of { arg_label : arg_label; param : Ident.t; cases : value case list; partial : partial; region : bool; curry : fun_curry_state; - warnings : Warnings.state; } - | Texp_apply of expression * (arg_label * apply_arg) list * apply_position + warnings : Warnings.state; + arg_mode : Types.alloc_mode; + alloc_mode : Types.alloc_mode } + | Texp_apply of expression * (arg_label * apply_arg) list * apply_position * Types.alloc_mode | Texp_match of expression * computation case list * partial | Texp_try of expression * value case list - | Texp_tuple of expression list + | Texp_tuple of expression list * Types.alloc_mode | Texp_construct of - Longident.t loc * constructor_description * expression list - | Texp_variant of label * expression option + Longident.t loc * constructor_description * expression list * Types.alloc_mode option + | Texp_variant of label * (expression * Types.alloc_mode) option | Texp_record of { fields : ( Types.label_description * record_label_definition ) array; representation : Types.record_representation; extended_expression : expression option; + alloc_mode : Types.alloc_mode option } - | Texp_field of expression * Longident.t loc * label_description + | Texp_field of expression * Longident.t loc * label_description * Types.alloc_mode option | Texp_setfield of - expression * Longident.t loc * label_description * expression - | Texp_array of expression list + expression * Types.alloc_mode * Longident.t loc * label_description * expression + | Texp_array of mutable_flag * expression list * Types.alloc_mode + | Texp_list_comprehension of comprehension + | Texp_array_comprehension of mutable_flag * comprehension | Texp_ifthenelse of expression * expression * expression option | Texp_sequence of expression * expression | Texp_while of { @@ -136,10 +140,6 @@ and expression_desc = wh_body : expression; wh_body_region : bool } - | Texp_list_comprehension of - expression * comprehension list - | Texp_arr_comprehension of - expression * comprehension list | Texp_for of { for_id : Ident.t; for_pat : Parsetree.pattern; @@ -149,7 +149,7 @@ and expression_desc = for_body : expression; for_region : bool; } - | Texp_send of expression * meth * apply_position + | Texp_send of expression * meth * apply_position * Types.alloc_mode | Texp_new of Path.t * Longident.t loc * Types.class_declaration * apply_position | Texp_instvar of Path.t * Path.t * string loc @@ -185,15 +185,31 @@ and meth = | Tmeth_ancestor of Ident.t * Path.t and comprehension = - { - clauses: comprehension_clause list; - guard : expression option - } + { + comp_body : expression; + comp_clauses : comprehension_clause list + } and comprehension_clause = - | From_to of Ident.t * Parsetree.pattern * - expression * expression * direction_flag - | In of pattern * expression + | Texp_comp_for of comprehension_clause_binding list + | Texp_comp_when of expression + +and comprehension_clause_binding = + { + comp_cb_iterator : comprehension_iterator; + comp_cb_attributes : attribute list + } + +and comprehension_iterator = + | Texp_comp_range of + { ident : Ident.t + ; pattern : Parsetree.pattern + ; start : expression + ; stop : expression + ; direction : direction_flag } + | Texp_comp_in of + { pattern : pattern + ; sequence : expression } and 'k case = { @@ -702,7 +718,6 @@ let as_computation_pattern (p : pattern) : computation general_pattern = pat_loc = p.pat_loc; pat_extra = []; pat_type = p.pat_type; - pat_mode = p.pat_mode; pat_env = p.pat_env; pat_attributes = []; } @@ -739,13 +754,13 @@ type pattern_action = let shallow_iter_pattern_desc : type k . pattern_action -> k pattern_desc -> unit = fun f -> function - | Tpat_alias(p, _, _) -> f.f p + | Tpat_alias(p, _, _, _) -> f.f p | Tpat_tuple patl -> List.iter f.f patl | Tpat_construct(_, _, patl, _) -> List.iter f.f patl | Tpat_variant(_, pat, _) -> Option.iter f.f pat | Tpat_record (lbl_pat_list, _) -> List.iter (fun (_, _, pat) -> f.f pat) lbl_pat_list - | Tpat_array patl -> List.iter f.f patl + | Tpat_array (_, patl) -> List.iter f.f patl | Tpat_lazy p -> f.f p | Tpat_any | Tpat_var _ @@ -759,16 +774,16 @@ type pattern_transformation = let shallow_map_pattern_desc : type k . pattern_transformation -> k pattern_desc -> k pattern_desc = fun f d -> match d with - | Tpat_alias (p1, id, s) -> - Tpat_alias (f.f p1, id, s) + | Tpat_alias (p1, id, s, m) -> + Tpat_alias (f.f p1, id, s, m) | Tpat_tuple pats -> Tpat_tuple (List.map f.f pats) | Tpat_record (lpats, closed) -> Tpat_record (List.map (fun (lid, l,p) -> lid, l, f.f p) lpats, closed) | Tpat_construct (lid, c, pats, ty) -> Tpat_construct (lid, c, List.map f.f pats, ty) - | Tpat_array pats -> - Tpat_array (List.map f.f pats) + | Tpat_array (am, pats) -> + Tpat_array (am, List.map f.f pats) | Tpat_lazy p1 -> Tpat_lazy (f.f p1) | Tpat_variant (x1, Some p1, x2) -> Tpat_variant (x1, Some (f.f p1), x2) @@ -821,9 +836,9 @@ let rec iter_bound_idents : type k . _ -> k general_pattern -> _ = fun f pat -> match pat.pat_desc with - | Tpat_var (id, s) -> + | Tpat_var (id, s, _mode) -> f (id,s,pat.pat_type) - | Tpat_alias(p, id, s) -> + | Tpat_alias(p, id, s, _mode) -> iter_bound_idents f p; f (id,s,pat.pat_type) | Tpat_or(p1, _, _) -> @@ -859,11 +874,11 @@ let let_bound_idents_with_modes bindings = let rec loop : type k . k general_pattern -> _ = fun pat -> match pat.pat_desc with - | Tpat_var (id, { loc }) -> - Ident.Tbl.add modes id (loc, pat.pat_mode) - | Tpat_alias(p, id, { loc }) -> + | Tpat_var (id, { loc }, mode) -> + Ident.Tbl.add modes id (loc, mode) + | Tpat_alias(p, id, { loc }, mode) -> loop p; - Ident.Tbl.add modes id (loc, pat.pat_mode) + Ident.Tbl.add modes id (loc, mode) | d -> shallow_iter_pattern_desc { f = loop } d in List.iter (fun vb -> loop vb.vb_pat) bindings; @@ -881,14 +896,14 @@ let alpha_var env id = List.assoc id env let rec alpha_pat : type k . _ -> k general_pattern -> k general_pattern = fun env p -> match p.pat_desc with - | Tpat_var (id, s) -> (* note the ``Not_found'' case *) + | Tpat_var (id, s, mode) -> (* note the ``Not_found'' case *) {p with pat_desc = - try Tpat_var (alpha_var env id, s) with + try Tpat_var (alpha_var env id, s, mode) with | Not_found -> Tpat_any} - | Tpat_alias (p1, id, s) -> + | Tpat_alias (p1, id, s, mode) -> let new_p = alpha_pat env p1 in begin try - {p with pat_desc = Tpat_alias (new_p, alpha_var env id, s)} + {p with pat_desc = Tpat_alias (new_p, alpha_var env id, s, mode)} with | Not_found -> new_p end diff --git a/typing/typedtree.mli b/typing/typedtree.mli index 4750fcbd80ce..6a89d1e01a53 100644 --- a/typing/typedtree.mli +++ b/typing/typedtree.mli @@ -49,7 +49,6 @@ and 'a pattern_data = pat_loc: Location.t; pat_extra : (pat_extra * Location.t * attributes) list; pat_type: Types.type_expr; - pat_mode: Types.value_mode; pat_env: Env.t; pat_attributes: attributes; } @@ -76,10 +75,10 @@ and 'k pattern_desc = (* value patterns *) | Tpat_any : value pattern_desc (** _ *) - | Tpat_var : Ident.t * string loc -> value pattern_desc + | Tpat_var : Ident.t * string loc * Types.value_mode -> value pattern_desc (** x *) | Tpat_alias : - value general_pattern * Ident.t * string loc -> value pattern_desc + value general_pattern * Ident.t * string loc * Types.value_mode -> value pattern_desc (** P as a *) | Tpat_constant : constant -> value pattern_desc (** 1, 'a', "true", 1.0, 1l, 1L, 1n *) @@ -117,8 +116,10 @@ and 'k pattern_desc = Invariant: n > 0 *) - | Tpat_array : value general_pattern list -> value pattern_desc - (** [| P1; ...; Pn |] *) + | Tpat_array : + mutable_flag * value general_pattern list -> value pattern_desc + (** [| P1; ...; Pn |] (flag = Mutable) + [: P1; ...; Pn :] (flag = Immutable) *) | Tpat_lazy : value general_pattern -> value pattern_desc (** lazy P *) (* computation patterns *) @@ -155,7 +156,6 @@ and expression = exp_loc: Location.t; exp_extra: (exp_extra * Location.t * attributes) list; exp_type: Types.type_expr; - exp_mode: Types.value_mode; exp_env: Env.t; exp_attributes: attributes; } @@ -197,7 +197,9 @@ and expression_desc = | Texp_function of { arg_label : arg_label; param : Ident.t; cases : value case list; partial : partial; region : bool; curry : fun_curry_state; - warnings : Warnings.state; } + warnings : Warnings.state; + arg_mode : Types.alloc_mode; + alloc_mode : Types.alloc_mode} (** [Pexp_fun] and [Pexp_function] both translate to [Texp_function]. See {!Parsetree} for more details. @@ -211,7 +213,7 @@ and expression_desc = partial_mode is the mode of the resulting closure if this function is partially applied to a single argument. *) - | Texp_apply of expression * (arg_label * apply_arg) list * apply_position + | Texp_apply of expression * (arg_label * apply_arg) list * apply_position * Types.alloc_mode (** E0 ~l1:E1 ... ~ln:En The expression can be Omitted if the expression is abstracted over @@ -238,19 +240,28 @@ and expression_desc = *) | Texp_try of expression * value case list (** try E with P1 -> E1 | ... | PN -> EN *) - | Texp_tuple of expression list + | Texp_tuple of expression list * Types.alloc_mode (** (E1, ..., EN) *) | Texp_construct of - Longident.t loc * Types.constructor_description * expression list + Longident.t loc * Types.constructor_description * expression list * Types.alloc_mode option (** C [] C E [E] C (E1, ..., En) [E1;...;En] + + [alloc_mode] is the allocation mode of the construct, + or [None] if the constructor is [Cstr_unboxed] or [Cstr_constant], + in which case it does not need allocation. *) - | Texp_variant of label * expression option + | Texp_variant of label * (expression * Types.alloc_mode) option + (** [alloc_mode] is the allocation mode of the variant, + or [None] if the variant has no argument, + in which case it does not need allocation. + *) | Texp_record of { fields : ( Types.label_description * record_label_definition ) array; representation : Types.record_representation; extended_expression : expression option; + alloc_mode : Types.alloc_mode option } (** { l1=P1; ...; ln=Pn } (extended_expression = None) { E0 with l1=P1; ...; ln=Pn } (extended_expression = Some E0) @@ -262,11 +273,20 @@ and expression_desc = Texp_record { fields = [| l1, Kept t1; l2 Override P2 |]; representation; extended_expression = Some E0 } - *) - | Texp_field of expression * Longident.t loc * Types.label_description + [alloc_mode] is the allocation mode of the record, + or [None] if it is [Record_unboxed], + in which case it does not need allocation. + *) + | Texp_field of expression * Longident.t loc * Types.label_description * Types.alloc_mode option + (** [alloc_mode] is the allocation mode of the result; available ONLY + when getting a (float) field from a [Record_float] record + *) | Texp_setfield of - expression * Longident.t loc * Types.label_description * expression - | Texp_array of expression list + expression * Types.alloc_mode * Longident.t loc * Types.label_description * expression + (** [alloc_mode] translates to the [modify_mode] of the record *) + | Texp_array of mutable_flag * expression list * Types.alloc_mode + | Texp_list_comprehension of comprehension + | Texp_array_comprehension of mutable_flag * comprehension | Texp_ifthenelse of expression * expression * expression option | Texp_sequence of expression * expression | Texp_while of { @@ -275,10 +295,6 @@ and expression_desc = wh_body : expression; wh_body_region : bool (* False means allocates in outer region *) } - | Texp_list_comprehension of - expression * comprehension list - | Texp_arr_comprehension of - expression * comprehension list | Texp_for of { for_id : Ident.t; for_pat : Parsetree.pattern; @@ -290,7 +306,8 @@ and expression_desc = (* for_region = true means we create a region for the body. false means it may allocated in the containing region *) } - | Texp_send of expression * meth * apply_position + | Texp_send of expression * meth * apply_position * Types.alloc_mode + (** [alloc_mode] is the allocation mode of the result *) | Texp_new of Path.t * Longident.t loc * Types.class_declaration * apply_position | Texp_instvar of Path.t * Path.t * string loc @@ -326,16 +343,35 @@ and meth = | Tmeth_val of Ident.t | Tmeth_ancestor of Ident.t * Path.t - and comprehension = +and comprehension = { - clauses: comprehension_clause list; - guard : expression option + comp_body : expression; + comp_clauses : comprehension_clause list } and comprehension_clause = - | From_to of Ident.t * Parsetree.pattern * - expression * expression * direction_flag - | In of pattern * expression + | Texp_comp_for of comprehension_clause_binding list + | Texp_comp_when of expression + +and comprehension_clause_binding = + { + comp_cb_iterator : comprehension_iterator; + comp_cb_attributes : attribute list + } + (* We move the pattern into the [comprehension_iterator], compared to the + untyped syntax tree, so that range-based iterators can have just an + identifier instead of a full pattern *) + +and comprehension_iterator = + | Texp_comp_range of + { ident : Ident.t + ; pattern : Parsetree.pattern (* Redundant with [ident] *) + ; start : expression + ; stop : expression + ; direction : direction_flag } + | Texp_comp_in of + { pattern : pattern + ; sequence : expression } and 'k case = { diff --git a/typing/typemod.ml b/typing/typemod.ml index d6d0e4136e50..3c934084f549 100644 --- a/typing/typemod.ml +++ b/typing/typemod.ml @@ -99,14 +99,14 @@ let rec path_concat head p = (* Extract a signature from a module type *) let extract_sig env loc mty = - match Env.scrape_alias env mty with + match Mtype.scrape_alias env mty with Mty_signature sg -> sg | Mty_alias path -> raise(Error(loc, env, Cannot_scrape_alias path)) | _ -> raise(Error(loc, env, Signature_expected)) let extract_sig_open env loc mty = - match Env.scrape_alias env mty with + match Mtype.scrape_alias env mty with Mty_signature sg -> sg | Mty_alias path -> raise(Error(loc, env, Cannot_scrape_alias path)) @@ -116,7 +116,7 @@ let extract_sig_open env loc mty = signature to fill in names from its parameter *) let extract_sig_functor_open funct_body env loc mty sig_acc = let sig_acc = List.rev sig_acc in - match Env.scrape_alias env mty with + match Mtype.scrape_alias env mty with | Mty_functor (Named (param, mty_param),mty_result) as mty_func -> let sg_param = match Mtype.scrape env mty_param with @@ -381,7 +381,7 @@ let retype_applicative_functor_type ~loc env funct arg = let mty_functor = (Env.find_module funct env).md_type in let mty_arg = (Env.find_module arg env).md_type in let mty_param = - match Env.scrape_alias env mty_functor with + match Mtype.scrape_alias env mty_functor with | Mty_functor (Named (_, mty_param), _) -> mty_param | _ -> assert false (* could trigger due to MPR#7611 *) in @@ -736,54 +736,57 @@ let merge_constraint initial_env loc sg lid constr = if destructive_substitution then check_usage_after_substitution ~loc ~lid initial_env !real_ids !unpackable_modtype sg; - let sg = - match tcstr with - | (_, _, Twith_typesubst tdecl) -> - let how_to_extend_subst = - let sdecl = - match constr with - | With_typesubst sdecl -> sdecl - | _ -> assert false - in - match type_decl_is_alias sdecl with - | Some lid -> - let replacement, _ = - try Env.find_type_by_name lid.txt initial_env - with Not_found -> assert false - in - fun s path -> Subst.add_type_path path replacement s - | None -> - let body = Option.get tdecl.typ_type.type_manifest in - let params = tdecl.typ_type.type_params in - if params_are_constrained params - then raise(Error(loc, initial_env, - With_cannot_remove_constrained_type)); - fun s path -> Subst.add_type_function path ~params ~body s - in - let sub = Subst.change_locs Subst.identity loc in - let sub = List.fold_left how_to_extend_subst sub !real_ids in - (* This signature will not be used directly, it will always be freshened - by the caller. So what we do with the scope doesn't really matter. But - making it local makes it unlikely that we will ever use the result of - this function unfreshened without issue. *) - Subst.signature Make_local sub sg - | (_, _, Twith_modsubst (real_path, _)) -> - let sub = Subst.change_locs Subst.identity loc in - let sub = - List.fold_left - (fun s path -> Subst.add_module_path path real_path s) - sub - !real_ids - in - (* See explanation in the [Twith_typesubst] case above. *) - Subst.signature Make_local sub sg - | (_, _, Twith_modtypesubst tmty) -> - let add s p = Subst.add_modtype_path p tmty.mty_type s in + let sub = match tcstr with + | (_, _, Twith_typesubst tdecl) -> + let how_to_extend_subst = + let sdecl = + match constr with + | With_typesubst sdecl -> sdecl + | _ -> assert false + in + match type_decl_is_alias sdecl with + | Some lid -> + let replacement, _ = + try Env.find_type_by_name lid.txt initial_env + with Not_found -> assert false + in + fun s path -> Subst.add_type_path path replacement s + | None -> + let body = Option.get tdecl.typ_type.type_manifest in + let params = tdecl.typ_type.type_params in + if params_are_constrained params + then raise(Error(loc, initial_env, + With_cannot_remove_constrained_type)); + fun s path -> Subst.add_type_function path ~params ~body s + in let sub = Subst.change_locs Subst.identity loc in - let sub = List.fold_left add sub !real_ids in - Subst.signature Make_local sub sg - | _ -> - sg + let sub = List.fold_left how_to_extend_subst sub !real_ids in + Some sub + | (_, _, Twith_modsubst (real_path, _)) -> + let sub = Subst.change_locs Subst.identity loc in + let sub = + List.fold_left + (fun s path -> Subst.add_module_path path real_path s) + sub + !real_ids + in + Some sub + | (_, _, Twith_modtypesubst tmty) -> + let add s p = Subst.add_modtype_path p tmty.mty_type s in + let sub = Subst.change_locs Subst.identity loc in + let sub = List.fold_left add sub !real_ids in + Some sub + | _ -> + None + in + let sg = match sub with + | Some sub -> + (* This signature will not be used directly, it will always be freshened + by the caller. So what we do with the scope doesn't really matter. But + making it local makes it unlikely that we will ever use the result of + this function unfreshened without issue. *) + Subst.signature Make_local sub sg + | None -> sg in check_well_formed_module initial_env loc "this instantiated signature" (Mty_signature sg); @@ -2235,11 +2238,8 @@ and type_module_aux ~alias sttn funct_body anchor env smod = if alias && aliasable then (Env.add_required_global path env; md) else begin - let mty = - if sttn then - Env.find_strengthened_module ~aliasable path env - else - (Env.find_module path env).md_type + let mty = Mtype.find_type_of_module + ~strengthen:sttn ~aliasable env path in match mty with | Mty_alias p1 when not alias -> @@ -2388,7 +2388,7 @@ and type_application loc strengthen funct_body env smod = and type_one_application ~ctx:(apply_loc,md_f,args) funct_body env (funct, funct_shape) app_view = - match Env.scrape_alias env funct.mod_type with + match Mtype.scrape_alias env funct.mod_type with | Mty_functor (Unit, mty_res) -> if not app_view.arg_is_syntactic_unit then raise (Error (app_view.f_loc, env, Apply_generative)); @@ -2546,24 +2546,24 @@ and type_structure ?(toplevel = None) funct_body anchor env sstr = in Tstr_eval (expr, attrs), [], shape_map, env | Pstr_value(rec_flag, sdefs) -> + let force_global = + (* Values bound by '_' still escape in the toplevel, because + they may be printed even though they are not named *) + Option.is_some toplevel + in let (defs, newenv) = - Typecore.type_binding env rec_flag sdefs in + Typecore.type_binding env rec_flag ~force_global sdefs in let () = if rec_flag = Recursive then Typecore.check_recursive_bindings env defs in - if Option.is_some toplevel then begin - (* Values bound by '_' still escape in the toplevel, because - they may be printed even though they are not named *) - defs |> List.iter (fun vb -> - Typecore.escape ~loc:vb.vb_pat.pat_loc ~env:newenv vb.vb_expr.exp_mode); - end; (* Note: Env.find_value does not trigger the value_used event. Values will be marked as being used during the signature inclusion test. *) let items, shape_map = List.fold_left (fun (acc, shape_map) (id, modes) -> List.iter - (fun (loc, mode) -> Typecore.escape ~loc ~env:newenv mode) + (fun (loc, mode) -> + Typecore.escape ~loc ~env:newenv ~reason:Other mode) modes; let (first_loc, _) = List.hd modes in Signature_names.check_value names first_loc id; @@ -3037,10 +3037,11 @@ let type_package env m p fl = (* Same as Pexp_letmodule *) (* remember original level *) Ctype.begin_def (); - let context = Typetexp.narrow () in - let modl, _mod_shape = type_module env m in - let scope = Ctype.create_scope () in - Typetexp.widen context; + let modl, scope = Typetexp.TyVarEnv.with_local_scope begin fun () -> + let modl, _mod_shape = type_module env m in + let scope = Ctype.create_scope () in + modl, scope + end in let fl', env = match fl with | [] -> [], env @@ -3533,4 +3534,4 @@ let () = let reset ~preserve_persistent_env = Env.reset_cache ~preserve_persistent_env; Envaux.reset_cache ~preserve_persistent_env; - Typetexp.reset_type_variables () + Typetexp.TyVarEnv.reset () diff --git a/typing/typeopt.ml b/typing/typeopt.ml index 775f083c0001..7556de2f1c6f 100644 --- a/typing/typeopt.ml +++ b/typing/typeopt.ml @@ -129,7 +129,8 @@ let classify env ty : classification = let array_type_kind env ty = match scrape_poly env ty with - | Tconstr(p, [elt_ty], _) when Path.same p Predef.path_array -> + | Tconstr(p, [elt_ty], _) + when Path.same p Predef.path_array || Path.same p Predef.path_iarray -> begin match classify env elt_ty with | Any -> if Config.flat_float_array then Pgenarray else Paddrarray | Float -> if Config.flat_float_array then Pfloatarray else Paddrarray @@ -385,7 +386,7 @@ let classify_lazy_argument : Typedtree.expression -> ( Const_int _ | Const_char _ | Const_string _ | Const_int32 _ | Const_int64 _ | Const_nativeint _ ) | Texp_function _ - | Texp_construct (_, {cstr_arity = 0}, _) -> + | Texp_construct (_, {cstr_arity = 0}, _, _) -> `Constant_or_function | Texp_constant(Const_float _) -> if Config.flat_float_array diff --git a/typing/typetexp.ml b/typing/typetexp.ml index 217c5eef6523..087e946804f8 100644 --- a/typing/typetexp.ml +++ b/typing/typetexp.ml @@ -27,7 +27,8 @@ open Ctype exception Already_bound type error = - Unbound_type_variable of string + | Unbound_type_variable of string * string list + | No_type_wildcards | Undefined_type_constructor of Path.t | Type_arity_mismatch of Longident.t * int * int | Bound_type_variable of string @@ -52,10 +53,258 @@ type error = exception Error of Location.t * Env.t * error exception Error_forward of Location.error -(** Map indexed by type variable names. *) -module TyVarMap = Misc.Stdlib.String.Map +module TyVarEnv : sig + val reset : unit -> unit + (* see mli file *) + + val is_in_scope : string -> bool + + val add : string -> type_expr -> unit + (* add a global type variable to the environment *) + + val with_local_scope : (unit -> 'a) -> 'a + (* see mli file *) + + type poly_univars + val with_univars : poly_univars -> (unit -> 'a) -> 'a + (* evaluate with a locally extended set of univars *) + + val make_poly_univars : string list -> poly_univars + (* see mli file *) + + val check_poly_univars : Env.t -> Location.t -> poly_univars -> type_expr list + (* see mli file *) + + val instance_poly_univars : + Env.t -> Location.t -> poly_univars -> type_expr list + (* see mli file *) + + type policy + val fixed_policy : policy (* no wildcards allowed *) + val extensible_policy : policy (* common case *) + val univars_policy : policy (* fresh variables are univars (in methods) *) + val new_any_var : Location.t -> Env.t -> policy -> type_expr + (* create a new variable to represent a _; fails for fixed_policy *) + val new_var : ?name:string -> policy -> type_expr + (* create a new variable according to the given policy *) + + val add_pre_univar : type_expr -> policy -> unit + (* remember that a variable might become a univar if it isn't unified; + used for checking method types *) + + val collect_univars : (unit -> 'a) -> 'a * type_expr list + (* collect univars during a computation; returns the univars. + The wrapped computation should use [univars_policy]. + postcondition: the returned type_exprs are all Tunivar *) + + val reset_locals : ?univars:poly_univars -> unit -> unit + (* clear out the local type variable env't; call this when starting + a new e.g. type signature. Optionally pass some univars that + are in scope. *) + + val lookup_local : string -> type_expr + (* look up a local type variable; throws Not_found if it isn't in scope *) + + val remember_used : string -> type_expr -> Location.t -> unit + (* remember that a given name is bound to a given type *) + + val globalize_used_variables : policy -> Env.t -> unit -> unit + (* after finishing with a type signature, used variables are unified to the + corresponding global type variables if they exist. Otherwise, in function + of the policy, fresh used variables are either + - added to the global type variable scope if they are not longer + variables under the {!fixed_policy} + - added to the global type variable scope under the {!extensible_policy} + - expected to be collected later by a call to `collect_univar` under the + {!universal_policy} + *) + +end = struct + (** Map indexed by type variable names. *) + module TyVarMap = Misc.Stdlib.String.Map + + let not_generic v = get_level v <> Btype.generic_level + + (* These are the type variables that were in scope before + we started processing the current type. + *) + let type_variables = ref (TyVarMap.empty : type_expr TyVarMap.t) + + (* These are variables that have been used in the currently-being-checked + type, possibly including the variables in [type_variables]. + *) + let used_variables = + ref (TyVarMap.empty : (type_expr * Location.t) TyVarMap.t) + + (* These are variables we expect to become univars (they were introduced with + e.g. ['a .]), but we need to make sure they don't unify first. Why not + just birth them as univars? Because they might successfully unify with a + row variable in the ['a. < m : ty; .. > as 'a] idiom. They are like the + [used_variables], but will not be globalized in [globalize_used_variables]. + *) + let univars = ref ([] : (string * type_expr) list) + let assert_not_generic uvs = + assert (List.for_all (fun (_name, v) -> not_generic v) uvs) + + (* These are variables that will become univars when we're done with the + current type. Used to force free variables in method types to become + univars. + *) + let pre_univars = ref ([] : type_expr list) + + let reset () = + reset_global_level (); + Ctype.reset_reified_var_counter (); + type_variables := TyVarMap.empty + + let is_in_scope name = + TyVarMap.mem name !type_variables + + let add name v = + assert (not_generic v); + type_variables := TyVarMap.add name v !type_variables + + let narrow () = + (increase_global_level (), !type_variables) + + let widen (gl, tv) = + restore_global_level gl; + type_variables := tv + + let with_local_scope f = + let context = narrow () in + Fun.protect + f + ~finally:(fun () -> widen context) + + (* throws Not_found if the variable is not in scope *) + let lookup_global_type_variable name = + TyVarMap.find name !type_variables + + let get_in_scope_names () = + let add_name name _ l = if name = "_" then l else ("'" ^ name) :: l in + TyVarMap.fold add_name !type_variables [] + + (*****) + type poly_univars = (string * type_expr) list + + let with_univars new_ones f = + assert_not_generic new_ones; + let old_univars = !univars in + univars := new_ones @ !univars; + Fun.protect + f + ~finally:(fun () -> univars := old_univars) + + let make_poly_univars vars = + List.map (fun name -> name, newvar ~name ()) vars + + let check_poly_univars env loc vars = + vars |> List.iter (fun (_, v) -> generalize v); + vars |> List.map (fun (name, ty1) -> + let v = Btype.proxy ty1 in + begin match get_desc v with + | Tvar name when get_level v = Btype.generic_level -> + set_type_desc v (Tunivar name) + | _ -> + raise (Error (loc, env, Cannot_quantify(name, v))) + end; + v) + + let instance_poly_univars env loc vars = + let vs = check_poly_univars env loc vars in + vs |> List.iter (fun v -> + match get_desc v with + | Tunivar name -> + set_type_desc v (Tvar name) + | _ -> assert false); + vs + + (*****) + let reset_locals ?univars:(uvs=[]) () = + assert_not_generic uvs; + univars := uvs; + used_variables := TyVarMap.empty + + (* throws Not_found if the variable is not in scope *) + let lookup_local name = + try + List.assoc name !univars + with Not_found -> + instance (fst (TyVarMap.find name !used_variables)) + (* This call to instance might be redundant; all variables + inserted into [used_variables] are non-generic, but some + might get generalized. *) + + let remember_used name v loc = + assert (not_generic v); + used_variables := TyVarMap.add name (v, loc) !used_variables + + + type flavor = Unification | Universal + type extensibility = Extensible | Fixed + type policy = { flavor : flavor; extensibility : extensibility } -type variable_context = int * type_expr TyVarMap.t + let fixed_policy = { flavor = Unification; extensibility = Fixed } + let extensible_policy = { flavor = Unification; extensibility = Extensible } + let univars_policy = { flavor = Universal; extensibility = Extensible } + + let add_pre_univar tv = function + | { flavor = Universal } -> + assert (not_generic tv); + pre_univars := tv :: !pre_univars + | _ -> () + + let collect_univars f = + pre_univars := []; + let result = f () in + let univs = + List.fold_left + (fun acc v -> + match get_desc v with + | Tvar name when get_level v = Btype.generic_level -> + set_type_desc v (Tunivar name); + v :: acc + | _ -> acc) + [] !pre_univars in + result, univs + + let new_var ?name policy = + let tv = Ctype.newvar ?name () in + add_pre_univar tv policy; + tv + + let new_any_var loc env = function + | { extensibility = Fixed } -> raise(Error(loc, env, No_type_wildcards)) + | policy -> new_var policy + + let globalize_used_variables { flavor; extensibility } env = + let r = ref [] in + TyVarMap.iter + (fun name (ty, loc) -> + if flavor = Unification || is_in_scope name then + let v = new_global_var () in + let snap = Btype.snapshot () in + if try unify env v ty; true with _ -> Btype.backtrack snap; false + then try + r := (loc, v, lookup_global_type_variable name) :: !r + with Not_found -> + if extensibility = Fixed && Btype.is_Tvar ty then + raise(Error(loc, env, + Unbound_type_variable ("'"^name, + get_in_scope_names ()))); + let v2 = new_global_var () in + r := (loc, v, v2) :: !r; + add name v2) + !used_variables; + used_variables := TyVarMap.empty; + fun () -> + List.iter + (function (loc, t1, t2) -> + try unify env t1 t2 with Unify err -> + raise (Error(loc, env, Type_mismatch err))) + !r +end (* Support for first-class modules. *) @@ -90,23 +339,6 @@ let create_package_mty fake loc env (p, l) = (* Translation of type expressions *) -let type_variables = ref (TyVarMap.empty : type_expr TyVarMap.t) -let univars = ref ([] : (string * type_expr) list) -let pre_univars = ref ([] : type_expr list) -let used_variables = ref (TyVarMap.empty : (type_expr * Location.t) TyVarMap.t) - -let reset_type_variables () = - reset_global_level (); - Ctype.reset_reified_var_counter (); - type_variables := TyVarMap.empty - -let narrow () = - (increase_global_level (), !type_variables) - -let widen (gl, tv) = - restore_global_level gl; - type_variables := tv - let strict_ident c = (c = '_' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') let validate_name = function @@ -119,12 +351,6 @@ let new_global_var ?name () = let newvar ?name () = newvar ?name:(validate_name name) () -let type_variable loc name = - try - TyVarMap.find name !type_variables - with Not_found -> - raise(Error(loc, Env.empty, Unbound_type_variable ("'" ^ name))) - let valid_tyvar_name name = name <> "" && name.[0] <> '_' @@ -137,15 +363,13 @@ let transl_type_param env styp = ctyp_loc = loc; ctyp_attributes = styp.ptyp_attributes; } | Ptyp_var name -> let ty = - try if not (valid_tyvar_name name) then raise (Error (loc, Env.empty, Invalid_variable_name ("'" ^ name))); - ignore (TyVarMap.find name !type_variables); - raise Already_bound - with Not_found -> + if TyVarEnv.is_in_scope name then + raise Already_bound; let v = new_global_var ~name () in - type_variables := TyVarMap.add name v !type_variables; - v + TyVarEnv.add name v; + v in { ctyp_desc = Ttyp_var name; ctyp_type = ty; ctyp_env = env; ctyp_loc = loc; ctyp_attributes = styp.ptyp_attributes; } @@ -178,34 +402,6 @@ let rec extract_params styp = (l, arg_mode, a) :: params, ret, ret_mode | _ -> final styp -let new_pre_univar ?name () = - let v = newvar ?name () in pre_univars := v :: !pre_univars; v - -type poly_univars = (string * type_expr) list -let make_poly_univars vars = - List.map (fun name -> name, newvar ~name ()) vars - -let check_poly_univars env loc vars = - vars |> List.iter (fun (_, v) -> generalize v); - vars |> List.map (fun (name, ty1) -> - let v = Btype.proxy ty1 in - begin match get_desc v with - | Tvar name when get_level v = Btype.generic_level -> - set_type_desc v (Tunivar name) - | _ -> - raise (Error (loc, env, Cannot_quantify(name, v))) - end; - v) - -let instance_poly_univars env loc vars = - let vs = check_poly_univars env loc vars in - vs |> List.iter (fun v -> - match get_desc v with - | Tunivar name -> - set_type_desc v (Tvar name) - | _ -> assert false); - vs - let check_arg_type styp = if not (Clflags.Extension.is_enabled Polymorphic_parameters) then begin match styp.ptyp_desc with @@ -215,8 +411,6 @@ let check_arg_type styp = | _ -> () end -type policy = Fixed | Extensible | Univars - let rec transl_type env policy mode styp = Builtin_attributes.warning_scope styp.ptyp_attributes (fun () -> transl_type_aux env policy mode styp) @@ -229,26 +423,17 @@ and transl_type_aux env policy mode styp = in match styp.ptyp_desc with Ptyp_any -> - let ty = - if policy = Univars then new_pre_univar () else - if policy = Fixed then - raise (Error (styp.ptyp_loc, env, Unbound_type_variable "_")) - else newvar () - in + let ty = TyVarEnv.new_any_var styp.ptyp_loc env policy in ctyp Ttyp_any ty | Ptyp_var name -> let ty = if not (valid_tyvar_name name) then raise (Error (styp.ptyp_loc, env, Invalid_variable_name ("'" ^ name))); begin try - instance (List.assoc name !univars) - with Not_found -> try - instance (fst (TyVarMap.find name !used_variables)) + TyVarEnv.lookup_local name with Not_found -> - let v = - if policy = Univars then new_pre_univar ~name () else newvar ~name () - in - used_variables := TyVarMap.add name (v, styp.ptyp_loc) !used_variables; + let v = TyVarEnv.new_var ~name policy in + TyVarEnv.remember_used name v styp.ptyp_loc; v end in @@ -385,15 +570,14 @@ and transl_type_aux env policy mode styp = (row_fields row) in (* NB: row is always non-static here; more is thus never Tnil *) - let more = - if policy = Univars then new_pre_univar () else newvar () in + let more = TyVarEnv.new_var policy in let row = create_row ~fields ~more ~closed:true ~fixed:None ~name:(Some (path, ty_args)) in newty (Tvariant row) | Tobject (fi, _) -> let _, tv = flatten_fields fi in - if policy = Univars then pre_univars := tv :: !pre_univars; + TyVarEnv.add_pre_univar tv policy; ty | _ -> assert false @@ -402,11 +586,7 @@ and transl_type_aux env policy mode styp = | Ptyp_alias(st, alias) -> let cty = try - let t = - try List.assoc alias !univars - with Not_found -> - instance (fst(TyVarMap.find alias !used_variables)) - in + let t = TyVarEnv.lookup_local alias in let ty = transl_type env policy mode st in begin try unify_var env t ty.ctyp_type with Unify err -> let err = Errortrace.swap_unification_error err in @@ -416,8 +596,7 @@ and transl_type_aux env policy mode styp = with Not_found -> if !Clflags.principal then begin_def (); let t = newvar () in - used_variables := - TyVarMap.add alias (t, styp.ptyp_loc) !used_variables; + TyVarEnv.remember_used alias t styp.ptyp_loc; let ty = transl_type env policy mode st in begin try unify_var env t ty.ctyp_type with Unify err -> let err = Errortrace.swap_unification_error err in @@ -529,31 +708,28 @@ and transl_type_aux env policy mode styp = in let more = if Btype.static_row (make_row (newvar ())) then newty Tnil else - if policy = Univars then new_pre_univar () else newvar () + TyVarEnv.new_var policy in let ty = newty (Tvariant (make_row more)) in ctyp (Ttyp_variant (tfields, closed, present)) ty | Ptyp_poly(vars, st) -> let vars = List.map (fun v -> v.txt) vars in begin_def(); - let new_univars = make_poly_univars vars in - let old_univars = !univars in - univars := new_univars @ !univars; - let cty = transl_type env policy mode st in + let new_univars = TyVarEnv.make_poly_univars vars in + let cty = TyVarEnv.with_univars new_univars begin fun () -> + transl_type env policy mode st + end in let ty = cty.ctyp_type in - univars := old_univars; end_def(); generalize ty; - let ty_list = check_poly_univars env styp.ptyp_loc new_univars in + let ty_list = TyVarEnv.check_poly_univars env styp.ptyp_loc new_univars in let ty_list = List.filter (fun v -> deep_occur v ty) ty_list in let ty' = Btype.newgenty (Tpoly(ty, ty_list)) in unify_var env (newvar()) ty'; ctyp (Ttyp_poly (vars, cty)) ty' | Ptyp_package (p, l) -> let l, mty = create_package_mty true styp.ptyp_loc env (p, l) in - let z = narrow () in - let mty = !transl_modtype env mty in - widen z; + let mty = TyVarEnv.with_local_scope (fun () -> !transl_modtype env mty) in let ptys = List.map (fun (s, pty) -> s, transl_type env policy Alloc_mode.Global pty ) l in @@ -627,10 +803,10 @@ and transl_fields env policy o fields = let object_fields = List.map add_field fields in let fields = Hashtbl.fold (fun s ty l -> (s, ty) :: l) hfields [] in let ty_init = - match o, policy with - | Closed, _ -> newty Tnil - | Open, Univars -> new_pre_univar () - | Open, _ -> newvar () in + match o with + | Closed -> newty Tnil + | Open -> TyVarEnv.new_var policy + in let ty = List.fold_left (fun ty (s, ty') -> newty (Tfield (s, field_public, ty', ty))) ty_init fields in ty, object_fields @@ -665,90 +841,55 @@ let make_fixed_univars ty = let create_package_mty = create_package_mty false -let globalize_used_variables env fixed = - let r = ref [] in - TyVarMap.iter - (fun name (ty, loc) -> - let v = new_global_var () in - let snap = Btype.snapshot () in - if try unify env v ty; true with _ -> Btype.backtrack snap; false - then try - r := (loc, v, TyVarMap.find name !type_variables) :: !r - with Not_found -> - if fixed && Btype.is_Tvar ty then - raise(Error(loc, env, Unbound_type_variable ("'"^name))); - let v2 = new_global_var () in - r := (loc, v, v2) :: !r; - type_variables := TyVarMap.add name v2 !type_variables) - !used_variables; - used_variables := TyVarMap.empty; - fun () -> - List.iter - (function (loc, t1, t2) -> - try unify env t1 t2 with Unify err -> - raise (Error(loc, env, Type_mismatch err))) - !r - -let transl_simple_type env ?univars:(uvs=[]) fixed mode styp = - univars := uvs; used_variables := TyVarMap.empty; - let typ = transl_type env (if fixed then Fixed else Extensible) mode styp in - globalize_used_variables env fixed (); +let transl_simple_type env ?univars ~closed mode styp = + TyVarEnv.reset_locals ?univars (); + let policy = TyVarEnv.(if closed then fixed_policy else extensible_policy) in + let typ = transl_type env policy mode styp in + TyVarEnv.globalize_used_variables policy env (); make_fixed_univars typ.ctyp_type; typ let transl_simple_type_univars env styp = - univars := []; used_variables := TyVarMap.empty; pre_univars := []; - begin_def (); - let typ = transl_type env Univars Alloc_mode.Global styp in - (* Only keep already global variables in used_variables *) - let new_variables = !used_variables in - used_variables := TyVarMap.empty; - TyVarMap.iter - (fun name p -> - if TyVarMap.mem name !type_variables then - used_variables := TyVarMap.add name p !used_variables) - new_variables; - globalize_used_variables env false (); - end_def (); - generalize typ.ctyp_type; - let univs = - List.fold_left - (fun acc v -> - match get_desc v with - Tvar name when get_level v = Btype.generic_level -> - set_type_desc v (Tunivar name); v :: acc - | _ -> acc) - [] !pre_univars - in + TyVarEnv.reset_locals (); + let typ, univs = TyVarEnv.collect_univars begin fun () -> + begin_def (); + let policy = TyVarEnv.univars_policy in + let typ = transl_type env policy Alloc_mode.Global styp in + TyVarEnv.globalize_used_variables policy env (); + end_def (); + generalize typ.ctyp_type; + typ + end in make_fixed_univars typ.ctyp_type; { typ with ctyp_type = instance (Btype.newgenty (Tpoly (typ.ctyp_type, univs))) } let transl_simple_type_delayed env mode styp = - univars := []; used_variables := TyVarMap.empty; + TyVarEnv.reset_locals (); begin_def (); - let typ = transl_type env Extensible mode styp in + let policy = TyVarEnv.extensible_policy in + let typ = transl_type env policy mode styp in end_def (); make_fixed_univars typ.ctyp_type; (* This brings the used variables to the global level, but doesn't link them to their other occurrences just yet. This will be done when [force] is called. *) - let force = globalize_used_variables env false in + let force = TyVarEnv.globalize_used_variables policy env in (* Generalizes everything except the variables that were just globalized. *) generalize typ.ctyp_type; (typ, instance typ.ctyp_type, force) let transl_type_scheme env styp = - reset_type_variables(); + TyVarEnv.reset (); match styp.ptyp_desc with | Ptyp_poly (vars, st) -> begin_def(); let vars = List.map (fun v -> v.txt) vars in - let univars = make_poly_univars vars in - let typ = transl_simple_type env ~univars true Alloc_mode.Global st in + let univars = TyVarEnv.make_poly_univars vars in + let typ = transl_simple_type env ~univars ~closed:true Alloc_mode.Global st in end_def(); generalize typ.ctyp_type; - let _ = instance_poly_univars env styp.ptyp_loc univars in + let _ = TyVarEnv.instance_poly_univars env styp.ptyp_loc univars in { ctyp_desc = Ttyp_poly (vars, typ); ctyp_type = typ.ctyp_type; ctyp_env = env; @@ -756,7 +897,7 @@ let transl_type_scheme env styp = ctyp_attributes = styp.ptyp_attributes } | _ -> begin_def(); - let typ = transl_simple_type env false Alloc_mode.Global styp in + let typ = transl_simple_type env ~closed:false Alloc_mode.Global styp in end_def(); generalize typ.ctyp_type; typ @@ -768,12 +909,12 @@ open Format open Printtyp let report_error env ppf = function - | Unbound_type_variable name -> - let add_name name _ l = if name = "_" then l else ("'" ^ name) :: l in - let names = TyVarMap.fold add_name !type_variables [] in + | Unbound_type_variable (name, in_scope_names) -> fprintf ppf "The type variable %s is unbound in this type declaration.@ %a" name - did_you_mean (fun () -> Misc.spellcheck names name ) + did_you_mean (fun () -> Misc.spellcheck in_scope_names name ) + | No_type_wildcards -> + fprintf ppf "A type wildcard \"_\" is not allowed in this type declaration." | Undefined_type_constructor p -> fprintf ppf "The type constructor@ %a@ is not yet completely defined" path p diff --git a/typing/typetexp.mli b/typing/typetexp.mli index abfad1d74b1b..3cb3c0dd5770 100644 --- a/typing/typetexp.mli +++ b/typing/typetexp.mli @@ -17,23 +17,37 @@ open Types -val valid_tyvar_name : string -> bool +module TyVarEnv : sig + (* this is just the subset of [TyVarEnv] that is needed outside + of [Typetexp]. See the ml file for more. *) + + val reset : unit -> unit + (** removes all type variables from scope *) + + val with_local_scope : (unit -> 'a) -> 'a + (** Evaluate in a narrowed type-variable scope *) + + type poly_univars + val make_poly_univars : string list -> poly_univars + (** remember that a list of strings connotes univars; this must + always be paired with a [check_poly_univars]. *) -type poly_univars -val make_poly_univars : string list -> poly_univars - (* Create a set of univars with given names *) -val check_poly_univars : - Env.t -> Location.t -> poly_univars -> type_expr list - (* Verify that the given univars are universally quantified, - and return the list of variables. The type in which the - univars are used must be generalised *) -val instance_poly_univars : - Env.t -> Location.t -> poly_univars -> type_expr list - (* Same as [check_poly_univars], but instantiates the resulting - type scheme (i.e. variables become Tvar rather than Tunivar) *) + val check_poly_univars : + Env.t -> Location.t -> poly_univars -> type_expr list + (** Verify that the given univars are universally quantified, + and return the list of variables. The type in which the + univars are used must be generalised *) + + val instance_poly_univars : + Env.t -> Location.t -> poly_univars -> type_expr list + (** Same as [check_poly_univars], but instantiates the resulting + type scheme (i.e. variables become Tvar rather than Tunivar) *) +end + +val valid_tyvar_name : string -> bool val transl_simple_type: - Env.t -> ?univars:poly_univars -> bool -> alloc_mode_const + Env.t -> ?univars:TyVarEnv.poly_univars -> closed:bool -> alloc_mode_const -> Parsetree.core_type -> Typedtree.core_type val transl_simple_type_univars: Env.t -> Parsetree.core_type -> Typedtree.core_type @@ -46,21 +60,16 @@ val transl_simple_type_delayed function that binds the type variable. *) val transl_type_scheme: Env.t -> Parsetree.core_type -> Typedtree.core_type -val reset_type_variables: unit -> unit -val type_variable: Location.t -> string -> type_expr val transl_type_param: Env.t -> Parsetree.core_type -> Typedtree.core_type val get_alloc_mode : Parsetree.core_type -> alloc_mode_const -type variable_context -val narrow: unit -> variable_context -val widen: variable_context -> unit - exception Already_bound type error = - Unbound_type_variable of string + | Unbound_type_variable of string * string list + | No_type_wildcards | Undefined_type_constructor of Path.t | Type_arity_mismatch of Longident.t * int * int | Bound_type_variable of string diff --git a/typing/untypeast.ml b/typing/untypeast.ml index 9bc3ae5b95c7..5bc528c77a0f 100644 --- a/typing/untypeast.ml +++ b/typing/untypeast.ml @@ -298,7 +298,7 @@ let pattern : type k . _ -> k T.general_pattern -> _ = fun sub pat -> match pat with { pat_extra=[Tpat_unpack, loc, _attrs]; pat_desc = Tpat_any; _ } -> Ppat_unpack { txt = None; loc } - | { pat_extra=[Tpat_unpack, _, _attrs]; pat_desc = Tpat_var (_,name); _ } -> + | { pat_extra=[Tpat_unpack, _, _attrs]; pat_desc = Tpat_var (_,name,_); _ } -> Ppat_unpack { name with txt = Some name.txt } | { pat_extra=[Tpat_type (_path, lid), _, _attrs]; _ } -> Ppat_type (map_loc sub lid) @@ -308,7 +308,7 @@ let pattern : type k . _ -> k T.general_pattern -> _ = fun sub pat -> | _ -> match pat.pat_desc with Tpat_any -> Ppat_any - | Tpat_var (id, name) -> + | Tpat_var (id, name,_) -> begin match (Ident.name id).[0] with 'A'..'Z' -> @@ -321,11 +321,11 @@ let pattern : type k . _ -> k T.general_pattern -> _ = fun sub pat -> The compiler transforms (x:t) into (_ as x : t). This avoids transforming a warning 27 into a 26. *) - | Tpat_alias ({pat_desc = Tpat_any; pat_loc}, _id, name) + | Tpat_alias ({pat_desc = Tpat_any; pat_loc}, _id, name, _mode) when pat_loc = pat.pat_loc -> Ppat_var name - | Tpat_alias (pat, _id, name) -> + | Tpat_alias (pat, _id, name, _mode) -> Ppat_alias (sub.pat sub pat, name) | Tpat_constant cst -> Ppat_constant (constant cst) | Tpat_tuple list -> @@ -357,7 +357,15 @@ let pattern : type k . _ -> k T.general_pattern -> _ = fun sub pat -> | Tpat_record (list, closed) -> Ppat_record (List.map (fun (lid, _, pat) -> map_loc sub lid, sub.pat sub pat) list, closed) - | Tpat_array list -> Ppat_array (List.map (sub.pat sub) list) + | Tpat_array (am, list) -> begin + let pats = List.map (sub.pat sub) list in + match am with + | Mutable -> Ppat_array pats + | Immutable -> (Extensions.Immutable_arrays.pat_of + ~loc + (Iapat_immutable_array pats) + ).ppat_desc + end | Tpat_lazy p -> Ppat_lazy (sub.pat sub p) | Tpat_exception p -> Ppat_exception (sub.pat sub p) @@ -396,23 +404,42 @@ let value_binding sub vb = (sub.pat sub vb.vb_pat) (sub.expr sub vb.vb_expr) +let comprehension ~loc sub comp_type comp = + let open Extensions.Comprehensions in + let iterator = function + | Texp_comp_range { ident = _; pattern; start ; stop ; direction } -> + pattern, + Range { start = sub.expr sub start + ; stop = sub.expr sub stop + ; direction } + | Texp_comp_in { pattern; sequence } -> + sub.pat sub pattern, + In (sub.expr sub sequence) + in + let binding { comp_cb_iterator ; comp_cb_attributes } = + let pattern, iterator = iterator comp_cb_iterator in + { pattern + ; iterator + ; attributes = comp_cb_attributes } + in + let clause = function + | Texp_comp_for bindings -> For (List.map binding bindings) + | Texp_comp_when cond -> When (sub.expr sub cond) + in + let comprehension { comp_body; comp_clauses } = + { body = sub.expr sub comp_body + ; clauses = List.map clause comp_clauses } + in + let comprehension_expr = + Extensions.Comprehensions.expr_of + ~loc + (comp_type (comprehension comp)) + in + comprehension_expr.pexp_desc + let expression sub exp = let loc = sub.location sub exp.exp_loc in let attrs = sub.attributes sub exp.exp_attributes in - let map_comprehension comp_types= - List.map (fun {clauses; guard} -> - let clauses = - List.map (fun comp_type -> - match comp_type with - | From_to (_, p, e2, e3, dir) -> - Extensions.From_to(p, sub.expr sub e2, sub.expr sub e3, dir) - | In (p, e2) -> Extensions.In(sub.pat sub p, sub.expr sub e2) - ) clauses - in - ({clauses; guard=(Option.map (sub.expr sub) guard)} - : Extensions.comprehension ) - ) comp_types - in let desc = match exp.exp_desc with Texp_ident (_path, lid, _, _) -> Pexp_ident (map_loc sub lid) @@ -437,7 +464,7 @@ let expression sub exp = Pexp_fun (label, None, Pat.var ~loc {loc;txt = name }, Exp.match_ ~loc (Exp.ident ~loc {loc;txt= Lident name}) (List.map (sub.case sub) cases)) - | Texp_apply (exp, list, _) -> + | Texp_apply (exp, list, _, _) -> Pexp_apply (sub.expr sub exp, List.fold_right (fun (label, arg) list -> match arg with @@ -448,9 +475,9 @@ let expression sub exp = Pexp_match (sub.expr sub exp, List.map (sub.case sub) cases) | Texp_try (exp, cases) -> Pexp_try (sub.expr sub exp, List.map (sub.case sub) cases) - | Texp_tuple list -> + | Texp_tuple (list, _) -> Pexp_tuple (List.map (sub.expr sub) list) - | Texp_construct (lid, _, args) -> + | Texp_construct (lid, _, args, _) -> Pexp_construct (map_loc sub lid, (match args with [] -> None @@ -460,7 +487,7 @@ let expression sub exp = (Exp.tuple ~loc (List.map (sub.expr sub) args)) )) | Texp_variant (label, expo) -> - Pexp_variant (label, Option.map (sub.expr sub) expo) + Pexp_variant (label, Option.map (fun (e, _) -> sub.expr sub e) expo) | Texp_record { fields; extended_expression; _ } -> let list = Array.fold_left (fun l -> function | _, Kept _ -> l @@ -468,13 +495,31 @@ let expression sub exp = [] fields in Pexp_record (list, Option.map (sub.expr sub) extended_expression) - | Texp_field (exp, lid, _label) -> + | Texp_field (exp, lid, _label, _) -> Pexp_field (sub.expr sub exp, map_loc sub lid) - | Texp_setfield (exp1, lid, _label, exp2) -> + | Texp_setfield (exp1, _, lid, _label, exp2) -> Pexp_setfield (sub.expr sub exp1, map_loc sub lid, sub.expr sub exp2) - | Texp_array list -> - Pexp_array (List.map (sub.expr sub) list) + | Texp_array (amut, list, _) -> begin + (* Can be inlined when we get to upstream immutable arrays *) + let plist = List.map (sub.expr sub) list in + match amut with + | Mutable -> + Pexp_array plist + | Immutable -> + let expr = + Extensions.Immutable_arrays.expr_of + ~loc + (Iaexp_immutable_array plist) + in + expr.pexp_desc + end + | Texp_list_comprehension comp -> + comprehension + ~loc sub (fun comp -> Cexp_list_comprehension comp) comp + | Texp_array_comprehension (amut, comp) -> + comprehension + ~loc sub (fun comp -> Cexp_array_comprehension (amut, comp)) comp | Texp_ifthenelse (exp1, exp2, expo) -> Pexp_ifthenelse (sub.expr sub exp1, sub.expr sub exp2, @@ -483,21 +528,11 @@ let expression sub exp = Pexp_sequence (sub.expr sub exp1, sub.expr sub exp2) | Texp_while {wh_cond; wh_body} -> Pexp_while (sub.expr sub wh_cond, sub.expr sub wh_body) - | Texp_list_comprehension(exp1, type_comp) -> - Pexp_extension - (Extensions.payload_of_extension_expr ~loc - (Extensions.Eexp_list_comprehension( - sub.expr sub exp1, map_comprehension type_comp))) - | Texp_arr_comprehension(exp1, type_comp) -> - Pexp_extension - (Extensions.payload_of_extension_expr ~loc - (Extensions.Eexp_arr_comprehension( - sub.expr sub exp1, map_comprehension type_comp))) | Texp_for {for_pat; for_from; for_to; for_dir; for_body} -> Pexp_for (for_pat, sub.expr sub for_from, sub.expr sub for_to, for_dir, sub.expr sub for_body) - | Texp_send (exp, meth, _) -> + | Texp_send (exp, meth, _, _) -> Pexp_send (sub.expr sub exp, match meth with Tmeth_name name -> mkloc name loc | Tmeth_val id -> mkloc (Ident.name id) loc @@ -841,7 +876,7 @@ let core_type sub ct = let class_structure sub cs = let rec remove_self = function - | { pat_desc = Tpat_alias (p, id, _s) } + | { pat_desc = Tpat_alias (p, id, _s, _mode) } when string_is_prefix "selfpat-" (Ident.name id) -> remove_self p | p -> p @@ -871,7 +906,7 @@ let object_field sub {of_loc; of_desc; of_attributes;} = Of.mk ~loc ~attrs desc and is_self_pat = function - | { pat_desc = Tpat_alias(_pat, id, _) } -> + | { pat_desc = Tpat_alias(_pat, id, _, _mode) } -> string_is_prefix "self-" (Ident.name id) | _ -> false diff --git a/utils/clflags.ml b/utils/clflags.ml index 35c733da5d83..c49c7e74e67c 100644 --- a/utils/clflags.ml +++ b/utils/clflags.ml @@ -376,26 +376,44 @@ let set_dumped_pass s enabled = end module Extension = struct - type t = Comprehensions | Local | Include_functor | Polymorphic_parameters - - let all = [ Comprehensions; Local; Include_functor; Polymorphic_parameters ] - let default_extensions = [ Local; Include_functor; Polymorphic_parameters ] + type t = + | Comprehensions + | Local + | Include_functor + | Polymorphic_parameters + | Immutable_arrays + + let all = + [ Comprehensions + ; Local + ; Include_functor + ; Polymorphic_parameters + ; Immutable_arrays + ] + + let default_extensions = + [ Local + ; Include_functor + ; Polymorphic_parameters + ] let extensions = ref ([] : t list) (* -extension *) let equal (a : t) (b : t) = (a = b) let to_string = function - | Comprehensions -> "comprehensions" + | Comprehensions -> "comprehensions_experimental" | Local -> "local" | Include_functor -> "include_functor" | Polymorphic_parameters -> "polymorphic_parameters" + | Immutable_arrays -> "immutable_arrays_experimental" let of_string = function - | "comprehensions" -> Comprehensions - | "local" -> Local - | "include_functor" -> Include_functor - | "polymorphic_parameters" -> Polymorphic_parameters - | extn -> raise (Arg.Bad(Printf.sprintf "Extension %s is not known" extn)) + | "comprehensions_experimental" -> Some Comprehensions + | "local" -> Some Local + | "include_functor" -> Some Include_functor + | "polymorphic_parameters" -> Some Polymorphic_parameters + | "immutable_arrays_experimental" -> Some Immutable_arrays + | _ -> None let disable_all_extensions = ref false (* -disable-all-extensions *) @@ -409,15 +427,20 @@ module Extension = struct the enabled extensions: %s" (String.concat "," (List.map to_string ls)))) + let enable_t extension = + if not (List.exists (equal extension) !extensions) then + extensions := extension :: !extensions + let enable extn = if !disable_all_extensions then raise (Arg.Bad(Printf.sprintf "Cannot enable extension %s: \ incompatible with compiler flag -disable-all-extensions" extn)); - let t = of_string (String.lowercase_ascii extn) in - if not (List.exists (equal t) !extensions) then - extensions := t :: !extensions + match of_string (String.lowercase_ascii extn) with + | Some extension -> enable_t extension + | None -> + raise (Arg.Bad (Printf.sprintf "Unknown extension \"%s\"" extn)) let is_enabled ext = not !disable_all_extensions diff --git a/utils/clflags.mli b/utils/clflags.mli index dd7ab2868338..d62fbb79a082 100644 --- a/utils/clflags.mli +++ b/utils/clflags.mli @@ -206,12 +206,22 @@ val dump_into_file : bool ref val dump_dir : string option ref module Extension : sig - type t = Comprehensions | Local | Include_functor | Polymorphic_parameters + type t = + | Comprehensions + | Local + | Include_functor + | Polymorphic_parameters + | Immutable_arrays + + val all : t list + val enable : string -> unit + val enable_t : t -> unit val is_enabled : t -> bool - val to_string : t -> string - val all : t list val disable_all : unit -> unit + + val to_string : t -> string + val of_string : string -> t option end (* Support for flags that can also be set from an environment variable *)